(57)【要約】複数のシンボルを含むデジタル信号に関するロスレスデジタルデータ圧縮の方法を説明する。この方法には、デジタル信号を、整数個数のシンボルの後でまたはデジタルデータ内の所定のシンボルの発生に応答して終るタプルに解析することが含まれる。解析されたタプルが、辞書の複数のエントリと比較され、一致が見つかる場合に、タプルが、辞書位置に置換される。辞書を用いる圧縮の前に信号を解析することによって、圧縮率に対するデータの粒度の影響を減らす。本発明は、圧縮解除の方法、コンプレッサおよびデコンプレッサ、ならびに圧縮されたデータ信号にも拡張される。
2005535175.tif 000002
【特許請求の範囲】
【請求項１】
複数のシンボルを含むデジタルデータを圧縮する方法であって、前記デジタルデータを整数個数のシンボルの後でまたはデジタルデータ内の所定のシンボルの発生に応答して終了するタプルに解析するステップと、各タプルを辞書内の複数のエントリと比較するステップと、前記タプルとある辞書位置にある前記エントリとの間の一致に応答して前記タプルを前記辞書位置に置換するステップとを含む方法。
【請求項２】
前記タプルと辞書内にある前記エントリとの間の前記一致が、前記タプル内のシンボルの前記個数より少数の一致を含むことができる、請求項１に記載の方法。
【請求項３】
前記タプルが、前記タプルと同一の個数のシンボルを含む辞書エントリだけと比較される、請求項１に記載の方法。
【請求項４】
前記所定のシンボルが、スペース文字を表す、請求項１から３のいずれか一項に記載の方法。
【請求項５】
前記所定のシンボルの単一の発生を含むタプルが、コードによって置換される、請求項１から４のいずれか一項に記載の方法。
【請求項６】
前記コードが、２ビットのデータを含む、請求項５に記載の方法。
【請求項７】
前記辞書が、デジタルデータの前記タプルに応答して更新される、請求項１から６のいずれか一項に記載の方法。
【請求項８】
入データ内のシンボルの再発するシーケンスが、繰り返す辞書位置を累算することによって圧縮される、請求項１から７のいずれか一項に記載の方法。
【請求項９】
前記デジタルデータを整数個数のシンボルの後だけで終了するタプルに解析するかどうかを判定するステップを含む、請求項１から８のいずれか一項に記載の方法。
【請求項１０】
複数のシンボルを含むデジタルデータを圧縮するデジタルデータコンプレッサであって、整数個数のシンボルまたは前記デジタルデータ内の所定のシンボルの発生に応答して、前記デジタルデータをタプルに分割するパーサと、タプルを複数のエントリと比較する辞書と、前記タプルとある辞書位置にある前記エントリの間の一致に応答して前記タプルを前記辞書位置に置換するロジックとを含むデータコンプレッサ。
【請求項１１】
前記タプルと前記辞書内にある前記エントリとの間の前記一致が、前記タプル内のシンボルの前記個数より少数の一致を含むことができる、請求項１０に記載のコンプレッサ。
【請求項１２】
前記辞書が、タプルを、前記タプルと同一個数のシンボルを含む前記エントリと比較するように適合される、請求項１０に記載のコンプレッサ。
【請求項１３】
前記所定のシンボルが、スペース文字を表す、請求項１０、１１、または１２に記載のコンプレッサ。
【請求項１４】
前記所定のシンボルの単一の発生に応答して、そのシンボルをコードに置換するロジックをさらに含む、請求項９から１３のいずれか一項に記載のコンプレッサ。
【請求項１５】
前記コードが、２ビットのデータを含む、請求項１４に記載のコンプレッサ。
【請求項１６】
デジタルデータの前記タプルに応答して前記辞書を更新するロジックをさらに含む、請求項９から１５のいずれか一項に記載のコンプレッサ。
【請求項１７】
めいめいの辞書位置に応答して、これらのめいめいの辞書位置を累算するために前記入データのシンボルの再現するシーケンスをさらに圧縮するロジックをさらに含む、請求項９から１６のいずれか一項に記載のコンプレッサ。
【請求項１８】
前記パーサが、前記デジタルデータ内の少なくとも１つのシンボルに応答して、その後、前記デジタルデータ内の前記整数個数のシンボルだけに応答する、請求項１０から１７のいずれか一項に記載のコンプレッサ。
【請求項１９】
前記パーサが、前記デジタルデータが可能なシンボルの組全体の所定のサブセットだけを含むまで、前記整数個数のシンボルだけに応答する、請求項１０から１７のいずれか一項に記載のコンプレッサ。
【請求項２０】
前記所定のサブセットが、ＡＳＣＩＩ文字の１から１２７までを含む、請求項１９に記載のコンプレッサ。
【請求項２１】
複数のシンボルを表すデジタルデータを圧縮解除する方法であって、オリジナルデータのタプルに対応するデジタルデータの量を判定するステップであって、タプルが、整数個数のシンボルの後でまたはオリジナルデータでの所定のシンボルの発生に応答して終了するステップと、辞書一致が発生したことを示すデジタルデータに応答して辞書からシンボルを取り出すステップとを含む方法。
【請求項２２】
前記所定のシンボルの単一の発生を表すコードが、前記所定のシンボルによって置換される、請求項２１に記載の方法。
【請求項２３】
繰り返される辞書位置の累算が、適当な数の辞書エントリによって置換される、請求項２１に記載の方法。
【請求項２４】
所定のシンボルが存在するが明示的にコーディングされない圧縮されたタプルにさらに応答する、請求項２１から２３のいずれか一項に記載の方法。
【請求項２５】
複数のシンボルを表すデジタルデータを圧縮解除するデコンプレッサであって、オリジナルデータのタプルに対応するデジタルデータの量を判定するロジックであって、タプルが、整数個数のシンボルの後またはオリジナルデータでの所定のシンボルの発生に応答して終了する、ロジックと、及び、辞書一致が発生したことを示すデジタルデータに応答して辞書からシンボルを検索するロジックとを含むデコンプレッサ。
【請求項２６】
複数のシンボルを含むデジタルデータを圧縮し、圧縮解除するデジタルデータコンプレッサおよびデジタルデータデコンプレッサを含む半導体集積回路であって、前記コンプレッサが、整数個数のシンボルまたは前記デジタルデータ内の所定のシンボルの発生に応答して前記デジタルデータをタプルに分割するパーサと、タプルを複数のエントリと比較する辞書と、前記タプルとある辞書位置の前記エントリとの間の一致に応答して前記タプルを前記辞書位置に置換するロジックとを含み、前記デコンプレッサが、オリジナルデータのタプルに応答する前記デジタルデータの量を判定するロジックであって、前記タプルが、整数個数のシンボルの後または前記オリジナルデータ内の所定のシンボルの発生に応答して終了する、ロジックと、及び、辞書一致が発生したことを示すデジタルデータに応答して辞書からシンボルを取り出すロジックとを含む、半導体集積回路。
【請求項２７】
複数のシンボルを含むオリジナルデジタルデータを再構成するように適合された圧縮データ信号であって、前記オリジナルデジタルデータ内の整数個数のシンボルにそれぞれが対応する複数の離散セクションであって、前記圧縮データ信号の各離散セクションが、前記対応するシンボルが辞書エントリに一致したかどうかの表示を含む、複数の離散セクションと、前記離散セクションによって表されるシンボルの数の表示と、前記辞書に存在しないシンボルとを含む圧縮データ信号。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データのロスレス圧縮（可逆圧縮）に関する。本発明には、データの圧縮の方法および装置、データの圧縮解除の方法および装置、ならびに圧縮データの信号（コンピュータメモリに保管されるか、データキャリアに保管されるか、通信ネットワーク上で信号として搬送される）が含まれる。
【背景技術】
【０００２】
ロッシイデータ圧縮（歪みを許す圧縮）ハードウェアが、近年、イメージ処理および信号処理のために使用可能になっているが、ロスレスデータ圧縮は、データ伝送およびデータストレージでの帯域幅およびビットあたりのコストに対する商業的圧力の増加の結果として、ごく最近に注目を集めており、データボリュームの削減による電力消費の削減も重要である。
【０００３】
辞書の検索および辞書アドレスへの参照によるデータのエンコードが、既知であり、この原理を適用する装置は、辞書およびコーダ／デコーダからなる。ＬｅｍｐｅｌおよびＺｉｖの成果に基づく一部の圧縮システムは、前のｎバイトの入データストリームのコピーを含む「ランニング」辞書を使用する。圧縮される新しいデータは、前に見られたデータと比較され、一致が見つかる場合に、［位置，長さ］のインジケータを使用してエンコードされる。長さは、一致するデータの量（たとえばバイト数）を与える。一致しないデータは、変更なしで送られる。デコンプレッサが、それが受け取っている圧縮信号が圧縮されているか否かを判定できるようにするために、送られる信号内にある種の表示が必要である。
【０００４】
Ｋｊｅｌｓｏ、Ｇｏｏｃｈ、およびＪｏｎｅｓは、「Ｄｅｓｉｇｎ  ａｎｄ  Ｐｅｒｆｏｒｍａｎｃｅ  ｏｆ  ａ  Ｍａｉｎ  Ｍｅｍｏｒｙ  Ｈａｒｄｗａｒｅ  Ｄａｔａ  Ｃｏｍｐｒｅｓｓｏｒ」、Ｐｒｏｃｅｅｄｉｎｇｓ  ｏｆ  ＥＵＲＯＭＩＣＲＯ−２２、１９９６年、ＩＥＥＥに、Ｘ−Ｍａｔｃｈと称する、メインメモリに保管された実行可能コードを圧縮するように設計され、高速ハードウェア実施に適する新規の圧縮技法を記載した。
【０００５】
Ｘ−Ｍａｔｃｈ圧縮技法では、複数のエントリを含む辞書が維持され、各エントリは、同一の長さを有する。辞書エントリの１つと圧縮されるコードの間に一致が見つかる時に、そのコードは、辞書内の一致するエントリの位置を示すインデックスに置換される。実行可能コードを圧縮することによって、実行中により少ないメモリページが必要になり、したがって、プロセッサ動作が高速になる。コンプレッサおよびデコンプレッサは、高速である必要がある。
【０００６】
Ｘ−Ｍａｔｃｈロスレスコンプレッサは、前に見られたコードの辞書を維持し、圧縮されるコードの要素と辞書内のエントリの突合せを試みる。コード要素を、タプルと称し、ほとんどのマイクロプロセッサが３２ビットまたは６４ビットの命令を使用するので、タプルは、３２ビット（すなわち４バイト）長になるように選択される。一致しないタプルは、無変更でコンプレッサの出力に供給される。効率を高めるために、Ｘ−Ｍａｔｃｈコンプレッサは、部分的一致に基づいて動作する。これが意味するのは、４バイトタプルのうちの２バイトまたは３バイトが辞書エントリの対応するバイトと一致する時に、そのタプルが、「部分的一致」として識別されることである。タプル内の、一致しないバイトは、無変更で出力に供給され、正確な圧縮解除を可能にするために、どのバイトが一致したかの表示が含まれる。
【０００７】
辞書は、ムーブトゥフロント（Ｍｏｖｅ  Ｔｏ  Ｆｒｏｎｔ、ＭＴＦ）技法およびリーストリースントリユーズド（Ｌｅａｓｔ  Ｒｅｃｅｎｔｌｙ  Ｕｓｅｄ、ＬＲＵ）技法を使用して更新されることが好ましい。ＭＴＦ技法では、最も最近に圧縮されたタプルを、処理された後に辞書に置く。このタプルは、他のエントリを下にシフトしながら、辞書の前面または最上部に追加される。フェーズドバイナリコード（Ｐｈａｓｅｄ  Ｂｉｎａｒｙ  Ｃｏｄｅ、ＰＢＣ）などの辞書コードを使用して辞書位置をエンコードすることによって、圧縮率の改善がもたらされる。ＬＲＵ技法では、最近に最も使用されていない辞書エントリを破棄する（辞書が満杯になったと仮定して）。これは、ＭＴＦ技法とあいまって行われる。というのは、辞書の最後のエントリが破棄される（辞書が満杯になったならば）からである。
【０００８】
Ｎｕｎｅｚ、Ｆｅｒｅｇｒｉｎｏ、Ｂａｔｅｍａｎ、およびＪｏｎｅｓは、「Ｔｈｅ  Ｘ−ＭａｔｃｈＬＩＴＥ  ＦＰＧＡ−Ｂａｓｅｄ  Ｄａｔａ  Ｃｏｍｐｒｅｓｓｏｒ」、Ｐｒｏｃｅｅｄｉｎｇｓ  ｏｆ  ＥＵＲＯＭＩＣＲＯ−２５、１９９９年、ＩＥＥＥで、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）で実施されたＸ−Ｍａｔｃｈアルゴリズムを説明した。
【０００９】
その内容が参照によって本明細書に組み込まれる国際特許出願第ＷＯ  ０１／５６１６８号に、ＮｕｎｅｚおよびＪｏｎｅｓは、Ｘ−Ｍａｔｃｈ圧縮技法へのランレングスエンコーディング（ＲＬＥ）の追加を記載した。これによって、一致が辞書の同一の位置で連続して発生する場合に、改善された圧縮がもたらされる。ＲＬＥアルゴリズムをＸ−Ｍａｔｃｈ辞書に統合することによって、その効率が改善される。
【００１０】
その内容が参照によって本明細書に組み込まれる国際特許出願第ＷＯ  ０１／５６１６９号に、ＮｕｎｅｚおよびＪｏｎｅｓは、圧縮速度の改善を提供する、辞書を更新する効率的な技法を記載した。
【００１１】
Ｘ−ＭａｔｃｈＰＲＯと称する圧縮システムをもたらす、これらの技法の組み込みは、他のロスレス圧縮技法に匹敵する速度での高速で効率的な圧縮を提供することが示されている。
【００１２】
Ｘ−Ｍａｔｃｈ技法は、プロセッサ実行可能コードに関する優れた圧縮を提供するが、ＨＴＭＬ（ＨｙｐｅｒＴｅｘｔ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）コードに適用される時に、圧縮率が低下することがわかっている。
【発明の開示】
【発明が解決しようとする課題】
【００１３】
本発明の目的は、この短所に対処するロスレスデータ圧縮技法を提供することである。
【課題を解決するための手段】
【００１４】
本発明の第１の態様によれば、複数のシンボルを含むデジタルデータを圧縮する方法であって、前記デジタルデータを整数個数のシンボルの後でまたはデジタルデータ内の所定のシンボルの発生に応答して終るタプルに解析するステップと、各タプルを辞書内の複数のエントリと比較するステップと、前記タプルとある辞書位置にある前記エントリとの間の一致に応答して前記タプルを前記辞書位置に置換するステップとを含む方法がもたらされる。
【００１５】
発明人は、ＨＴＭＬ、自然言語、または類似するデータセットを圧縮する時に観察される性能の劣化の原因の大きい部分が、入データストリーム内の可変幅の単語またはシンボルのグループの先頭と、辞書内の単語またはシンボルのグループの先頭との間の同期化の失敗であることを識別した。言い換えると、データの粒度が、一般に、４バイトではなく１バイトである。辞書エントリと比較する前に特定の形で入データを解析することによって、入データストリームと辞書の間の一致の数が、改善され、これによって、圧縮率が改善される。
【００１６】
これを、添付図面の図１を参照して、下で詳細に説明する。
本発明の実施形態は、Ｘ−Ｍａｔｃｈ論文について上で述べた部分的一致を可能にする。また、タプルを、辞書内の同一の長さのタプルだけと比較することが好ましい。辞書にＣＡＭが含まれる時には、辞書内のすべてのエントリが比較されるので、これは不可能である。この場合に、一致しない長さのタプルに関連する、辞書からの出力信号が、さらなる処理で無視される。所定のシンボルは、多くの場合にスペース文字であるが、これに加えてまたはこれの代わりに他のシンボルを使用することができる。所定の文字が、非常に少ないビット数でコーディングされることが好ましく、好ましい実施形態では、１ビットだけを使用してコーディングされる。前に識別されたＷＯ明細書に記載のランレングスエンコーディングおよびアウトオブデート（ｏｕｔ  ｏｆ  ｄａｔｅ）適応も、好ましい実施形態で使用される。
【００１７】
本発明の第２の態様によれば、複数のシンボルを含むデジタルデータを圧縮するデジタルデータコンプレッサであって、整数個数のシンボルまたは前記デジタルデータ内の所定のシンボルの発生に応答して、前記デジタルデータをタプルに分割するパーサと、タプルを複数のエントリと比較する辞書と、前記タプルとある辞書位置にある前記エントリの間の一致に応答して前記タプルを前記辞書位置に置換するロジックとを含むデータコンプレッサが提供される。
【００１８】
本発明（実際により一般的にＸ−Ｍａｔｃｈ）は、半導体チップなどの高速ハードウェアでの実施が特に可能である。しかし、コンプレッサは、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）または他の形で同等に実施することができる。
【００１９】
本発明の第３の態様によれば、複数のシンボルを表すデジタルデータを圧縮解除する方法であって、オリジナルデータのタプルに対応するオリジナルデータの量を判定するステップであって、タプルが、整数個数のシンボルの後でまたはオリジナルデータでの所定のシンボルの発生に応答して終る、ステップと、辞書一致が発生したことを示すデジタルデータに応答して辞書からシンボルを取り出すステップとを含む方法が提供される。
【００２０】
本発明の第４の態様によれば、複数のシンボルを表すデジタルデータを圧縮解除するデコンプレッサであって、オリジナルデータのタプルに対応するデジタルデータの量を判定するロジックであって、タプルが、整数個数のシンボルの後またはオリジナルデータでの所定のシンボルの発生に応答して終る、ロジックと、辞書一致が発生したことを示すデジタルデータに応答して辞書からシンボルを検索するロジックとを含むデコンプレッサが提供される。
【００２１】
本発明の第５の態様によれば、本発明の第２の態様によるコンプレッサおよび本発明の第４の態様によるデコンプレッサを含む半導体集積回路（ＩＣ）が提供される。この半導体ＩＣは、他の回路も含む特定用途向け集積回路（ＡＳＩＣ）とすることができる。
【００２２】
本発明の第５の態様の実施形態では、コンプレッサおよびデコンプレッサが共通の辞書を使用する。これによって、ＩＣ上のスペースが節約されるが、データの圧縮および圧縮解除を同時に行うこと（二重動作）ができなくなる。
【００２３】
本発明の第６の態様によれば、複数のシンボルを含むオリジナルデジタルデータを再構成するように適合された圧縮データ信号であって、前記オリジナルデジタルデータ内の整数個数のシンボルにそれぞれが対応する複数の離散セクションであって、前記圧縮データ信号の各離散セクションが、前記対応するシンボルが辞書エントリに一致したかどうかの表示を含む、複数の離散セクションと、前記離散セクションによって表されるシンボルの数の表示と、前記辞書に存在しないシンボルとを含む圧縮データ信号が提供される。
【００２４】
添付図面の図２から６を参照して、非制限的な例によって本発明を説明する。
【発明を実施するための最良の形態】
【００２５】
図１に示された従来技術では、辞書１０が、連想メモリ（ＣＡＭ）に基づき、検索レジスタ１４によって供給される４バイトタプル１２によって検索される。辞書１０内では、各エントリも４バイトの幅である。標準的な幅のデータ要素を用いると、データの混合に無関係に、圧縮中の保証された入力データレートおよび圧縮解除中の保証された出力データレートがある。
【００２６】
辞書は、前に出会ったタプルを保管し、新しいタプルが辞書の検索に使用され、辞書で一致が見つかる時に、そのタプルが、一致位置を参照するインデックスに置換される。ＣＡＭは、データ要素を受け取り、その出力として要素の一致アドレスを与える連想記憶の一形態である。ＣＡＭ技術の使用によって、辞書１０の素早い検索が可能になる。というのは、検索が、タプルが保管されるすべてのアドレスで同時に実施されるからである。
【００２７】
Ｘ−Ｍａｔｃｈ圧縮技法では、完全な一致は必須でない。４バイトのうちの２バイトまたは３バイトの一致とすることができる部分的一致も、辞書内の一致位置を参照するインデックスによって置換される。もちろん、部分的一致の存在をコーディングして、正しい圧縮解除を保証しなければならず、したがって、一致タイプコードＭＴが、一致判断ロジック１６によって判定される。１つまたは複数の不一致バイトは、無変更でエンコーディングアセンブラ１８によって供給される。この部分的一致の使用によって、タプルの完全な一致を必要とする場合と比較した時に圧縮率が改善されるが、辞書の高いスループットも維持される。
【００２８】
一致タイプは、入タプルのどのバイトが辞書内の対応するバイトと一致し、どのバイトを無変更で圧縮コードに連結しなければならないかを示す。一致する２バイト、３バイト、または４バイトの異なる組合せに対応する１１個の異なる一致タイプがある。たとえば、００００は、すべてのバイトが一致した（完全一致）ことを示し、１０００は、バイト０、１、および２が一致したがバイト３が一致しなかった部分的一致を示し、この例では、バイト３を無変更でコンプレッサの出力に追加しなければならない。いくつかの一致タイプＭＴは、他のＭＴより頻繁に現れるので、シミュレーションを介して得られた統計に基づく静的ハフマンコードが、これらのコーディングに使用される。たとえば、最も多い一致タイプは、００００（完全一致）であり、対応するハフマンコードは、０１である。その一方で、部分的一致タイプ００１０（第１、第３、および最後のバイトが一致する）は、より頻度が低く、したがって、対応するハフマンコードは、１０１１０である。この技法によって、圧縮率が改善される。
【００２９】
たとえば、検索タプルがＣＡＴ＿であり、辞書の位置２に単語ＳＡＴ＿がある場合に、部分的一致が、次のフォーマットで示される。
（一致／不一致フラグ）（辞書一致位置ＭＬ）（一致タイプＭＴ）（１つまたは複数の不一致バイト）
この例では、これが０２２Ｃすなわち、２進コード０  ００００１０  ００１０  １０１００１１である、すなわち、大文字のＣは一致せず、無変更でまたは文字どおりに、システムのコーディング部分に送られる。
【００３０】
このアルゴリズムは、擬似コードで次のように表される。
辞書を初期状態にセットする；
ＤＯ
｛未圧縮コードからタプルＴを読み取る；
タプルＴを辞書から検索する；
ＩＦ（完全一致または部分的一致）
｛最良一致位置ＭＬおよび一致タイプＭＴを判定する；
「０」を出力する；［一致フラグ］
一致位置ＭＬの２進コードを出力する；
一致タイプＭＴのハフマンコードを出力する；
タプルＴの不一致のバイト（リテラル）文字のすべてを出力する；｝
ＥＬＳＥ
｛「１」を出力する；［不一致フラグ］
タプルＴを出力する；｝
ＩＦ（完全一致）
｛辞書エントリ０から（ＭＬ−１）を１位置だけ移動する；｝
ＥＬＳＥ
｛すべての辞書エントリを１位置だけ下に移動する；｝
タプルＴを辞書位置０にコピーする；｝
ＷＨＩＬＥ（圧縮すべきデータがある）；
最良一致位置は、圧縮コードで必要なビット数が最小であることを基礎として判定される。
【００３１】
辞書は、ムーブトゥフロント（ＭＴＦ）戦略に基づいて配置される、すなわち、現在のタプルＴは、辞書の前に配置され、他のタプルが、余地を作るために１位置だけ下に移動される（タプルＴが一致するか否か無関係に）。辞書が満杯になった場合に、リーストリースントリユーズド（ＬＲＵ）ポリシが適用される、すなわち、最後の位置を占めるタプルが、単純に破棄される。
【００３２】
一致に関するコーディング機能は、３つの別々のフィールドすなわち、
（ａ）辞書１０内の一致位置；コードが固定長ｌｏｇ  ２（辞書サイズ）である均一な２進コードが使用される
（ｂ）一致タイプ；すなわち、入タプルのどのバイトが辞書位置で一致するか；静的ハフマンコードが使用される
（ｃ）辞書エントリと一致しなかった、リテラルの形で送られる余分のバイト
をコーディングする必要がある。
【００３３】
もう一度図１を参照すると、所与のタプルＴとの一致、部分的一致、または複数の部分的一致が、辞書１０によって一致判断ロジック回路１６に出力される。この回路は、エンコーディング機器１８に供給し、エンコーディング機器１８は、圧縮出力信号２０を供給する。一致判断ロジック１６と辞書１０の間に接続されたシフト制御ロジック２２が、シフト信号を供給して、辞書を更新する。この回路全体を、単一の半導体チップ上に設けることができる。
【００３４】
本発明人は、Ｘ−Ｍａｔｃｈコンプレッサの性能があるデータタイプで劣化する理由を判定した。次の句がＸ−Ｍａｔｃｈコンプレッサによって圧縮されると想像されたい。辞書が、最初は空であると仮定する。
【００３５】
ｃｏｍｐｕｔｅｒ  ｈａｒｄｗａｒｅ  ａｎｄ  ｃｏｍｐｕｔｅｒ  ｓｏｆｔｗａｒｅ
このデータは、幅４バイトのタプルに分割（解析）され、したがって、
｛ｃｏｍｐ｝｛ｕｔｅｒ｝｛  ｈａｒ｝｛ｄｗａｒ｝｛ｅ  ａｎ｝｛ｄ  ｃｏ｝｛ｍｐｕｔ｝｛ｅｒ  ｓ｝｛ｏｆｔｗ｝｛ａｒｅ  ｝
になる。
【００３６】
この４バイトタプルのそれぞれが、順番に辞書に適用される。一致は見つからず、したがって、タプルのそれぞれが、無変更でコンプレッサ出力データストリームに供給され、辞書にも保管される。圧縮はもたらされない（実際には、データの長さは、不一致フラグの挿入に起因して長くなる）。
【００３７】
しかし、この句には、繰り返される複数の単語および単語の一部がある。したがって、相当な冗長性がある。入力句は、４バイトのタプルに単純に分割されるので、各タプルは、この句の冗長性が出力信号を効率的に生成するためにコンプレッサによって活用されないことを意味する。
【００３８】
句が、次のように解析される場合に、
｛ｃｏｍｐ｝｛ｕｔｅｒ  ｝｛ｈａｒｄ｝｛ｗａｒｅ  ｝｛ａｎｄ  ｝｛ｃｏｍｐ｝｛ｕｔｅｒ  ｝｛ｓｏｆｔ｝｛ｗａｒｅ｝
単語「ｃｏｍｐｕｔｅｒ」およびタプル「ｗａｒｅ」の繰り返しを、圧縮をもたらすのに使用することができる。本発明の実施形態は、この原理に基づいて構築される。
【００３９】
次の例では、区切りシンボルまたは終端シンボルが、スペース（ＡＳＣＩＩコード３２）であると仮定するが、代替の１つまたは複数のシンボルをその代わりに使用することができる。これは、たとえば、エンコードされるデータが、この例に使用される自然言語に似た構造を有するが、スペース文字によって区切られない場合に適当である。
【００４０】
辞書の可能な幅全体より短い辞書エントリの使用が、「純粋な」データすなわちコンプレッサのタプル幅と一致する粒度を有するデータの時に圧縮率の劣化を引き起こすと考えられる。しかし、単一の区切り文字が使用される場合に、これは、平均して２５６バイトに１回だけ発生する。コーディングされたタプル（したがって辞書エントリ）は、時期尚早に短縮されるが、これは全体のわずかな比率だけであり、一般に重要でなくなる。
【００４１】
図２に、本発明の原理を、ブロック図形式で示す。データコンプレッサ５０は、圧縮されるデータストリーム５２を入力バッファ５４に受け入れ、入力バッファ５４は、データをパーサユニット５６に供給する。パーサユニットは、所定の長さのタプルにデータをスライスするか、データ内の解析シンボルまたは終端シンボルの存在に応答して、このシンボルで終るタプルにスライスする。これらのタプルが、圧縮辞書５８に適用され、圧縮辞書５８は、優先順位ロジック６０に結合される。優先順位ロジックは、部分的一致の可能性があるので必要である。所与のタプルに関する複数の部分的一致が辞書にある可能性があり、したがって、一致をランキングする回路が必要である。
【００４２】
優先順位ロジックの出力が、最良一致判断ロジックに結合され、最良一致判断ロジックは、複数の可能な一致（発生する時に）の１つを選択する。最良一致判断は、主コーダまたは一致／不一致コーダ６４に供給される。主コーダは、ビットアセンブリロジック６６に供給し、ビットアセンブリロジック６６は、出力バッファ６８に供給する。入力データストリームが、上で示したように解析されたので、圧縮率が、タプル長の粒度と一致する粒度を有しないデータに関して著しく改善される。
【００４３】
所与のデータセットをこの解析に適用することが適当であるかどうかという問題は、複数の形で対処することができる。第１に、圧縮アルゴリズムのユーザ（たとえばアプリケーションプログラム）が、適用されるアルゴリズムを指定することができる。第２に、ＡＳＣＩＩコード０などの非テキスト文字が入データストリームで検出されるまで、可変タプル長アルゴリズムを適用することができる。この文字が検出されたならば、固定タプル長アルゴリズムが適用される。デコンプレッサは、コンプレッサと同一のルールを適用することによって、このアルゴリズム切替を自動的に検出することができる。非テキスト文字は、すべてのデータストリームに現れる可能性が高いので、後者の技法は、固定長アルゴリズムの使用を単純に遅らせると考えることができる。しかし、実際には、そうでないことがわかっている。人間可読データは、一般に、機械コードとして解釈されるごく少数の文字を含まないことがわかっている。
【００４４】
代替案では、率直な技法を使用して、２つの解析技法（固定長解析または可変長解析）のどちらが特定の入データブロックを最もよく圧縮するかを判定することができる。コンプレッサ内のパーサは、固定長解析モードで動作を開始するように配置され、ブロック内の最初の少数のシンボル（バイト）を分析する。文字のいずれかが非ＡＳＣＩＩ文字（たとえば）である場合に、データが、機械可読であると仮定され、パーサは、その後、入データを固定長タプルに分割するだけのために動作する。すべてのバイト（シンボル）がＡＳＣＩＩ文字である場合に、データは、性質においてテキストであると仮定され、パーサは、その後、可変長解析モードで動作するように配置される。デコンプレッサは、圧縮解除されるデータが固定長モードと可変長モードのどちらで圧縮されたかを知る必要がない。というのは、圧縮データストリームに、すでに、透過的に圧縮解除するのに十分な情報が含まれるからである。
【００４５】
上で与えた例から、解析処理によって分離される複数の自由なまたは「孤児の」スペースがあることがわかる。単語の長さがタプル長の整数倍である時に、必ずこれが発生する。次の実施形態は、これらの孤児のスペースを効率的に圧縮する効率的な技法を有する。
【００４６】
スペースを、前のタプルの一部にすることができない場合に、そのスペースは、それだけで不一致タイプコードジェネレータに送られ、不一致タイプコードジェネレータは、２進数１１（２ビット）を追加して、スペースをコーディングする。第５の文字位置にあるスペースの明示的コーディングがあり、１バイトが２ビットだけに置換されるので、これはスペースのコーディングの効率的な形である。
【００４７】
この原理を、たとえば第４文字位置に現れるスペースに拡張することができる。
たとえば、次の２つの文字列を検討されたい
ＡＢＣ＿  および  ＡＢＣＤ＿
ここで、アンダースコア文字は、スペースを表す。この文字列の１番目は、一致が発生する場合に、任意の４文字タプルとしてコーディングされる。不一致が発生する場合には、不一致タイプコードジェネレータが、次のコードを生成する。
【００４８】
１（不一致の）［不一致長さのハフマンコード］［ＡＢＣ］
第２の文字列について、第５文字が、それだけで次のようにコーディングされる。
１（不一致の）［異なるハフマンコード］［ＡＢＣＤ］＋１（不一致の）［異なるハフマンコードｃｏｄｅ］
第１の場合に、スペース文字は明示的にコーディングされないが、第２の場合に、孤児スペースが、不一致として明示的にコーディングされることに留意することが重要である。孤児スペースの発生は、非常に一般的なので、この事象をコーディングするのに使用されるビット数は、理想的には、短いハフマンコードの正しい選択によって、できる限り減らされる。ハフマンコードの選択は、当業者が、タプル長、データ特性などの基礎で簡単に行うことができる。下に、スペースが１ビットだけのハフマンコードを有する例を示す（アンダースコアがスペースを表す。）
【００４９】
【表１】
2005535175.tif 000003
【００５０】
この技法と、Ｌｅｍｐｅｌ  Ｚｉｖ  ７７およびＬｅｍｐｅｌ  Ｚｉｖ  ７８に基づく従来技術コンプレッサの技法の間の区別に留意することも重要である。これらの従来技術コンプレッサは、可変長の入データを単一の辞書参照に置換するが、辞書参照によって置換されるデータの量は、毎回、入データと辞書の内容の間の連続する一致するシンボルの数によって決定される。本発明では、可変長解析動作が、入データの性質によって決定される。
【００５１】
図３に、「オーファン」スペースをより効率的に圧縮するために上の技法を含む、本発明によるデータコンプレッサ１００の実施形態を示す。説明を始める前に、いつも固定長のタプルを処理するわけではないという事実によって、この図が複雑になっていることに留意する価値がある。したがって、このコンプレッサ内の回路ブロックの間の相互接続の大部分に、圧縮のさまざまなステージで処理されるデータを運ぶバスと、データバスのうちの何ビットまたは何バイトが有効であるかを示す信号を運ぶもう１つのバスが含まれる。
【００５２】
回路の要素の間のパスの、ビット数に関する幅は、データパスを横切る斜線に隣接する数字によって示される。電力供給、クロック回路、クロック線、および制御回路などの項目は、図を明瞭にするために省略した。圧縮されるデータストリームは、３２ビット（４バイト）タプルを提供するために既にバッファリングされて、この図の左側に入力される。やはり４バイトタプルとしての圧縮データストリームが、保管、伝送などのために、この図の右側に供給される。
【００５３】
入力バッファ１０２が、データソースから３２ビットバスを介して、圧縮されるデータのストリームを受け入れる。入力バッファ内の未圧縮データに、入力バスの幅と一致するように２５６個の３２ビットレコードとして配置された１キロバイト（ｋＢ）のランダムアクセスメモリが含まれる。入力バッファが含まれるのは、この実施形態が（Ｋｊｅｌｓｏ他の教示と異なって）、各処理サイクルに必ずしも３２ビットのデータを処理しないからである。この場合に、４バイトタプルのうちで現在の単語の一部にされなかった部分が、次に圧縮される単語の先頭を形成しなければならない（タプルは４バイトの固定サイズであるが、単語は解析の可変結果である）。入力バッファは、さらに、制御線ＷＡＩＴを具備し、このＷＡＩＴは、それ以上データを供給しないようにデータソースに知らせるためにアクティブになる。より小さいバッファを使用することができるが、たとえば特定用途向け集積回路（ＡＳＩＣ）での、ＲＡＭの具備は簡単であり、一般に設計に対する制限要因ではない。圧縮されるデータは、３２ビット幅の信号線で入力バッファに来るものとして図示されているが、当然、バイトとして、直列に、または他の形で供給することができる。データソースの制御およびそれへの接続の性質は、適当な手段によって提供することができる。
【００５４】
入力バッファ１０２は、解析ユニット１０４に３２ビット（４バイト）のデータを供給し、解析ユニット１０４の目的は、解析シンボル（この例ではスペース文字）を識別し、タプルの第１バイト、第２バイト、または第３バイトにこのシンボルを含むタプルの長さを減らすことである。解析ユニット１０４は、検索レジスタ１０６に、連想メモリ（ＣＡＭ）への適用のための３２ビットまでのデータと、５ビット幅のＭａｓｋ信号（下で説明する）を供給する。検索レジスタの目的は、コンプレッサ回路の動作を同期化することである。これらのシーケンスのいずれについても辞書内で一致が見つからない場合に、これらのシーケンスが、不一致タイプコーダ１１８に渡される。この２つのシーケンスの実際のエンコーディングは、下で不一致タイプコードジェネレータ１１８に関して詳細に説明する。
【００５５】
解析ユニット１０４は、５ビット幅のＭａｓｋ信号も生成し、このＭａｓｋ信号のうちの、解析ユニットに供給される最初の４バイトに関連する４ビットは、連想メモリ（ＣＡＭ）マスク辞書１０８に送られる。５ビットマスクが必要なのは、下に示すように、不一致タイプコードジェネレータが、タプルにスペースまたは他の文字が含まれるかどうかを知る必要があるからである。
【００５６】
【表２】
2005535175.tif 000004
【００５７】
ＣＡＭマスク辞書１０８は、ＣＡＭデータ辞書１１０と同一の長さであり、ＣＡＭデータ辞書内のバイトのそれぞれに対応する１ビットを含む。図では、ＣＡＭデータ辞書が、１６エントリを含むものとして図示されている。実際には、多少長い、通常は１０２４エントリを有する辞書が使用されるが、図を簡単にするために、ここでは短い辞書を示した。おおまかに言って、複雑さは、辞書の長さが倍になるたびに、１．５倍だけ増える。ＣＡＭマスク辞書には、有効なデータを含むＣＡＭデータ辞書内のバイトを示すビットのパターンが含まれる。たとえば、ＣＡＭデータ辞書に、２バイトだけの幅であるエントリが含まれる場合に、ＣＡＭマスク辞書の対応するエントリに、対応するＣＡＭデータ辞書エントリの最初の２バイトだけが有効であることを示す１１００が含まれる。
【００５８】
ＣＡＭまたは連想メモリは、入力信号をメモリ内の現在のエントリのすべてと比較し、辞書内のエントリごとに１ビットの一致信号を出力する連想記憶である。６４ビットのＭａｔｃｈ信号（ＣＡＭ辞書内のバイトごとに１ビット）が、優先順位ロジック１１２および一致判断ロジック１１４に供給される。
【００５９】
明らかに、辞書エントリが３バイトタプルから形成された場合に、辞書エントリの最初の３バイトだけが、圧縮されるタプルと比較されなければならない。本発明のコンプレッサは、４バイトタプルが辞書エントリと部分的に一致する時に、部分的一致だけを許容する。言い換えると、部分的タプルは、部分的一致を生成することができないが、完全なタプルは、４バイトより少ない有効バイトを含む辞書位置での部分的一致を生成することができる。
【００６０】
ＣＡＭは、辞書エントリごとに、３ビット幅の出力信号Ｓａｍｅ  Ｌｅｎｇｔｈも供給する。これは、ＣＡＭに適用されたタプルの長さが辞書エントリと同一なのでバス上の一致Ｍａｔｃｈが満杯であるかどうかに関する情報を伝える。この信号は、完全一致検出回路１１６に供給される。
【００６１】
ＣＡＭデータ辞書からの出力および検索レジスタ１０６からの出力は、ＣＡＭデータ辞書の出力に応じて一致信号、部分的一致信号、および不一致信号を生成するロジックの組に供給される。
【００６２】
入タプルと辞書エントリの１つの間に完全な４バイト一致がある場合に、信号が、信号線Ｍａｔｃｈバス上で優先順位ロジック１１２および一致判断ロジック１１４に供給される。優先順位ロジック１１２は、２つの出力線を有し、１６＊６  Ｐｒｉｏｒｉｔｙというラベルを付けられた出力線は、一致判断ロジック１１４の第２入力に接続され、１６＊３  Ｐｒｉｏｒｉｔｙというラベルを付けられた出力線は、完全一致検出回路１１６に接続される。完全一致検出回路１１６は、ＣＡＭデータ辞書からのＳａｍｅ  Ｌｅｎｇｔｈバスにも接続される。下で示すように、一部の一致タイプが他の一致タイプより高い優先順位を有するので、６つの異なる優先順位がある。
【００６３】
２進数の１は、一致を示し、２進数の０は、不一致を示す。
【００６４】
【表３】
2005535175.tif 000005
【００６５】
実際には、広範囲のシミュレーションの後に、１００１、０１０１、１０１０などの一致が、十分に一般的ではないことが証明され、ハフマンコードを与えられない。これは、これらが、無の優先順位を有し、許容されないことを意味する。
【００６６】
これらの優先順位は、広範囲のシミュレーションの後に割り当てられ、その一致タイプを識別することが、圧縮に、より有益である。
優先順位１、２、および５は、検索単語の長さが辞書単語と一致する場合に、完全一致を生成することができる。ａ＿を含む辞書位置３でａ＿を見つけることなどがこれである。これは、優先順位５（２ＭＳＢの部分的一致）として識別されるが、完全一致検出回路１１６は、優先順位１、２、および５を含む信号１６＊３と、４バイト、３バイト、または２バイトの長さの一致があるかどうかを示すＣＡＭ辞書からのｓａｍｅ  ｌｅｎｇｔｈ  １６＊３信号を使用して、この一致を完全一致にアップグレードする。
【００６７】
完全一致検出回路１１６は、その名前が示すように、完全一致を検出し、４つの出力信号すなわち、辞書エントリの数と等しいビット数を含むＭｏｖｅ信号と、３つの信号ビットフラグＳａｍｅ  Ｐｏｓｉｔｉｏｎ、Ｆｕｌｌ  Ｍａｔｃｈ  ａｔ  Ｚｅｒｏ、およびＦｕｌｌ  Ｍａｔｃｈを生成する。この３つの信号ビットフラグは、すべてがランレングスコーディングに関係し、ＣＲＬＩカウンタ１３０に供給される。Ｍｏｖｅ信号は、辞書を更新するのに使用され、ＣＯＤＡ  １４６に供給される。コンプレッサアウトオブデート適応（ＣＯＤＡ）ロジックは、ムーブ生成ロジック１４８と共にフィードバックループに接続され、ムーブ生成ロジック１４８の出力は、ＣＡＭ辞書に結合される［詳細についてはＷＯ  ０１／５６１６９を参照されたい］。
【００６８】
一致判断ロジック１１４は、１６対４エンコーダ１２２への１６ビット幅信号Ｍａｔｃｈ  Ｌｏｃ（一致位置）ＭＬも供給し、この信号には、辞書エントリごとに１ビットが含まれる。このエンコーダは、４ビット信号をフェーズドバイナリコードジェネレータ１２４に供給し、フェーズドバイナリコードジェネレータ１２４は、５ビットのＣｏｍｐ  Ｃｏｄｅ信号をコードコンカテネータ（Ｃｏｄｅ  Ｃｏｎｃａｔｅｎａｔｏｒ）１２６に供給する。フェーズドバイナリコードは、辞書がまだ満杯でない間の動作のフェーズ中に辞書一致位置に用いられるビットの数を減らすのに使用される。追加の信号線が、フェーズドバイナリコードの幅を示す。コードコンカテネータ１２６は、さらに、一致タイプコードジェネレータ１２０から６ビットのＭａｔｃｈ  Ｔｙｐｅ  Ｃｏｄｅ信号および３ビットのＴｙｐｅ  Ｗｉｄｔｈ信号を供給され、一致タイプコードジェネレータ１２０は、ハフマンコーディングされた出力を供給する。コードコンカテネータ１２６の出力は、Ｍａｔｃｈ  ＣｏｄｅおよびＭａｔｃｈ  Ｔｙｐｅを含む１１ビット信号（最大で、不一致または一致の１ビット、位置の４ビット、タイプの６ビット＝１１）と、主出力信号ｃｏｄｅ＿ａの有効ビット数を示す４ビット信号である。
【００６９】
不一致タイプコードジェネレータ１１８は、検索レジスタ１０６からのＭａｓｋ  Ｄａｔａ信号およびＣＡＭ  Ｄａｔａ信号ならびに一致判断ロジック１１４からの４ビット幅の信号Ｍａｔｃｈ  Ｔｙｐｅを受け取る。Ｍａｔｃｈ  Ｔｙｐｅ信号は、一致タイプコードジェネレータ１２０にも供給される。
【００７０】
３４ビットのｌｉｔｅｒａｌ  ｃｏｄｅに、リテラルと、不一致をコーディングするのに必要な不一致タイプが含まれる。ワーストケースは、３４バイトリテラルすなわち、検索レジスタ１０６からのＣＡＭデータのオリジナルの３２ビットと、不一致のタイプを示す２ビットである。不一致のタイプについては、前の表Ａを参照されたい。６ビットのｌｉｔｅｒａｌ  ｗｉｄｔｈは、ｌｉｔｅｒａｌ＿ｃｏｄｅ信号のどの部分が有効であるかを示す。
【００７１】
一致タイプコードジェネレータ１２０は、４ビットのＭａｔｃｈ  Ｔｙｐｅ信号を一致判断ロジック１１４から受け取る。一致タイプコードジェネレータは、この４ビット信号を、前の表一致タイプＣに見られる６ビットまでのハフマンコードに変換し、これをＴｙｐｅ  Ｃｏｄｅ信号としてコードコンカテネータ１６６に供給する。一致タイプコードジェネレータ１２０は、さらに、３ビット幅のＴｙｐｅ  ｗｉｄｔｈ信号を生成し、この信号は、Ｔｙｐｅ  Ｃｏｄｅ信号の６ビットのうちの何ビットが有効なハフマンコードであるかを示す（ハフマンコードの性質のゆえに、コードコンカテネータ１２６は、Ｔｙｐｅ  ＣｏｄｅからＴｙｐｅ  ｗｉｄｔｈを導出できるが、一致タイプコードジェネレータがこの情報をすぐに供給できるので、この導出は不要である）。
【００７２】
フェーズドバイナリコードジェネレータ１２４は、バイナリコーディングされたＭａｔｃｈ  Ｌｏｃ信号をフェーズドバイナリコードに変換する。フェーズドバイナリコードジェネレータの目的は、辞書が満たされつつある間に、最小のビット数を使用して辞書一致位置をエンコードすることである。コードコンカテネータ１２６は、Ｍａｔｃｈ  Ｔｙｐｅハフマンコードおよび辞書位置フェーズドバイナリコードを、１１ビット信号Ｃｏｄｅ＿ａに変換し、このＣｏｄｅ＿ａが、コードコンカテネータ１２８に供給される。コードコンカテネータ１２６は、４ビット幅信号もコードコンカテネータ１２８に供給し、この信号は、ｃｏｄｅ＿ａの１１ビットのうちのどれが有効であるかを識別する。
【００７３】
さらに、コードコンカテネータ１２８は、次の信号を供給される。
・不一致タイプコードジェネレータから３４ビットのＬｉｔｅｒａｌ  Ｃｏｄｅ
・不一致タイプコードジェネレータから６ビットのＬｉｔｅｒａｌ  Ｗｉｄｔｈ
・不一致タイプコードジェネレータから１ビットのＭｉｓｓフラグ
・コードコンカテネータ１２６からの１１ビットのｃｏｄｅ＿ａ
・コードコンカテネータ１２６からの、ｃｏｄｅ＿ａの有効幅を示す４ビット信号
コードコンカテネータ（コード連結装置：ＣＯｄｅ  Ｃｏｎｃａｔｅｎａｔｏｒ）１２８は、３５ビット幅の信号ｃｏｄｅ＿ｂおよびｃｏｄｅ＿ｂ信号のうちで有効であるビットを示す６ビット幅信号をＲＬＩコーディングレジスタ１３２に供給し、ＲＬＩコーディングレジスタ１３２は、３５ビット幅信号ｃｏｄｅ＿ｃおよびｃｏｄｅ＿ｃ信号のうちで有効なビットを示す６ビット幅信号をＲＬＩコーディング制御ユニット１３４に供給する。３５ビットが使用されるのは、ワーストケースで、３４ビットが不一致タイプコードジェネレータから生成され得、不一致を示すために１ビットを追加しなければならず、３５ビット信号が生成されるからである。
【００７４】
コーディング制御ユニット１３４は、ＣＲＬＩカウンタ１３０からＲＬ  Ｄｅｔｅｃｔｅｄ信号およびＣｏｕｎｔ信号も受け取る。
ＣＲＬＩカウンタ１３０は、入データストリーム内の連続を検出する。ＣＡＭ辞書は、ムーブトゥフロントの基礎で（完全一致について）動作するので、特定のタプルの最初の発生は、そのタプルの辞書エントリを辞書の前に移動させる。これは、タプルが辞書内のエントリと一致する場合、またはタプルが受け取られた時に新しいエントリが形成される場合にあてはまる。入データストリーム内の同一タプルの連続は、辞書位置０での一連の完全一致を発生させ、ＣＬＲＩカウンタは、その一致の数をカウントする。ＲＬＩコーディング制御ユニットは、それ相応に働いて、ランレングスコードとしてデータをエンコードして（適当な時に）、圧縮率のさらなる改善をもたらす。このＲＬＩユニットは、現在の実施形態で、辞書の最上部での一致の繰り返しだけではなく、他の位置での一致の繰り返しにも敏感になるように拡張される。その目的は、複数の辞書位置にまたがる単一の出力の長い単語での効率的なコーディングである。たとえば、単語Ｉｎｔｅｒｎａｔｉｏｎａｌは、｛Ｉｎｔｅ｝｛ｒｎａｔ｝｛ｉｏｎａ｝｛ａｌ＿｝として、４つの辞書位置に分配される。ＭＴＦ維持戦略では、単語Ｉｎｔｅｒｎａｔｉｏｎａｌがもう一度見つかる場合に、０より大きい同一位置で複数の一致が生成される。拡張ＲＬＩコーダは、繰り返される一致の位置および数を示す単一の出力を作る。前の特許出願ＷＯ  ０１／５６１６８に記載されているように、位置０での一致の繰り返しをコーディングするのに、８ビットが使用され、したがって、最大２５５個を単一のランでコーディングすることができる。この実施形態で導入される拡張は、２ビットだけを使用して、０より大きい位置での一致の繰り返しをコーディングし、したがって、最大５つの繰り返し（２回、３回、４回、または５回の繰り返しをコーディングする４つのコード）を、単一のランでコーディングすることができる。これは、圧縮を改善するために行われる。というのは、単語が、通常は５つの辞書位置を超えては延びないからである。
【００７５】
ランレングスエンコーディングの原理は、周知である。さらなる情報については、前に参照によって組み込まれた、本発明人の国際特許出願第ＷＯ  ０１／５６１６８号を参照されたい。
【００７６】
ＲＬＩコーディング制御ユニット１３４は、３５ビット信号ｃｏｄｅ＿ｄおよびｃｏｄｅ＿ｄ信号のうちで有効なビットを示す６ビット幅信号を、さらなるコードコンカテネータ１３６に供給し、コードコンカテネータ１３６は、７ビットのＮｅｘｔ  Ｗｉｄｔｈ信号、９８ビットのＮｅｘｔ  Ｃｏｄｅ信号、および１ビットのＮｅｘｔ  Ｖａｌｉｄをレジスタ１３８に供給する。レジスタ１３８は、７ビットのＣｕｒｒｅｎｔ  Ｗｉｄｔｈ信号および９８ビットのＮｅｘｔ  Ｃｏｄｅ信号を供給する。
【００７７】
この圧縮アルゴリズムの性質が、出力データのレートが変化することを意味するので、出力バッファが設けられる。図示のバッファは、３２ビットがデータ処理の共通のバス幅なので、３２ビット幅のデータを生成する。もちろん、他のバス幅にすぐに対処することができる。
【００７８】
Ｃｕｒｒｅｎｔ  Ｃｏｄｅ信号を構成する９８ビットのうちで、最上位６４ビットは、１つのバスで、３２ビット幅の出力バッファ１４０および１４２の対に供給される。出力バッファは、保管または送出のために圧縮データを３２ビット幅のデータに分解するために設けられる。出力バッファは、６４ビット出力をとり、これを３２ビット出力に変換して、３２ビット幅出力信号を供給する。
【００７９】
最後に、図３には、Ｐｉｐｅｌｉｎｅ  Ｒ０ＣおよびＰｉｐｅｌｉｎｅ  Ｒ１Ｃと記された２つの垂直の信号線がある。この実施形態のパイプライン化は、タイミングを改善するだけではなく、ＲＬＩコーダに必要な遅延を有するためにも使用される。出力（圧縮）データは、入データにランが含まれるかどうかをＲＬＩコーダが判定するまで遅延させなければならない。そうである場合には、ＲＬＩコーダが出力を供給し、そうでない場合には、主コンプレッサ回路が、２圧縮サイクルだけ遅延された出力を供給する。
【００８０】
図５に、上で説明した実施形態の擬似コードリスティングを示すが、このリスティングは、不一致タイプコーダおよびＲＬＩの動作のさらなる説明を与えるものである。
図４に、本発明の実施形態によるデコンプレッサ２００のブロック概略図を示す。この図でのデータの流れは、圧縮解除が実行される際に右から左に進む。圧縮解除の機能は、多くの形でコンプレッサの逆であり、コンプレッサの構造および動作から暗示されるが、さらなる説明を続ける。
【００８１】
圧縮データは、３２ビットバス２０２で入力バッファ２０４および２０６の対に供給される。これらのバッファは、２５６×３２ビット幅ランダムアクセスメモリ（ＲＡＭ）として配置される。バッファの長さは、重要でないが、配置は重要である。というのは、６４ビットのデータが、動作開始の前に使用可能でなければならず、入圧縮データが一定のレートで到着しない場合であっても、圧縮解除回路が操作すべき十分なデータを有することを保証しなければならないからである。これらのバッファからの出力は、６４ビット幅に組み合わされ、コード連結シフトユニット２０８に供給される。コード連結シフトユニットは、単一ビットのＮｅｘｔ＿Ｕｎｄｅｒｆｌｏｗ信号、７ビットのＮｅｘｔ＿Ｗｉｄｔｈ信号、および１３３ビットのＮｅｘｔ＿Ｃｏｄｅ信号をレジスタ２１０に供給する。レジスタ２１０は、これらの信号を１圧縮解除サイクルだけ遅延させ、単一ビットのＣｕｒｒｅｎｔ＿Ｕｎｄｅｒｆｌｏｗ信号、７ビットのＮｅｘｔ＿Ｗｉｄｔｈ信号、および１３３個のＣｕｒｒｅｎｔ＿Ｃｏｄｅ信号を供給する。
【００８２】
デコード、古いデータのシフトアウト、および新しいデータの連結という動作の最大の並列性を引き出すように設計されたディスアセンブリロジックの動作モードのゆえに、主ループは、１３３ビット幅である必要がある。これは、設計のクリティカルパスであり、したがって、デコード動作が完了して古いデータがシフトアウトされ、新しいデータ連結されるまで待つことは、好ましくない。
【００８３】
新しいデータ（６４ビット）は、速度を改善するために、デコードされたビットの数がわかる前に、デコード動作と並列に連結されなければならない。連結される新しいデータは、現在のデコード動作に使用可能ではない。現在のデコード動作が、最大値の３５ビットを消費する場合に、新しいデータが追加される前に次のデコード動作を開始できるように、少なくとも３５ビットがループ内に残されなければならない。３５＋３４ビットだけがループ内にある場合に、現在のデコード動作は、３５を消費することができ、３４だけが次のサイクルに残されるが、これは、正しい動作を保証するのに不十分である。この情況を回避するために、３５＋３４ビットがループ内にある時に、新しいデータを追加し、したがって、３５＋３４＋６４＝１３３ビットがループ内にあるようにしなければならない。有効なビットの数を示すためには、７ビットだけが必要である。というのは、最上位３５個が必ず有効であり、この信号が、最下位９８ビットのうちの有効なビット数を示す必要があるからである。
【００８４】
レジスタ２１０は、メインデコーダ２１２に３５ビットを適用する。これによって、圧縮データ信号が分解されて、現在のコードワードによって何バイトが表されるか、その圧縮前のワードが一致、不一致、またはランレングスコードのどれとして圧縮されたかが判定される。デコーダは、次の信号の少なくとも１つを適当に供給する。
【００８５】
・単一ビットのｒｕｎ  ｌｅｎｇｔｈ  ｄｅｔｅｃｔｅｄ信号
・ランの長さを表す８ビットのＣｏｕｎｔ信号
・４ビットのＬｏｃａｔｉｏｎ信号（やはり説明を簡単にするために、１６エントリ辞書に関する）
・６ビットのＭａｔｃｈ  Ｔｙｐｅ信号
・３２ビットのＬｉｔｅｒａｌ  Ｄａｔａ信号
・５ビットのｍａｓｋ信号
・単一ビットのＦｕｌｌ  Ｈｉｔ信号
Ｒｕｎ  Ｌｅｎｇｔｈ  ｄｅｔｅｃｔｅｄ信号およびランレングスＣｏｕｎｔ信号を除いて、これらのすべてが、めいめいのバスを介してＲＬＩデコーディングレジスタに供給される。このレジスタは、信号を１圧縮解除サイクルだけ遅延させて、ランレングスデコーディング回路と同期化するために設けられる。これは、コンプレッサで使用されるパイプラインに類似する機能を実行する。１圧縮解除サイクルだけ遅延された後に、これらの信号は、無変更でＲＬＩデコーディング制御回路２１６に供給される。
【００８６】
ＲＬＩデコーディング制御ユニットは、デコンプレッサランレングスインターナル（ＤＲＬＩ）カウンタ２１８にも接続される。ＲＬＩデコーディング制御ユニット２１６は、単一ビットのＣｏｕｎｔ  Ｅｎａｂｌｅ信号をＤＲＬＩカウンタに供給し、単一ビットのＥｎｄ  Ｃｏｕｎｔ信号をＤＲＬＩカウンタから受け取る。ＤＲＬＩカウンタは、さらに、メインデコーダ２１２から８ビットのＲＬＩ  Ｃｏｕｎｔ信号を与えられる。ＤＲＬＩカウンタ２１８およびＲＬＩデコーディング制御ユニット２１６の両方に、メインデコーダから単一ビットのＲＬ  Ｄｅｔｅｃｔｅｄ信号が供給される。
【００８７】
ＲＬＩデコーディング制御ユニット２１６は、４ビットのＬｏｃａｔｉｏｎ信号および１ビットのＦｕｌｌ  Ｈｉｔ信号を４対１６デコーダ２２２に供給する。
４対１６デコーダは、辞書位置を１６個の信号の１つに変換し、１６本の信号線が、圧縮解除アウトオブデート適応（ＤＯＤＡ）ロジック２２０およびポインタアレイ２２６の両方に供給される。ＤＯＤＡロジックは、１６ビットのＳｅｌｅｃｔ  Ｗｒｉｔｅ信号をムーブ生成ロジック２２４およびポインタアレイ２２６に供給する。ムーブ生成ロジック２２４は、１６ビットのＭｏｖｅ  Ｃｏｎｔｒｏｌ信号を生成し、この信号は、ポインタアレイ２２６に供給され、ＤＯＤＡロジックにもフィードバックされる。ポインタアレイは、４ビットの信号アドレスｗｒｉｔｅ＿ａを生成し、この信号は、同期レジスタ２２８に供給され、ポインタアレイにフィードバックされる。これが行われるのは、アドレスが辞書の最上部にロードされると同時に、残りが１位置だけ下に移動されなければならないからである。圧縮解除中のポインタアレイ内のアドレスは、圧縮中のＣＡＭ内のデータと同一の形で移動する。ポインタアレイは、４ビットのＲｅａｄ  Ａｄｄｒｅｓｓ信号も生成し、この信号は、アドレス同等回路２３０に供給される。同期レジスタ２２８も、４ビットの信号アドレスｗｒｉｔｅ＿ｂをアドレス同等回路２３０に供給する。アドレス同等回路は、４ビットのＷｒｉｔｅ  Ａｄｄｒｅｓｓ信号および４ビットの信号アドレスｗｒｉｔｅ＿ｃをＲＡＭデータ辞書２３２に供給する。
【００８８】
ＲＡＭデータ辞書は、要素２２０から２３０によってアドレッシングされ、更新され、その結果、辞書の内容が、圧縮中のＣＡＭの内容と同一になる。この辞書は、コンプレッサで行わなければならない辞書全体の検索ではなく、１つの辞書位置の内容を出力として供給するのに使用されるので、デコンプレッサでＣＡＭを使用する必要はない。ＲＡＭが使用され、ＣＡＭが使用されないので、辞書のエントリを簡単に移動することはできず、したがって、ポインタシステムを使用して、辞書エントリをアドレッシングする。
【００８９】
ＲＡＭデータ辞書は、ＲＡＭマスク辞書に関連し、ＲＡＭマスク辞書は、ＲＡＭデータ辞書と同一の長さであり、４ビット幅である。その目的は、コンプレッサのＣＡＭマスク辞書の目的に類似する。
【００９０】
マルチプレクサ２３６が、データ辞書またはマスク辞書の出力および一時レジスタ２４２の出力の間で選択する。一時レジスタが必要なのは、いくつかの情況で、必要なデータがまだＲＡＭに書き込まれていないが、ＲＡＭデータバスに存在するからである。このレジスタは、ＲＡＭに書き込まれるデータを一時的にラッチするのに使用される。マルチプレクサ２３６の出力は、出力タプルアセンブラ２３８に結合され、出力タプルアセンブラ２３８は、アセンブリングユニット２４４および出力バッファ２４６に供給して、非圧縮出力データストリーム２４８を提供する。
【００９１】
図６に、同一の半導体チップ上の本発明によるコンプレッサおよび本発明によるデコンプレッサのブロック概略図を示す。スペースを節約するために、これらは、辞書を共用することができ、この辞書はＣＡＭになる。辞書が共用される場合には、二重動作は不可能になる。
【００９２】
本発明は、コンピュータシステムおよびネットワーク内の複数の応用例に適用することができる。応用には、下記が含まれる。
・リモートコンピュータの間で転送されるデータの圧縮
・インターネットなどの公衆ネットワークを介して転送されるデータの圧縮
・伝送およびデータウェアハウスでの保管のためのデータの圧縮
・あるタイプの永久的または半永久的記憶システムでのローカルストレージのためのデータの圧縮
本発明は、メモリが高コストなのでデータ量の削減が必要である時、電力消費、重量、もしくは体積が製品実行可能性に重要である時、または帯域幅削減が配線のコスト節約または固定帯域幅でのより高速の伝送を可能にする時に、適用することができる。
【図面の簡単な説明】
【００９３】
【図１】従来技術のＸ−Ｍａｔｃｈコンプレッサを示すブロック概略図である。
【図２】本発明の第１の実施形態によるコンプレッサを示すブロック概略図である。
【図３Ａ】本発明の第２の実施形態によるコンプレッサの一部を示すブロック概略図である。
【図３Ｂ】本発明の第２の実施形態によるコンプレッサの一部を示すブロック概略図である。
【図３Ｃ】本発明の第２の実施形態によるコンプレッサの一部を示すブロック概略図である。
【図４Ａ】本発明の実施形態によるデコンプレッサの一部を示すブロック概略図である。
【図４Ｂ】本発明の実施形態によるデコンプレッサの一部を示すブロック概略図である。
【図４Ｃ】本発明の実施形態によるデコンプレッサの一部を示すブロック概略図である。
【図５】図３に示されたコンプレッサの擬似コードリスティングを示す図である。
【図６】本発明の一実施形態によるコンプレッサおよびデコンプレッサの両方を含む半導体集積回路に関するブロック概略図である。
【図１】
2005535175.tif 000006
【図２】
2005535175.tif 000007
【図３Ａ】
2005535175.tif 000008
【図３Ｂ】
2005535175.tif 000009
【図３Ｃ】
2005535175.tif 000010
【図４Ａ】
2005535175.tif 000011
【図４Ｂ】
2005535175.tif 000012
【図４Ｃ】
2005535175.tif 000013
【図５】
2005535175.tif 000014
【図６】
2005535175.tif 000015
【国際調査報告】
2005535175.tif 000016
2005535175.tif 000017
2005535175.tif 000018