(57)【要約】【課題】  複雑な演算を行うことなく１文字ずらした文字列候補と、本来の開始文字からなる候補との選択を高速に処理が可能なデータ圧縮装置を提供する。【解決手段】  符号化するための文字列をＩＤＢＲ１００に入力し、該ＩＤＢＲ１００上の文字がメモリ配列１２０に既に格納されている個々の文字と一致するかを比較する。一致していれば、メモリ配列１２０の格納データのうち、上記入力文字列の検索開始文字から始まり最長に一致する第１の文字列および該第１の文字列の次の文字から始まり最長に一致する第２の文字列の検索を一次セレクタ１３０で行う。また、上記メモリ配列１２０の格納データのうち、上記入力文字列の上記検索開始文字の次の文字から始まり最長に一致する第３の文字列の検索を一次セレクタ１４０で行う。そして、一次セレクタ１３０または一次セレクタ１４０で検索された文字列の長さに応じて二次セレクタ１５０で選択した文字列を圧縮する。【選択図】  図１
2005175940.tif 000002
【特許請求の範囲】
【請求項１】
入力文字列と一致する符号化済み文字列の検索を行い、その結果を用いて入力文字列を符号化するデータ圧縮装置において、
符号化するための文字を受け取る入力手段と、
既に符号化済みの文字を上記入力手段より入力し、指定アドレスに格納する記憶手段と、
上記入力手段で受け取った文字と上記記憶手段に格納されている個々の文字とを比較し、上記入力手段で受け取った文字が上記記憶手段に格納されているか否かを判断する比較手段と、
上記記憶手段に格納されている文字列のうち、上記入力文字列の検索開始文字から始まり最長に一致する第１の文字列と、該第１の文字列の次の文字から始まり最長に一致する第２の文字列とからなる第１の符号化候補文字列の検索を上記比較手段の出力に基づき行う第１の検出手段と、
上記第１の検出手段により検出された上記第１の符号化候補文字列の長さを求める第１の計数手段と、
上記記憶手段に格納されている文字列のうち、上記入力文字列の上記検索開始文字の次の文字から始まり最長に一致する第３の文字列の検索を上記比較手段の出力に基づき行う第２の検出手段と、
上記第２の検出手段により検出された、上記検索開始文字列と上記第３の文字列とからなる第２の符号化候補文字列の長さを求める第２の計数手段と、
上記第１，第２の検出手段の検索結果、および上記第１，第２の計数手段の出力に基づき、上記第１の符号化候補文字列、または上記第２の符号化候補文字列のいずれかを選択し、符号化する符号化手段と、を備えた、
ことを特徴とするデータ圧縮装置。
【請求項２】
請求項１に記載のデータ圧縮装置において、
上記符号化手段は、上記第１の検出手段による上記第２の文字列の検索、及び上記第２の検出手段による上記第３の文字列の検索が同一の入力文字の検索時に終了した場合は、上記第２の符号化候補文字列を選択し符号化する、
ことを特徴とするデータ圧縮装置。
【請求項３】
請求項１に記載のデータ圧縮装置において、
上記符号化手段は、上記第１の検出手段による上記第２の文字列の検索、上記第２の検出手段による上記第３の文字列の検索が同一の入力文字の検索時に終了した場合は、上記第１の文字列及び上記第２の文字列の総文字数、あるいは上記検索開始文字及び上記第３の文字列の総文字数に基づいて上記選択を行う、
ことを特徴とするデータ圧縮装置。
【請求項４】
請求項１ないし請求項３のいずれか１項に記載のデータ圧縮装置において、
上記記憶手段の全てのエントリに文字が格納されたことを示す状態表示手段と、
上記状態表示手段より上記記憶手段の各エントリの格納状態を入力し、上記記憶手段に空きエントリがある場合には上記記憶手段のエントリ毎の空き情報を格納し、上記記憶手段に空きエントリが無い場合には上記第２の検出手段の検出情報を格納する情報格納手段とを備えた、
ことを特徴とするデータ圧縮装置。
【請求項５】
入力文字列と一致する符号化済み文字列の検索を行い、その結果を用いて入力文字列を符号化するデータ圧縮装置において、
符号化するための文字を受け取る入力手段と、
既に符号化済みの文字を上記入力手段より入力し、指定アドレスに格納する記憶手段と、
上記入力手段で受け取った文字と上記記憶手段に格納されている個々の文字とを比較し、上記入力手段で受け取った文字が上記記憶手段に格納されているか否かを判断する比較手段と、
上記記憶手段に格納されている文字列のうち、上記入力文字列の異なる開始文字から始まり最長に一致する複数の文字列を上記比較手段の出力に基づき検出する検出手段と、
上記検出手段において最初に検出された文字列を含む符号化候補文字列の長さを求める第１の計数手段と、
上記比較手段および前記検出手段の出力を入力し、上記検出手段において検出した複数の文字列の中で最初に検出された文字列以外の文字列を識別する論理手段と、
上記論理手段において検出された文字列の中で上記第１の計数手段とは異なる開始文字から始まる文字列を含む符号化候補文字列の長さを求める第２の計数手段と、
上記第１の係数手段、および上記第２の計数手段の出力に応じて上記検出手段で検出した文字列の何れかを選択し、符号化する符号化手段とを備えた、
ことを特徴とするデータ圧縮装置。
【請求項６】
請求項５に記載のデータ圧縮装置において、
上記入力文字列のうち、検索開始文字及び該検索開始文字の次の文字から始まる第４の文字列を第３の符号化候補文字列とし、
上記入力文字列のうち、上記検索開始文字から始まる第５の文字列、及び該第５の文字列の次の文字から始まる第６の文字列を第４の符号化候補文字列とし、
上記検出手段および第１の計数手段は、第４の符号化候補文字列を検索し、
上記論理手段および第２の計数手段は、第３の符号化候補文字列を検索する、
ことを特徴とするデータ圧縮装置。
【請求項７】
請求項６に記載のデータ圧縮装置において、
上記符号化手段は、上記第４の文字列の検索と上記第６の文字列の検索が同一の入力文字で終了した場合は、上記第３の符号化候補文字列を選択し符号化する、
ことを特徴とするデータ圧縮装置。
【請求項８】
請求項６に記載のデータ圧縮装置において、
上記符号化手段は、上記第４の文字列の検索と上記第６の文字列の検索が同時に終了した場合は、上記第３の符号化候補文字列の総文字数、あるいは上記第４の符号化候補文字列の総文字数に基づいて標記選択を行う、
ことを特徴とするデータ圧縮装置。
【請求項９】
請求項６ないし請求項７のいずれか１項に記載のデータ圧縮装置において、
上記記憶手段の全てのエントリに文字が格納されたことを示す状態表示手段と、
上記状態表示手段より上記記憶手段の各エントリの格納状態を入力し、上記記憶手段に空きエントリがある場合には上記記憶手段のエントリ毎の空き情報を格納し、上記記憶手段に空きエントリが無い場合には上記論理手段の検出情報を格納する情報格納手段とを備えた、
ことを特徴とするデータ圧縮装置。
【請求項１０】
請求項１または請求項５に記載のデータ圧縮装置において、
上記比較手段から出力される個々の比較結果を格納する結果格納手段と、
上記入力手段で受け取ったデータを格納するデータ格納手段と、
上記入力手段で受け取ったデータと上記データ格納手段のデータとを比較する第２の比較手段と、
上記第２の比較手段により上記両データが一致していることが確認された場合、上記比較手段の出力と上記結果格納手段に格納された値とを比較し、一致していなければ再度比較を行うよう上記比較手段を制御する比較制御手段とを備えた、
ことを特徴とするデータ圧縮装置。
【請求項１１】
請求項１０に記載のデータ圧縮装置において、
上記記憶手段の全てのエントリに文字が格納されたことを示す状態表示手段と、
上記状態表示手段より上記記憶手段の各エントリの格納状態を入力し、上記記憶手段に空きエントリがある場合には上記記憶手段のエントリ毎の空き情報を格納し、上記記憶手段に空きエントリが無い場合には上記第２の検出手段の検出情報を格納する情報格納手段とを備えた、
ことを特徴とするデータ圧縮装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ圧縮方法に係わり、特に、既に符号化済みの文字列の中から入力文字列と最長一致する文字列を求め、該一致文字列の位置情報を用いて入力文字列を符号化するデータ圧縮装置に関するものである。
【背景技術】
【０００２】
従来のデータ圧縮装置は、データ圧縮方式の一つであるＬＺ７７（スライド辞書法）において、圧縮率を高めるために入力（圧縮対象）文字列の先頭文字から辞書登録されている符号化済み文字列と最長に一致する第１文字列（以下、ＳＴＲ１１と記す）と、ＳＴＲ１１の次の入力文字から始まり辞書登録されている符号化済み文字列と最長に一致する第２文字列（以下、ＳＴＲ１２と記す）による圧縮コードを生成した場合と、入力文字列の先頭文字のみからなる第１文字列（以下、ＳＴＲ２１と記す）と、ＳＴＲ２１の次の入力文字から始まり辞書登録されている符号化済み文字列と最長に一致する第２文字列（以下、ＳＴＲ２２と記す）による圧縮コードを生成しそれぞれの圧縮率を求め、より圧縮率の高い文字列候補の圧縮コードを採用し、データ圧縮を行う（例えば、特許文献１参照）。図１５に従来のデータ圧縮装置における符号器の構成図を示す。
【０００３】
図１５において、図に示していない履歴バッファ内の符号化済み文字列の中から第１の候補文字列１０のうち、文字Ｃ１から始まり最長一致する文字列（文字Ｃ１から文字Ｃｉまで）をＳＴＲ１１、文字Ｃｉ＋１から始まり最長一致する文字列（文字Ｃｉ＋１から文字Ｃｍまで）をＳＴＲ１２とし、２つの文字列ＳＴＲ１１，ＳＴＲ１２に対応する圧縮コードＣＣＤ１１，ＣＣＤ１２を生成し、その圧縮率を圧縮率演算部１５にて求める。この圧縮率演算部１５では、例えば、文字列ＳＴＲ１１とＳＴＲ１２の総文字数を、圧縮コードＣＣＤ１１とＣＣＤ１２の総ビット数で除算することで圧縮率を求めている。
【０００４】
また、同様に、第２の候補文字列２０のうち、文字Ｃ１をＳＴＲ２１、文字Ｃ２から始まり最長一致する文字列（文字Ｃ２から文字Ｃｎまで）をＳＴＲ２２とし、２つの文字列ＳＴＲ２１，ＳＴＲ２２に対応する圧縮コードＣＣＤ２１，ＣＣＤ２２を生成し、その圧縮率を圧縮率演算部２５にて求める。この圧縮率演算部２５では、第１の文字列候補１０の場合と同様に、文字列ＳＴＲ２１とＳＴＲ２２の総文字数を、文字列ＳＴＲ２１とＳＴＲ２２に対応する圧縮コードＣＣＤ２１とＣＣＤ２２の総ビット数で除算することで圧縮率を求める。
【０００５】
そして、比較部３０において、圧縮率演算部１５および２５において求めた圧縮率の大小判定を行い、その結果に基づき、符号出力部４０において第１の候補文字列１０の圧縮コードＣＣＤ１１とＣＣＤ１２、または第２の候補文字列２０の圧縮コードＣＣＤ２１とＣＣＤ２２を選択し出力する。
【０００６】
また、従来のデータ圧縮装置は、圧縮装置における故障検出を行うために、履歴バッファと同じ文字情報を格納するバッファメモリを用意し、圧縮時にスライド辞書に書き込んだデータを、同時にバッファメモリに格納しておき、スライド辞書部への文字の書き込みが行われる毎に、書き込みを行ったエントリの隣の位置のデータをバッファメモリとスライド辞書からそれぞれ読み出し比較を行うことで、履歴バッファの故障の有無を確認している（例えば、特許文献２参照）。図１６に従来の故障検出可能なデータ圧縮装置のブロック図を示す。
【０００７】
図１６において、入力文字は、履歴バッファ部６０とバッファメモリ６５の両方の、ライトポインタ５０により管理されたアドレスに格納される。
【０００８】
この履歴バッファ部６０を用いて入力文字の検索を行い、２文字以上連続した文字列が見つからなかった場合は、故障検出を行う。この故障検出は、履歴バッファ部６０とバッファメモリ６５の両方からライトポインタ５０に格納されたアドレス−１の位置からデータを読み出し、比較器７０において２つのデータを比較することで行う。
【特許文献１】特開平５−１５０９３９号公報（第６−９頁、第１図）
【特許文献２】特開２００２−１３５１２９号公報（第４−６頁、第１図）
【発明の開示】
【発明が解決しようとする課題】
【０００９】
しかしながら、上記従来の構成では、２つの候補文字列１０および２０の中から最適な（より圧縮率の高い）文字列を決定するために、まず履歴バッファを検索して２つの候補文字列１０および２０を決定し、それぞれの候補に対応した実際の圧縮コードＣＣＤ１１とＣＣＤ１２、およびＣＣＤ２１とＣＣＤ２２を生成する。その後、それぞれの圧縮コードにおける圧縮率を求めるため、ハードウェアによるデータ圧縮装置を実現する場合は処理速度が重要となるため、圧縮率演算部を二重化（１５および２５）する必要がある。また、この圧縮率を求めるために除算等を行っており、ハードウェア規模が増大するとともに、処理の高速化が困難である。
【００１０】
また、圧縮率により候補文字列を決定するため、連続一致文字列の長さに関係なく候補が決定されることから、連続一致文字列の短い方の候補文字列が選択された場合にも、連続一致文字列の長い文字列の検索のために既に処理した入力データでの再度の文字列検索を行う必要があり、そのためにハードウェアが増大するとともに制御が複雑になるという課題を有していた。
【００１１】
さらに、ハードウェアの故障検出を行うために履歴バッファ部６０と同じデータを履歴バッファ部６０とは独立したバッファメモリ６５に２重に保持しておく必要があり、ハードウェア規模が増大するという課題を有していた。
【００１２】
本発明は、上記従来の課題を解決するもので、圧縮率を高めるために２文字以上連続する２つの文字列と、開始文字を１文字ずらせた２つの圧縮候補文字列から最適な文字列を決定するために、ハードウェアの増加を抑え、圧縮率等の複雑な演算を行うことなくかつ高速化が可能なデータ圧縮装置を提供することを目的とする。
【００１３】
また、ハードウェアの故障検出を、バッファメモリを２重化することなく行うことが可能なデータ圧縮装置を提供することを目的とする。
【課題を解決するための手段】
【００１４】
上記従来の課題を解決するために、本発明の請求項１にかかるデータ圧縮装置は、入力文字列と一致する符号化済み文字列の検索を行い、その結果を用いて入力文字列を符号化するデータ圧縮装置において、符号化するための文字を受け取る入力手段と、既に符号化済みの文字を上記入力手段より入力し、指定アドレスに格納する記憶手段と、上記入力手段で受け取った文字と上記記憶手段に格納されている個々の文字とを比較し、上記入力手段で受け取った文字が上記記憶手段に格納されているか否かを判断する比較手段と、上記記憶手段に格納されている文字列のうち、上記入力文字列の検索開始文字から始まり最長に一致する第１の文字列と、該第１の文字列の次の文字から始まり最長に一致する第２の文字列とからなる第１の符号化候補文字列の検索を上記比較手段の出力に基づき行う第１の検出手段と、上記第１の検出手段により検出された上記第１の符号化候補文字列の長さを求める第１の計数手段と、上記記憶手段に格納されている文字列のうち、上記入力文字列の上記検索開始文字の次の文字から始まり最長に一致する第３の文字列の検索を上記比較手段の出力に基づき行う第２の検出手段と、上記第２の検出手段により検出された、上記検索開始文字列と上記第３の文字列とからなる第２の符号化候補文字列の長さを求める第２の計数手段と、上記第１，第２の検出手段の検索結果、および上記第１，第２の計数手段の出力に基づき、上記第１の符号化候補文字列、または上記第２の符号化候補文字列のいずれかを選択し、符号化する符号化手段と、を備えたことを特徴とするものである。
【００１５】
これにより、本来の文字列検索と本来の文字列検索の開始位置を１文字ずらしてた２つの検索を同時に行え、さらに計算の複雑な圧縮率を求めることなく２つの符号化候補文字列から圧縮率の低下を抑えたデータ圧縮をすることができる。
【００１６】
また、本発明の請求項２にかかるデータ圧縮装置は、請求項１に記載のデータ圧縮装置において、上記符号化手段は、上記第１の検出手段による上記第２の文字列の検索、及び上記第２の検出手段による上記第３の文字列の検索が同一の入力文字の検索時に終了した場合は、上記第２の符号化候補文字列を選択し符号化することを特徴とするものである。
【００１７】
また、本発明の請求項３にかかるデータ圧縮装置は、請求項１に記載のデータ圧縮装置において、上記符号化手段は、上記第１の検出手段による上記第２の文字列の検索、上記第２の検出手段による上記第３の文字列の検索が同一の入力文字の検索時に終了した場合は、上記第１の文字列及び上記第２の文字列の総文字数、あるいは上記検索開始文字及び上記第３の文字列の総文字数に基づいて上記選択を行うことを特徴とするものである。
【００１８】
また、本発明の請求項４にかかるデータ圧縮装置は、請求項１ないし請求項３のいずれか１項に記載のデータ圧縮装置において、上記記憶手段の全てのエントリに文字が格納されたことを示す状態表示手段と、上記状態表示手段より上記記憶手段の各エントリの格納状態を入力し、上記記憶手段に空きエントリがある場合には上記記憶手段のエントリ毎の空き情報を格納し、上記記憶手段に空きエントリが無い場合には上記第２の検出手段の検出情報を格納する情報格納手段とを備えたことを特徴とするものである。
【００１９】
これにより、状態表示手段と結果格納手段により記憶手段を共有化することができ、その結果、ハードウェアの削減ができる。
【００２０】
また、本発明の請求項５にかかるデータ圧縮装置は、入力文字列と一致する符号化済み文字列の検索を行い、その結果を用いて入力文字列を符号化するデータ圧縮装置において、符号化するための文字を受け取る入力手段と、既に符号化済みの文字を上記入力手段より入力し、指定アドレスに格納する記憶手段と、上記入力手段で受け取った文字と上記記憶手段に格納されている個々の文字とを比較し、上記入力手段で受け取った文字が上記記憶手段に格納されているか否かを判断する比較手段と、上記記憶手段に格納されている文字列のうち、上記入力文字列の異なる開始文字から始まり最長に一致する複数の文字列を上記比較手段の出力に基づき検出する検出手段と、上記検出手段において最初に検出された文字列を含む符号化候補文字列の長さを求める第１の計数手段と、上記比較手段および前記検出手段の出力を入力し、上記検出手段において検出した複数の文字列の中で最初に検出された文字列以外の文字列を識別する論理手段と、上記論理手段において検出された文字列の中で上記第１の計数手段とは異なる開始文字から始まる文字列を含む符号化候補文字列の長さを求める第２の計数手段と、上記第１の係数手段、および上記第２の計数手段の出力に応じて上記検出手段で検出した文字列の何れかを選択し、符号化する符号化手段とを備えたことを特徴とするものである。
【００２１】
これにより、本来の文字列検索と本来の文字列検索の開始位置を１文字ずらしてた２つの検索を同時に行うことができ、また、計算の複雑な圧縮率を求めることなく２つの圧縮候補文字列から選択することができるため、１つの検出手段で連続一致している文字列の検出を行うことができる。
【００２２】
また、本発明の請求項６にかかるデータ圧縮装置は、請求項５に記載のデータ圧縮装置において、上記入力文字列のうち、検索開始文字及び該検索開始文字の次の文字から始まる第４の文字列を第３の符号化候補文字列とし、上記入力文字列のうち、上記検索開始文字から始まる第５の文字列、及び該第５の文字列の次の文字から始まる第６の文字列を第４の符号化候補文字列とし、上記検出手段および第１の計数手段は、第４の符号化候補文字列を検索し、上記論理手段および第２の計数手段は、第３の符号化候補文字列を検索することを特徴とするものである。
【００２３】
また、本発明の請求項７にかかるデータ圧縮装置は、請求項６に記載のデータ圧縮装置において、上記符号化手段は、上記第４の文字列の検索と上記第６の文字列の検索が同一の入力文字で終了した場合は、上記第３の符号化候補文字列を選択し符号化することを特徴とするものである。
【００２４】
また、本発明の請求項８にかかるデータ圧縮装置は、請求項６に記載のデータ圧縮装置において、上記符号化手段は、上記第４の文字列の検索と上記第６の文字列の検索が同時に終了した場合は、上記第３の符号化候補文字列の総文字数、あるいは上記第４の符号化候補文字列の総文字数に基づいて標記選択を行うことを特徴とするものである。
【００２５】
また、本発明の請求項９にかかるデータ圧縮装置は、請求項６ないし請求項７のいずれか１項に記載のデータ圧縮装置において、上記記憶手段の全てのエントリに文字が格納されたことを示す状態表示手段と、上記状態表示手段より上記記憶手段の各エントリの格納状態を入力し、上記記憶手段に空きエントリがある場合には上記記憶手段のエントリ毎の空き情報を格納し、上記記憶手段に空きエントリが無い場合には上記論理手段の検出情報を格納する情報格納手段とを備えたことを特徴とするものである。
【００２６】
これにより、状態表示手段と結果格納手段により記憶手段を共有化することができ、その結果、ハードウェアの削減をすることができる。
【００２７】
また、本発明の請求項１０にかかるデータ圧縮装置は、請求項１または請求項５に記載のデータ圧縮装置において、上記比較手段から出力される個々の比較結果を格納する結果格納手段と、上記入力手段で受け取ったデータを格納するデータ格納手段と、上記入力手段で受け取ったデータと上記データ格納手段のデータとを比較する第２の比較手段と、上記第２の比較手段により上記両データが一致していることが確認された場合、上記比較手段の出力と上記結果格納手段に格納された値とを比較し、一致していなければ再度比較を行うよう上記比較手段を制御する比較制御手段とを備えたことを特徴とするものである。
【００２８】
これにより、ハードウェア量を抑えた構成で、比較手段の故障検出を行うことができ、より正確にデータ圧縮をすることができる。
【００２９】
また、本発明の請求項１１にかかるデータ圧縮装置は、請求項１０に記載のデータ圧縮装置において、上記記憶手段の全てのエントリに文字が格納されたことを示す状態表示手段と、上記状態表示手段より上記記憶手段の各エントリの格納状態を入力し、上記記憶手段に空きエントリがある場合には上記記憶手段のエントリ毎の空き情報を格納し、上記記憶手段に空きエントリが無い場合には上記第２の検出手段の検出情報を格納する情報格納手段とを備えたことを特徴とするものである。
【００３０】
これにより、状態表示手段と結果格納手段により記憶手段を共有化することができ、その結果、ハードウェアの削減をすることができる。
【発明の効果】
【００３１】
本発明のデータ圧縮装置によれば、１つの入力文字列に対して、連続一致文字列検索時に１文字ずらした文字列の検索を平行して検索するとともに、２つの候補文字列に対して、その文字列長に基づき選択を行うようにしたので、複雑な演算を行うことなく文字列長により圧縮候補文字列を選択することができ、高速に処理が行える。
【００３２】
また、ＦＵＬＬレジスタを設け、履歴バッファの全エントリに文字が格納された後、空きエントリを管理するためのレジスタを、第２候補文字列検索に使用するレジスタと共用することを可能とすることで、ハードウェアの増加を抑えることが可能となる。
【００３３】
さらに、履歴バッファの全エントリに文字が格納された後、空きエントリを管理するためのレジスタを用いて、前回の比較結果との一致を確認するようにしたので、故障検出が可能となり、バッファメモリを２重に持つ必要が無く、ハードウェアの増加を招くことなく、故障検出が可能となる。
【発明を実施するための最良の形態】
【００３４】
以下に、本発明のデータ圧縮装置の実施の形態を図面とともに詳細に説明する。
（実施の形態１）
以下に、本発明の実施の形態１にかかるデータ圧縮装置について説明する。
図１は、本実施の形態１によるデータ圧縮装置のブロック図を示す。
【００３５】
図１において、入力データ・バッファ・レジスタ（以下、ＩＤＢＲと記す）１００は、被圧縮データの１文字を保持する。データ・バッファ・レジスタ（以下、ＢＩＤＢＲと記す）１０５は、上記ＩＤＢＲ１００の出力データを保持する。履歴バッファ（Ｈｉｓｔｏｒｙ  Ｂｕｆｆｅｒ）は、コントロール配列１１０とメモリ配列１２０とからなり、履歴バッファ内に保持された個々のデータと上記ＩＤＢＲ１００の出力データとを比較する。第１の一次セレクタ（以下、ＰＳと記す）１３０および第２の一次セレクタ（以下、ＰＰと記す）１４０はそれぞれ、上記履歴バッファ内における比較結果を入力し、一つ前の入力文字までの連続一致情報を元に文字列の連続一致を判定する。二次セレクタ（以下、ＳＳと記す）１５０は、上記ＰＳ１３０より出力される連続一致情報、あるいは上記ＰＰ１４０より出力される連続一致情報のいずれかを選択する。アドレス発生器１６０は、プライオリティエンコーダなどで構成され、上記ＳＳ１５０にて選択された連続一致情報を入力し、メモリ配列１２０内のアドレスを発生する。カウンタ２００，２０５はそれぞれ、上記ＰＳ１３０および上記ＰＰ１４０において格納された連続一致文字列数をカウントする。制御回路２２０は、データ圧縮装置全体を制御する。コード生成手段２２５は、コード生成を行う。レジスタ２１０は、カウンタ２００の値を保持する。
【００３６】
以下に、データ圧縮処理の概要について説明する。一般に圧縮コードは、連続一致文字数の長い文字列のほうが連続一致文字数の短い文字列よりも圧縮率は高くなる。従って、個々の文字列の圧縮率を確認しなくても、一部の例外に気をつければ、文字数により圧縮文字列候補の選択が可能となる。
【００３７】
例えば、Ｌｅｍｐｌｅ−Ｚｉｖアルゴリズムによる圧縮方式では、圧縮コードは以下の様になっている。圧縮コードには、被圧縮コードを含む“Ｌｉｔｅｒａｌ”と、被圧縮コードを含む含まない“Ｃｏｐｙ＿ｐｏｉｎｔｅｒ”の２種類、および制御コードがある。Ｌｉｔｅｒａｌは、“０”（１ビット）＋非圧縮文字コード（８ビット）で構成されており、Ｃｏｐｙ＿ｐｏｉｎｔｅｒは、“１”（１ビット）＋Ｌｅｎｇｔｈ＿ｃｏｄｅ＋Ｄｉｓｐｌａｃｅｍｅｎｔで構成されている。
【００３８】
Ｌｅｎｇｔｈ＿ｃｏｄｅは、Ｃｏｐｙ＿ｐｏｉｎｔｅｒにより表現されている被圧縮文字数を表し、被圧縮文字数が２〜３文字であれば２ビット、４〜７文字は４ビット、８〜１５文字は６ビット、１６〜３１文字は８ビット、３２〜２７１文字は１２ビットで表される。本圧縮コードでの最大連続一致文字数は２７１文字で、これを超える連続一致文字列が見つかると、２７２文字目から新たな文字列とする。
【００３９】
Ｄｉｓｐｌａｃｅｍｅｎｔは、履歴バッファ内のエントリの位置を示すものであり、例えば５１２エントリの履歴バッファを用いた場合のＤｉｓｐｌａｃｅｍｅｎｔのビット長は９ビットである。従って、この場合は、Ｃｏｐｙ＿ｐｏｉｎｔｅｒの長さは、１２ビットから２２ビットまでとなる。
【００４０】
以下、この圧縮コードを例にして、１つの入力文字列を対象として２つの候補文字列、すなわち、圧縮開始文字から始まり辞書登録されている符号化済み文字列と最長一致する文字列ＳＴＲ１１、及び該ＳＴＲ１１の次の入力文字から始まり辞書登録されている符号化済み文字列と最長に一致するＳＴＲ１２とからなる第１の圧縮候補文字列と、圧縮開始文字のみからなるＳＴＲ２１、及び該ＳＴＲ２１の次の入力文字から始まり辞書登録されている符号化済み文字列と最長に一致するＳＴＲ２２とからなる第２の圧縮候補文字列を検索し、コード生成を行う場合について説明する。
【００４１】
ここで、文字列ＳＴＲ２１の圧縮コード長は９ビット、Ｃｏｐｙ＿Ｐｏｉｎｔｅｒは１２ビット以上であるため、文字列ＳＴＲ２１とＳＴＲ２２がそれぞれ２文字以上である場合は、ＳＴＲ２１とＳＴＲ２２との組み合わせである第２の圧縮候補文字列の圧縮コードのほうが第１の圧縮候補文字列よりも短くなる。例えば、文字列ＳＴＲ１１、ＳＴＲ１２およびＳＴＲ２２の長さが２文字の場合、それぞれの圧縮コード長は、それぞれ１ビット＋２ビット＋９ビットの計１２ビットとなり、ＳＴＲ２１の圧縮コード長は１ビット＋８ビットの計９ビットとである。従って、文字列ＳＴＲ１１とＳＴＲ１２とからなる第１の圧縮候補文字列、及び文字列ＳＴＲ２１とＳＴＲ２２とからなる２の圧縮候補文字列の圧縮コードの総ビット数はそれぞれ、２４ビットと２１ビットとなり、第２の圧縮候補文字列の圧縮コードのほうが短くなったことが分かる。
【００４２】
しかし、文字列ＳＴＲ１１の長さが２文字（圧縮コード長：１ビット＋２ビット＋９ビット）、文字列ＳＴＲ１２が３１文字（圧縮コード長：１ビット＋８ビット＋９ビット）、文字列ＳＴＲ２１が１文字（圧縮コード長：１ビット＋８ビット）、文字列ＳＴＲ２２が３２文字（圧縮コード長：１ビット＋１２ビット＋９ビット）の場合、第１の圧縮候補文字列の圧縮コードは３０ビット、第２の圧縮候補文字列の圧縮コードは３１ビットとなり、第１の圧縮候補文字列の方が圧縮率が良くなる。このような状況は、以下の組み合わせ（発生条件１）において発生する。
【００４３】
発生条件１：
ＳＴＲ１１の文字列長    ２文字／ＳＴＲ１２の文字列長  ３１文字
ＳＴＲ１１の文字列長    ３文字／ＳＴＲ１２の文字列長  ３０文字
ＳＴＲ１１の文字列長    ３文字／ＳＴＲ１２の文字列長  ３１文字
ＳＴＲ１１の文字列長  ３１文字／ＳＴＲ１２の文字列長    ２文字
ＳＴＲ１１の文字列長  ３０文字／ＳＴＲ１２の文字列長    ３文字
ＳＴＲ１１の文字列長  ３１文字／ＳＴＲ１２の文字列長    ３文字
【００４４】
上記条件で圧縮候補文字列を検出した場合、第２の圧縮候補文字列ではなく、第１の圧縮候補文字列を選択する必要がある。他の条件も含め、上記２つの圧縮文字列を選択するための処理手順を整理すると次のようになる。
【００４５】
まず、ＳＴＲ１１が２文字未満だった場合は、ＳＴＲ１１に対する圧縮コードを生成する。ＳＴＲ１１とＳＴＲ２２の検索が同時に中断した場合は、ＳＴＲ１１に対する圧縮コードを生成する。ＳＴＲ１１の検索がＳＴＲ２２の検索よりも早く中断した場合は、ＳＴＲ１１に代わりＳＴＲ１２を対象にして検索を継続する。ＳＴＲ１２とＳＴＲ２２の検索が同時に中断し、さらに検索されたＳＴＲ１１およびＳＴＲ１２の文字列長が発生条件１を満たした場合は、ＳＴＲ１１、ＳＴＲ１２に対する圧縮コードを生成し、そうでない場合はＳＴＲ２１，ＳＴＲ２２に対する圧縮コードを生成する。また、ＳＴＲ２２の検索がＳＴＲ１２の検索よりも早く中断した場合は、ＳＴＲ１１およびＳＴＲ１２に対する圧縮コードをＳＴＲ１２の中断時に生成する。
【００４６】
次に、本実施の形態１による文字列検索動作の概要を図１を用いて説明する。本実施の形態では、文字列ＳＴＲ１１、ＳＴＲ１２、ＳＴＲ２１、ＳＴＲ２２の４つの文字列の検索を行うが、まず、文字列ＳＴＲ１１を対象とした検索をＰＳ１３０を用いて行い、その連続一致文字数をカウンタ２００を用いて計測する。
【００４７】
文字列ＳＴＲ１１の検索処理は、まず、被圧縮文字列である入力文字列ＳＴＲ１１の先頭の文字をＩＤＢＲ１００に入力し、このＩＤＢＲ１００上の文字がメモリ配列１２０に格納されているかを検索し、その検索結果であるメモリ配列１２０内の位置情報（ＭＡＴＣＨ信号）をＰＳ１３０に格納する。この処理と並行して、次の入力文字に対応するために、ＩＤＢＲ１００上の文字をメモリ配列１２０の適正な位置に格納する。
【００４８】
ＩＤＢＲ１００上の文字がメモリ配列１２０上に格納されていた場合は、２文字目以降の入力文字を処理するために、後続の入力文字をＩＤＢＲ１００に格納し、ＩＤＢＲ１００上の文字がメモリ配列１２０に格納されているかを検索し、その検索結果であるメモリ配列１２０内の位置情報と上記ＰＳ１３０が保持する位置情報とを用いて後続の入力文字と当該入力文字より前の入力文字とがメモリ配列１２０において連続しているか否かを確認する。この連続一致確認は、ＰＳ１３０が保持する連続一致文字列の最終文字位置情報を保持するエントリの隣のエントリにおいて、メモリ配列１２０内で一致文字が見つかったか否かにより行う。
【００４９】
連続一致していることが確認された場合は、新たに連続一致していることが確認された文字のメモリ配列１２０内の位置情報をＰＳ１３０に出力し、該ＰＳ１３０の保持データを更新する。そして、制御回路２２０では、メモリ配列１２０の検索結果をＣＯＭＰ＿ＯＲ信号で、ＰＳ１３０での連続一致確認の結果をＰＳ＿ＯＲ信号でそれぞれ確認し、連続一致している文字が確認される毎にカウンタ２００の値をインクリメントするとともに、連続一致している文字を継続して確認できている間は、ＩＤＢＲ１００に新たな文字を入力し上記処理を繰り返すよう制御する。一方、連続一致している文字が確認できなかった場合は、ＭＡＴＣＨ信号をＰＳ１３０に格納する。
【００５０】
文字列ＳＴＲ２１とＳＴＲ２２に関しては、まず、文字列ＳＴＲ１１の検索の開始時に、該文字列ＳＴＲ１１の先頭文字をＳＴＲ２１としてＢＩＤＢＲ１０５に格納する。以降の後続の入力文字、すなわち文字列ＳＴＲ１１においては２文字目の文字をＳＴＲ２２とし、該ＳＴＲ２２の検索をＰＰ１４０を用いて上記ＳＴＲ１１の検索と並行して同様に行う。すなわち、ＳＴＲ２２の検索開始時に、メモリ配列１２０の検索結果をＰＰ１４０に格納し、以降の入力文字列に対して、メモリ配列１２０の検索結果とＰＰ１４０の保持する情報を用いて、ＰＳ１３０と同様に連続一致確認を行う。このＳＴＲ２２の連続一致文字数の計測は、カウンタ２０５を用いて行う。
【００５１】
制御回路２２０では、メモリ配列１２０の検索結果をＣＯＭＰ＿ＯＲ信号で、ＰＰ１４０による連続一致確認の結果をＰＰ＿ＯＲ信号でそれぞれ確認し、連続一致している文字が確認される毎にカウンタ２０５の値をインクリメントする処理を繰り返すよう制御する。また、上記ＳＴＲ１１およびＳＴＲ２２の連続一致検索中に、文字列ＳＴＲ１１の検索がＳＴＲ２２の検索よりも早く終了した場合、検索結果であるカウンタ２００の値をレジスタ２１０に、ＰＳ１３０の内容をＳＳ１５０にそれぞれ格納し、以降、後続の入力文字列に対して文字列ＳＴＲ１２の検索をＰＳ１３０およびカウンタ２００を用いて上記ＳＴＲ１１の検索と同様の処理を行うよう制御する。
【００５２】
なお、文字列ＳＴＲ２２は、文字列ＳＴＲ１１よりも１文字遅れて検索を開始するため、ＳＴＲ１１が連続一致している場合はＳＴＲ２２も必ず連続一致している。言い換えると、連続一致が中断するのは、ＳＴＲ１１がＳＴＲ２２に対して早く中断する場合、または同時に中断する場合である。また、同様にしてＳＴＲ１２の連続一致確認がＳＴＲ２２の連続一致確認よりも遅れて開始されるため、ＳＴＲ２２がＳＴＲ１２に対して早く中断するか、または同時に中断する場合だけである。従って、それぞれの文字列の連続一致確認動作の中断の仕方により、連続一致検索の処理方法および圧縮コード生成方法を決定する。
【００５３】
次に、データ圧縮のための詳細なデータの流れを説明する。
検索文字、すなわち被圧縮データの一文字がＩＤＢＲ１００に入力されると、メモリ配列１２０内の比較器１２５において、該ＩＤＢＲ１００上のデータと、ＣＡＭ配列に保持されている各エントリ内のデータとを比較し、その比較結果をＭＡＴＣＨ信号として出力する。また、メモリ配列１２０では、上記ＩＤＢＲ１００上の文字の比較動作と平行して、メモリ配列１２０に保持しているデータの更新を行う。
【００５４】
このデータの更新を行うエントリは文字列検索の対象からはずす必要がある。この処理を図２を用いて説明する。図２は、ＣＡ１１０及びメモリ配列１２０のエントリｉの詳細ブロック図である。図において、図１と同一または相当する構成要素については同じ符号を用いる。ＣＡｉ１１０は、メモリ配列１２０内のデータを更新するか否かを選択する書き込みセレクタ（ＷＳ）２４０と、当該エントリｉが空きエントリであるか否かを示す空きセル（ＥＣ）１６５とからなる。なお、ＥＣ１６５は、圧縮動作の開始時にリセット信号により初期化される。メモリ配列１２０ｉは、当該エントリｉのデータを保持するレジスタ１２１と、上記レジスタ１２１の保持データとＩＤＢＲ１００上のデータとを比較する比較器１２５とからなる。
【００５５】
ＷＳ２４０より当該エントリｉの書き込み指示が行われた場合、レジスタ１２１にＩＤＢＲ１００の出力を格納する。そして、ＩＤＢＲ１００より検索文字データを、レジスタ１２１より該エントリに格納されている文字データを、それぞれ比較器１２５に入力し、ＥＣ１６５より該エントリが空でなく、かつＷＳ２４０によって該エントリが書き込み対象になっていない事を確認した後、上記２つの文字データを比較し、ＭＡＴＣＨ［ｉ］信号を出力する。
【００５６】
メモリ配列１２０の全エントリの中で、ＩＤＢＲ１００上の文字と一致する文字を保持したエントリがあるか否かを確認するために、全エントリのＭＡＴＣＨ信号の論理和をとる。この論理和演算は、図１における論理和回路１８０で行ない、その結果をＣＯＭＰ＿ＯＲ信号として出力する。ＣＯＭＰ＿ＯＲ信号により一致文字があることを確認した場合は、以降、入力される検索文字列が連続一致するか否かを、ＰＳ１３０およびＰＰ１４０を用いて確認をする。
【００５７】
次に、メモリ配列１２０上のエントリ（ｉ−１）とエントリｉが連続一致しているか否か如何に判断するかを図３を用いて説明する。図３は、第１の一次セレクタ１３０及び第２の一次セレクタ１４０のエントリｉの詳細ブロック図である。第１の一次セレクタＰＳｉ１３０は、論理積回路２３５と、セレクタ２３３と、レジスタ２３７とからなる。第２の一次セレクタＰＰｉ１４０は、セレクタ２３０と、論理積回路２３４と、セレクタ２３２と、レジスタ２３６とからなる。
【００５８】
メモリ配列１２０内の各エントリｉとＩＤＢＲ１００内の文字が一致したか否かを示すＭＡＴＣＨ［ｉ］信号がメモリ配列１２０から出力され、ＰＳ１３０では、このＭＡＴＣＨ［ｉ］信号を、文字列ＳＴＲ１１および文字列ＳＴＲ１２の一致検出に用いる。
【００５９】
ＰＳ１３０内のｉ番目のエントリ（以下、ＰＰｉと記す）の論理積回路２３５では、ＭＡＴＣＨ［ｉ］信号と、該エントリの隣のエントリ（ｉ−１）における一致情報（１文字前までの連続一致情報）ＰＳ［ｉ−１］信号との論理積を取り、論理和回路１８５に出力する。論理和回路１８５では、各エントリから出力される論理積の論理和を取り、連続一致を継続しているエントリがあるか否かを示すＰＳ＿ＯＲ信号を出力する。セレクタ２３３では、該ＰＳ＿ＯＲ信号がアサートされた場合は、論理積回路２３５出力信号を、そうでない場合はＭＡＴＣＨ［ｉ］信号を選択し、レジスタ２３７に格納する。
【００６０】
従って、ＰＳ＿ＯＲ信号がアサートされた場合、すなわち連続一致文字列が検出された場合は、文字列が連続一致していることが確認されたエントリのレジスタ２３７のみ論理値“１”がセットされ、ＰＳ［ｉ］信号として出力される。
【００６１】
文字列ＳＴＲ２２の連続一致文字検出を行うＰＰ内のｉ番目のエントリ（以下、ＰＰｉと記す）１４０に関しても、ＰＳｉ１３０とほぼ同様の動作をする。セレクタ２３０では、隣のエントリ（ｉ−１）における一致情報（１文字前までの連続一致情報）を選択し出力する。なお、ＰＰｉ１４０では、文字列ＳＴＲ１１よりも一文字遅れて連続一致文字の検出を開始するため、検索を行わない場合は、セレクタ２３０により論理値“０”を選択できるようにしている。
【００６２】
ＰＰｉ１４０の論理積回路２３４では、ＭＡＴＣＨ［ｉ］信号とＰＰ［ｉ−１］信号との論理積をとって隣のエントリの文字列と連続しているかを確認し、連続していることを確認した場合は論理積［ｉ］信号を論理和回路１９０に出力する。論理和回路１９０では、各エントリから出力された論理積の論理和を取り、履歴バッファ内に連続一致している文字列があるか否かを示すＰＰ＿ＯＲ信号を出力する。セレクタ２３２では、該ＰＰ＿ＯＲ信号がアサートされた場合は、論理積回路２３４出力信号を、そうでない場合はＭＡＴＣＨ［ｉ］信号を選択し、レジスタ２３６に格納する。
【００６３】
従って、ＰＰ＿ＯＲ信号がアサートされた場合は、ＰＰｉ１４０内の文字列が連続一致していることが確認されたエントリのレジスタ２３６のみ論理値“１”がセットされ、ＰＰ［ｉ］信号として出力される。
【００６４】
制御回路２２０では、アドレス発生器１６０により発生した文字列のアドレス情報を、カウンタ２００、カウンタ２０５、およびレジスタ２１０より文字列長を、ＢＩＤＢＲ１０５より文字データを入力し、圧縮コードの生成を行うようコード生成手段２２５を制御する。ここで、アドレス発生器１６０は、例えばプライオリティエンコーダ等の構成をとっており、２次セレクタＳＳ１５０より入力した位置情報に基づき文字列圧縮のためのアドレスを発生する。
【００６５】
以下、図１において、ＳＴＲ１１とＳＴＲ１２とからなる第１の圧縮候補文字列と、ＳＴＲ２１とＳＴＲ２２とからなる第２の圧縮候補文字列を検出し、何れの候補文字列を選択し圧縮コード生成を行うかにつき、その処理手順を説明する。
【００６６】
（処理手順１）文字列ＳＴＲ１１を対象とした文字列検索の開始
まず、検索処理の開始前に、連続一致文字列数をカウンタ２００およびカウンタ２０５を用いて計測するためにそれぞれのカウント値を初期化しておく。そして、ＩＤＢＲ１００上に先頭の文字を入力し、メモリ配列１２０内での一致検索を行う。その検索結果が、ＭＡＴＣＨ信号およびＣＯＭＰ＿ＯＲ信号として出力される。なお、文字列ＳＴＲ１１の検索の開始であるので、検索結果に関係なく、ＭＡＴＣＨ信号は、セレクタ２３３を通じてＰＳ１３０の所定の各エントリに格納される。従って、一致文字列が無かった場合（ＣＯＭＰ＿ＯＲ信号がアサートされない場合）は、ＰＳ１３０の全エントリがクリアされることになる。
【００６７】
上記メモリ配列１２０内での一致検索の結果、一致文字列が無かった場合は、ＩＤＢＲ１００上の文字をＬｉｔｅｒａｌとしてコード出力するとともに、処理手順１に戻り、再度、文字列ＳＴＲ１１の検索を行う。Ｌｉｔｅｒａｌコードの出力は、コード生成手段２２５が対象文字をＢＩＤＢＲ１０５経由で入力し行う。
【００６８】
一致文字列が見つかった場合は、つまり、ＣＯＭＰ＿ＯＲ信号がアサートされた場合は、カウンタ２００をインクリメントするとともに、文字列ＳＴＲ１１の検索開始時に、ＩＤＢＲ１００上の最初の文字を文字列ＳＴＲ２１としてＢＩＤＢＲ１０５に格納し、以降、処理手順２の処理を行う。
【００６９】
（処理手順２）文字列ＳＴＲ１１の検索および文字列ＳＴＲ２２の検索開始
処理手順２では、上記処理手順１にて入力文字列の先頭の１文字、すなわち文字列ＳＴＲ１１の先頭文字がメモリ配列１２０内で見つかったため、文字列ＳＴＲ１１の後続文字の一致検索を行うとともに、該後続文字を文字列ＳＴＲ２２の最初の１文字として文字列ＳＴＲ１１の一致検索を開始する。
【００７０】
文字列ＳＴＲ１１の連続一致検索はＰＳ１３０を利用して行ない、連続一致文字列数はカウンタ２００を用いて計測する。文字列ＳＴＲ１１の連続一致検索と同時に、ＳＴＲ２２の先頭文字の検索結果でもあるＭＡＴＣＨ信号をＰＰ１４０に格納する。
【００７１】
検索の結果、ＳＴＲ１１が連続一致していた場合は、カウンタ２００およびカウント２０５をインクリメントし、以降処理手順３を行う。
【００７２】
文字列ＳＴＲ１１の連続一致が無かった場合は、文字列ＳＴＲ１１の先頭文字および現検索対象文字の２文字をＬｉｔｅｒａｌとしてコード出力し、処理手順１に戻る。このコード生成は、ＩＤＢＲ１００、およびＢＩＤＢＲ１０５上の２文字をＢＩＤＢＲ１０５経由でコード生成手段２２５に入力し行う。
【００７３】
なお、連続一致文字列が無い場合、２つの要因が考えられる。第１の要因は、ＩＤＢＲ１００上の文字がメモリ配列１２０上に無かった場合である。この場合、ＣＯＭＰ＿ＯＲ信号およびＰＳ＿ＯＲ信号がアサートされず、文字列ＳＴＲ１１およびＳＴＲ２２ともに見つからない場合である。第２の要因は、ＰＳ１３０において連続一致文字列が見つからなかった場合である。この場合は、ＰＳ＿ＯＲ信号がアサートされない場合で、ＳＴＲ２２は見つかっている可能性はあるが、文字列ＳＴＲ１１が２文字以上連続していないため、次の入力文字から再度検索を新たに始める。
【００７４】
（処理手順３）文字列ＳＴＲ１１およびＳＴＲ２２の連続一致検索
処理手順３では、上記処理手順２にて文字列ＳＴＲ１１の２文字以上が連続一致文字列としてメモリ配列１２０内で見つかったため、文字列ＳＴＲ１１およびＳＴＲ２２のそれぞれの後続文字の連続一致検索を行う。文字列ＳＴＲ１１の処理に関しては、処理手順２と同様である。また、文字列ＳＴＲ２２の連続一致検索は、ＰＳ１３０上にある前回の検索結果を利用して行なう。
【００７５】
検索の結果、文字列ＳＴＲ１１およびＳＴＲ２２が連続一致している場合は、カウンタ２００およびカウント２０５をインクリメントし、処理手順３を継続する。
【００７６】
文字列ＳＴＲ１１が不一致、文字列ＳＴＲ２２が連続一致している場合は、文字列ＳＴＲ１１に代わり、新たに文字列ＳＴＲ１２の検索を開始するために、カウンタ２００の値をレジスタ２１０に格納するとともに、カウンタ２００を初期化する。ＳＳ１５０は、ＰＳ１３０の出力を選択しその値を保持する。さらに、カウンタ２０５はインクリメントし、処理手順４の処理を行う。
なお、検索の結果が文字列ＳＴＲ１１が連続一致、文字列ＳＴＲ２２が不一致の場合は発生しない。
【００７７】
（処理手順４）ＳＴＲ１１の連続一致が中断
処理手順４では、文字列ＳＴＲ１２の先頭文字から新たに検索を行う。すなわち、この時のＩＤＢＲ１００上にある文字が文字列ＳＴＲ１２の開始文字となるので、文字列ＳＴＲ１２を対象とした文字列検索をＰＳ１３０を用いて開始するために、ＰＳ１３０に、メモリ配列１２０の比較結果を示すＭＡＴＣＨ信号を格納する。
【００７８】
文字列ＳＴＲ２２に関しては、連続一致が継続している場合と、既に連続一致が中断している場合があるが、ＭＡＴＣＨ信号を用いてＰＰ１４０において連続一致検索を行う。既に連続一致が中断している場合は、ＰＰ１４０内の連続一致情報が全てクリアされているため、連続一致文字列が見つかることはない。従って、ＳＴＲ２２の連続一致検索は、これまでの連続一致状態に依存することなく同一の処理を行う。
【００７９】
この処理における検索の結果、文字列ＳＴＲ１２の先頭文字が見つかり、かつＳＴＲ２２が連続一致を継続している場合、および文字列ＳＴＲ１２の先頭文字が見つかり、かつ文字列ＳＴＲ２２の連続一致が中断した場合は、処理手順５に移行する。
【００８０】
文字列ＳＴＲ１２の先頭文字が見つからず、かつＳＴＲ２２も連続一致が中断した場合は、文字列ＳＴＲ１１のＣｏｐｙ＿Ｐｏｉｎｔｅｒおよび、現ＩＤＢＲ１００上の文字をＬｉｔｅｒａｌコードとして出力する。このとき、文字列ＳＴＲ１１の圧縮コードは、コード生成手段２２５において、ＳＳ１５０上の位置情報に基づきアドレス発生器１６０にて生成したアドレスと、レジスタ２１０上の文字数を用いて生成する。以降は、新たなＳＴＲ１１を対象として文字列検索を行うために、処理手順１に移行する。
【００８１】
なお、文字列ＳＴＲ１２の先頭文字が見つからず、かつＳＴＲ２２が連続一致を継続する場合は、発生しない。
【００８２】
（処理手順５）：文字列ＳＴＲ１２およびＳＴＲ２２の連続一致が継続
処理手順５では、文字列ＳＴＲ１２と文字列ＳＴＲ２２とが連続一致しているか否かについて検索を行う。なお、この処理は、処理手順３においてＳＴＲ１１の代わりに文字列ＳＴＲ１２の処理することを除けば同様である。
【００８３】
検索の結果、文字列ＳＴＲ１２およびＳＴＲ２２が連続一致している場合は、カウンタ２００およびカウンタ２０５をインクリメントし、処理手順５を継続する。
【００８４】
文字列ＳＴＲ１２が連続一致、文字列ＳＴＲ２２が不一致の場合は、カウンタ２００をインクリメント、およびカウンタ２０５を初期化する。この処理において、ＰＰ１４０内の各レジスタ２３６の連続一致情報はクリアされるため、文字列ＳＴＲ１２の連続一致がこれ以降継続しても、ＳＴＲ２２が連続一致することは無くなる。以降、処理手順５の処理を継続する。
【００８５】
文字列ＳＴＲ１２、ＳＴＲ２２ともに連続一致が中断した場合は、第１の圧縮候補文字列（文字列ＳＴＲ１１とＳＴＲ１２）、または第２の圧縮候補文字列（文字列ＳＴＲ２１とＳＴＲ２２）のいずれかの圧縮コードを生成し出力する。この場合の圧縮コード出力は、文字列ＳＴＲ１１とＳＴＲ１２とからなる第１の圧縮候補文字列の総文字数と、文字列ＳＴＲ２１とＳＴＲ２２とからなる第２の圧縮候補文字列の総文字数が同じであるため、第２の圧縮候補文字列を選択することを基本とする。
【００８６】
ただし、第１の圧縮候補文字列、つまり、文字列ＳＴＲ１１とＳＴＲ１２それぞれの文字数の組み合わせは、圧縮後のサイズが逆転する場合があるため、この圧縮アルゴリズムにおいては、既に述べた発生条件（上記発生条件１）を満たす場合は、第１の圧縮候補文字列である文字列ＳＴＲ１１およびＳＴＲ１２を選択し圧縮コードを生成する。そのために、制御回路２２０では、ＳＴＲ１２の文字数をカウンタ２００から、ＳＴＲ１１の文字数をレジスタ２１０から入力し、２つの候補の何れを用いるか決定する。この決定に基づき、文字列ＳＴＲ１２、またはＳＴＲ２２の連続一致文字列の最終文字の位置情報をＳＳ１５０に移動する。第１の圧縮候補文字列が選択された場合は、ＳＳ１５０上のＳＴＲ１１の位置情報に基づくアドレス発生器１６０でのアドレス発生を行った後に、ＳＴＲ１２の位置情報をＳＳ１５０に移動する。アドレス発生器１６０は、ＳＳ１５０より連続一致情報を入力し、アドレス生成を行う。
【００８７】
第２の圧縮候補文字列である文字列ＳＴＲ２１およびＳＴＲ２２が選択された場合は、コード生成手段２２５において、文字列ＳＴＲ２１はＬｉｔｅｒａｌコードを出力するために、ＢＩＤＢＲ１０５より文字列ＳＴＲ２１に対応する文字を入力し、コード出力を行う。文字列ＳＴＲ２２に関してはＣｏｐｙ＿Ｐｏｉｎｔｅｒを出力するために、コード生成手段２２５では、アドレス発生器１６０より開始アドレスとカウンタ２０５の値を用いてコード出力を行う。
【００８８】
また、圧縮対象文字列として、文字列ＳＴＲ１１およびＳＴＲ１２を選択した場合は、文字列ＳＴＲ１１およびＳＴＲ１２に関してはともにＣｏｐｙ＿Ｐｏｉｎｔｅｒを出力する。そのために、文字列ＳＴＲ１１については、ＳＳ１５０より位置情報を入力し、アドレス生成をアドレス発生器１６０で行い、コード生成手段２２５においてその出力を入力するとともに、文字数をレジスタ２１０より入力しコードを出力する。
【００８９】
次に、文字列ＳＴＲ１２については、ＰＳ１３０より位置情報をＳＳ１５０経由でアドレス発生器１６０に入力し、開始アドレスを生成するとともに、コード生成手段２２５においてそのアドレスを入力し、カウンタ２００より文字数を入力しコード出力を行う。なお、コード生成と平行して、新たな文字列ＳＴＲ１１を対象として文字列検索をおこなうために、カウンタ２００およびカウンタ２０５を初期化し、ＰＳ１３０にＭＡＴＣＨ信号を格納するとともに、ＰＰ１４０はセレクタ２３０で論理値“０”を選択し内部の情報をクリアする。
【００９０】
なお、文字列ＳＴＲ１２が不一致、ＳＴＲ２２が連続一致している場合は、この組み合わせは発生しない。
【００９１】
以上説明したように、処理手順１から５を繰り返し、連続一致文字検索およびコード生成を行う。
このような実施の形態１では、１次セレクタとしてＰＳ１３０とともにＰＰ１４０を設け、各１次セレクタでの連続一致文字数をカウンタ２００および２０５でカウントし、レジスタ２１０で文字列ＳＴＲ１１のカウント値を保持することにより、文字列ＳＴＲ１１、ＳＴＲ１２、ＳＴＲ２２の連続文字列の検索および連続文字数がカウントでき、制御回路２２０において最適な文字コードを生成するよう制御することができる。
【００９２】
さらに、１つの入力文字列に対して、連続一致文字列検索時に１文字ずらした文字列の検索を平行して検索するとともに、２つの候補文字列に対して、その文字列長に基づき選択を行うようにしたので、複雑な演算を行うことなく文字列長により圧縮候補文字列を選択することができ、高速に処理が行える。
【００９３】
なお、本実施の形態１では、文字列ＳＴＲ２２の検索開始時に、文字列ＳＴＲ１１の連続一致文字列と文字列ＳＴＲ２２の先頭の文字のエントリが一致する場合に、ＳＴＲ１１を優先したが、ＳＴＲ２２を優先しても良い。
【００９４】
（実施の形態２）
以下に、本発明の実施の形態２にかかるデータ圧縮装置について説明する。
【００９５】
図４は、本実施の形態２のデータ圧縮装置のブロック図を示す。図４において、図１と同一または相当する構成要素については同じ符号を用い、その説明を省略する。なお、実施の形態１の構成と異なる点は、第２の１次セレクタをＣＡ３００と共用し、かつＣＡ３００を１次セレクタとして使うために、メモリ配列１２０の全エントリにデータを格納したことを示すためのＦＵＬＬレジスタ３４０を設けた点である。
【００９６】
ＦＵＬＬレジスタ３４０は、データの圧縮開始からメモリ配列１２０の全エントリにデータが格納されるまでの期間は論理値“０”、メモリ配列１２０の全エントリにデータが格納された後は論理値“１”になる。
【００９７】
図５は、ＣＡ３００およびメモリ配列１２０のひとつのエントリの詳細ブロック図である。図５において、図２と同一または相当する構成要素については同じ符号を用い、その説明を省略する。
【００９８】
論理和回路３６０は、ＦＵＬＬレジスタ３４０の出力値と、ＥＣ３５０の出力値との論理和を取り、比較器１２５に出力する。従って、論理和回路３６０の出力は、ＦＵＬＬレジスタ３４０の出力が論理値“０”の場合、ＥＣ３５０の値がそのまま出力され、当該エントリが空きであるか否かにより比較器１２５の制御を行うことができる。また、ＦＵＬＬレジスタ３４０の出力が論理値“１”の場合、常に論理値“１”が出力され、比較器１２５はＥＣ３５０とは独立に動作可能となる。つまり、ＦＵＬＬレジスタ３４０が論理値“０”の間は、文字列ＳＴＲ２１およびＳＴＲ２２の検索は行わず、ＦＵＬＬレジスタ３４０が論理値“１”になった後、ＳＴＲ２１およびＳＴＲ２２の検索を行うよう制御する。
【００９９】
ＥＣ３５０は、文字列ＳＴＲ２２の検索時にＰＰＯ信号を入力し格納する。
図６は、１次セレクタＰＳ１３０およびＰＰＭ３１０のひとつのエントリの内部ブロック図である。図６において、図３と同一または相当する構成要素については同じ符号を用い、その説明を省略する。ＰＰＭ３１０は、実施の形態１で説明した図３に示すＰＰ１４０とほとんど同じ構成であるが、レジスタ２３６とＥＣ１６５とを共用するようにしたため、レジスタ２３６が削除された点と、連続一致情報がＥＣ３５０上に格納されているため、ＥＣ信号を入力するようにした点が異なる。
【０１００】
以下、ＰＰＯ信号の生成方法について、図６を用いて説明する
ＰＰＭ３１０では、連続文字列の検索開始の場合、セレクタ２３２でＭＡＴＣＨ［ｉ］信号を選択しＰＰＯ信号として出力する。また、連続一致確認の場合、セレクタ２３０でＥＣ［ｉ−１］信号を選択し、該ＥＣ［ｉ−１］信号とＭＡＴＣＨ［ｉ］信号との論理積を論理積回路２３４で求め、セレクタ２３２でこの出力を選択しＰＰＯ［ｉ］信号として出力する。
【０１０１】
以上のように生成されたＰＰＯ信号が全エントリのＥＣ３５０に格納された後、つまり、メモリ配列１２０の全エントリにデータ（連続一致情報）が格納された後、ＥＣ３５０は１次セレクタとして連続一致文字列ＳＴＲ２２の検索に用いることが可能となる。なお、他の動作は上記実施の形態１と同じである。
【０１０２】
このような実施の形態２では、ＦＵＬＬレジスタ３４０を設け、ＥＣ３５０に第２の圧縮候補文字列の連続一致確認に使用する一致情報を格納することにより、レジスタの共用が可能となり、ハードウェアの増加を抑えるとともに、圧縮率を高めることができる。
【０１０３】
（実施の形態３）
以下に、本発明の実施の形態３にかかるデータ圧縮装置について説明する。
図７は、本実施の形態３によるデータ圧縮装置のブロック図を示す。図７において、図１と同一または相当する構成要素は同じ符号を用い、その説明を省略する。なお、実施の形態1の構成と異なる点は、１次セレクタをＰＳ１３０のみとし、一次セレクタＰＳ１３０において第１の圧縮候補文字列（文字列ＳＴＲ１１、ＳＴＲ１２）、及び第２の圧縮候補文字列（文字列ＳＴＲ２１、ＳＴＲ２２）の連続一致情報を両方処理するようにし、ＰＳ１３０において、ＳＴＲ１１、ＳＴＲ１２、ＳＴＲ２１，ＳＴＲ２２のうち、いずれの候補文字列の連続一致情報を管理しているか、その情報を保持するＭＤセレクタ５００、および２次セレクタＳＳ５５０を設けた点である。
【０１０４】
圧縮のための連続一致文字検索は、圧縮対象文字がＩＤＢＲ１００に格納され、その文字と既に圧縮された文字列との一致検索がメモリ配列１２０を用いてなされ、その結果を用いてＰＳ１３０において連続一致を確認する。文字列ＳＴＲ１１、ＳＴＲ１２とＳＴＲ２１、ＳＴＲ２２のうちの何れの連続一致情報がＰＳ１３０に格納されているかを示すために、文字列ＳＴＲ２２の最初の文字に対するメモリ配列１２０での検索結果をＭＤセレクタ５００に格納する。
【０１０５】
図８は、ＰＳ１３０およびＭＤ５００のひとつのエントリの詳細ブロック図である。図８において、図１と同一または相当する構成要素については同じ符号を用い、その説明を省略する。
【０１０６】
ＭＤセレクタ５００の一つのエントリは、ＰＳ１３０のレジスタ２３７がいずれの文字列情報を保持しているかを示すレジスタ２３６と、文字列ＳＴＲ２２の検索の開始時にＭＡＴＣＨ信号を取り込む論理和回路５０２と、文字列ＳＴＲ２２の連続一致を確認するための論理和回路５０１とからなるものである。
【０１０７】
ここで、ＭＤセレクタ５００の詳細について、図８を用いて説明する。
レジスタ２３６は、文字列ＳＴＲ２２の最初の文字の検索を行う場合に、現ＭＡＴＣＨ［ｉ］信号を格納する。ただし、そのエントリがＰＳ１３０において文字列ＳＴＲ１１の連続一致文字列でもあることが分かった場合は、文字列ＳＴＲ１１を優先するために、レジスタ２３６をクリアする。また、文字列ＳＴＲ２２の最初の文字以降の連続一致を確認している場合は、該エントリの隣のエントリにおいて連続一致していることがＰＳ１３０で確認されており、かつＭＤ［ｉ−１］信号によりＳＴＲ２２の文字列候補であることが示されている場合にセットされるよう、セレクタ２３２、論理和回路５０１，５０２を制御する。
【０１０８】
次に、全体の動作を図９を用いて説明する。図９（ａ）は、この動作例における入力データ（被圧縮データ）を示しており、入力データの下に、この例における２つの連続一致文字列を矢印で示している。この動作例では、履歴バッファは既に埋まっており、図９（ｂ）は、圧縮（検索）開始時における履歴バッファ上のデータと、データが入力される毎の、履歴バッファの各エントリに対応したＭＡＴＣＨ信号、ＰＳ信号、およびＭＤ信号（つまり、履歴バッファのエントリｉの場合は、ＭＡＴＣＨ［ｉ］信号、ＰＳ［ｉ］信号、ＭＤ［ｉ］信号）を、入力文字列に対応させて上から下に向けて示している。
【０１０９】
（１）最初に文字Ａを入力し検索を行なう。
まず、文字列ＳＴＲ１１の第１文字目を対象として検索を行う。なお、文字ＡはＳＴＲ２１となる。
履歴バッファの検索結果は列ＡのＭＡＴＣＨ信号に出力される。この例では、履歴バッファのエントリ０の位置に文字Ａが格納されているので、このエントリにおいてだけＭＡＴＣＨ信号が１となる。最長一致文字列の最初の文字の検索であるので、ＭＡＴＣＨ信号がそのままＰＳ１３０に格納され、ＳＴＲ１１を対象にのみ検索を行っているので、ＭＤ信号は全て０のままとなる。
【０１１０】
（２）文字Ｂの検索
次に、文字列ＳＴＲ１１の第２文字、および文字列ＳＴＲ２２の第１文字目を対象として行う。
履歴バッファの検索結果は列ＢのＭＡＴＣＨ信号に出力される。本例では、履歴バッファのエントリ１および６に文字Ｂが格納されておりこの位置のＭＡＴＣＨ信号に１が出力される。
【０１１１】
そして、エントリ１は、エントリ０のＰＳ信号が１となっていることから連続一致していることが分かるので、エントリ１のＰＳ信号は１となる。また、エントリ０のＭＤビットが０であるから、ＳＴＲ２１を対象にしたものではないことが分かり、ＭＤビットは０となる。
【０１１２】
一方、エントリ６は、エントリ５のＰＳビットが０であること、およびＳＴＲ２１の先頭文字の検索タイミングであることから、ＭＡＣＴＨ信号を一次セレクタＰＳに格納するとともに、ＭＤ信号を１にする。
【０１１３】
（３）文字Ｃの検索
次に、文字列ＳＴＲ１１の第３番目の検索、および文字列ＳＴＲ２２の第２番目の文字の検索を行う。
履歴バッファの検索結果は列ＣのＭＡＴＣＨ信号に出力される。本例では、ＳＴＲ１１候補がエントリ１まで連続一致しているが、エントリ２におけるＭＡＴＣＨ信号は０となっていることから、連続一致が中断したことを確認することができ、ＳＴＲ１１が文字列ＡＢ、すなわちエントリ０とエントリ１の２文字であることが決定された。
【０１１４】
一方、ＳＴＲ２１候補に関しては、ＭＡＴＣＨ信号は履歴バッファのエントリ７において１であり、エントリ６のＰＳ信号およびＭＤ信号が１であるので、ＳＴＲ２２候補の連続一致であることがわかり、エントリ７のＰＳ信号およびＭＤ信号に１を格納する。
【０１１５】
さらに、ＭＡＴＣＨ信号は、履歴バッファのエントリ１２において一致しており、このエントリに関してはエントリ１１のＰＳ信号およびＭＤ信号が０となっており、文字列ＳＴＲ１１に対する連続一致ではないことから文字列ＳＴＲ１２候補の先頭文字であることが分かり、対応するエントリのＭＡＴＣＨ信号をＰＳ信号に格納する。さらに、文字列ＳＴＲ２２の先頭文字の検索を行うタイミングではないのでＭＤビットは０となる。
【０１１６】
（４）文字Ｄの検索
次に、文字列ＳＴＲ１２の第２番目の検索、および文字列ＳＴＲ２２の第３番目の検索を行う。
履歴バッファの検索結果は列ＤのＭＡＴＣＨ信号に出力される。本例では、エントリ８とエントリ１３の位置のＭＡＴＣＨ信号に１が出力される。
【０１１７】
文字列ＳＴＲ１２の候補は、エントリ１３で連続一致しているので対応するエントリのＰＳ信号が１に、ＭＤ信号が０に設定される。
【０１１８】
また、文字列ＳＴＲ２２の候補は、エントリ８で連続一致しているので、対応エントリのＰＳ信号が１に、ＭＤ信号が１に設定される。
【０１１９】
（５）文字Ｇの検索
次に、文字列ＳＴＲ１２の第３番目の検索、および文字列ＳＴＲ２２の第４番目の検索を行う。
【０１２０】
履歴バッファの検索結果は列ＧのＭＡＴＣＨ信号に出力される。本例では、一致したエントリは無いことがわかる。従って、全エントリにおいて検索の結果、一致したエントリが無いので、全エントリのＰＳ信号およびＭＤ信号が０に設定され、文字列ＳＴＲ１２およびＳＴＲ２２の連続一致が中断したことを確認することができ、
ＳＴＲ１１＝”ＡＢ”、ＳＴＲ１２＝”ＣＤ”
ＳＴＲ２１＝”Ａ”、  ＳＴＲ２２＝”ＢＣＤ”
のように確定した。
【０１２１】
この結果に基づき、文字列ＳＴＲ２１，ＳＴＲ２２の連続一致の組み合わせに対応した圧縮コードを生成する。
コード生成は以下の手順で行う。
【０１２２】
第２の圧縮候補文字列が選択された場合、つまり、文字列ＳＴＲ２１およびＳＴＲ２２が選択された場合、文字列ＳＴＲ２１に関してはＬｉｔｅｒａｌコードを出力するために、ＢＩＤＢＲ１０５より文字列ＳＴＲ２１に対応する文字を入力し、コード出力を行う。文字列ＳＴＲ２２に関してはＣｏｐｙ＿Ｐｏｉｎｔｅｒを出力するために、ＭＤセレクタ５００より文字列ＳＴＲ２２の位置情報を入力しアドレス発生器１６０よりアドレスを生成するとともに、カウンタ２０５の値を用いてコード出力を行う。
【０１２３】
第１の圧縮候補文字列が選択された場合、つまり、文字列ＳＴＲ１１およびＳＴＲ１２が選択された場合は、文字列ＳＴＲ１１およびＳＴＲ１２に関してともにＣｏｐｙ＿Ｐｏｉｎｔｅｒを出力する。文字列ＳＴＲ１１については、文字列ＳＴＲ１１の検索が終了した時点で、ＰＳ１３０およびＭＤ５００の出力をＳＳ５５０に入力し、各エントリごとにＰＳ１３０の出力とＭＤ５００の出力を反転したものとの論理積を取り、その結果を保持する。これと同時に文字列ＳＴＲ１１の文字列長をカウンタ２００からレジスタ２１０に格納しておく。そして、文字列ＳＴＲ１１のコード生成時に、ＳＳ５５０上の値からアドレス発生器１６０にてアドレスを生成し、レジスタ２１０より文字数を入力し、コードを生成する。また、文字列ＳＴＲ１２については、ＰＳ１３０およびＭＤ５００の出力をＳＳ５５０に入力し、各エントリごとにＰＳ１３０の出力とＭＤ５００の出力を反転したものとの論理積を取りその結果に基づき、アドレス発生器１６０で開始アドレスを生成し、カウンタ２００より文字数を入力しコード出力を行う。
【０１２４】
なお、コード生成の条件は、上記実施の形態１と同様に行う。この例では文字列ＳＴＲ１１とＳＴＲ１２の総文字数と、文字列ＳＴＲ２１とＳＴＲ２２の総文字数が同じであるが、実施の形態１におけるコード生成時の発生条件を満たさないため、文字列ＳＴＲ２１およびＳＴＲ２２を選択する。
【０１２５】
このような実施の形態３では、１次セレクタとしてＰＳ１３０のみ設け、２つの候補の何れの連続一致情報を保持するかＭＤ５００により管理し、それぞれの候補文字列の連続一致文字数をカウンタ２００および２０５でカウントし、レジスタ２１０でＳＴＲ１１のカウント値を保持することにより、ＳＴＲ１１、ＳＴＲ１２、ＳＴＲ２２の連続文字列の検索および連続文字数がカウントでき、制御回路２２０において最適な文字コードを生成することができる。
【０１２６】
また、１つの入力文字列に対して、連続一致文字列検索時に１文字ずらした文字列の検索を平行して検索するとともに、２つの候補文字列に対して、その文字列長に基づき選択を行うようにしたので、複雑な演算を行うことなく文字列長により圧縮候補文字列を選択することができ、高速に処理が行える。
【０１２７】
（実施の形態４）
以下に、本発明の実施の形態４にかかるデータ圧縮装置について説明する。
図１０は、本実施の形態４にかかるデータ圧縮装置のブロック図を示す。図１０において、図７と同一または相当する構成要素については同じ符号を用い、その説明を省略する。なお、実施の形態３の構成と異なる点は、ＭＤセレクタをＣＡ３００において共用し、かつＣＡ３００をＭＤセレクタとして使うために、メモリ配列１２０の全エントリにデータを格納したことを示すためのモード設定用にＦＵＬＬレジスタ３４０を設けた点である。
【０１２８】
ＦＵＬＬレジスタ３４０は、データの圧縮開始からメモリ配列１２０の全エントリにデータが格納されるまでの期間は論理値“０”に設定され、メモリ配列１２０の全エントリにデータが格納されるた後は論理値“１”となる。
【０１２９】
図１１にＣＡレジスタ３００およびメモリ配列１２０の１つのエントリの詳細ブロック図を示す。図１１において、図５と同一または相当する構成要素については同じ符号を用い、その説明を省略する。
【０１３０】
論理和回路３６０は、ＦＵＬＬレジスタ３４０の値と、ＥＣレジスタ３５０の値との論理和を取り、比較器１２５に出力する。
【０１３１】
図１２は、１次セレクタＰＳ１３０およびＰＭＤ６００のひとつのエントリの内部ブロック図である。図１２において、図８と同一または相当する構成要素については同じ符号を用い、その説明を省略する。
【０１３２】
ＰＭＤ６００は、上記実施の形態３で説明した図８に示すＭＤ５００とほとんど同じ構成であるが、レジスタ２３６とＥＣレジスタ３５０とを共用するようにしたため、レジスタ２３６が削除された点と、連続一致情報がＥＣレジスタ３５０上に格納されているため、ＥＣ信号を入力するようにした点が異なる。
【０１３３】
次に、本実施の形態４によるデータ圧縮装置のＣＡレジスタ３００の動作について説明する。
ＦＵＬＬレジスタ３４０の出力が論理値“０”の場合、論理和回路３６０から比較器１２５に対しＥＣレジスタ３５０の値をそのまま出力し、当該エントリが空きであるか否かにより比較器１２５の制御を行う。
【０１３４】
ＦＵＬＬレジスタ３４０の出力が論理値“１”の場合、論理和回路３６０から比較器１２５に対し論理値“１” を出力し、レジスタ１２１が常に空きエントリでないことを示す。そして、ＥＣレジスタ３５０では、ＦＵＬＬレジスタ３４０が論理値“１”にセットされた後、次のように制御される。
【０１３５】
文字列ＳＴＲ２２の検索開始時に、文字列ＳＴＲ１１の候補文字列で無い場合（ＰＳ［ｉ−１］信号１３６が論理値“０”）はＰＭＤ［ｉ］信号を格納し、それ以外の場合は論理値“０”をＥＣレジスタ３５０に設定する。文字列ＳＴＲ２２の最初の文字の検索で無い場合は、ＰＳ［ｉ−１］１３０により隣のエントリまで連続一致し、かつＥＣ［ｉ−１］レジスタ３５０によりＳＴＲ２２の文字列候補であることが示されているとき、ＰＭＤ[ｉ]信号をＥＣレジスタ［ｉ］３５０に格納する。
【０１３６】
以上のようにして、ＦＵＬＬレジスタ３４０が論理値“１”となるまでは、文字列ＳＴＲ２１およびＳＴＲ２２の検索は行わず、論理値“１”になった後、文字列ＳＴＲ２１およびＳＴＲ２２の検索を行う。他の動作は、実施の形態３と同じである。
【０１３７】
このような実施の形態４では、ＦＵＬＬレジスタ３４０を設けたことにより、メモリ配列１２０の全エントリが埋まった後はＭＤセレクタとして連続一致文字列ＳＴＲ１１、ＳＴＲ１２、およびＳＴＲ２２の検索に用いることが可能となる。さらに、ＭＤ６００をＥＣレジスタを用いて実装することにより、必要なレジスタ（フリップ・フロップ）を共用できハードウェアを削減することができる。
【０１３８】
（実施の形態５）
以下に、本発明の実施の形態５にかかるデータ圧縮装置について説明する。
図１３に、本実施の形態５によるデータ圧縮装置のブロック図を示す。図１３において、図１と同一または相当する構成要素については同じ符号を用い、その説明を省略する。なお、実施の形態１と異なる点は、ＦＵＬＬレジスタ３４０、ＩＤＢＲ１００の出力を格納するバッファ（以下、ＣＢＵＦと記す）９００、比較器９１０、および制御用配列（以下、ＣＡと記す）７１０を設けた点である。
【０１３９】
本実施の形態５によるデータ圧縮装置は、メモリ配列１２０の故障検出を、ＩＤＢＲ１００から故障検出に使用する文字をＣＢＵＦ９００に退避し、その退避した文字によるメモリ配列１２０の検索結果、すなわち比較器１２５の出力をエントリ毎に記録しておき、ＣＢＵＦ９００と比較器９１０により同じ文字が再度ＩＤＢＲ１００に入力されたことを確認した場合に、ＩＤＢＲ１００上の文字の検索結果が前回の結果と一致するか否かを確認することにより行うものである。
【０１４０】
図１３において、ＣＡ７１０は、故障検出のための期待値として比較器１２５の出力を格納する。このＣＡ７１０では、空きエントリの管理、および書き込みエントリの管理を行うが、空きエントリの管理をしている際に故障検出を行う。そのため、空きエントリの管理情報、あるいは故障検出の期待値のいずれの情報を保持するかをＦＵＬＬレジスタ３４０を用いて制御する。
【０１４１】
ＦＵＬＬレジスタ３４０は、メモリ配列１２０の全エントリへのデータの格納が終わるまで、すなわち空きのエントリがある間は論理値“０”であり、全エントリへのデータ格納完了により論理値“１”となる。従って、このＦＵＬＬレジスタ３４０の値が論理値“０”の場合は、ＣＡ７１０で空きエントリの管理を行い、ＦＵＬＬレジスタ３４０の値が論理値“１”の場合に故障検出に使用する。
【０１４２】
ＣＢＵＦ９００は、ＦＵＬＬレジスタ３４０の出力が論理値“１”の場合に、メモリ配列１２０内のエントリの故障を検出するために、ＩＤＢＲ１００の出力する文字を格納する。
【０１４３】
比較器９１０は、ＣＢＵＦ９００の出力文字とＩＤＢＲ１００の出力文字とを比較しその結果を出力する。ＣＡ７１０のＥＣ３５０では、この出力を用いて、前回の検索結果との比較を行うか否かを判断する。
【０１４４】
なお、ＣＢＵＦ９００の文字の更新は、故障検出に使用する文字がメモリ配列１２０内からなくなった時点で、ＣＢＵＦ９００上の文字を新たな文字と置き換える。この置き換えを行うことで、メモリ配列１２０の全エントリの故障検出が行えることになる。
【０１４５】
図１４に、メモリ配列１２０およびＣＡ７１０のひとつエントリの詳細なブロック図を示す。図１４において、図５と同一または相当する構成要素については同じ符号を用い、その説明を省略する。なお、上記実施の形態１と異なる点は、ＥＣ３５０をメモリ配列１２０の故障検出に使用する点である。
【０１４６】
ＣＡ７１０は、ＦＵＬＬレジスタ３４０が論理値“０”の間は、上記実施の形態１のＣＡ１１０と同様の動作を行う。ＦＵＬＬレジスタ３４０の論理が１になった後は、論理和回路３６０の出力が常に論理値“１”となり、ＩＤＢＲ１００とレジスタ１２１上の文字の比較を行う比較器１２５はＥＣレジスタ３５０の値に依存することなく処理を行えるようになる。
【０１４７】
以下に、メモリ配列１２０の故障検出方法について説明する。
まず、レジスタ１２１に既に登録されている文字とＩＤＢＲ１００上の文字との比較を比較器１２５で行い、その比較結果を対応するエントリのＥＣ３５０に格納するとともに、ＩＤＢＲ１００上の文字をＣＢＵＦ９００に格納する。
【０１４８】
また、ＩＤＢＲ１００上の文字を格納するメモリ配列１２０の該エントリは、書き換え対象のエントリであるので、比較器１２５の比較結果は常に不一致となるが、書き込まれる文字はＣＢＵＦ９００上の文字と同一なので該エントリのＥＣレジスタ３５０に論理値“１”を設定する。このように設定することにより、ＩＤＢＲ１００に同じ文字が入力された場合、該エントリにおける比較器１２５の結果は一致することが期待されるが、故障が生じていた場合は比較器１２５の比較結果は不一致となり、メモリ配列１２０での故障検出が行われる。
【０１４９】
次に、新たな圧縮対象の文字がＩＤＢＲ１００に格納され、メモリ配列１２０の検索を行う。この検索において、まずＩＤＢＲ１００上のデータとＣＢＵＦ９００上のデータが比較器９１０において比較され、一致したか否かその結果が出力される。この比較において一致していた場合は、メモリ配列１２０内の各エントリのＭＡＴＣＨ信号と、ＥＣレジスタ３５０に格納された論理が一致することを排他的論理和回路９３０で確認する。
【０１５０】
さらに、メモリ配列１２０の全エントリにおいて一致したか否かを、論理積回路９２５を用いて確認する。メモリ配列１２０の全エントリにおいて一致することを確認した場合、すなわち論理積回路９２５の出力が論理値“０”となった場合は、メモリ配列１２０において故障は生じていないと判断し、次の入力文字を処理する。一方、一致しないことを確認した場合、すなわち論理積回路９２５の出力が論理値“１”の場合は、メモリ配列１２０において故障が生じたと判断する。
【０１５１】
比較器９１０にてＣＢＵＦ９００の出力文字とＩＤＢＲ１００の出力文字とを比較した結果、一致しなかった場合は、期待値となる比較結果が無いので、故障検出は行わず、次の入力文字を処理する。なお、比較器９１０において不一致であった場合は、ＩＤＢＲ１００の文字を格納するメモリ配列１２０内のエントリに対応するＥＣレジスタ３５０の値をクリアする。
【０１５２】
このＥＣレジスタ３５０のクリアにより、いずれのエントリにおいてもＣＢＵＦ９００と同じ文字を格納していないことを、ＥＣレジスタ３５０の値が全て論理値“０”になったか否かを論理和回路９２０で検出する。
【０１５３】
論理和回路９２０の出力が論理値“０”の場合は、故障検出が行えない。従って、次のＩＤＢＲ１００への入力文字をＣＢＵＦ９００へ再格納する。
【０１５４】
論理和回路９２０の出力が論理値“０”で無い場合は、ＣＢＵＦ９００上の文字と同じ文字を格納したメモリ配列１２０上のエントリがまだあるので、ＣＢＵＦ９００を更新せず、処理を継続する。その後の処理は、上記した通りである。
【０１５５】
このような実施の形態５では、ＣＢＵＦ９００、比較器９１０およびＥＣレジスタ３５０を用いて、各エントリ毎に比較結果を確認することが出来、さらにＥＣレジスタ３５０をＦＵＬＬレジスタ３４０により使用方法を変更することことで、必要なレジスタを増加することなくメモリ配列１２０の故障検出を行うことができる。
【０１５６】
なお、以上の説明では、ＣＢＵＦ９００上の文字と同じ文字を格納するエントリがなくなった時点で、ＣＢＵＦ９００の更新をするよう構成した例で説明したが、比較器９１０でＮ回（Ｎは１以上の整数）の一致があった場合にＣＢＵＦ９００の文字の更新を行う構成についても同様に実施可能である。
【産業上の利用可能性】
【０１５７】
本発明にかかるデータ圧縮装置は、ハードウエア規模を抑えてデータ圧縮を効率よく行うことのできるデータ圧縮装置として有用である。
【図面の簡単な説明】
【０１５８】
【図１】本発明の実施の形態１におけるデータ圧縮装置のブロック図
【図２】本発明の実施の形態１におけるヒストリバッファの詳細ブロック図
【図３】本発明の実施の形態１における１次セレクタのブロック図
【図４】本発明の実施の形態２におけるデータ圧縮装置のブロック図
【図５】本発明の実施の形態２におけるヒストリバッファの詳細ブロック図
【図６】本発明の実施の形態２における１次セレクタのブロック図
【図７】本発明の実施の形態３におけるデータ圧縮装置のブロック図
【図８】本発明の実施の形態３における１次セレクタのブロック図
【図９（ａ）】被圧縮データの一例を示す図
【図９（ｂ）】図９（ａ）に示す被圧縮データが入力された場合の連続一致文字検索を説明するための図
【図１０】本発明の実施の形態４におけるデータ圧縮装置のブロック図
【図１１】本発明の実施の形態４におけるヒストリバッファの詳細ブロック図
【図１２】本発明の実施の形態４における１次セレクタのブロック図
【図１３】本発明の実施の形態５におけるデータ圧縮装置のブロック図
【図１４】本発明の実施の形態５におけるヒストリバッファの詳細ブロック図
【図１５】従来のデータ圧縮装置の符号器の構成図
【図１６】従来の故障検出可能なデータ圧縮装置のブロック図
【符号の説明】
【０１５９】
１０，２０      文字列候補
１５，２５      圧縮率演算部
３０            比較部
４０            符号出力部
５０            バッファメモリ
６０            履歴バッファ
７０            比較器
１００，１０５  入力データバッファ
１１０          制御配列
１２０          メモリ配列
１３０，１４０  一次配列
１５０          二次配列
１６０          アドレス発生器
１８０，１９５，１９０  論理和回路
２００，２０５  カウンタ
２１０          レジスタ
２２０          制御回路
２４０          書き込み選択セル
３００          制御配列
３５０          ＥＣ
６００          ＰＭＤ
７１０          制御配列
３４０          ＦＵＬＬレジスタ
９００          ＣＢＵＦ
９１０          比較器
【図１】
2005175940.tif 000003
【図２】
2005175940.tif 000004
【図３】
2005175940.tif 000005
【図４】
2005175940.tif 000006
【図５】
2005175940.tif 000007
【図６】
2005175940.tif 000008
【図７】
2005175940.tif 000009
【図８】
2005175940.tif 000010
【図９（ａ）】
2005175940.tif 000011
【図９（ｂ）】
2005175940.tif 000012
【図１０】
2005175940.tif 000013
【図１１】
2005175940.tif 000014
【図１２】
2005175940.tif 000015
【図１３】
2005175940.tif 000016
【図１４】
2005175940.tif 000017
【図１５】
2005175940.tif 000018
【図１６】
2005175940.tif 000019