JP3171510B2 - 辞書ベースのメモリ内のデータを圧縮および圧縮解除する方法 - Google Patents
辞書ベースのメモリ内のデータを圧縮および圧縮解除する方法Info
- Publication number
- JP3171510B2 JP3171510B2 JP15443993A JP15443993A JP3171510B2 JP 3171510 B2 JP3171510 B2 JP 3171510B2 JP 15443993 A JP15443993 A JP 15443993A JP 15443993 A JP15443993 A JP 15443993A JP 3171510 B2 JP3171510 B2 JP 3171510B2
- Authority
- JP
- Japan
- Prior art keywords
- dictionary
- data
- memory
- character
- address
- 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.)
- Expired - Fee Related
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Description
と圧縮解除の方法と装置に関し、より詳細には、圧縮情
報と圧縮解除情報を格納するための辞書を用いる損失の
ないデータ圧縮アルゴリズムの実施に関する。
ーケンスあるいは“コードワード”を用いて複数文字ス
トリングを符号化する。二進シーケンスあるいはコード
ワードは個々の文字の符号化には用いられない。各スト
リングは、“アルファベット”あるいは単一文字ストリ
ングからなる。このアルファベットは圧縮器の処理する
最小の固有の情報を表わす。したがって、その文字を表
わすのに8ビットを用いるアルゴリズムはそのアルファ
ベットに256の固有の文字を有する。圧縮は符号化法
で表現された複数文字ストリングがデータストリームの
あるファイルに見られる程度に有効である。人間の言語
の翻訳に用いられる二か国語の辞書との類比で、非圧縮
コードと圧縮コードの間のマッピングを行う装置は通常
“辞書”と呼ばれる。
複数文字ストリング用の辞書のエントリの使用頻度によ
って決まる。固定の辞書を一つのファイル型に最適化す
ると、他のファイル型には最適となりにくい。たとえ
ば、新聞テキストファイルに見られるような文字の組み
合わせを多数有する辞書は、データベースファイル、ス
プレッドシートファイル、ビットマップされたグラフィ
ックスファイル、コンピュータ支援設計ファイルその他
を効率的に圧縮する可能性は低い。
入力データを圧縮しながら入力データの圧縮に用いられ
る辞書が展開される。圧縮されていない入力データ中に
存在しうる単一文字のそれぞれを表現するコードワード
がこの辞書に入れられる。そのファイルの中で複数文字
ストリングが現われると、辞書に追加のエントリが加え
られる。この追加の辞書エントリは、かかる複数文字ス
トリングがそれ以後に発生したときこれを符号化するの
に用いられる。たとえば、現在の入力パターンの整合は
現在辞書に存在するフレーズに対してのみ行われる。整
合が失敗する度に、新しいフレーズが辞書に加えられ
る。この新しいフレーズは整合されたフレーズを一つの
記号分だけ拡大することによって形成される(たとえ
ば、整合を“破る”入力記号)。圧縮はこのファイル中
で最も頻繁に発生する複数文字ストリングが辞書の展開
中に現われる範囲で行われる。
れる。したがって、圧縮されたファイル中にある文字ス
トリングのコードワードが現われるとき、辞書は対応す
る文字ストリングの再構成に必要な情報を有する。圧縮
情報と圧縮解除情報を格納するための辞書を用いる広く
使用されている圧縮アルゴリズムは、それぞれLZ1、
LZ2と呼ばれるレンペル(Lempel)とジブ(Z
iv)の第1および第2の方法である。これらの方法
は、イーストマン(Eastman)その他の米国特許
第4,464,650号に開示されており、これらのア
ルゴリズムに対する様々な改良がウェルチ(Welc
h)の米国特許第4,558,302号、ミラー(Mi
ller)その他の米国特許第4,814,746号に
開示されている。これらの参考資料には、辞書の使用に
ついてさらに詳しく説明されている。
できるメモリの量は有限である。したがって、辞書のエ
ントリの数は有限であり、各エントリの符号化に用いら
れるコードワードの長さは限られている。典型的には、
この長さは12ビットから16ビットの間である。入力
データシーケンスが長い場合、辞書は最後には“満杯に
なってしまう”。このとき、いくつかの方法で対処する
ことができる。たとえば、辞書をその現在の状態に凍結
し、入力シーケンスの残りの部分に用いることができ
る。第2の方法では、辞書をリセットし、新しい辞書が
最初から作成される。第3の方法では、辞書を圧縮比が
下がるまで一時凍結し、その後リセットする。
学習能力が失われるという欠点がある。入力データの統
計が変化するとき、辞書はかかる変化についていけず、
圧縮比の急速な低下が発生する。辞書リセット法は、ア
ルゴリズムの学習能力を維持するが、空の辞書に切り換
わったとき圧縮比の一時的な低下が発生する(たとえ
ば、それまでに蓄積されたすべてのソースの知識が失わ
れる)。
めの方法の一つに、辞書のメモリサイズを大きくするこ
とがある。しかし、メモリサイズを大きくすると、コス
トが上がり、また辞書のデータエントリの検索に要する
時間を増大することがある。逐次にアクセスすることの
できるメモリでデータを迅速に発見するハッシングアル
ゴリズムについて多くの研究がなされている。たとえ
ば、ウェルチ(Welch)の米国特許第4,558,
302号などである。
害は、前に現われた文字ストリングを辞書で探索するの
に要する時間の量である。通常、ハッシングアルゴリズ
ムは前に格納された辞書エントリの探索と新しい文字ス
トリングに使用できる記憶場所の発見に用いられる。典
型的な構成には、ウェルチ(Welch)(LZW)の
米国特許第4,558,302号に開示するように各辞
書エントリに対して二つないし四つの記憶場所を有する
ランダムアクセスメモリ(RAM)が用いられる。
の辞書エントリをデータワードの内容の簡単な算術関数
に基づくアドレスのRAMランダムアクセスメモリスペ
ースにマップする。かかるアルゴリズムでは、ワード内
の全ワードあるいはフィールドを用いてマッピングアド
レスを計算するため、二つ以上のデータワードがメモリ
中の同じ場所にマップされ、ハッシングの衝突が起こる
可能性がある。この場合、このデータについては代わり
の場所を見つけなければならない。必然的に、RAMが
いっぱいになると、第2の辞書エントリは前に用いられ
た場所に混入することになる。圧縮を続けるためにはか
かる状況を解決しなければならない。ハッシング回路、
特にハッシングの衝突は圧縮/圧縮解除システム論理を
かなり複雑にし、システムのスループットを低下させ
る。
考えられるすべてのデータエントリの小さな部分集合と
なる。したがって、ハッシングの衝突を減少させる方法
の一つは、辞書の記憶場所の数を増やすことである。し
かし、この方法ではシステムの複雑性とコストが増し、
メモリと圧縮/圧縮解除制御論理の統合ができなくな
る。さらに、メモリが大きくなることによって、ある文
字ストリングが前にメモリにロードされているかどうか
の判定に要する探索時間が増すことになる。
の障害は、データ文字ストリングの符号化と復号に要す
る時間量と回路の複雑性である。たとえば、データの圧
縮の際には、ある文字ストリングがそれ以前にメモリに
格納されたデータフレーズのどれにも一致しないことが
わかると、それは未使用のデータ記憶場所に格納されね
ばならない。格納された文字ストリングと前に辞書デー
タエントリに一致した文字ストリング内のサブフレーズ
を同定するコードワードを生成しなければならない。こ
のコードワードは以後のデータ圧縮動作中に追加の文字
と組み合わせることができるように格納しなければなら
ない。
タコードワードは圧縮されていないデータ文字と、たと
えばヒューレット・パッカード・ジャーナル(Hewl
ett−Packard Journal)、1989
年6月号、27−31ページに説明するような圧縮され
ていないデータストリングの残りの部分へのリンクとい
った追加のコードワードを表わす場合がある。そこに説
明するHP−DC法では、コードワードを順次符号化
し、圧縮されたコードによって決定される辞書アドレス
位置にある次のバイト(K)と結び付いたコードワード
(OMEGA)を格納する。したがって、この辞書は実
際の圧縮解除されたデータストリングが生成される前に
何度か読まれねばならない。この圧縮および圧縮解除法
は反復式であるため、辞書のアクセスに用いられるクロ
ックサイクル以外の追加のクロックサイクルによって全
体の圧縮時間および圧縮解除時間が大幅に増大する。し
かし、この符号化、復号および辞書探索法は、各入力文
字の圧縮あるいは圧縮解除に二つ以上のクロックサイク
ルを要する。さらに、これらの符号化アルゴリズムおよ
び復号アルゴリズムは複雑な圧縮および圧縮解除ハード
ウエアを必要とする。したがって、辞書ベースのデータ
圧縮システムの性能の向上と辞書ベースのデータ圧縮/
圧縮解除システム中の符号化と復号の改良が必要とされ
ている。
の目的は辞書ベースのデータ圧縮システムの辞書がリセ
ットされているとき発生するデータ圧縮における損失を
最小限にすることである。
化する入力データシーケンスのデータ圧縮システムの適
応性を増すことである。
タ圧縮/圧縮解除システムにおける文字ストリングの符
号化と復号に要する時間を低減することである。
文字ストリングのためのデータ圧縮/圧縮解除辞書の探
索を簡単にし、ハッシングの衝突を防止することであ
る。
リ量で辞書ベースのデータ圧縮/圧縮解除システムのデ
ータ圧縮能力を最大限にすることである。
のデータ圧縮/圧縮解除システムにおいて複数の辞書の
間での切り換えを効率的に行うことである。
は、現行の辞書と待機辞書を同時に構築するデータ圧縮
/圧縮解除システムであることである。現行辞書は標準
のデータ圧縮エンジンにおける辞書と同じ目的をはたす
ものである。待機辞書は現行辞書のフレーズの部分集合
を有するように現行辞書と平行して構築される。この部
分集合は、ソースデータ中に発生するパターンを最もよ
く記述するように選択される。現行辞書がいっぱいにな
ると、これは待機辞書に置き換えられ、新しい現行辞書
の構築と圧縮への使用が続行する間に新しい待機辞書が
“最初から”構築される。したがって、この圧縮器は空
の辞書に切り換わることは決してなく、辞書のメモリサ
イズが限られているために発生するデータ圧縮の劣化が
低減される。
追加すべき十分な空スペースを有し、それによってソー
スデータに連続的に適応することが可能である。この機
能は統計量の変動するソースデータ圧縮の際に特に重要
である。待機辞書中のより少数のデータエントリへの切
り換えの際にいくぶんかの情報が失われるが、この辞書
を最大限の効率で再構築するための時間は依然として辞
書を完全にリセットする場合の時間より短い。したがっ
て、データ圧縮比に対する悪影響がより少ないかたちで
より小さい辞書メモリを用いることができる。
の基準は、アプリケーションによって異なる場合があ
る。たとえば、符号化されたデータストリングはそれが
現行辞書のデータエントリに少なくとも一度は一致した
ことがある場合に複写される。また、待機辞書中のエン
トリはストリングの長さ、データエントリとの最も新し
い一致、あるいはある与えられたアプリケーションにお
ける圧縮を最大限にするエントリを同定する基準にした
がって選択することができる。
え(リセット)の基準は、データの種類あるいはアプリ
ケーションによって変更することができる。たとえば、
現行辞書は有効データエントリがいっぱいになったとき
リセットすることができる。あるいはまた、現行辞書は
カトー(Kato)その他の米国特許第4,847,6
19号に説明するように、それを圧縮に使用する際に所
定の性能しきい値を下回る場合にリセットすることがで
きる。
ては、主としてデータ特性が不変である状況で、この圧
縮器はデータに2回のパスを行う。第1のパスでは、圧
縮器は大きなデータサンプルを走査する。このサンプル
は現行辞書を何回もいっぱいにし、それによってそれに
対応する回数だけ待機辞書による現行辞書の置き換えを
発生させるような大きさである。辞書の切り換えが起こ
る度に、現行辞書は数回の反復の後にアルゴリズムがこ
のデータサンプルに強くカスタマイズされた辞書を構築
するまで“洗練”される。このカスタマイズされた辞書
は、次にこの圧縮エンジンが入力データを圧縮する第2
のパスの間に用いる唯一の辞書としてセットされる。こ
のカスタマイズされた辞書は、それによって同じデータ
に対する単一のダイナミックな辞書よりはるかに良好に
機能する。
システムの辞書の格納されたデータエントリのアドレス
値を用いて符号化回路および復号回路を簡略化する辞書
ベースの圧縮/圧縮解除システムアーキテクチャとその
方法であることである。このシステムは好適にはメモリ
へのアクセスを高速化し、外部圧縮/圧縮解除論理を簡
略化する特殊機能を提供するためのローカルフィードバ
ック回路を含む追加の論理回路を有する連想メモリ(C
AM)を用いている。このメモリ構造はハッシングある
いはハッシングの衝突を起こすことなく、クロックサイ
クルあたり1文字の一定の速度で損失のないデータの圧
縮あるいは圧縮解除を提供することのできる特有の機能
を有する。
に保有されたデータエントリのアドレス位置にしたがっ
て文字ストリングを符号化する連想メモリからなる。入
力データストリング中で前に発生したことのない入力文
字ストリングの組み合わせは新しいデータエントリとし
て辞書に格納される。CAM(連想メモリ)はそれぞれ
が固有の文字ストリングデータエントリを格納する“ワ
ード”に構成される。このメモリはそれまでに辞書に格
納されたすべてのワードについて“ワード”中の選択さ
れたビットを有する入力文字ストリングを用いて連想並
行探索を行う。一致があった場合、そのデータエントリ
に関係する突合せラインが起動される。次にすべての突
合せラインが文字ストリングを表わす単一のコードワー
ドに符号化される。このコードワードは次の入力文字と
組み合わせられ、再び前にメモリに格納されたデータエ
ントリと比較される。このようにして、文字ストリング
にメモリ中のそれらのアドレスにしたがったコードワー
ドが割り当てられる。探索が失敗すると、最後に一致し
た文字ストリングを表わすコードワード(OMEGA)
(たとえばそのアドレス)が出力され、突き合わせの失
敗の元となった文字(K)から始まる新しい文字ストリ
ングから再び探索が開始される。この圧縮されたデータ
文字(コードワード)は辞書のデータエントリへのポイ
ンタである。したがって、文字ストリングはこの圧縮さ
れたデータ文字を圧縮解除辞書へのアドレスとして用い
ることによって符号化される。たとえば、初めは外部の
圧縮文字がこの辞書へのアドレスとして用いられる。つ
ぎに、符号化されたアドレス位置のデータエントリが読
み出される。メモリからのデータエントリの出力がさら
に圧縮解除を必要とするものではない場合(たとえば、
メモリ出力がリンクされたリストの“ルート”である場
合)、このデータエントリが出力される。このデータエ
ントリが別のコードワード(たとえば、別の辞書アドレ
ス位置への符号化されたリンク)を含む場合、このコー
ドワードは次の辞書アドレスとしてメモリにフィードバ
ックされる。
除の両方に用いられ、メモリのリセットと同時にリセッ
トする。メモリになんらかの書き込み(明示的な書き込
みあるいは突き合わせの失敗)を行うと、アドレスが次
のアドレスにインクリメントされる。インクリメントは
順次に行われる必要はなく、圧縮器アドレスジェネレー
タと圧縮解除器アドレスジェネレータの両方が同じ状態
になり同様にインクリメントし、その結果圧縮辞書と圧
縮解除辞書が同一となる限り、たとえば疑似ランダム的
であってもよい。この論理は、外部制御論理中のアドレ
スの生成/格納を不要とし、圧縮/圧縮解除性能を向上
させることができる(たとえば、クロックサイクルが少
なくなり、データの圧縮がより高速になる)。
るために、特殊な更新回路で同じクロックサイクル中に
メモリの探索とデータの書き込みを行うことを可能にす
る。文字ストリングがメモリ内のデータエントリと比較
されるとき、探索が失敗した場合にはこのストリングは
新しいデータエントリとして格納しなければならない。
次の使用可能なアドレス位置はアドレスジェネレータか
らすでにわかっており、この文字ストリングはメモリデ
ータ入力にすでに存在している。したがって、制御論理
は、探索中に一致が発生しない場合この文字ストリング
をメモリに自動的に書き込むのに用いることができる。
したがって、メモリはメモリ探索クロックサイクル中に
自動的に更新される。探索動作中に一致が発見された場
合、この更新回路はこの文字ストリングが有効データと
してメモリにロードされることを防止する。
価で汎用性のある高速データ圧縮/圧縮解除システムを
提供する。このシステムと方法は汎用コンピュータのソ
フトウエアあるいはカスタムあるいはセミカスタム集積
回路を用いたハードウエアに実施することができる。こ
のシステムと方法は、リンクされたリストのデータ構造
の格納/検索の実施に用いることができる。そして、さ
まざまな適応型の辞書ベースエンコーダに容易に適用す
ることができる。
小限メモリ/高圧縮能力とCAM(連想メモリ)回路の
高速の文字あたり1サイクル符号化/復号能力とを組み
合わせたことである。この回路はCAM回路の記憶場所
中の複数の辞書を用いる。このCAM回路は圧縮された
文字ストリングと圧縮されていない文字ストリングを受
け取り、それらを辞書の一つへのデータエントリとして
格納する。それぞれのデータ文字ストリングを表わすコ
ードワードが次にこの文字ストリングに一致する辞書デ
ータエントリのアドレスにしたがって生成される。
れぞれの記憶場所は状態フィールドとデータフィールド
を含む。データフィールドはデータエントリを格納し、
状態フィールドはそのデータエントリにどの辞書が割り
当てられているかを示す。探索動作中、この回路は状態
フィールドとデータフィールドの両方のある特定のビッ
トをマスクすることができる。これによって、システム
はあるデータエントリにどの辞書が割り当てられている
かを判定し、ある特定の記憶場所が現在辞書に割り当て
られていないかどうかを判定することができる。
縮/圧縮解除回路の状態を変化させることによって簡単
に切り換えることができる。回路の状態を変化させるこ
とによって、少なくとも一つの辞書がリセットされる。
これによって、その辞書に前に割り当てられた記憶場所
はどの辞書にも割り当てられていない空いた記憶場所と
なる。この空いた記憶場所には新しい文字ストリングを
格納することができる。かかる状態の変化は異なる事象
によってトリガーし、圧縮比と異なる種類のデータに対
するこのシステムの適応性を最大限にすることができ
る。たとえば、この圧縮/圧縮解除回路は辞書の一つが
いっぱいになったとき自動的に状態が変化する、あるい
は圧縮比が所定の性能レベル以下に落ちたとき状態が変
化する。単一クロックサイクル探索能力を提供するため
に、この圧縮/圧縮解除回路は現行辞書と平行して待機
辞書を構築し、複数の辞書を同時に探索する。この発明
の以上の目的、特徴および利点、またその他の目的、特
徴および利点は、図面を参照して行う以下の実施例の詳
細な説明からより明確になるであろう。
除システムのデータフロー図である。図1に示す方法は
ブロック8における現行辞書(CD)と待機辞書(S
D)の初期設定から始まる。たとえば、圧縮されていな
い入力データ中に存在しうるそれぞれの単一文字を表わ
すコードワードが辞書に入れられる。あるいは初期の辞
書は空にしておくこともできる。データシーケンスから
の文字ストリングの符号化は任意の所望の符号化方式で
実施される。
辞書の前に符号化されたデータエントリと比較され、こ
の文字ストリングが辞書のデータエントリのいずれかに
一致するかどうかが判定される。ブロック12で一致の
なかった文字ストリングが現行辞書の新しい符号化され
たデータエントリとして格納される。一致をそれ以上拡
大することができないとき、一致した最長のストリング
のコードがブロック13で出力される。
符号化されたデータエントリの部分集合が待機辞書(S
D)に格納される。ブロック14における部分集合選択
処理は、上述したように、入力データに応じて変更し
て、待機辞書中のある与えられた数のデータエントリを
用いて最も高い圧縮比を得るようにすることができる。
たとえば、待機辞書のデータエントリはある入力文字ス
トリングがその辞書内のあるデータエントリに一致する
回数に基づいて選択することができる。あるいは、待機
辞書部分集合は、符号化された文字ストリングによって
表わされる入力文字の数にしたがって選択することがで
きる。一般に、この段階では任意の方法を用いることが
できる。
であるかどうかが判定される。たとえば、現行辞書が所
定数の符号化文字ストリングエントリに達したとき、あ
るいは圧縮比がある性能しきい値以下に落ちたときリセ
ットが必要である。現行辞書がリセットを必要としない
とき、圧縮エンジンは新しい文字ストリングを読み出
し、ブロック10に戻る。現行辞書がリセットされる
と、ブロック18で現行辞書を待機辞書中にエントリに
置き換え、新しい待機辞書を初期設定し、新しい文字ス
トリングを読み出し、その後ブロック10に戻る。
ータの圧縮に用いる静的なカスタマイズされた現行辞書
の生成に用いることができる。たとえば、入力データシ
ーケンスのデータサンプルが選択される。現行辞書は次
に現行辞書を待機辞書に繰り返し置き換えることによっ
てカスタマイズされる。カスタマイズされた現行辞書は
読み出し専用機能にロックされ、圧縮エンジンによって
このデータシーケンスの圧縮あるいは圧縮解除に専用に
用いられる。
圧縮アルゴリズムの一例を示す詳細なデータフロー図で
ある。図2は入力データストリングが現行辞書中のエン
トリに一致するときデータストリングが待機辞書に複写
される方法を示す。この方法によれば、このデータスト
リングが入力中に少なくとも二度“見られた”ことが確
実になる。現行辞書と待機辞書は現行辞書がいっぱいに
なったとき(たとえば、所定数の有効データエントリに
達したとき)切り換えられる。上述したように、辞書切
り換えの基準と待機辞書データエントリ選択基準は具体
的なアプリケーション条件にしたがって簡単に実施する
ことができる。
行辞書のデータエントリと比較される。判断ブロック2
2は入力データと現行辞書のエントリとの間に一致がな
い場合ブロック23とブロック24に分かれる。一致し
た最も長いデータストリングが次にブロック23で符号
化され、出力される。
であるかどうかを判定する。現行辞書がいっぱいでなけ
れば、ブロック28でデータストリングを現行辞書中の
データエントリとして格納する。あるいは、ブロック2
2を除くいずれの場合にもフラグをセットすることがで
きる。現行辞書がいっぱいである場合、ブロック26で
現行辞書を待機辞書に切り換える。次に、データストリ
ングはこの新しい現行辞書に格納される。現行辞書がデ
ータエントリのより小さい部分集合に置き換わっている
(たとえば、待機辞書のデータエントリ)ため、新しい
データストリングを格納するスペースができている。ブ
ロック30で現行辞書のアドレスカウンタがインクリメ
ントされる。ブロック34で新しい入力文字が入力デー
タから読み出され、ブロック20の比較処理が繰り返さ
れる。
中のあるエントリとの一致が判定されると、判断ブロッ
ク36でチェックが行われ、このデータストリングがそ
れ以前に待機辞書に格納されているかどうかが判定され
る。このデータストリングが前に待機辞書に複写されて
いない場合、現行辞書内の状態フィールドにフラグがセ
ットされる。あるいは、このフラグはブロック22を除
くいかなる場合にもセットすることができる。このフラ
グはデータストリングと一致した現行辞書データエント
リに結合されている。このフラグは圧縮エンジンに対し
このデータエントリが前に待機辞書に複写されたことが
あることを表示する。これによって、同じデータエント
リが待機辞書に複数回複写されるのを防止する。ブロッ
ク40はデータストリングの待機辞書への書き込みを行
い、ブロック42は待機辞書アドレスカウンタをインク
リメントする。このデータストリングは現行辞書のデー
タエントリと一致したため、ブロック44は次の入力文
字を現在のデータストリングに加え、ブロック20に戻
る。判断ブロック36がこのデータストリングが前に待
機辞書に格納されていると判断すると、この処理は直接
ブロック44に入り、上述したように続いていく。
C)50においてこの発明を実施した例を示し、これが
現在の好適な実施例である。データ圧縮器/圧縮解除器
(DCD)集積回路(IC)50はデータ圧縮器インタ
ーフェース回路54と組み合わせられたデータ圧縮/圧
縮解除エンジン52を含む。データ圧縮器/圧縮解除器
(DCD)集積回路(IC)50はランダムアクセスメ
モリ(RAM)88内に構成された辞書1(D1)とR
AM90内に構成された辞書2(D2)と組み合わせて
用いられる。ここに示す回路は単一の集積回路(IC)
中に、あるいは別々の集積回路(IC)50、88、9
0として実施するのが好適である。辞書1(D1)およ
び辞書2(D2)はRAMとして図示しているが、連想
メモリあるいは他の任意のメモリ構造中にも公的に実施
することができる。このRAMは従来型のものである。
辞書1(D1)および辞書2(D2)のそれぞれのRA
M辞書記憶場所は、データエントリフィールド(dat
a_entry)94および98と待機状態フィールド
(stdby_stat)92および96を含む。
シーケンス中に発生する特有のデータストリングが格納
される。待機状態フィールドは現行辞書中のデータエン
トリが前に待機辞書に格納されているかどうかを示す待
機辞書状態フラグを含む。待機状態フィールドに有効デ
ータエントリを同定するdict validフィール
ドを含めることができる。データ圧縮システムにおける
複数ビットdict validフィールドの使用につい
ては1991年9月25日出願の「ディクショナリー・
リセット・パフォーマンス・エンハンスメント・フォー
・データ・コンプレッション・アプリケーション(DI
CTIONARY RESET PERFORMANC
E ENHANCEMENT FOR DATA CO
MPRESSION APPLICATION)」と題
する共通譲渡された米国特許出願第07/776,47
5号に説明されており、ここに参照している。
あるいはLZ1圧縮アルゴリズムを実施するように設計
されているが、任意の適当な辞書ベースの圧縮方式を実
施するように設計することができる。また、必要であれ
ばこの圧縮エンジンは米国特許第4,847,619号
に説明するような辞書リセットを制御する自動的な手段
を内蔵するか、あるいはそれと連動させて使用すること
ができる。その他の点については従来と同じであるた
め、このデータ圧縮エンジンのアルゴリズムおよびアー
キテクチャについてはさらに説明する必要はない。
二つの主サブ回路からなる。スイッチコントローラサブ
回路76はデータ圧縮エンジン52あるいはデータ圧縮
器/圧縮解除器集積回路(IC)に結合された他の回路
から出力される辞書リセット要求信号72とデータスト
リング一致信号70をモニターする。サブ回路76はど
のRAMが現行辞書および待機辞書として動作するかを
制御する。このサブ回路は現行辞書から待機状態(st
dby_stat)フィールドを読み出して現在の符号
化されたデータ信号が前に待機辞書に複写されたことが
あるかどうかを判定する。
ドで動作中の辞書のデータエントリ(data_ent
ry)フィールドの二進値を通して順番付を行う。この
サブ回路の代表的な実施態様は二進カウンタであるが、
他の形態のシーケンサを用いることもできる。このサブ
回路にはマルチプレクサ56および58とトランシーバ
84および86が結合されている。マルチプレクサ56
はデータ圧縮エンジン52とスイッチコントローラ回路
76からの読み出し/書き込み信号60および62の選
択を行う。マルチプレクサ58はデータ圧縮エンジン5
2とアドレスジェネレータ68からのアドレス信号64
および66の選択を行う。トランシーバ86はデータエ
ントリ(data_entry)フィールド94または
98のいずれかを選択してデータ圧縮エンジン52に接
続されたデータバス87への接続を行うバスコントロー
ラとして動作する。トランシーバ84は待機状態(st
dby_stat)フィールド92または96を選択し
てスイッチコントローラ76への接続を行う。これらの
マルチプレクサおよびトランシーバは制御信号78によ
って制御され、アドレスジェネレータ68は制御信号8
2によって制御される。これらの制御信号はいずれもス
イッチコントローラ回路76から来る。
50は通常の圧縮/圧縮解除動作中、辞書のうちの一つ
(現行辞書)とデータ圧縮エンジン52との間の従来と
同様のデータ転送を可能にする。また、このシステムは
待機辞書がデータ圧縮エンジン52から、あるいは現行
辞書から直接データを受け取ってこの発明によるデータ
エントリ部分集合を作成することを可能にする。
76は現行辞書として辞書1(D1)か辞書2(D2)
を選択する。たとえば辞書1(D1)を選択する。圧縮
エンジンが次にデータの圧縮、辞書1(D1)のデータ
エントリ(data_entry)フィールド94への
符号化されたデータの読み出しと書き込みを開始する。
この圧縮アルゴリズムがある符号化されたデータストリ
ングを待機辞書辞書2(D2)に書き込むべき候補であ
ると判定する、たとえば、ある符号化されたデータスト
リングが現行辞書辞書1(D1)中のあるデータエント
リに一致すると、一致信号70が発生する。それによっ
て、スイッチコントローラ76は現行辞書からの待機状
態(stdby_stat)フィールド92をチェック
してこのデータエントリが前に待機辞書に複写されたこ
とがあるかどうかを判定する。複写されたことがなけれ
ば、このデータストリングは辞書2(D2)のdict
_entryフィールド98中のアドレスジェネレータ
68によって提供された場所に書き込まれる。さらに、
現行辞書の待機状態(stdby_stat)フィール
ド92はスイッチコントローラ76によってセットさ
れ、同じ符号化されたデータストリングが待機辞書に二
度複写されるのを防止する。データ圧縮エンジン52が
リセット信号72を発生すると、スイッチコントローラ
76は制御信号78の値を変化させる。この新しい制御
信号はマルチプレクサとトランシーバへの接続を、辞書
2(D2)が現行辞書として、辞書1(D1)が待機辞
書として動作するように変化させる。辞書2(D2)に
ロードされたデータエントリの部分集合は、圧縮エンジ
ン52の初期データエントリ集合として用いられる。し
たがって、図3に示すデータ圧縮エンジンがリセットさ
れるとき、新しい辞書のdict_entryフィール
ドは前に符号化された入力データの高圧縮比部分集合を
含む。
ンジンが一致信号70とリセット信号72のある特定の
組み合わせを発生することによって停止することができ
る。これによって、データ圧縮エンジンは一つの辞書と
の間においてのみ符号化されたデータの読み出し/書き
込みを行うことができる。これは、上述したカスタマイ
ズされたデータ辞書の動作に用いられ、また単一辞書方
式とのコンパチビリティを得るためにも用いられる。上
述の方法は有効であることが実証されている。たとえ
ば、ユーザー操作マニュアルを含む550のファイル
は、標準のユニックス(UNIX)“compres
s”コマンド(LZ2の従来の実施態様)を用いて圧縮
された。その後、カスタマイズされた辞書が上述の現行
/待機辞書法を用いて構築され、ファイルはデータサン
プルから作成されたカスタマイズされた辞書を用いて圧
縮された。その結果をまとめると次のようになる。
0バイト ユニックス(UNIX)compress:2,78
1,686バイト カスタマイズされた辞書:2,025,742バイト 圧縮の向上:37%
は従来の圧縮法に比べてかなりの圧縮の向上を提供す
る。
逸脱することなくその構成や細部に変更を加えることが
できる。たとえば、エントリが待機辞書にあるか否かを
示すフィールドを設けることによって現行辞書と待機辞
書の両方を同じRAMに実施することができる。リセッ
トが発生すると、すべての非待機辞書エントリはクリア
される。アドレス発生回路はより複雑である。それは、
リセット後に各エントリが連続する場所にないためであ
る。この方法は、次に説明するような連想メモリ(CA
M)を用いた実施態様に好適である。
書格納のためのメモリ回路 図4はこの発明の第2の特徴にしたがったCAM(連想
メモリ)圧縮/圧縮解除システム用の回路136の全体
的構成を示すブロック図である。この回路136はデー
タ圧縮/圧縮解除(CD)エンジン142、未圧縮デー
タインターフェース138、圧縮データインターフェー
ス148、およびプロセッサインターフェース152を
有する。CDエンジン142はストリングテーブルメモ
リ144と制御論理146からなる。未圧縮データイン
ターフェース138は圧縮されていないデータ(RAW
DATA)をデータバス154上で転送し、圧縮データ
インターフェース148は圧縮されたデータ(COMP
DATA)をデータバス158上で転送する。インター
フェース138および148のための外部制御信号が制
御バス156および160を介して受け取られる。各イ
ンターフェースは先入れ先出しデータバッファ(FIF
O)140、150および別の従来のインターフェース
回路(図示せず)を含む。
ドあるいは状態のいずれかで使用することができ、また
双方向通信を行うためのモード切り換えが可能である。
あるいは、回路136は図5のRAM置き換えブロック
182、184、192を有する簡単な専用圧縮解除回
路を有する専用の圧縮器として用いることができる。以
下の説明は回路136が圧縮と圧縮解除の両方に用いら
れることを前提としている。
ェース138は未圧縮データ文字をデータバス154か
ら受け取り、それらをデータバッファ140を介して圧
縮/圧縮解除エンジン142に供給する。データ圧縮/
圧縮解除(CD)エンジン142中のストリングテーブ
ルメモリ144と制御論理146はこれらの文字をコー
ドワードに圧縮し、それがデータバッファ150を介し
てデータバス158に出力される。圧縮解除モードで
は、圧縮データインターフェース148は圧縮データコ
ードワードをデータバス158から受け取り、それらを
データバッファ150を介してCDエンジン142に提
供する。ストリングテーブル144は制御論理146と
連動してこのデータコードワードを文字ストリングに圧
縮解除し、その結果をデータバッファ140を介してデ
ータバス154上に出力する。マイクロプロセッサ(図
示せず)がデータフローの方向と圧縮/圧縮解除モード
を設定するためのレジスタを制御し、またプロセッサイ
ンターフェース152を介して他のさまざまな機能を制
御する。
44と制御論理146の詳細なブロック図である。この
ストリングテーブルメモリは圧縮/圧縮解除処理時間を
短縮する追加の内部論理を有するCAM(連想RAM)
188からなる。CAM 188は“ワード”(たとえ
ば3832×20ビット)に構成され、それによって各
ワードは別々の文字ストリングエントリを格納する。デ
ータはデータバス190(DATA_IN)上でメモリ
188に書き込まれる。データバス190はバス180
上で入力される外部文字ストリング(K)を受け取り、
マルチプレクサ192(MUX3)を介してデータバス
202上で符号化された文字ストリング(OMEGA)
を受け取る。バス180上の外部文字は圧縮されていな
い(RAWDATA)バス154(図4)上の未圧縮の
データストリームから来るものであり、コードワードは
エンコーダ194の出力から来る。データ入力選択論理
回路182は、マルチプレクサ192を介してデータバ
ス190(DATA_IN)のどのビットがバス180
上の外部文字ストリングとバス202上のコードワード
から来るかを制御する。データ入力選択論理回路182
は、制御論理146(図4)からの探索信号入力17
8、読み出し/書き込み信号入力164およびエンコー
ダ194からの一致信号入力168によって駆動され
る。
えば264から4095)を介して一組の一致信号を提
供する。一つの一致信号がCAM188中のそれぞれの
ワードに関係付けられている。バス190上の文字スト
リングがCAM188中のデータエントリの一つに一致
するとき、その記憶場所に関係付けられた一致信号が活
動状態になる。エンコーダ194はCAM188からの
すべての一致信号を符号化して、バス202上に提供さ
れるコードワードを生成する。このコードワードはCA
M188中の一致したデータエントリのアドレス位置に
等しい。エンコーダ194はまたCAM188中のいず
れかのデータエントリがデータバス190上の文字スト
リングと一致するとき活動状態とされる。
177上の外部圧縮文字、データバス186上のCAM
188から出力される内部文字ストリング、あるいはア
ドレスジェネレータ170からの内部アドレスのいずれ
かを選択的に受け取り、ワード選択ライン204(たと
えば264から4095)を介して連想アレーにアクセ
スする。バス177上の外部圧縮文字は圧縮されたデー
タ(COMPDATA)バス158(図4)上の圧縮デ
ータストリームから来る。内部アドレスジェネレータ1
70はエンコーダ194からの一致信号168、探索信
号178、読み出し/書き込み信号164、およびリセ
ット信号162によって制御される。読み出し/書き込
み信号およびリセット信号は、制御論理146(図4)
から来る。アドレスジェネレータは初期設定後(たとえ
ば264に)リセットされ、続いて辞書が構築されると
ともにインクリメントされる。
スのソースは、マルチプレクサ176および176を介
して読み出し選択論理172および読み出し/書き込み
信号164によって制御される。読み出し選択論理17
2はリセット信号162とメモリ188からのデータエ
ントリ出力162の圧縮状態によって制御される。デー
タエントリ圧縮状態はデータエントリ文字の値によって
判定することができる。たとえば、256より大きい値
を符号化された文字ストリングに割り当てることがで
き、256より小さい値は単一データ文字で構成するこ
とができる。マルチプレクサ176(MUX1)はバス
177とバス186のいずれかからの入力を選択し、マ
ルチプレクサ174(MUX2)はマルチプレクサ(M
UX)176の出力とアドレスジェネレータ170から
の出力の間の選択を行う。復号器184はまた、データ
の探索とメモリの更新を同じメモリアクセスサイクル中
に行うことを可能にするつぎに説明の自動更新機能を有
する。
更新機能の好適な実施態様の論理図である。マルチプレ
クサ174(MUX2)からアドレス復号器184に入
力される各アドレス(ADDRN[19:0])は二つ
のANDゲートに供給される。ANDゲート208およ
び214は単一アドレスラインを示す。またANDゲー
ト208には探索信号178(図5)と一致信号168
(図5)の反転した値(NOMATCH)が供給され
る。この探索信号もまた反転され、“修飾された”書き
込み信号とともにANDゲート214に供給される。O
Rゲート212はこれら二つのANDゲートの出力を受
け取り、ワード選択信号(WORDN)を生成する。マ
ルチプレクサあるいは他の組み合わせ論理によって等価
関数を提供することができる。
探索が行われる間に起動される。データ圧縮中の探索が
失敗した場合、その文字ストリングはメモリ中の次の使
用可能なアドレスに入れねばならない。データ探索の後
にメモリにデータワードを書き込むのに要する余分なク
ロックサイクルをなくすために、ゲート208は一致が
発生しない場合ハイになる。この文字ストリングはすで
にデータバス190上にあり、次の使用可能なアドレス
はアドレスジェネレータ170によってすでにセットさ
れているため、一致の表示が発生すると直ちに書き込み
を行うことができる。したがって、反転した一致信号
(NOMATCH)はゲート208を起動し、次の使用
可能なメモリ位置に結合されたワードライン(WORD
N)を起動する。
選択ラインは不能にされ、書き込み動作は発生しない。
修飾された書き込み信号は、たとえば外部マイクロプロ
セッサ書き込み動作中に、メモリに一致が発生しないと
きにもデータの書き込みを強制的に行うのに用いられ
る。この更新機能は真のバイトあたり1サイクル性能を
提供する。なぜなら、辞書の書き込みは“透明”であ
り、余分なメモリアクセスを必要としない。
_valid”フィールドをセットするのに用いること
ができる。たとえば、図5のシステムはメモリ中の一致
のチェックに先立ってそれぞれの新しい文字ストリング
をメモリに複写することができる。一致が発生する場
合、ワードライン(WORDN)信号はこの新しく格納
されたデーたすとリングに関係づけられた“data_
valid”フィールドを起動するのに用いられる。
ロセッサ(図示せず)がシステムを圧縮のために初期設
定し、CAM188をリセットする。このマイクロプロ
セッサは制御論理146(図4)を介して未圧縮データ
インターフェース152から来る信号(探索信号17
8、読み出し/書き込み信号164、リセット信号16
2)を制御する。リセットラインはさまざまな初期設定
動作に使用することができる。たとえば、リセットライ
ンはCAM188に結合されて、各メモリ位置に関係す
る“data_valid”をリセットする。さらに、
リセットラインはアドレスジェネレータを文字ストリン
グ格納のための開始メモリ位置に初期設定する。
術を用いることができる。たとえば、単一入力文字は圧
縮されたデータストリームの一部としてアルゴリズム的
に符号化することができる。あるいは、それぞれか任意
の単一入力データ文字を表わす一組の符号化された値を
メモリにロードすることができる。
プレクサ174にアドレスジェネレータ174によって
提供されたアドレスをアドレス復号器184に接続する
ように命令する。未圧縮データインターフェース138
(図4)からの外部文字ストリングはバス190のバイ
トフィールド(DATA_IN[7:0])とコードワ
ードフィールド(DATA_IN[19:8])に供給
される。探索信号178が次に活動状態とされ、CAM
188がコードワード/バイトストリングをCAM18
8中の各場所と比較する。初めは一致は発生しない。な
ぜなら、CAM188にはそれ以前に何も書き込まれて
いないためである。したがって、バス190上のコード
ワード/バイトストリングがCAM188中の最初の使
用可能なアドレス位置(たとえば、アドレスジェネレー
タ170によって生成された初期設定されたアドレス)
に書き込まれる。次に、アドレスジェネレータ170が
インクリメントされ、バス180からの新しい入力文字
がメモリのデータ入力のバイトフィールドに読み込まれ
る。この処理が繰り返されて、一致しないコードワード
/バイトストリングのCAM188への書き込みが続け
られる。
がマルチプレクサ192にエンコーダ194から生成さ
れたコードワードをデータバス190のコードワードフ
ィールドに入れるように命令する(DATA_IN[1
9:8])。次に、バス180からの新しい外部文字が
データバス190のバイトフィールドに供給される。こ
れによってこのコードワードは前に一致した文字ストリ
ングを表わす。この文字ストリングに割り当てられたコ
ードワードは一致したデータエントリアドレスから直接
得られるため、入力文字の符号化に要する制御論理を大
幅に少なくすることができる。さらに、コードワードを
マルチプレクサ192(MUX3)にフィードバック
し、このコードワードを次の入力文字と組み合わせるこ
とによって、入力文字を各クロックサイクル毎に処理す
ることができる。
グは次にCAM188内のデータエントリと比較され
る。この処理は一致が発見されなくなるまで繰り返され
る。このとき、圧縮器は最後の一致からのコードワード
を出力し、新しいコードワード/バイトストリングをC
AM188に書き込む。バイトフィールドに供給される
最後の入力文字(K)は、空白コードワードと対になっ
たバイトKのメモリを探索することによって更新された
辞書と比較され(“ルート”コードワードを含むように
初期設定された辞書の場合)、それによって新しいスト
リングを開始するためのルートが生成される。次に、バ
ス180からの新しい外部文字(K)がバイトフィール
ドに供給され、突合せ処理が繰り返されて新しいストリ
ング(LZWによる)が構築される。あるいは、最後の
文字(K)は(LZ2の場合のように)符号化された文
字ストリング(OMEGA)に続いて出力することがで
きる。あるいは、KのアドレスはOMEGAに続くKの
コードワードとして出力することができる。辞書がいっ
ぱいになると、アドレスジェネレータ170は圧縮シス
テムの他の部分に(図4)にメモリにこれ以上文字スト
リングを書き込むことができないことを示すテーブルフ
ル信号196を発する。追加のいかなる入力データもC
AM188に格納された現在のエントリにしたがって圧
縮される。
AM188をリセットし、この回路を入力データの圧縮
用に初期設定することによってこの動作が開始される。
圧縮解除ではリンクされたリストの圧縮解除検討が行わ
れる。たとえば、圧縮データアドレスは反にメモリ中の
圧縮解除されたデータストリング(たとえば、リンクさ
れたリストの“ルート”コードワード)があるアドレス
をさす場合がある。しかし、このアドレスは“非ルー
ト”コードワード(たとえば、このコードワードは符号
化された文字ストリングをさらに圧縮解除するのに必要
な次のアドレスへのリンクである)を有する場合があ
る。上述したように、“ルート”コードワードと“非ル
ート”コードワードは、さまざまな方法で判定すること
ができる。たとえば、コードワードの値によって、ある
いはメモリ中の識別子ビットを用いて判定することがで
きる。
4)に圧縮データがあるとき、これは外部アドレスバス
177上の復号器184に書き込まれる。“非ルート”
コードワードを受け取った後、メモリが読み出され、
(有効な場所を仮定すると)バス186のバイトフィー
ルド(DATA_OUT[7:0])が制御論理146
(図4)内のLIFOスタックに押し出される。バス186
のコードワードフィールド(DATA_OUT[19:
8])は、非ルートコードワードである場合、マルチプ
レクサ(MUX1)およびマルチプレクサ(MUX2)
を会してアドレス復号器184にフィードバックされ、
別のメモリ読み出しが行われる。非ルートコードワード
のフィードバックの前に、メモリから読み出されたデー
タエントリの最終バイトがFIFO 140に入れられ
る。この処理はメモリから“ルート”コードワードが読
み出されたとき終了し、このとき新しいコードワードが
外部アドレスバス177から読み出される。
に符号化された文字出力が前の外部符号化文字と結び付
けられ、CAM188中の次の使用可能なアドレスに読
み込まれる。読み出し選択論理172が“ルート”コー
ドワードをチェックし、マルチプレクサ176に命令し
て、外部アドレスバス177あるいはデータバス(DA
TA_BUS)186をアドレス復号器184に接続さ
せる。また、読み出し選択論理172はコード化された
要素信号198を制御論理146に供給して、完全に圧
縮解除されたコードワードを示す。FIFO 140は
この圧縮解除された復号化文字をバス154にダンプす
る。
る。圧縮解除ではリンクされたリストの検討が行われる
ため、組み込み論理は外部圧縮解除論理(図4)との追
加の対話を行うことなく、このメモリ出力データのアド
レス復号器圧縮解除論理へのフィードバックを提供す
る。したがって、各圧縮解除サイクルはより短い時間で
よく、圧縮解除論理が簡略化される。CAM188中の
有効ワードおよびコードワードの“確認”には多くの実
施態様がある。その方法の一つとして、コンパレータの
使用があり、またもう一つの方法としては各ワードに対
して追加のリセット可能なビットを用いる方法がある。
どの技術を用いるかはアプリケーション条件によって決
まる。一方向システム(たとえばCDROM)において
は、圧縮解除回路はリンクされたリストを検討するため
の上述したようなフィードバック回路を有する従来のR
AMを用いてさらに簡略化することができる。
たシステムにおけるデータ圧縮/圧縮解除あるいはリン
クされたリストの格納/検索の一般的な方法を示すデー
タフロー図である。次に説明する方法は、辞書がコード
ワードに埋め込まれ、したがって圧縮されたデータとと
もに別途転送する必要のないような適応的なものであ
る。その他の、たとえば辞書が圧縮されたデータととも
に転送される方法もこのシステムを用いて実施すること
ができる。
処理であり、波線ブロック234は圧縮解除処理であ
る。入力224の未圧縮のデータ(K)はブロック22
8から出力される符号化された文字ストリング(OME
GA)とともに判断ブロック226に供給される。上述
したように、符号化された文字ストリング(OMEG
A)はある文字ストリングを符号化するデータエントリ
のアドレスを表わす。符号化された文字ストリング(O
MEGA)と未圧縮のデータ(K)は結合され、判断ブ
ロック226において辞書中のエントリと比較される。
OMEGA−K入力がメモリ中のあるエントリと一致す
るとき、ブロック228でこの入力を一致したデータエ
ントリのアドレスで符号化する。この符号化された値
(新しいOMEGA)はフィードバックされ、次の外部
文字Kと結合され、判断ブロック226に入力される。
この処理はOMEGA−Kストリングがメモリ中のいか
なるエントリにも一致しなくなるまで繰り返される。次
に、ブロック230がストリングテーブルメモリをこの
OMEGA−Kストリングで更新し、OMEGAを出力
し、文字Kを符号化ブロック228に供給する。Kはブ
ロック228で符号化され、判断ブロック226にフィ
ードバックされる前につぎの外部データ文字Kと結合さ
れる。
解除を行うためにブロック236に送られる。ある符号
化された入力文字(OMEGA(i))がストリングテ
ーブルメモリにアクセスするためのアドレスとして用い
られる。判断ブロック238でアドレスOMEGA
(i)のデータエントリがルート文字であるかどうかが
判定される。ルート文字である場合、メモリから出力さ
れるデータエントリのなかにはもう符号化された文字は
ない(たとえば、OMEGA(j)は存在しない)。K
のメモリデータエントリが次にライン246上に圧縮解
除された出力文字として出力される。判断ブロック23
8はブロック240にジャンプし、そこで前の符号化さ
れたデータ文字(OMEGA(i−1))がKと結合さ
れ、次の使用可能なアドレス位置に書き込まれる。次
に、ブロック242がブロック236に入力ストリーム
中の次の符号化された文字(OMEGA(i+1))を
メモリから読み出される次のデータエントリのアドレス
位置として用いるように命令する。
ートでない場合(たとえば、この出力が符号化された文
字OMEGA(j)と復号された文字Kからなる場
合)、Kはライン246上に出力され、判断ブロック2
38はブロック244にジャンプする。ブロック244
はこの符号化された文字OMEGA(j)をメモリから
出力される次のデータエントリのアドレスとして用い
る。記憶場所OMEGA(j)のデータエントリが次に
上述したように処理される。この処理はすべての符号化
された入力文字が圧縮解除されるまで繰り返される。
なデータフロー図である。このデータ圧縮解除処理は、
ブロック248で開始信号あるいはリセット信号が発生
したとき開始される。(次に説明する)メモリ回路はブ
ロック250で初期設定され、たとえば圧縮モードある
いは圧縮解除モードで動作し、辞書をリセットする。い
かなる辞書有効ビットも好適には並行して初期設定され
ねばならない。辞書は単一文字コードワードあるいはウ
ェルチ(Welch)の米国特許第4,558,302
号に開示するLZWやエントリを単一文字、あるいは
“ルート”コードワードとして同定するための空白コー
ドワードと対になったECMA−151規格に開示する
DCLZ等の選択された符号化アルゴリズムにしたがっ
て外部生成される一組のコードワードを用いて初期設定
することができる。あるいは、一組のコードワードをあ
らかじめ格納する代わりに、それらをたとえば共通譲渡
された米国特許第5,142,282号「データ・コン
プレッション・ディクショナリー・アクセス・ミニマイ
ゼイション(Data Compression Di
ctionary Access Minimizat
ion)」に開示するように、突合せが失敗する度に実
時間で生成することもできる。空辞書を含むその他の初
期設定法を用いることもできる。
は、ブロック252で読み出され、OMEGAフィール
ドに直接格納されるか、あるいは符号化され(たとえ
ば、CODE(CHAR))た後にOMEGAフィール
ドに格納される。次に、入力データストリームの次の入
力文字(K)がブロック256で読み出される。ブロッ
ク258はOMEGAとKを文字ストリングとして組み
合わせ(すなわちOMEGAとKを結合する)、辞書を
探索してこのOMEGA−Kストリングと一致するデー
タエントリを探す。辞書にはまだ何のデータストリング
も格納されていないため、判断ブロック260は一致が
ないことを示す。OMEGA−Kストリングは現在表現
されていないため、判断ブロック266が使用可能な格
納スペースがあると判定した場合にメモリに格納され
る。メモリがいっぱいでない場合、ブロック268の動
作は自動的にOMEGA−Kストリングを次の使用可能
なメモリ格納場所(ADDR(N))にロードする。次
に、クロック270がアドレスカウンタをインクリメン
トして、メモリ中の次の使用可能な格納場所(ADDR
(N+1))を同定する。最初の入力文字の符号化され
た値OMEGA(アドレス)は、もし使用可能であれば
ブロック272においてこの符号化されたデータストリ
ングの最初の文字として出力される。
ムは簡単にこのシステムにそれ以上文字ストリングを書
き込まないようにすることができる。たとえば、判断ブ
ロック266がメモリがいっぱいであると判定したと
き、ブロック268の文字ストリングをロードするステ
ップとブロック270のアドレスカウンタをインクリメ
ントするステップはスキップされ、処理は次に説明する
ブロック272の符号化および出力処理にジャンプす
る。
4のステップは第1の入力文字(OMEGA)を第2の
入力文字(K)あるいはコード(K)に置き換える。入
力データストリームからの次の入力文字が読み出され
(K)、それによって次のOMEGA−Kストリングが
提供される。次に、この処理はブロック258にループ
し、ブロック258ではメモリがこの新しいOMEGA
−Kストリングを用いて探索される。
この処理はブロック164にジャンプし、そこでOME
GAフィールドが一致アドレスに等しいOMEGA−K
ストリングを表わす符号化された値に置き換えられる。
データストリームからの次の入力文字がKフィールドに
複写される。OMEGAフィールドとKフィールドが組
み合わせられ、三つの入力文字を表わす新しいOMEG
A−Kストリングが形成される。処理はここでブロック
258に戻り、ブロック258で辞書データエントリが
この新しい文字ストリングと比較される。前の文字スト
リングがメモリ中のあるデータエントリに位置する限
り、さらに入力文字が文字ストリングに加えられる。新
しい文字ストリングがデータエントリに一致しないと
き、判断ブロック260はブロック266にジャンプ
し、ブロック266で上述したようなブロック266、
268および270のメモリ更新手順が実行される。ブ
ロック272は値OMEGA(たとえば、最後の入力文
字ストリングとデータエントリの一致からの符号化され
た文字ストリング)を出力する。ブロック274は文字
ストリングの最後の文字(たとえば、、この文字ストリ
ングがストリングテーブル中の以下なるデータエントリ
にも一致しなくなった原因となった文字)を取り、それ
をOMEGAフィールドに複写する。次に、ブロック2
74で入力データストリームからの次の入力文字をKフ
ィールドに複写し、処理はブロック258にループす
る。この文字ストリングはこれによって圧縮される。こ
れはこの圧縮処理からのOMEGA出力の単一の符号化
された値は、複数の入力文字を表わすためである。
フロー図である。ブロック276は圧縮解除を行うため
にストリングテーブルメモリを初期設定する。ブロック
278は第1の符号化されたワード(OLDWORD)
を得る。この入力読み出しステップあるいはそれに続く
任意の入力読み出しステップ中にそれ以上データがなく
なると、この処理を出る。第1の符号化されたワードは
ブロック280でアルゴリズム的に、あるいはストリン
グテーブルメモリ中のあらかじめロードされたエントリ
を読み出すことによって復号される。この第1の符号化
されたワードはルート文字であり、したがって復号さ
れ、出力される。
(INCODE)を得て、ブロック284はINCOD
Eをストリングテーブルによって出力されるデータエン
トリのアドレスとして用いる。初めに、一実施例におい
て、ストリングテーブルは単一文字バイトのみからな
り、したがってブロック284はバイトKを出力する。
次に、バイトKはブロック286で出力される。後のサ
イクルにおいて、ブロック284は次に説明するように
OMEGA−Kを返す。
リングの終り(たとえばルート文字)であるかどうかが
判定され、そうであればブロック292にジャンプす
る。ブロック292はストリングテーブル中の次の使用
可能なアドレスに新しいデータエントリを構築する。こ
れは第1の符号化された入力ワード(OLDCODE)
と最後のバイト出力(K)の結合から構成される。ブロ
ック294が未使用のアドレス位置を指示し、ブロック
296が第1の符号化されたワード(OLDWORD)
を最後の符号化された入力ワード(INCODE)に置
き換え、ブロック282に戻る。
ード(INCODE)を読み出し、ブロック284でア
ドレスINCODEのデータエントリを出力する。アド
レスINCODEのデータエントリ出力がルートではな
い場合、これは復号されたバイトKとさらに復号すべき
次のアドレスを指示するコードワードフィールド(OM
EGA)を含む。ブロック286でKを出力し、判断ブ
ロック288はブロック290にジャンプする。ブロッ
ク290はコードワードフィールド(OMEGA)をス
トリングテーブルから出力される次のデータエントリの
アドレスとして用い、次にブロック284にループす
る。この処理はストリングテーブルからルート文字を有
するデータエントリが出力される(すなわち、ストリン
グの終り)まで繰り返される。判断ブロック288はブ
ロック292に進み、ここで前に読み出された符号化さ
れたワード(OLDCODE)が最後の出力バイト
(K)と結合される。ブロック294とブロック296
の機能が次に実行され、処理はブロック282に戻る。
したがって、この圧縮解除処理は図8の圧縮処理で圧縮
されたもとのデータストリームを再生する。
解除アルゴリズムを図示したものである。生データスト
リーム300は図7に示すデータ圧縮/圧縮解除処理に
入力される圧縮されていない文字ストリングからなる。
この例では、単一文字R、I、NおよびTが初期設定中
にメモリ302Aの位置ADDR0、ADDR1、AD
DR2およびADDR3にロードされている。入力文字
はそれぞれの文字にそのアドレス位置の値を割り当てる
ことによって符号化されるが、圧縮速度を上げるため
に、単一入力文字を次に説明する処理を開始する前にア
ルゴリズム的に符号化することができる。メモリ302
Aは初期設定の直後の状態における辞書を示し、メモリ
302Bは圧縮が完了したあとの辞書を示す。
文字Rはアドレス位置ADDR1のデータエントリに一
致する。一致があったために、この圧縮システムはRの
符号化された値(Addr0=0)を次の入力文字
“I”と結合し、メモリ302Aに対して“0I”との
一致が探索される。メモリ中には“0I”との一致がな
いため、“0I”はメモリ302Bに示すように次の使
用可能な記憶場所(ADDR4)に書き込まれる。最大
の一致したシーケンスのコードワード(すなわち、
“R”=0のコードワード)が圧縮文字ストリーム30
4中に第1の符号化された文字として出力される。圧縮
システムはここでメモリ302Bを探索して、次の入力
文字“N”と結合した“I”の符号化された値(すなわ
ち、ADDR1=1)からなるストリングを探す。スト
リング“1N”は辞書にないため、これは302Bに示
すように次の使用可能な記憶場所(ADDR5)に書き
込まれる。値1(たとえば、最後の一致した文字ストリ
ング=“I”)が圧縮文字ストリーム304の第2の符
号化された文字として出力される。
“I”が処理される(たとえば、文字306)までメモ
リ302Bの構築と同様な方法での入力文字の符号化の
処理が継続される。この圧縮システムは“I”を値1で
符号化する。これは“I”がアドレス位置ADDR1に
あるためである。この符号化された値1は次の入力文字
Nと結合され、このストリング1Nはメモリ302B中
のデータエントリと比較される。シーケンス“1N”は
文字ストリーム300中で前に発生しているため、スト
リング“1N”はメモリ中のあるエントリ(たとえば、
Addr5のデータエントリ)に一致する。したがっ
て、ストリング“1N”は“5”として符号化され、次
の入力文字“T”と結合される。ストリング“5T”は
メモリ302B中のどのエントリとも一致しないため、
“5T”は次の使用可能なアドレス位置(ADDR8)
に書き込まれ、最後の一致した文字ストリング“5”の
コードワードが、文字ストリーム304中に出力され
る。次に、入力文字“T”の符号化された値(ADDR
3=3)が次の入力文字“I”と結合され、この処理が
繰り返される。メモリ302Aは文字ストリーム300
から辞書用に構築されたすべての文字を示す。文字スト
リーム304は生データストリーム300の完全に圧縮
された文字ストリームである。文字ストリーム300中
の9つの文字を表現するには6つの符号化された文字し
か必要としないことに注意しなければならない。
縮解除を行うために再度初期設定される。したがって、
最初の4つのアドレス位置は単一入力文字R、I、Nお
よびTの復号された値を有する。この場合も、単一文字
の復号はアルゴリズム的に実行することができる。第1
の符号化入力文字“0”がメモリ302Cへのアドレス
として用いられる。圧縮解除システムは、たとえばこの
値が4より小さいかどうかをチェックすることによっ
て、この値“0”がルートコードワードであることを判
定する。それによって、ADDR0のデータエントリ
(たとえば、“R”)が圧縮解除されたデータストリー
ム308中の第1の文字として出力される。次に、圧縮
解除システムは次の符号化された入力文字“1”を読み
出す。この値もまたルートコードワードであり、したが
ってADDR1のデータエントリが圧縮解除されたデー
タストリーム308中の第2の文字“I”として出力さ
れる。
された最後の圧縮解除された文字“I”を用いて新しい
辞書エントリが構築される。このストリング“0I”が
次にメモリ302Dに示すように次の使用可能なアドレ
ス位置(ADDR4)に書き込まれる。次のコードワー
ド“2”が入力され、この処理が繰り返される。このと
き、アドレス位置ADDR2のデータエントリ(たとえ
ばN)が出力され、ストリング“1N”がメモリのアド
レス位置ADDR5に書き込まれる。
ステムによって読み出されるまで同様に繰り返される。
この圧縮解除エンジンはこのコードワードを用いてAD
DR5のデータエントリを参照する。符号化された文字
“5”は3より大きいためルートではなく、したがって
圧縮解除システムはアドレス位置ADDR5のデータエ
ントリの最後のバイト(たとえばN)を出力する。この
データエントリの残り(たとえば1)は次のアドレスと
して用いられる。コードワード“1”はルートであるた
め、ADDR1のデータエントリ(たとえば“I”)が
出力され、それ以上の圧縮解除は不要となる。圧縮解除
された文字“IN”が次に文字ストリーム308に入れ
られる。メモリ中の新しいデータエントリが最後の圧縮
解除された出力文字“I”と前の符号化された入力文字
“3”を用いてアドレス位置ADDR7に書き込まれ
る。この処理は文字ストリーム304中のすべての文字
が圧縮解除されるまで繰り返される。ハッシングを用い
たHP−DC方式で構築された辞書は互いに異なってい
ることに注意しなければならない。それに対して、この
システムと方法を用いて構築された圧縮辞書302Bと
圧縮解除辞書302Dは同じアドレス/エントリを有す
る。
おける複数辞書の使用 CAMを用いてデータを圧縮するのに要するメモリの量
をさらに低減するために、先に図5に示したCAMデー
タ圧縮システムが待機辞書(図3参照)と連動させて用
いられる。CAMはクロックサイクル毎に1文字を処理
する能力を有するが、これは最小限のメモリを用いてデ
ータを圧縮することができる。さらに、データ圧縮比は
リセット後に現行辞書中に有用な文字セットを維持する
ことによって上げることができる。次に説明する方法
は、適応的であり、それによって辞書がコードワードに
埋め込まれ、各圧縮解除処理の前に別の辞書を転送する
必要がないようになっている。
合せシステムの高レベルブロック図である。説明の目的
上、このシステムは図5に示すものと同様の2b ×(b
+m+2)CAM 312を用いて実施される。CAM
312は制御プロセッサ(図示せず)に結合された制
御バス314からなる。アドレスバス316(b−ビッ
ト幅)とデータバス(n−ビット幅)がCAM 312
に結合されている。n−ビット幅のDATA_MASK
バス320のゼロビットは、CAM探索中対応するビッ
トを不能にする。たとえば、第1のマスクビット(DA
TA_MASK[0])上の“0”信号はCAM 31
2に供給される第1のDATA_INビット(DATA
_IN[0])を不能にする。不能とされたDATA_
INビットはCAM 312中でライン318上の信号
に一致するデータエントリを探索するときには考慮に入
れない。データマスキング回路は当該技術分野において
周知である。したがって、CAM 312に用いられる
マスキング回路の詳細についてはここでは示さない。突
合せ成功ライン322はバス318上のデータがCAM
312中の前に格納されたエントリと一致するとき活
動状態になる。MATCH_ADDRESSバス326
は一致した得Aやエントリのアドレスを含み、DATA
_OUTライン324はCAM 312に前に格納され
たデータエントリを出力するのに用いられる。
る異なるエントリを示す。各CAMデータエントリは、
3つのフィールドを有する。すなわち、接尾語Kを格納
するためのmビット幅の文字フィールド(CHAR)符
号化された文字の値OMEGAを格納するためのbビッ
ト幅のコードフィールド(CODE)、および関連する
CODEフィールドとCHARフィールドの辞書状態ビ
ットを格納するための2ビット幅の状態フィールド(S
T)である。状態フィールド(ST)は次の4つの可能
な値のうちの1つを取る。
現在未使用である。 CD:CAM位置は現行辞書に属し、待機辞書には属さ
ないデータエントリを含む。 SD:CAM位置は現行辞書と待機辞書の両方に属する
データエントリを含む。 INV:無効値。通上動作では発生しない。
する2進値は固定されていない。圧縮器と圧縮解除器は
4つの可能な状態(S)(0≦S≦3)のいずれか1つ
をとることのできる状態機械として動作する。状態フィ
ールド(ST)の特定の2進値は状態(S)の関数FR
EE(S)、CD(S)、SD(S)およびINV
(S)であり、図13に定義される。たとえば、状態S
=0において、CAMデータエントリの状態フィールド
にビット[0:0]が存在する場合、記憶場所はFRE
Eであり、現行辞書においては現在使用されていないも
のとみなされる。しかし、圧縮器/圧縮解除器システム
が状態S=2にある場合、その状態フィールドのビット
値[0:0]を有するCAM位置が待機辞書に割り当て
られているデータエントリであるとみなされる。
り、すべてのSTフィールドは[0:0](たとえば、
ST=FREE(S))にセットされている。このとき
にだけ、次に説明するような、辞書リセット中に発生す
る初期設定時間遅延を最小限にする大域初期設定が必要
である。圧縮器は初めは状態S=0であるが、入力文字
の読み出し、入力ストリングの圧縮を開始し、また現行
辞書(CD)と待機辞書(SD)の構築を並行して開始
する。CDがいっぱいになると、辞書切り換えが発生
し、それによってSD中のデータエントリがCD中の新
しいデータエントリになる。SDは基本的には空にさ
れ、すべての有効データエントリが除去される。
S=1への状態遷移を起こすときに発生する。図13に
おいて、状態S=1では、空エントリはST=[1:
0]のものであり、これは状態S=0におけるCD値と
同じである。状態S=1においては、CDエントリはS
T=[1:1]のものであり、これは状態S=0におけ
るSD値と同じである。状態遷移は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は上述した
圧縮/圧縮解除システムの状態遷移を示す。
させるための簡単なハードウエアによる実施態様を示
す。状態レジスタ28の初期ビット値は状態S=0で示
されている。各状態遷移について、状態レジスタのビッ
トはFREE→INV→SD→CD→FREEというよ
うに循環的にシフトする。したがって、状態制御は8ビ
ット循環シフトレジスタを用い、レジスタ328を各状
態変化について2ビット左にシフトすることによって簡
単に実施することができる。
と、CAM記憶場所の内容は3ビットバイト(ST、C
ODE、CHAR)によって示され、コード(A)は単
一文字ストリング“A”の符号化された値を表わす。説
明の目的上、コードワードにはメモリアドレス位置に対
応する値が割り当てられる。しかし、コードワード値は
またメモリアドレス位置の単純な関数として簡単に得る
ことができ、当該技術に精通する者には簡単に実施する
ことができる。所定のアドレススペース(たとえば、ア
ドレス0から2m −1)内のコード(コード(A))は
辞書にアクセスすることなく直ちに利用することができ
ると仮定する。前述したように(図5参照)、これらの
コードに対応する記憶場所はCAM内に物理的に存在す
る必要はない。したがって、すべてのCAM探索はこれ
らの場所を除くものと仮定する。説明を簡単にするため
に、“ファイルの終り”条件もまた無視される。
の詳細な回路図である。図16の回路図は、複数辞書圧
縮/圧縮解除の提供に必要な追加の機能的構成要素を示
す。CAM圧縮/圧縮解除回路312は図11に示すも
のと同じであり、状態レジスタ328は前に図15に示
したものと同じである。DATA_INレジスタ342
とMASKレジスタ350はST、CODEおよびCH
ARフィールドをCAM 312のDATA_INポー
トとMASKポートを介して供給する。CAM中の各デ
ータエントリのSTフィールドは状態レジスタを介して
直接的に、あるいはSTパターンジェネレータ338を
介して間接的に制御される。STパターンジェネレータ
は図17に詳細に示す。
ンおよびSDラインはマルチプレクサ340(MUX
M1)を介して制御バス314を操作することによって
制御される。制御バス314上の信号はシステムプロセ
ッサ(図示せず)とCAM312内の制御圧縮/圧縮解
除関数から来る。制御バス314は前に図5に示したも
のと同じ読み出し信号、書き込み信号、探索信号および
リセット信号を含む。CAM 312内の内部圧縮器/
圧縮解除器制御論理もまた図5に示すものと同様であ
る。次に説明する機能のいくつかを実行するために、こ
の論理に対する小規模な変更が必要となる可能性があ
る。これらの回路変更は当該技術に精通する者には簡単
に実施することができ、したがって詳細には説明しな
い。
H_ADDRESSポートをCAM312のDATA_
INポートに結合する。外部データバス344がADD
RESS_INポートに直接結合され、レジスタ342
を介してDATA_INポートに結合されている。ST
パターンジェネレータライン336とデータ入力ライン
348が、マルチプレクサ346(MUX M2)を介
してMASKレジスタ350のSTフィールドへの供給
を行う。ライン349上の探索型信号および制御生成回
路352からの他の各種の制御信号はライン322上の
MATCH_SUCCESS信号によって制御される。
ライン324上のDATA_OUT信号は、圧縮された
データあるいは圧縮解除されたデータを図4に示すデー
タインターフェースに出力する。内部アドレスポインタ
354(NEXT_CODE)は、第2のアドレスポイ
ンタ356(SAVE_CODE)へのデータの書き込
みあるいは、CAM DATA_INポートからのデー
タの受信を行うことができる。
タ338の詳細回路図である。状態レジスタ328(図
16)のCDフィールドおよびSDフィールドからの第
1ビットは、ANDゲート358およびEXCLUSI
VE−NORゲート362に入力される。CDフィール
ドおよびSDフィールドからの第2ビットは、ANDゲ
ート360およびEXCLUSIVE−NORゲート3
64に結合される。ANDゲートはCAM DATA_
INポートのSTフィールドへの供給を行い、EXCL
USIVE−NORゲートはCAM MASK ポート
(図16)のSTフィールドへの供給を行う。
に説明するように)CD辞書エントリとSD辞書エント
リの両方を同時に探索することができなければならな
い。これは状態レジスタ328(図16)中のビットを
操作することによって行われる。CDおよびSD中のビ
ットのうちの1つは常に一致し、第2のビットは常に異
なる(図13参照)。したがって、突合せビットは有効
なSDあるいはCD辞書エントリの探索に用いられ、第
2のビットはマスクされる。たとえば、状態S=0で
は、現行辞書CDのビット値は[1:0]および待機辞
書のビット値は[1:1]である。これによって、AN
Dゲート358とEXCLUSIVE−NORゲート3
62の出力がハイになり、ANDゲート360とEXC
LUSIVE−NORゲート364の出力がローにな
る。したがって、その第1ビット位置に“1”があるC
AM辞書中の任意のSTフィールド(たとえば、CD
(S)SD(S))は、CDあるいはSDのいずれかの
有効辞書エントリとして同定される。
データを圧縮する。このシステムは状態レジスタ328
に図15に示すようなビット値をロードすることによっ
て状態S=0にセットされる。CAM辞書中のすべての
STフィールドはST=FREE(S)(すなわち、
[0:0])にセットされ、アドレスポインタNEXT
_CODEはCAM中の第1の使用可能なアドレスにセ
ットされる。図5に示すCAMについて前述したよう
に、単一入力文字はデータ圧縮中にアルゴリズム的に符
号化することができ、この場合、すべてのCAMアドレ
スを文字ストリングの格納に使用可能である。しかし、
単一データ文字がCAMに格納されると、符号文字スト
リングの書き込みに使用可能な第1のアドレスは通常最
後の単一文字の後のアドレス位置である。
タライン344からの第1のデータ文字を読み、ライン
326上に入力文字/データエントリの一致のためのア
ドレスを生成することによって符号化される。この符号
化された第1の文字(OMEGA)は次にレジスタ34
2内で入力データライン344からの第2の入力文字
(K)と結合され、OMEGA,K文字ストリングが生
成される。CAMに対してOMEGA,Kストリングに
一致するデータエントリの探索が行われる。同時に、S
Tフィールドに対してSTパターンジェネレータによっ
て生成される値と一致するCD値あるいはSD値(たと
えば、CDあるいはSDエントリとしてすでに格納され
ているOMEGA,Kストリング)が探索される。SE
ARCH_TYPE信号349のすべてのビットは一致
の探索中“1”の値を取り、これによってCAMマスク
のCODEフィールドとCHARフィールドがイネーブ
ルされる。MUX M1とMUX M2が前に図17に
示したSTパターンジェネレータ338からMASKポ
ートとDATA_INポートのSTフィールドを選択す
る。
A,Kストリングであるため、ライン322上のMAT
CH_SUCCESS信号は一致がないことを示す。次
に、OMEGAがライン324上に出力され、文字スト
リングCD(S)、OMEGA、KがCAM辞書位置N
EXT_CODEにおいてSTフィールド、CODEフ
ィールドおよびCHARフィールドに書き込まれる。O
MEGA,Kストリングの文字Kが次に符号化され(C
ODE(K))、OMEGAの新しい値として用いられ
る。STフィールドに書き込まれたCD(S)値は、レ
ジスタ342のSTフィールドに供給されるMUX 3
40の入力を変更することによってレジスタ328から
直接供給される。
M辞書エントリ(たとえば、ST=FREE(S))を
探索する。したがって、SEARCH_TYPE信号3
49は“0”の値を取り、CODEフィールドとCHA
Rフィールドをマスクし、ライン348上の[1:1]
ビット値を介してSTフィールドをイネーブルする。同
時に、MUX 340に結合された制御ライン314が
レジスタ328から値FREEをSTフィールドで探索
された値として選択する。ライン326からの一致アド
レスは次のOMEGA,Kストリングを格納するための
NEXT_CODEとして用いられる。この処理はライ
ン344上の入力データストリングから次の文字を抽出
し、それをOMEGAと結合して、次の探索のためのO
MEGA,Kを生成する。次の探索で一致が発見された
場合、その一致のアドレス位置が次の突合せのためにM
ATCH_ADDRESSライン326上のDATA_
INポートにフィードバックされる。このアドレスは前
のOMEGA,Kストリングを表わす新しいOMEGA
値として用いられる。同時に、レジスタ328からのS
D(S)値がこの一致アドレスでSTフィールドに書き
込まれる。
トリングがCAM位置に書き込まれた後、状態フィール
ドのつぎのFREE値を発見するための探索が行われ
る。探索が失敗すると、これは現行辞書がいっぱいであ
ることを示し、システムに状態S=1への切り換えを発
生させる。これはレジスタ328の内容を左に2ビット
位置だけ回転させることによって行われる。前にSD
(S)値を有していた状態フィールド位置は現在はCD
(S)値を有する。CAMのすべての状態フィールドは
状態S=0においてCD(S)あるいはSD(S)にセ
ットされていた(たとえば、状態変化の直前にはFRE
E状態フィールド値は存在しなかった)ため、状態S=
1のすべてのFREE記憶場所は状態S=0からの前の
CD(S)エントリとなる。さらに、待機辞書は状態S
=1の初期単一文字ストリングを除いて空である。これ
は、INV値は状態S=0では決して書き込まれないた
めである。圧縮はシステム状態S=1で上述したように
続いていく。この処理は入力データがすべて圧縮される
まで圧縮データ文字の生成と状態の切り換えを続ける。
に行われる。CAMはレジスタ328中のビットを状態
S=0にリセットすることによって初期設定される。F
REEビット値がそれぞれの使用可能なメモリ辞書位置
の状態フィールドに書き込まれる。内部アドレスポイン
タ354(NEXT_CODE)がCAMの第1の使用
可能な記憶場所(たとえば、NEXT_CODE=
2m )にセットされ、内部アドレスポインタ356(S
AVE_CODE)がゼロにセットされる。
われる。たとえば、符号化された文字ストリングからの
第1の符号化された文字(OMEGA)がライン344
上で読み出される。OMEGAは次にCAM ADDR
ESS_INポートに供給されるアドレスとして用いら
れる。ライン324上に出力されるCODEフィールド
の値が“ルート”でない場合、CHARフィールドがラ
イン324上に出力され、CODEフィールドが次のア
ドレス位置としてCAMにフィードバックされる。この
処理は“ルート”CODEフィールドがCAMから読み
出されるまで繰り返される。圧縮された入力文字(OM
EGA)が圧縮解除され、この圧縮解除された文字スト
リングがライン324上に出力された後、アドレス位置
OMEGAのSTフィールドがSD(S)にセットされ
る。これは、レジスタ328からのSD(S)値をレジ
スタ342のSTフィールドに書き込むことによって行
われる。次に、圧縮解除されたデータストリングからの
第1の文字(K)をレジスタ342のアドレス位置SA
VE_CODEにフィードバックすることによって辞書
が構築される。状態レジスタ328からのCD(S)
値、ライン344を介して初めに読み出されたOMEG
A値、および圧縮解除されたOMEGA出力ストリング
(K)からの第1の文字がCAM辞書のSTフィール
ド、CODEフィールド、およびCHARフィールドの
アドレス位置NEXT_CODEに書き込まれる。
が次にアドレスポインタSAVE_CODEに書き込ま
れる。“0”の値がライン349上に置かれ、ライン3
48上の[1:1]ビット値によって“状態フィールド
のみ”の探索が可能になる。FREE状態フィールドを
有するCAM中の次の辞書エントリがFREE値を有す
るSTフィールドを探索することによって発見される。
このFREE状態フィールドのアドレス値がライン32
6を介してアドレスポインタNEXT_CODEに書き
込まれる。そして、次の符号化文字OMEGAがライン
344から読み出される。
REE状態フィールド値が存在しないとき)、システム
は上述したようにレジスタ328のビットをシフトする
ことによって状態S=1に切り換わり、アドレスポイン
タNEXT_CODEの値がリセットされる。したがっ
て、現行辞書は前の待機辞書からのエントリのみを含
む。次に、システムはライン344からの次の符号化さ
れた文字(OMEGA)を読み出し、このデータ圧縮解
除処理が続行される。
データ圧縮の一般的な方法を示すデータフロー図であ
る。ブロック376はシステムの状態と状態条件をセッ
トする初期設定処理である。すなわち、システムが状態
S=0にセットされ、CAM辞書のすべての状態レジス
タがST=FREE(S)にセットされ、アドレスポイ
ンタはCAM中の次の使用可能なアドレス(たとえば、
2m →NEXT CODE)にセットされる。
(CHAR−K)はブロック378で読み出され、符号
化(たとえば、コード(K))されて値OMEGAが提
供される。この入力データストリームの次の入力文字
(K)はブロック380で読み出される。ブロック38
2はOMEGAとKを文字ストリングとして組み合わせ
る(たとえば、OMEGA,Kのように結合する)。次
に探索が行われる。これはOMEGA,Kストリングに
一致するデータエントリを探すだけではなく、2つの交
互の状態レジスタパターン(ST=CD(S)あるいは
ST=SD(S))のうちの1つを突合せる。この探索
は現行値と待機値の両方に対して行われなければならな
い。それは、いずれかの値が有効文字ストリング(たと
えばOMEGA,K)がCAMに書き込まれたことを示
すためである。たとえば、状態レジスタ値ST=CD
(S)は関連するCODEフィールドとCHARフィー
ルドに現在の処理状態中にOMEGA,K文字ストリン
グがロードされたことを示す。状態レジスタ値ST=S
D(S)は関連するCODEフィールドとCHARフィ
ールドにOMEGA,K文字ストリングがロードされて
おり、第2のOMEGA,K文字ストリングと現在のプ
ロセッサ状態において少なくとも一度一致したことを示
す。したがって、両方の状態レジスタ値(CD(S)お
よびSD(S))は重ね書きしてはならない有効CAM
データエントリを示す。
ていない場合、判断ブロック384は一致がないことを
示す。符号化された値OMEGAはブロック388にお
いて符号化されたデータストリング中の第1の文字とし
て出力される。このOMEGA,Kストリングは第1の
使用可能なCAMアドレス位置(NEXT_CODE)
に書き込まれる。アドレス位置NEXT_CODEの状
態フィールド(ST)にはCAM中の有効データエント
リを示す値CD(S)が書き込まれる。次に、ブロック
388がOMEGAを第2の入力文字の符号化された値
に置き換える(コード(K)→OMEGA)。
REE(S)である次の使用可能なアドレス位置の探索
を行う。FREE(S)を有する状態レジスタが発見さ
れない場合、CAM中の現行辞書がいっぱいである。判
断ブロック392はCAMをその次の状態S=S+1
mod 4に変えることによって現行辞書(CD)を待
機辞書(SD)に置き換える。状態変化の間、各状態レ
ジスタの値は前に説明したように再割り当てされる(図
13参照)。STフィールド値はFREE→INV→S
D→CD→FREEと再割り当てされる。処理はブロッ
ク380に戻り、そこで次の入力文字(K)が読み出さ
れる。この突合せ処理は上述したように繰り返される。
現行辞書がいっぱいでない場合、判断ブロック390は
ブロック394にジャンプする。
を有するCAM中の次のアドレスを判定し、そのアドレ
スをNEXT_CODEに割り当てる(たとえば、ma
tch address→NEXT CODE)。処理
はブロック380に戻り、そこで次の入力文字(K)が
読み出される。
ると、処理はブロック386にジャンプし、そこでOM
EGAフィールドがOMEGA,Kストリングに一致し
た辞書項目のアドレスに置き換えられる。(一致アドレ
スのCODEフィールドとCHARフィールドで表わさ
れる)一致した文字ストリングは、一致アドレスの状態
フィールドSTをSD(S)にセットすることによって
待機辞書に自動的に割り当てられる。次に処理はブロッ
ク380に戻り、そこでデータストリームから次の入力
文字(K)が読み出される。一致アドレス(OMEG
A)とKが結合されて新しいOMEGA,Kストリング
が形成され、これが3つの入力文字を表わす。ブロック
382が次に現行辞書と待機辞書に対して文字ストリン
グの一致を探索する。
文字ストリングの一致のアドレスにおけるSTフィール
ドがSD(S)にセットされているときにブロック38
6で行われる。しかし、STフィールドをチェックする
必要がないため、より簡略なハードウエアによる実施が
可能である。
データの圧縮解除の一般的方法を示すデータフロー図で
ある。ブロック398はこのシステムを状態(S=0)
に初期設定し、すべての使用可能な辞書エントリのST
フィールドを値ST=FREE(0)に初期設定する。
アドレスポインタNEXT_CODEが第1の空アドレ
ス位置(NEXT_CODE=2m +1)にセットさ
れ、第2のアドレスポインタSAVE_CODEはゼロ
にセットされる。圧縮されたデータストリングからの第
1の符号化された文字(OMEGA)がブロック400
で読み出される。
明したように圧縮解除された文字ストリングWに圧縮解
除する。たとえば、OMEGAをアドレスとして用いる
ことによって、記憶場所OMEGAにあるCHARフィ
ールドがCAMによって出力される。アドレスOMEG
AからのCODEフィールドが“ルート”でない場合、
それはCAMに供給される次のアドレスとして用いられ
る。次のアドレスのCHARフィールドが次の圧縮解除
された文字Kとして出力される。アドレスOMEGAの
CODEフィールドが“ルート”である場合、アドレス
OMEGAのCHARフィールドが出力され、アドレス
OMEGAのCODEフィールド、CHARフィールド
は待機辞書に割り当てられる(たとえば、SD(S)→
ST)。ブロック402は文字ストリングWの第1の文
字をレジスタCに割り当てる。
ロでない場合、判断ブロック403はブロック404に
ジャンプし、ブロック404で文字ストリングCD
(S)、SAVE_CODE、CをCAM辞書のアドレ
ス位置(NEXT_CODE)に書き込むことによって
辞書が構築される。SAVE_CODEがゼロに等しい
か、あるいはブロック404で文字ストリングが書き込
まれたあと、ブロック405でアドレス位置OMEGA
の状態フィールドを待機辞書に割り当て(SD(S)→
(OMEGA))、現在のSAVE_CODE値をOM
EGAの値に置き換える。ブロック406で値ST=F
REE(S)を有する次の状態フィールドが探索され
る。FREE STフィールドが発見されると、ブロッ
ク408はブロック410にジャンプし、ブロック41
0では一致アドレスがアドレスポインタNEXT_CO
DEに割り当てられる(たとえば、MATCH ADD
→NEXT CODE)。次に、処理はブロック400
に戻り、圧縮されたデータストリーム(OMEGA)か
らの次の符号化された文字が読み出され、圧縮解除され
る。
ドがない場合、判断ブロック408はブロック412に
ジャンプする。この処理はここで現行辞書が待機辞書に
切り換えられる次の状態(すなわち、S=S+1 mo
d)に変化する。また、これによって現行辞書の項目は
前の状態からFREE位置に変わる。ブロック413で
ST=FREE(S)である次の空位置が探索され、ア
ドレスポインタSAVE_CODEがゼロにリセットさ
れ、そしてブロック410にジャンプする。ブロック4
10ではブロック413で発見されたFREE位置のア
ドレス値をアドレスポインタNEXT_CODEに割り
当てる。ブロック410は次にブロック400に戻り、
そこで処理は圧縮されたデータストリームからのデータ
がすべて圧縮解除されるまで継続される。
圧縮解除アルゴリズムを図示するものである。生データ
ストリーム414は図18に示すCAM圧縮処理に入力
される未圧縮の文字ストリングからなる。この例では、
単一文字R、I、NおよびTが初期設定中にメモリ41
6の位置ADDR0、ADDR1、ADDR2およびA
DDR3にロードされている。単一文字入力は各文字に
そのアドレス位置の値を割り当てることによって符号化
されるが、圧縮速度を上げるために単一入力文字は次に
説明する処理を開始する前にアルゴリズム的に符号化す
ることができる。メモリ416は初期設定直後の状態S
=0の辞書を示し、メモリ418は現行辞書の待機辞書
への置き換え(たとえば、状態S=0からS=1への変
化)の直前のS=0の状態の辞書を示す。メモリ420
は生データストリーム414の圧縮後のS=2の状態の
辞書を示す。
T)、コードフィールド(CODE)、および文字フィ
ールド(CHAR)に分割される。説明の目的上、CA
Mには文字ストリングの格納に使用可能な辞書位置は5
つしかない(たとえば、ADDR4−ADDR8)もの
と仮定する。アドレス位置ADDR0−ADDR3は単
一文字に割り当てられ、使用可能な辞書位置としては探
索されない。各状態フィールドのビットは値FREE=
[0:0](たとえば、FREE(S)=0)に初期設
定され、アドレスポインタNEXT_CODEは第1の
使用可能なCAM記憶場所(NEXT_CODE=AD
DR4)に初期設定される。
力文字“R”は、アドレス位置ADDR0のデータエン
トリに一致し、OMEGAの第1の値(たとえば、OM
EGA=0)として用いられる。この圧縮システムはO
MEGAを次の入力文字“I”と結合し(OMEGA,
K)、メモリ416中のCODEフィールドおよびCH
ARフィールド中で“0I”との一致を探索する。同時
に、メモリ416中の対応するSTフィールドは探索し
て“1:0”あるいは“1:1”のビットの組合せ(た
とえば、状態S=0のCD(S)あるいはSD(S))
を求める。すべての記憶場所がFREEであり、前にメ
モリに書き込まれた“0I”ストリングはなかった。し
たがって、一致は発見されない。したがって、OMEG
Aの値(“0”)は圧縮されたストリーム422の第1
の文字として出力され、文字ストリング(CD(S)、
OMEGA、K)が第1のFREE記憶場所(ADDR
4)に書き込まれる。次に、文字“I”が符号化され、
OMEGAの次の値(たとえば、OMEGA=1)が生
成される。
る次のSTフィールドが求められ、そのアドレス位置が
アドレスポインタNEXT_CODE(たとえば、NE
XT_CODE=5)に割り当てられる。生データスト
リームからの次の文字(K=“N”)が次にOMEGA
と結合され(OMEGA=“1”)、CAMが探索され
“1N”文字ストリングが求められる。ここでもCAM
中に一致は発生せず、文字ストリング(CD(S)、
1、N)がアドレス位置ADDR5に書き込まれる。こ
の処理が同様に繰り返され、ある文字ストリングが前の
エントリのどれにも一致しないとわかった後次の使用可
能なアドレスのSTフィールド、CODEフィールドお
よびCHARフィールドへの書き込みが行われる。
一致は生データストリームからの文字424(“I
N”)の組合せから発生する。文字“IN”は符号化さ
れたOMEGA,K文字ストリング(“IN”)からな
る。アドレス位置ADDR5のCODEフィールドとC
HARフィールドはそれぞれ“I”と“N”であり、状
態フィールドは前にST=CD(S)にセットされてい
るため、文字ストリングの一致が発生する。一致アドレ
スは新しいOMEGA値(OMEGA=5)として用い
られ、ADDR5のデータエントリは待機辞書に割り当
てられる(S=0のとき、ST=SD(S)=[1:
1])。次の文字Tが生データストリーム414から読
み出され、OMEGAと結合される。この新しいOME
GA,Kストリング(“5T”)は3つの文字を表わ
し、これが前述したように探索される。CAMには値
“5T”を有するOMEGA,Kストリングは存在しな
い。したがって、これは次の使用可能なアドレス位置
(ADDR8)に書き込まれる。符号化された文字
“5”は圧縮文字ストリーム422に出力され、“T”
の符号化された値は次のOMEGA値(OMEGA=
3)として用いられる。
アドレス位置ADDR8への書き込み直後のCAMの状
態を示す。この処理はメモリ418を探索して次のFR
EE状態フィールドを求める。ADDR8がCAM現行
辞書の最後の使用可能な場所であると仮定すると、FR
EE状態フィールドは発見されない。これは、現行辞書
がいっぱいであり、システムがそれに応じて状態S=1
に変更されることを意味する。状態S=1では、状態フ
ィールドビット値[1:0]はFREE記憶場所を構成
し、ビット値[1:1]は現行辞書エントリ(図13参
照)を構成する。したがって、S=1の状態にある現行
辞書のすべての辞書位置は、アドレスADDR5の文字
ストリングを除いて、文字ストリングの格納に使用する
ことができる。状態が変化すると、アドレスポインタN
EXT_CODEは第1のFREE記憶場所にリセット
される(NEXT_CODE=4)。
説明すると、次の入力文字426(“I”)が生文字ス
トリーム414から抜き出され、次のOMEGA,K探
索のためにOMEGAと結合される(“3I”)。スト
リング“3I”は記憶場所ADDR7にあるが、この場
所の状態フィールドは現在FREEである。したがっ
て、一致は発見されず、符号化された値“3”が圧縮文
字ストリーム422中に文字438として出力される。
この文字ストリング(CD(S)、3、I)は記憶場所
ADDR4に書き込まれ、文字“I”は次のOMEGA
値(OMEGA=1)として符号化される。次のFRE
E状態フィールドのアドレス位置がアドレスポインタに
割り当てられる(NEXT_CODE=6)。アドレス
位置ADDR5は、その状態フィールドが状態S=0か
ら状態S=1への切り換え後の現行辞書エントリを表わ
すためスキップされることに注意しなければならない。
文字428は、新しい文字ストリング(“IN”)から
なるOMEGAと結合される。アドレス位置ADDR5
で一致が発生し、したがってOMEGAには一致アドレ
ス値が割り当てられ、アドレス位置ADDR5の状態フ
ィールドは待機辞書に割り当てられる。S=1の状態に
ある待機辞書のビットの割り当ては[0:1]である
(図13参照)。生データストリーム414からの次の
入力文字はOMEGAと結合され、探索処理が繰り返さ
れる。この処理は、生データストリーム414からのす
べての文字が圧縮されるまで現行辞書が“いっぱいにな
る”度にシステムの状態を変更し続ける。
の直後の圧縮解除の準備のできたメモリを示す。メモリ
434は状態S=0から状態S=1への変化の直前のS
=0の状態にあるシステムを示す。メモリ436は圧縮
文字ストリーム422の圧縮解除後のS=1の状態にあ
るデータエントリを示す。メモリ432中の辞書は、最
初の4つのアドレス位置がそれぞれ単一入力文字R、
I、NおよびTの符号化された値を有するように初期設
定される。ここでも、単一文字の復号はアルゴリズム的
に行うことができる。システムは状態S=0にセットさ
れ、すべての辞書状態レジスタはFREE(S)にセッ
トされる。アドレスポインタNEXT_CODEは第1
の使用可能な辞書位置(ADDR4)にセットされ、ア
ドレスポインタSAVE_CODEはゼロにセットされ
る。
GAはメモリ432へのアドレスポインタとして用いら
れる。圧縮文字ストリーム422からの第1の入力コー
ドはOMEGA値(OMEGA=0)を有する。この圧
縮解除システムは、値“0”を、たとえばその値が4よ
り小さいことをチェックすることによってルートコード
ワードと判定する。ADDR0のデータエントリ(たと
えば、“R”)はそれによって圧縮解除文字ストリーム
430中の第1の文字として出力される。アドレス位置
OMEGAの状態フィールドはSD(S)にセットされ
る。
の第1の文字K(たとえば、“R”)をアドレス位置S
AVE_CODEのCHARフィールドに書き戻すこと
によって再構築される。この場合“R”はADDR0の
CHARフィールドに書き直される。次に、文字ストリ
ング(CD(S)、0、R)がアドレス位置NEXT_
CODE(たとえば、ADDR4)に書き込まれ、SA
VE_CODEがNEXT_CODE(たとえば、NE
XT_CODE=5)の値にセットされる。次に、アド
レスポインタNEXT_CODEにメモリ434中の次
の空アドレスの値(たとえば、NEXT_CODE=
5)が割り当てられる。
ら読み出され、OMEGAの次の値としてはたらく。O
MEGAが圧縮解除され、復号された文字“I”は圧縮
解除文字ストリーム430に次の文字として出力され
る。アドレスADDR1のSTフィールドはSD(S)
にセットされ(たとえば、[1:1])、圧縮解除され
たOMEGA値からの第1の文字(“I”)がCHAR
フィールドのアドレス位置SAVE_CODE(ADD
R4)に書き込まれる。次に、文字ストリング(CD
(S)、1、I)がメモリ434のSTフィールド、C
ODEフィールド、CHARフィールドのアドレスNE
XT_CODE(たとえば、ADDR5)に書き込まれ
る。NEXT_CODEの値はSAVE_CODEの新
しい値として用いられる。次のFREE状態レジスタが
発見され、NEXT_CODEがそのアドレスにセット
される(NEXT_CODE=5)。
号化された文字“2”および“3”に対して同様に続行
される。圧縮文字ストリーム422からの第1の“5”
は第1の非ルートコードワードであり、アドレスADD
R5のデータエントリは文字ストリング“IN”であ
る。したがって、ADDR5のCODEフィールド
(“1”)がCAMによって読み出される次の記憶場所
としてフィードバックされる。ADDR1の出力
(“I”)が前のCHARフィールド“N”とともにC
AMによって出力され、ADDR5のSTフィールドが
SD(0)にセットされる。圧縮されたコードワードか
らの第1の文字(“I”)は、メモリ位置ADDR7の
CHARフィールド(たとえば、SAVE_CODE=
7)に書き込まれる、文字ストリング(CD(S)、
5、I)がCAM位置NEXT_CODE(たとえば、
ADDR8)に書き込まれ、SAVE_CODEの値は
NEXT_CODEの値(たとえば、SAVE_COD
E=8)にセットされる。メモリ434はこの文字スト
リングのメモリへの書き込みの直後の現行辞書の状態を
示す。
ールドがないことを示す。したがって、システムは状態
S=1に切り換わり、状態レジスタ値は図13に示すよ
うに再割り当てされる。メモリ436ついて説明する
と、アドレスポインタNEXT_CODEには第1のF
REE記憶場所(ADDR4)が割り当てられる。アド
レス位置ADDR0−ADDR3およびADDR5は現
在は現行辞書のエントリであり、アドレス位置ADDR
4およびADDR6−ADDR8はS=1の状態にある
FREE位置を構成する。圧縮文字ストリーム422か
らの文字438はOMEGAにセットされ(OMEGA
=3)、新しい圧縮解除状態S=1において圧縮解除さ
れる。復号された文字“T”は圧縮解除文字ストリーム
430に出力され、ADDR3のSTフィールドには状
態S=1に対する値SD(S)(たとえば、[1:
0])が割り当てられる。SAVE_CODEはADD
R8を指示し、文字“T”がメモリ436中のADDR
8のCHARフィールドに書き込まれる。文字ストリン
グ(CD(S)、3、T)がアドレス位置ADDR4に
書き込まれ、SAVE_CODEには値NEXT_CO
DEが割り当てられる。次のFREE辞書位置はADD
R6であり、したがってアドレスポインタNEXT_C
ODEに割り当てられる。この処理は、圧縮文字ストリ
ーム422中のすべての文字が圧縮解除されるまで同様
に継続する。
次割り当てられ、単一文字ストリングにはC0 、C0 +
1、C0 +2、…、C0 +(2m −1)の順でコードが
割り当てられ、C0 はある小さな定数(たとえば、C0
=0である)。この新しい複数文字ストリングにはコー
ドC0 +2m 、C0 +(2m +1)、…、2b −2、2
b −1がこの順で割り当てられており、それぞれの文字
ストリングはCAM中の順次のアドレス値を有する。し
たがって、ストリングへのコードの割り当ては、カウン
タをC0 +2m に初期設定し、それを新しい辞書ストリ
ングが作成される度にインクリメントすることによって
簡単に行うことができる。これによって、この圧縮器
は、辞書リセットの後に長さm+1のコードを用い、続
いてこの出力コードの長さを辞書のエントリ数が次の2
の累乗に達する度に1ビットだけ長くすることによって
可変長の出力コードを用いることができる。したがっ
て、出力コードの長さは(m+1)とbの間で変動し、
ここで2b は辞書の最大サイズである。これによって圧
縮比を多少改善することができる。これは、圧縮器が辞
書アドレスコードが短ければより短い出力コードを用い
るためである。この圧縮解除器は、その辞書を圧縮器と
同期したステップで構築し、圧縮コードの予想される長
さを追跡することができる。
トリングの符号化された値は第1のFREE辞書位置の
アドレスである。辞書切り換えの直後に、CDは必ずし
も連続的ではないCAM中の位置を有する前の待機辞書
からの文字ストリングからなる。これらのストリング
は、切り換え後、その古いアドレスしたがってコードを
保存する。したがって、FREEの探索によって返され
たアドレス(コード)は連続するシーケンスを形成しな
い。また、0≦C≦2b −1の範囲のそれぞれの符号化
された文字ストリングCは潜在的には辞書リセット後直
ちに使用可能である。
ドを用いなければならない。しかし、これが圧縮比に与
える悪影響はさほど大きくない。CDは辞書リセットの
後部分的に満たされた状態で始動するため、CD中のコ
ードの順序が変わっても、コードを表現するのに要する
ビット数は最大ビット(b)とさほど違わない。たとえ
ば、実験によれば、現行辞書は通常最大容量の1/4か
ら1/2の間で始動することがわかった。これは、コー
ドが連続する順序に配列されていても切り換えの後には
b−1ビットが必要であることを意味する。しかし、第
1の現行辞書/待機辞書(CD、SD)の構築中に可変
長のコードを用いることができる。あるいは、現行辞書
を各リセットの後に順序換えすることができる。
ソースコード、実行可能なオブジェクトコード、ASC
IIデータファイル、テストファイル、ビットマップ画
像ファイル等を含むさまざまな種類のデータに適用され
た。同じファイルが可変長出力コードを用いた従来のL
ZW方式で圧縮された。この圧縮の全体的な結果を図2
1に示す。線440はこのCAM複数辞書システムの圧
縮比の図形的表現であり、線442は標準LZWアルゴ
リズムの圧縮比を示す。線440および442は圧縮比
(元のファイルサイズ/圧縮されたファイルサイズ)
を、b、すなわち出力コード中の最大ビット数の関数
(すなわち、辞書サイズのlog2 )として示す。
ために、図中の破線444は12ビットLZW圧縮器に
よって達成される圧縮比を示す。同じ圧縮比を達成する
CAM複数辞書処理のbの値を次に示す。図21に示す
ように、このCAM複数辞書システムは、標準LZW圧
縮器の辞書エントリ数の1/2から1/4で同じ圧縮比
を提供する(たとえば、1ビット少なくなると必要なメ
モリスペースは1/2となる)。この圧縮比は、従来の
LZW圧縮器データエントリよりわずか1あるいは2ビ
ット長いだけのCAM辞書エントリを用いて達成され
る。
の実施態様を説明した。圧縮比を上げるために、多くの
変更を加えることができる。たとえば、図18および図
19に示す圧縮/圧縮解除処理は、入力アルファベット
中の1組の全単一文字ストリングによる辞書の初期設定
を前提としている。これに代わって、前述したように、
空白あるいは中間的初期設定を用いることもできる。中
間的初期設定と待機辞書の組み合わせに基づく処理で
も、非常に小さな辞書を用いて高い圧縮比を得ることが
できる。このシステムの別の実施法では、現行辞書がい
っぱいになった直後の辞書の切り換えを行わない。その
代わりに、現行辞書が凍結され、辞書切り換えは圧縮比
に基づく(すなわち、圧縮比はあるレベルを下回る)。
現行辞書を凍結しながら、待機辞書を凍結することもで
きる。あるいは、次の辞書切り換えまで構築し続けるこ
とができる。
3に示す状態フィールド値INVを利用する。現在は、
INVは辞書エントリには用いられない。INVを用い
てSD2で表わす第2レベルの待機辞書を定義すること
ができる。すでにSDとラベルの付けられたエントリ
は、2回以上参照されたとき、SD2(現在のINV値
の新しい名称)に変更される。辞書切り換え時に、CD
エントリはFREEになり、SDエントリはCDエント
リになり、SD2エントリはSDエントリになる。第1
の待機辞書(SD)はSD2中の文字ストリングのセッ
トから始動し、新しいSD2は何もない状態から始動す
る。この変更は当該技術に精通する者には、図16に示
すシステムに簡単に実施することができる。
を構築するレンペル−ジブ(Lempel−Ziv)デ
ータ圧縮アルゴリズムの変更態様について説明した。現
行辞書がいっぱいになったとき、待機辞書がそれに置き
換わり、新しい待機辞書が始動する。待機辞書は主辞書
の文字ストリングの選択された部分集合を含み、これに
よって両方の辞書を同じメモリバッファ上で実施しうる
ようにしている。このシステムの好適な実施態様では、
連想メモリモジュールが用いられる。処理時間と回路の
複雑性を少なくするために、辞書切り換えは電源投入後
の辞書の初期設定を不要にする簡単な状態遷移方式に基
づく。したがって、このCAM複数辞書圧縮器/圧縮解
除器システムは、少ないメモリを用い、制御回路の複雑
性の増大を少なくしながら、従来のデータ圧縮法と同等
の圧縮比を達成する。
明し、図示したが、この発明はかかる原理から逸脱する
ことなく、その構成や細部に変更を加えうることは明ら
かである。クレームの精神と範囲に包含されるかかる変
更態様のすべてを特許請求するものである。
タ圧縮システムのデターフロー図である。
ムの一例を示す詳細なデータフロー図である。
の実施例におけるブロック図である。
メモリを用いた実施例のブロック図である。
ク図である。
論理図である。
解除の格納/検索の一般的方法を示すデータフロー図で
ある。
ある。
リズムを図示したものである。
システムのブロック図である。
含まれる異なるエントリを示す図である。
解除の状態を示す図である。
の変更状態を示す図である。
の簡単なハードウエアによる論理図である。
解除システムの詳細な回路図である。
8の詳細な回路図である。
圧縮の一般的方法を示すデータフロー図である。
の圧縮解除の一般的方法を示すデータフロー図である。
ルゴリズムを示す図である。
W圧縮システムの圧縮結果を示すグラフ図である。
Claims (13)
- 【請求項1】辞書ベースのメモリ内のデータを圧縮およ
び圧縮解除する方法であって、 それぞれが固有のアドレスを持つ複数の記憶場所を備
え、圧縮された文字ストリングおよび圧縮されていない
文字ストリングを受け取り、該文字ストリングをデータ
エントリとして格納するメモリ装置を設け、 前記メモリ装置の複数の記憶場所に、少なくとも第1お
よび第2の辞書を定義し、 前記メモリ装置の記憶場所に複数の状態を割り当て、 前記第1および第2の辞書のうちの少なくとも1つの辞
書に、それぞれの格納されたデータエントリを割り当
て、 データ文字ストリングを表すコードワードであって、前
記文字ストリングに一致し前記少なくとも1つの辞書に
割り当てられた、以前格納されたデータエントリのメモ
リにおける第1のアドレスに関連するコードワードを生
成する、 辞書ベースのメモリ内のデータを圧縮および圧縮解除す
る方法。 - 【請求項2】前記メモリ装置の現在の状態に従って、そ
れぞれのデータエントリについての辞書の割り当てを変
更することを含む請求項1に記載の辞書ベースのメモリ
内のデータを圧縮および圧縮解除する方法。 - 【請求項3】前記メモリ装置の状態を変更することによ
り、前記少なくとも1つの辞書をリセットして、該辞書
に以前割り当てられていた記憶場所が、どの辞書にも割
り当てられていない空きの記憶場所を構成するようにす
る請求項2に記載の辞書ベースのメモリ内のデータを圧
縮および圧縮解除する方法。 - 【請求項4】前記少なくとも1つの辞書がいっぱいにな
ったとき、前記メモリ装置の状態を変更することを含む
請求項2に記載の辞書ベースのメモリ内のデータを圧縮
および圧縮解除する方法。 - 【請求項5】前記圧縮比が予め決められた値以下になっ
たとき、前記圧縮器/圧縮解除器の状態を変更すること
を含む請求項2に記載の辞書ベースのメモリ内のデータ
を圧縮および圧縮解除する方法。 - 【請求項6】前記記憶装置において、データエントリを
含まない記憶場所、または前記少なくとも1つの辞書に
割り当てられていないデータエントリを持つ記憶場所を
同定することを含む請求項1に記載の辞書ベースのメモ
リ内のデータを圧縮および圧縮解除する方法。 - 【請求項7】複数の辞書を同時に探索することにより、
データエントリの位置を見つけることを含む請求項1に
記載の辞書ベースのメモリ内のデータを圧縮および圧縮
解除する方法。 - 【請求項8】メモリ装置の記憶場所にデータエントリを
記憶すると同時に、該データエントリを、該メモリ装置
の現在の状態に従って辞書に割り当てることを含む請求
項1に記載の辞書ベースのメモリ内のデータを圧縮およ
び圧縮解除する方法。 - 【請求項9】前記メモリ装置が連想メモリを備える請求
項1に記載の辞書ベースのメモリ内のデータを圧縮およ
び圧縮解除する方法。 - 【請求項10】以前記憶されたデータエントリに一致し
ない第1のコードワードを、第1の辞書に格納すること
を含む請求項1に記載の辞書ベースのメモリ内のデータ
を圧縮および圧縮解除する方法。 - 【請求項11】次のデータ文字ストリングが、前記第1
のコードワードによって符号化されたストリングに一致
すれば、該第1のコードワードのデータエントリを前記
第2の辞書に割り当てることを含む請求項10に記載の
辞書ベースのメモリ内のデータを圧縮および圧縮解除す
る方法。 - 【請求項12】第1の状態にある前記メモリ装置が、前
記第1の辞書を現行辞書として扱い、前記第2の辞書を
待機辞書として扱い、現行辞書も待機辞書も現在含まな
い記憶場所を空きスペースとして扱う請求項1に記載の
辞書ベースのメモリ内のデータを圧縮および圧縮解除す
る方法。 - 【請求項13】前記メモリ装置を第2の状態に変更する
ことにより、現行辞書の記憶場所が空きスペースに割り
当てられ、前記待機辞書のデータエントリが現行辞書の
データエントリとして指定される請求項12に記載の辞
書ベースのメモリ内のデータを圧縮および圧縮解除する
方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP15443993A JP3171510B2 (ja) | 1993-06-01 | 1993-06-01 | 辞書ベースのメモリ内のデータを圧縮および圧縮解除する方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP15443993A JP3171510B2 (ja) | 1993-06-01 | 1993-06-01 | 辞書ベースのメモリ内のデータを圧縮および圧縮解除する方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH07288475A JPH07288475A (ja) | 1995-10-31 |
JP3171510B2 true JP3171510B2 (ja) | 2001-05-28 |
Family
ID=15584224
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP15443993A Expired - Fee Related JP3171510B2 (ja) | 1993-06-01 | 1993-06-01 | 辞書ベースのメモリ内のデータを圧縮および圧縮解除する方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP3171510B2 (ja) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20120134916A (ko) | 2011-06-03 | 2012-12-12 | 삼성전자주식회사 | 저장 장치 및 저장 장치를 위한 데이터 처리 장치 |
JP7003435B2 (ja) | 2017-04-20 | 2022-01-20 | 富士通株式会社 | 情報処理装置、プログラム、情報処理方法及びデータ構造 |
-
1993
- 1993-06-01 JP JP15443993A patent/JP3171510B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JPH07288475A (ja) | 1995-10-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP0573208B1 (en) | Apparatus and method for managing multiple dictionaries in content addressable based data compression | |
US5455576A (en) | Apparatus and methods for Lempel Ziv data compression with improved management of multiple dictionaries in content addressable memory | |
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 | |
JP2713369B2 (ja) | データ圧縮装置及び方法 | |
JP3367832B2 (ja) | 圧縮装置、圧縮方法及びコンテキスト提供装置 | |
US5870036A (en) | Adaptive multiple dictionary data compression | |
JP3342700B2 (ja) | ストリングリバーサル機構を具備した単一クロックサイクルデータ圧縮装置/圧縮解除装置 | |
JP2534465B2 (ja) | デ―タ圧縮装置および方法 | |
US5652878A (en) | Method and apparatus for compressing data | |
US20020101367A1 (en) | System and method for generating optimally compressed data from a plurality of data compression/decompression engines implementing different data compression algorithms | |
US20090058693A1 (en) | System and method for huffman decoding within a compression engine | |
JPH08274649A (ja) | Lempel−Zivタイプ・アルゴリズムを用いたデータ圧縮装置 | |
WO2001056168A1 (en) | Data compression having more effective compression | |
JPH0795093A (ja) | 順次データ圧縮アルゴリズムを実行する装置及び方法 | |
US5686912A (en) | Data compression method and apparatus with optimized transitions between compressed and uncompressed modes | |
JP3611319B2 (ja) | データの圧縮に必要な時間を短縮するための方法および装置 | |
JP2003521190A (ja) | 向上した圧縮速度を有するデータ圧縮 | |
JP3171510B2 (ja) | 辞書ベースのメモリ内のデータを圧縮および圧縮解除する方法 | |
JP2003510881A (ja) | データを展開するのに要する時間を短縮するための方法と装置 | |
JPH01314430A (ja) | 可変ビット長コード語のビット長通信方法 | |
US6788226B1 (en) | Data compressor with string code reassignment utilizing switched input coincidence elements |
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 |
|
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: 20090323 Year of fee payment: 8 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100323 Year of fee payment: 9 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100323 Year of fee payment: 9 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110323 Year of fee payment: 10 |
|
LAPS | Cancellation because of no payment of annual fees |