JP4556766B2 - 文字列検索回路及び文字列検索方法 - Google Patents

文字列検索回路及び文字列検索方法 Download PDF

Info

Publication number
JP4556766B2
JP4556766B2 JP2005149713A JP2005149713A JP4556766B2 JP 4556766 B2 JP4556766 B2 JP 4556766B2 JP 2005149713 A JP2005149713 A JP 2005149713A JP 2005149713 A JP2005149713 A JP 2005149713A JP 4556766 B2 JP4556766 B2 JP 4556766B2
Authority
JP
Japan
Prior art keywords
character
dictionary
search
character string
circuit
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
Application number
JP2005149713A
Other languages
English (en)
Other versions
JP2006332775A (ja
Inventor
寿幸 廣瀬
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Sony Corp
Original Assignee
Sony Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Sony Corp filed Critical Sony Corp
Priority to JP2005149713A priority Critical patent/JP4556766B2/ja
Priority to US11/383,308 priority patent/US7221291B2/en
Priority to CN2006100844424A priority patent/CN1870131B/zh
Publication of JP2006332775A publication Critical patent/JP2006332775A/ja
Application granted granted Critical
Publication of JP4556766B2 publication Critical patent/JP4556766B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/3084Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method
    • H03M7/3086Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method employing a sliding window, e.g. LZ77

Description

本発明は、例えばLZ77法を採用したデータ圧縮回路内に設けられる文字列検索回路に関し、特に、文字列検索処理の高速化を図ったものに関する。
辞書型のデータ圧縮アルゴリズムの一種として、LZ(Lempel-Ziv)77法が存在している。LZ77法は、例えばAITフォーマット,S−AITフォーマットまたはLTOフォーマットのテープドライブ内のALDC(Adaptive Lossless Data Compression)エンコーダなど、各種のデータ記録装置内のデータ圧縮回路に採用されている(例えば、特許文献1参照。)。
LZ77法の圧縮原理は、過去に入力された文字列(データ列)のうちの直近の所定サイズの文字列を辞書に登録し、新たに入力された(すなわち、圧縮しようとする)文字列と一致する文字列をその辞書から検索して、当該新たに入力された文字列をその一致する文字列のアドレス情報で置き換えるというものである。この辞書は、静的なものではなく、圧縮が進むにつれて、今まさに圧縮しようとする文字列の直前の文字列を追加して古い文字列を除外するようにアップデートされるので、スライド辞書とも呼ばれる。
図7は、この辞書からの文字列の検索の様子を例示する図である。通常は辞書のサイズは512バイト,1024バイトまたは2048バイトであることが多いが、ここでは説明の都合上16バイトとしている。過去に入力された文字列のうちの直近の16文字の文字列「ABCCAB…BCC」(各文字A,B,Cは1バイト)が辞書として登録されている。16バイト前に入力された文字「A」にはアドレス0が付与されており、15バイト前に入力された文字「B」にはアドレス1が付与されており、1バイト前に入力された文字「C」にはアドレス15が付与されている。
例えば、新たに入力された文字列が「ABCA」である場合には、辞書内のアドレス9〜12の文字列が「ABCA」と一致する。そこで、この場合には、マッチアドレス(一致する文字列の最後のアドレスとして定義されるアドレス)として12を出力する。(最終的には、文字列「ABCA」を先頭アドレス9と一致長4とで置換することにより、4バイトの文字列「ABCA」が2バイトに圧縮される。)
また例えば、新たに入力された文字列が「ABC」である場合には、辞書内のアドレス0〜2,4〜6,9〜11,12〜14の文字列がそれぞれ「ABC」と一致する。そこで、この場合には、マッチアドレス(一致する文字列の最後のアドレスとして定義されるアドレス)として2,6,11及び14を出力する。
このように、LZ77法では、圧縮しようとする文字列に一致する文字列を辞書から検索することによって圧縮を行う。そのため、LZ77法を採用したデータ圧縮回路内には、この検索処理を行う文字列検索回路が設けられる。
図8は、LZ77法を採用したデータ圧縮回路内に従来設けられていた文字列検索回路の構成を示すブロック図である。図示しないメモリ(例えばSRAM)内のバイト数Nの辞書の各アドレスi(i=0〜N−1)に対応して、比較回路51(i),2入力1出力のアンド回路52(i),2入力1出力のマルチプレクサ53(i)及びD型フリップ・フロップ54(i)から成るN組の回路群が設けられている。また、N入力1出力のオア回路55が設けられている。
各比較回路51(i)は、検索対象の文字と辞書の対応するアドレスiの文字とを比較し、比較結果m[i](一致するとき‘1’になり不一致のとき‘0’になる信号)を出力する。このm[i]は、同じ組のアンド回路52(i)の一方の入力端に供給されるとともに、同じ組のマルチプレクサ53(i)の入力端S2に供給される。
各アンド回路52(i)のもう一方の入力端には、辞書の1つ手前のアドレスに対応する組のフリップ・フロップ54(i)の出力であるps[i−1]が供給される(例えばアンド回路52(N−1)であれば、フリップ・フロップ54(N−2)の出力であるps[N−2]が供給される)。各アンド回路52(i)の出力ps_and_m[i](matchとも呼ぶことにする)は、同じ組のマルチプレクサ53(i)の入力端S1に供給されるとともに、オア回路55に供給される。
オア回路55の出力orfb(or feed back)は、各組のマルチプレクサ53(i)の選択制御端子Cに供給される。このorfbは、ps_and_m[0]〜ps_and_m[N−1]のうちのいずれか1つのmatchが‘1’であるとき(今回の検索対象の文字列に一致する文字列が辞書に1つでも存在するとき)に‘1’になり、ps_and_m[0]〜ps_and_m[N−1]が全て‘0’であるとき(今回の検索対象の文字列に一致する文字列が辞書に存在しないとき)に‘0’になる。すなわち、orfbは、各クロック周期において、検索対象に一致する文字が辞書に存在するか否かを示す一致/不一致信号である。
各マルチプレクサ53(i)は、このorfbが‘1’のときには、入力端S1に供給されたps_and_m[i]を選択して出力端Dから出力し、他方、このorfbが‘0’のときには、入力端S2に供給されたm[i]を選択して出力端Dから出力する。各マルチプレクサ53(i)の出力は、同じ組のフリップ・フロップ54(i)のD入力端に供給されて、次の入力があるまで出力端Qに保持される。各フリップ・フロップ54(i)の出力端Qに保持されている出力ps[i]は、前述のように、辞書の1つ後のアドレスに対応する組のアンド回路52(i)にps[i−1]として供給される。
なお、図8にはブロック図を示したが、ASIC(特定用途向けLSI)やプログラマブル・ロジック・デバイス(FPGA等)として設計する場合には、この文字列検索回路は、ハードウェア記述言語の一種であるVerilog HDLを用いて図9のように表記することができる。
この文字列検索回路では、1回(動作クロックの1周期)毎に、入力された文字列の1文字ずつについて、その文字に一致する文字を辞書から検索し、且つ、検索対象と一致する文字が辞書に存在するか否かを示すorfbを作成する。そして、検索対象と一致する文字が辞書に存在する場合には、検索結果を次回のクロック周期で利用して、検索対象の文字数を1文字ずつ増やしていく。
すなわち、新たに入力された文字列が例えば「ABCA」であれば、この文字列検索回路は、次の手順で検索を行う。
・1回目:1文字目の「A」と一致する文字を辞書から検索する。
・2回目:「A」と一致する文字が辞書に存在する場合、2文字目の「B」と一致する文字を辞書から検索し、前回の「A」の検索結果を利用して、「AB」と一致する文字列を検索する。
・3回目:「AB」と一致する文字列が辞書に存在する場合、3文字目の「C」と一致する文字を辞書から検索し、前回の「AB」の検索結果を利用して、「ABC」と一致する文字列を検索する。
・4回目:「ABC」と一致する文字列が辞書に存在する場合、4文字目の「A」と一致する文字を辞書から検索し、前回の「ABC」の検索結果を利用して、「ABCA」と一致する文字列を検索する。
図10は、この文字列検索回路の動作を、図7の辞書から「ABCA」を検索する過程において、「ABC」の検索結果を利用して「ABCA」を検索する場合(前述の4回目の検索)を例にとって示す図である。アドレスi=0,4,9,12の文字が「A」に一致するので、アドレスi=0,4,9,12に対応する組の比較回路51(i)の比較結果m[i]は‘1’になり、残りのアドレスに対応する組の比較回路51(i)の比較結果m[i]は‘0’になる。
また、前述の3回目の検索(3文字目の「C」の検索)ではアドレスi=2,6,11,14に対応する組のフリップ・フロップ54(i)の出力ps[i]が‘1’になっているので、アドレスi=2,6,11,14よりも1つ後のアドレスi=3,7,12,15に対応する組のアンド回路52(i)に供給されるps[i−1]は‘1’になり、残りの組のアンド回路52(i)に供給されるps[i−1]は‘0’になる。
その結果、アドレスi=12に対応する組のアンド回路52(i)の出力ps_and_m[i](match)のみが‘1’になり、残りの組のアンド回路52(i)の出力ps_and_m[i](match)は‘0’になる。
そして、1つのps_and_m[i]が‘1’であることからオア回路55の出力orfbが‘1’になるので、各マルチプレクサ53(i)でps_and_m[i]が選択されて、それらのps_and_m[i]が各フリップ・フロップ54(i)の出力端Qに保持される。このようにして、既に図7を用いて説明したようにして、文字列「ABCA」と一致する文字列のマッチアドレス12が求められる。
図10には文字列「ABCA」と一致する文字列が存在する例を示したが、文字列「ABCA」と一致する文字列が存在しない場合(全ての組のアンド回路52(i)の出力ps_and_m[i]が‘0’になった場合)には、オア回路55の出力orfbが‘0’になるので、各マルチプレクサ53(i)でm[i]が選択されて、それらのm[i]が各フリップ・フロップ54(i)の出力端Qに保持される。これにより、4文字目の「A」から、前述のような1文字ずつの手順で再検索が開始される。
図8の文字列検索回路は、オア回路55の出力orfbを遅延させることなく各組のマルチプレクサ53(i)に供給するので、「遅延0」の回路と呼ぶ。
国際公開番号W02003/032296の再公表特許公報(第12〜13頁、第3図、第4図)
ところで、図8の文字列検索回路は、次のような理由から、文字列検索処理を高速化するのに不向きであった。すなわち、この文字列検索回路は、各フリップ・フロップ54(i)の出力ps[i]がアンド回路52(i)やオア回路55での処理を経て再びフリップ・フロップ54(i)に入力するループ構造になっているので、このループが高速に動作することが文字列検索処理の高速化の必要条件になる。しかるに、orfbを出力するオア回路55は、複雑な組み合わせ回路であり遅延量が大きいため、このループがクリティカルパス(遅延の最も大きい経路)になる。そのため、このループによって動作クロックの最大周波数が制限されるので、高速化に不向きであった。
ここで、回路の動作速度を上げる一般的な方法としては、回路中にフリップ・フロップのような遅延手段を挿入することによって処理をパイプライン化するという方法が知られている。しかし、図8の文字列検索回路において、単純にオア回路55の後段にフリップ・フロップを挿入してorfbを遅延させたのでは、「各クロック周期における検索結果を次回のクロック周期に利用する」というアルゴリズムが別のアルゴリズムに変わってしまうので、本来の動作をしなくなってしまう。
本発明は、上述の点に鑑み、LZ77法を採用したデータ圧縮回路内に設けられる文字列検索回路のように、動作クロックの1周期毎に、入力された文字列の1文字ずつについて、その文字に一致する文字を辞書から検索し、且つ、検索対象と一致する文字が辞書に存在するか否かを示す一致/不一致信号を作成し、検索対象と一致する文字が辞書に存在する場合には、検索結果を次回のクロック周期で利用して、検索対象の文字数を1文字ずつ増やすようにした文字列検索回路において、パイプライン処理による文字列検索の高速化を実現することを課題としてなされたものである。
この課題を解決するために、本発明に係る文字列検索回路は、動作クロックの1周期毎に、入力された文字列の1文字ずつについて、その文字に一致する文字を辞書から検索し、且つ、検索対象と一致する文字が辞書に存在するか否かを示す一致/不一致信号を作成し、検索対象と一致する文字が辞書に存在する場合には、検索結果を次回のクロック周期で利用して、検索対象の文字数を1文字ずつ増やすようにした文字列検索回路において、この一致/不一致信号を、この動作クロックのn周期分(nは1以上の整数)遅延させる遅延手段と、或るクロック周期における検索結果を予測する信号として、そのクロック周期よりもn−1周期前からそのクロック周期までのn個の周期の各々(ただしn=1の場合はそのクロック周期の1周期のみ)について、検索対象と一致する文字が辞書に存在する状態と辞書に存在しない状態との2つの状態をそれぞれ仮定し、この2つの状態をこのn個の周期分組み合わせた2通りの信号を予め作成する作成手段と、この遅延手段によって遅延された一致/不一致信号に従い、この作成手段によって作成された2通りの信号のうち仮定が正しかった信号を選択する選択手段とを備え、この選択手段によって選択された信号を、次回のクロック周期において利用するようにしたことを特徴とする。
この文字列検索回路では、各クロック周期において作成される、検索対象と一致する文字が辞書に存在するか否かを示す一致/不一致信号(前出の図8のorfbのような信号)が、nクロック周期分遅延される。また、或るクロック周期における検索結果を予測する信号として、そのクロック周期よりもn−1周期前からそのクロック周期までのn個の周期の各々(ただしn=1の場合はそのクロック周期の1周期のみ)について、検索対象と一致する文字が辞書に存在する状態と辞書に存在しない状態との2つの状態をそれぞれ仮定し、この2つの状態をこのn個の周期分組み合わせた2通りの信号が、予め作成される。
そして、この遅延された一致/不一致信号に従い、この2通りの信号のうち仮定が正しかった1つの信号が選択され、その選択された信号が、次回のクロック周期において利用される。
これにより、「各クロック周期における検索結果を次回のクロック周期に利用する」というアルゴリズムを変えることなく、前出の図8の出力orfbのような一致/不一致の結果を示す信号を遅延させて、パイプライン処理による文字列検索の高速化を実現することができる。
次に、本発明に係る文字列検索方法は、動作クロックの1周期毎に、入力された文字列の1文字ずつについて、その文字に一致する文字を辞書から検索し、且つ、検索対象と一致する文字が辞書に存在するか否かを示す一致/不一致信号を作成し、検索対象と一致する文字が辞書に存在する場合には、検索結果を次回のクロック周期で利用して、検索対象の文字数を1文字ずつ増やすようにした文字列検索方法において、この一致/不一致信号を、この動作クロックのn周期分(nは1以上の整数)遅延させる第1のステップと、或るクロック周期における検索結果を予測する信号として、そのクロック周期よりもn−1周期前からそのクロック周期までのn個の周期の各々(ただしn=1の場合はそのクロック周期の1周期のみ)について、検索対象と一致する文字が辞書に存在する状態と辞書に存在しない状態との2つの状態をそれぞれ仮定し、この2つの状態をこのn個の周期分組み合わせた2通りの信号を予め作成する第2のステップと、この第1のステップによって遅延された一致/不一致信号に従い、この第2のステップによって作成された2通りの信号のうち仮定が正しかった信号を選択する第3のステップとを有し、この第3のステップによって選択された信号を、次回のクロック周期において利用するようにしたことを特徴とする。
この文字列検索方法によれば、前述の、本発明に係る文字列検索回路について述べたのと全く同様にして、「各クロック周期における検索結果を次回のクロック周期に利用する」というアルゴリズムを変えることなく、前出の図8の出力orfbのような一致/不一致の結果を示す信号を遅延させて、パイプライン処理による文字列検索の高速化を実現することができる。
本発明によれば、入力された文字列に一致する文字列を辞書から検索する処理を、動作クロックの1周期毎に、前回のクロック周期における検索結果を利用して1文字ずつ文字数を増やして行う文字列検索回路において、パイプライン処理による文字列検索の高速化を実現できるという効果が得られる。
以下、LZ77法を採用したデータ圧縮回路内に設けられる文字列検索回路に本発明を適用した例について、図面を用いて具体的に説明する。
〔遅延1の回路〕
最初に、図8の文字列検索回路を前提として、各クロック周期に作成されるorfbを1クロック周期だけ遅延させる文字列検索回路(「遅延1」の回路)について説明する。
図1は、この「遅延1」の回路による文字列検索の高速化の原理を示す図である。orfbは‘1’か‘0’か(一致する文字列が存在するか否か)の2つの状態しかとらないので、或るクロック周期における検索結果ps[i]を予測する信号として、そのクロック周期にはorfb=‘1’になると仮定したps1[i]と、そのクロック周期にはorfb=‘0’になると仮定したps0[i]との2通りの信号を予め作成しておく。(時刻tは、この或るクロック周期内の時刻を表しており、時刻t−1は、ps1[i],ps0[i]を作成するクロック周期内の時刻を表している。)
そして、時刻tにはorfb=‘1’,orfb=‘0’とのうちのどちらの仮定が正しかったのかが判明するので、検索結果予測ps1[i],ps0[i]のうち正しかったほうを選択し、その選択した信号を次回のクロック周期において利用する。(図1の例ではorfb=‘0’が正しかったことが判明するので、ps0[i]を選択する)。
これにより、動作クロックの各周期におけるorfbを1クロック周期だけ遅延させて、パイプライン処理による文字列検索の高速化を実現することができる。
図2は、この「遅延1」の文字列検索回路の構成を示すブロック図である。図示しないメモリ(例えばSRAM)内のバイト数Nの辞書の各アドレスi(i=0〜N−1)に対応して、比較回路1(i),2入力1出力のアンド回路2(i),2入力1出力のアンド回路3(i),2入力1出力のマルチプレクサ4(i),D型フリップ・フロップ5(i)及びD型フリップ・フロップ6(i)から成るN組の回路群が設けられている。
また、N入力1出力のオア回路7と、N入力1出力のオア回路8と、オア回路7及び8の出力が供給される2入力1出力のマルチプレクサ9と、マルチプレクサ9の出力が供給されるD型フリップ・フロップ10とが設けられている。
各比較回路1(i)は、検索対象の文字と辞書の対応するアドレスiの文字とを比較し、一致するとき‘1’になり不一致のとき‘0’になる信号m[i]を出力する。この出力m[i]は、同じ組のアンド回路2(i)及び3(i)の一方の入力端に供給されるとともに、同じ組のD型フリップ・フロップ6(i)のD入力端に供給されて、次の入力があるまで出力端Qに保持される。
各アンド回路2(i)のもう一方の入力端には、辞書の1つ手前のアドレスに対応する組のフリップ・フロップ5(i)の出力であるps1[i−1]が供給される(例えばアンド回路2(N−1)であれば、フリップ・フロップ5(N−2)の出力であるps1[N−2]が供給される)。各アンド回路2(i)の出力ps1_and_m[i]は、同じ組のマルチプレクサ4の入力端S1に供給されるとともに、オア回路7に供給される。
各アンド回路3(i)のもう一方の入力端には、辞書の1つ手前のアドレスに対応する組のフリップ・フロップ6(i)の出力であるps0[i−1]が供給される(例えばアンド回路2(N−1)であれば、フリップ・フロップ5(N−2)の出力であるps0[N−2]が供給される)。各アンド回路3(i)の出力ps0_and_m[i]は、同じ組のマルチプレクサ4の入力端S2に供給されるとともに、オア回路8に供給される。
オア回路7,8の出力は、それぞれマルチプレクサ9の入力端S1,S2に供給される。マルチプレクサ9の出力端Dから出力された信号は、D型フリップ・フロップ10のD入力端に供給されて、次の入力があるまで出力端Qに保持される。このD型フリップ・フロップ10の出力は、各クロック周期におけるorfb(検索対象の文字列と一致する文字列が辞書に存在するか否かを示す信号)を1クロック周期だけ遅延させたorfb_dとして、マルチプレクサ9の選択制御端子Cに供給されるとともに、各組のマルチプレクサ4(i)の選択制御端子Cに供給される。
マルチプレクサ9は、この出力orfb_dが‘1’であるとき(すなわち、1クロック周期前の検索対象の文字列に一致する文字列が辞書中に1つでも存在したとき)には、入力端S1に供給されたオア回路7の出力を、今回のクロック周期における検索結果として選択して、出力端Dから出力する。他方、この出力orfb_dが‘0’であるとき(すなわち、1クロック周期前の検索対象の文字列に一致する文字列が辞書中に存在しなかったとき)には、入力端S2に供給されたオア回路8の出力を、今回のクロック周期における検索結果として選択して、出力端Dから出力する。
各マルチプレクサ4(i)は、この出力orfb_dが‘1’であるとき(1クロック周期前の検索対象の文字列に一致する文字列が辞書中に1つでも存在したとき)には、入力端S1に供給されたps1_and_m[i]を選択して出力端Dから出力する。他方、この出力orfb_dが‘0’のとき(1クロック周期前の検索対象の文字列に一致する文字列が辞書中に存在しなかったとき)には、入力端S2に供給されたps0_and_m[i]を選択して出力端Dから出力する。
各マルチプレクサ4(i)の出力は、同じ組のフリップ・フロップ5(i)のD入力端に供給されて、次の入力があるまで出力端Qに保持される。各フリップ・フロップ5(i)の出力端Qに保持されている出力ps1[i]は、前述のように、辞書の1つ後のアドレスに対応する組のアンド回路2(i)にps1[i−1]として供給される。
各フリップ・フロップ6(i)の出力端Qに保持されている出力ps0[i]は、前述のように、辞書の1つ後のアドレスに対応する組のアンド回路2(i)にps0[i−1]として供給される。
なお、図2にはブロック図を示したが、ASIC(特定用途向けLSI)やプログラマブル・ロジック・デバイス(FPGA等)として設計する場合には、この文字列検索回路は、ハードウェア記述言語の一種であるVerilog HDLを用いて図3のように表記することができる。
この文字列検索回路では、動作クロックの各周期におけるorfbを、1クロック周期だけ遅延させる。そして、或るクロック周期における文字列の検索結果を予測する信号として、そのクロック周期にはorfb=‘1’になる仮定した検索結果予測(各フリップ・フロップ5(i)の出力ps1[i])と、そのクロック周期にはorfb=‘0’になる仮定した検索結果予測(各フリップ・フロップ6(i)の出力ps0[i])との2通りの信号を、そのクロック周期の1周期前に予め作成して、辞書の1つ後のアドレスに対応する組のアンド回路2(i),3(i)にそれぞれps1[i−1],ps0[i−1]として供給する。
そして、どちらの仮定が正しかったのかが1クロック周期後にorfb_dとして判明すると、各マルチプレクサ4(i)で、アンド回路2(i),3(i)のうち正しかったほうの検索結果予測が供給されたほうの出力を選択する(マルチプレクサ9でも、オア回路7,8のうち正しかった検索結果予測に対応するほうの出力を選択する)。
そして、各マルチプレクサ4(i)で選択した信号を、フリップ・フロップ5を介して辞書の1つ後のアドレスに対応する組のアンド回路2(i)にps1[i−1]として供給することにより、次回のクロック周期において利用する。
具体的には、新たに入力された文字列が例えば「ABCA」であれば、この文字列検索回路では、1回(動作クロックの1周期)毎に、次の手順で検索を行う。
<1周期目>
各比較回路1(i)で、1文字目の「A」についての比較結果m[i]を求める。このm[i]は、フリップ・フロップ6(i)からps0[i]として出力される(次の周期に、辞書の1つ後のアドレスに対応する組のアンド回路3(i)にps0[i−1]として供給される)。
<2周期目>
各比較回路1(i)で、2文字目の「B」についての比較結果m[i]を求める。このとき、各アンド回路3(i)の出力は、「A」と一致する文字が辞書に存在すると仮定した、「AB」の検索結果を予測する信号となる。そして、各マルチプレクサ4(i)にはまだorfb_dが供給されていない(‘0’の信号が供給されている)ので、この「AB」の検索結果予測が、マルチプレクサ4(i)で選択され、フリップ・フロップ5(i)からps1[i]として出力される(次の周期に、辞書の1つ後のアドレスに対応する組のアンド回路2(i)にps1[i−1]として供給される)。
また、比較結果m[i]は、フリップ・フロップ6(i)からps0[i]として出力される(次の周期に、辞書の1つ後のアドレスに対応する組のアンド回路3(i)にps0[i−1]として供給される)。このps0[i]は、「A」と一致する文字が辞書に存在しないと仮定して、2文字目の「B」から再検索を行った結果を示す信号となる。
<3周期目>
各比較回路1(i)で、3文字目の「C」についての比較結果m[i]を求める。
このとき、各アンド回路2(i)の出力は、「AB」と一致する文字が辞書に存在すると仮定した、「ABC」の検索結果を予測する信号となる。
また、各アンド回路3(i)の出力は、「AB」と一致する文字列が辞書に存在しないと仮定した、「BC」の検索結果を予測する信号となる。
この3周期目には、「A」と一致する文字列が辞書に存在するか否かを示すorfb_dが、フリップ・フロップ10から出力される。
この orfb_dが‘1’であれば、「A」と一致する文字が辞書に存在するという仮定が正しかったので、各マルチプレクサ4(i)でアンド回路2(i)の出力(「ABC」の検索結果予測)を選択する(マルチプレクサ9でもオア回路7の出力を選択する)。
この「ABC」の検索結果予測は、フリップ・フロップ5(i)からps1[i]として出力される(次の周期に、辞書の1つ後のアドレスに対応する組のアンド回路2(i)にps1[i−1]として供給される)。
他方、このorfb_dが‘0’であれば、「A」と一致する文字が辞書に存在しないという仮定が正しかったので、各マルチプレクサ4(i)でアンド回路3(i)の出力(「BC」の検索結果予測)を選択する(マルチプレクサ9でもオア回路8の出力を選択する)。
この「BC」の検索結果予測は、フリップ・フロップ5(i)からps1[i]として出力される(次の周期に、辞書の1つ後のアドレスに対応する組のアンド回路2(i)にps1[i−1]として供給される)。
また、比較結果m[i]は、フリップ・フロップ6(i)からps0[i]として出力される(次の周期に、辞書の1つ後のアドレスに対応する組のアンド回路2(i)にps1[i−1]として供給される)。このps0[i]は、「B」と一致する文字が辞書に存在しないと仮定して、3文字目の「C」から再検索を行った結果を示す信号となる。
<4周期目>
各比較回路1(i)で、4文字目の「A」についての比較結果m[i]を求める。
このとき、各アンド回路3(i)の出力は、「ABC」と一致する文字列が辞書に存在しないと仮定した、「CA」の検索結果を予測する信号となる。
また、3周期目においてorfb_dが‘1’であった場合には、この4周期目には、各アンド回路2(i)の出力は、「ABC」と一致する文字が辞書に存在すると仮定した、「ABCA」の検索結果を予測する信号となる。そして、この4周期目に、「AB」と一致する文字列が辞書に存在するか否かを示すorfb_dが、フリップ・フロップ10から出力される。
この orfb_dが‘1’であれば、「AB」と一致する文字が辞書に存在するという仮定が正しかったので、各マルチプレクサ4(i)でアンド回路2(i)の出力(「ABCA」の検索結果予測)を選択する(マルチプレクサ9でもオア回路7の出力を選択する)。
この「ABCA」の検索結果予測は、フリップ・フロップ5(i)からps1[i]として出力される(次の周期に、辞書の1つ後のアドレスに対応する組のアンド回路2(i)にps1[i−1]として供給される)。
他方、このorfb_dが‘0’であれば、「AB」と一致する文字が辞書に存在しないという仮定が正しかったので、各マルチプレクサ4(i)でアンド回路3(i)の出力(「CA」の検索結果予測)を選択する(マルチプレクサ9でもオア回路8の出力を選択する)。
この「CA」の検索結果予測は、フリップ・フロップ5(i)からps1[i]として出力される(次の周期に、辞書の1つ後のアドレスに対応する組のアンド回路2(i)にps1[i−1]として供給される)。
また、比較結果m[i]は、フリップ・フロップ6(i)からps0[i]として出力される(次の周期に、辞書の1つ後のアドレスに対応する組のアンド回路2(i)にps1[i−1]として供給される)。このps0[i]は、「C」と一致する文字が辞書に存在しないと仮定して、4文字目の「A」から再検索を行った結果を示す信号となる。
図4は、前出の図7の辞書を例にとって、この4周期目における検索動作(「ABC」の検索結果予測を利用して「ABCA」を検索する場合)を示す図である。
アドレスi=0,4,9,12の文字が「A」に一致するので、アドレスi=0,4,9,12に対応する組の比較回路1(i)の比較結果m[i]は‘1’になり、残りの組の比較回路1(i)の比較結果m[i]は‘0’になる。
また、「ABC」と一致する文字が辞書に存在するか否かはまだ判明していないが、ps1[i−1]は「ABC」と一致する文字が辞書に存在する(3周期目の検索でアドレスi=2,6,11,14に対応する組のフリップ・フロップ5(i)の出力ps1[i]が‘1’になっている)と仮定した検索結果予測なので、図9に示したps[i−1]と同じく、アドレスi=2,6,11,14よりも1つ後のアドレスi=3,7,12,15に対応する組のアンド回路2(i)に供給されるps1[i−1]は‘1’になり、残りの組のアンド回路2(i)に供給されるps1[i−1]は‘0’になる。
その結果、図9に示したps[i]と同じく、アドレスi=12に対応する組のアンド回路2(i)の出力は‘1’になり、残りの組のアンド回路2(i)の出力は‘0’になる。そして、orfb_dが‘1’であった場合には、アンド回路2(i)がフリップ・フロップ5(i)の出力ps1[i]になるので、アドレスi=12に対応する組のフリップ・フロップ5(i)の出力ps1[i]は‘1’になり、残りの組のフリップ・フロップ5(i)の出力ps1[i]は‘0’になる。
ps0[i−1]は、1つ前のアドレスに対応する組における3文字目の「C」の再検索結果である。ps0[i]は、4文字目の「A」の再検索結果である。
なお、3周期目においてorfb_dが‘0’であった場合には、この4周期目には、各アンド回路2(i)の出力は、「BCA」の検索結果を予測する信号となる。そして、この4周期目に、「B」と一致する文字列が辞書に存在するか否かを示すorfb_dが、フリップ・フロップ10から出力される。
このorfb_dが‘1’であれば、各マルチプレクサ4(i)でアンド回路2(i)の出力(「BCA」の検索結果予測)を選択する(マルチプレクサ9でもオア回路7の出力を選択する)。
この「BCA」の検索結果予測は、フリップ・フロップ5(i)からps1[i]として出力される(次の周期に、辞書の1つ後のアドレスに対応する組のアンド回路2(i)にps1[i−1]として供給される)。
他方、このorfb_dが‘0’であれば、各マルチプレクサ4(i)でアンド回路3(i)の出力(「CA」の検索結果予測)を選択する(マルチプレクサ9でもオア回路8の出力を選択する)。
この「CA」の検索結果予測は、フリップ・フロップ5(i)からps1[i]として出力される(次の周期に、辞書の1つ後のアドレスに対応する組のアンド回路2(i)にps1[i−1]として供給される)。
この4周期目に続く5周期目には、「ABC」と一致する文字列が辞書に存在するか否かを示すorfb_dがフリップ・フロップ10から出力される。「ABCA」の後にも入力文字列が続いている場合には、5周期以降の各周期にも、orfb_dの値に応じて同様な処理を繰り返す。
このようにして、この文字列検索回路によれば、「各クロック周期における検索結果を次回のクロック周期に利用する」というアルゴリズムを変えることなく、各クロック周期において作成されるorfb(検索対象に一致する文字が辞書に存在するか否かを示す一致/不一致信号)を遅延させて、パイプライン処理による文字列検索の高速化を実現することができる。
しかも、検索結果を予測する信号は2通り作成するだけであり、orfbも1クロック周期遅延させるだけなので、回路構成を簡素化することができる(ハードウェア記述言語を用いてASICやプログラマブル・ロジック・デバイスとして設計する場合には、ロジックを簡素化することができる)。
〔遅延2の回路〕
次に、図8の文字列検索回路を前提として、出力orfbを2クロック周期遅延させる文字列検索回路(「遅延2」の回路)について説明する。
図5は、この「遅延2」の回路による文字列検索の高速化の原理を示す図である。orfbは‘1’か‘0’か(一致する文字列が存在するか否か)の2つの状態しかとらないので、或るクロック周期における検索結果ps[i]を予測する信号として、そのクロック周期にはorfb=‘1’となり1周期前のクロック周期にもorfb=‘1’となると仮定したps11[i]と、そのクロック周期にはorfb=‘0’となり1周期前のクロック周期にはorfb=‘1’となると仮定したps10[i]と、そのクロック周期にはorfb=‘1’となり1周期前のクロック周期にはorfb=‘0’となると仮定したps01[i]と、そのクロック周期にはorfb=‘0’となり1周期前のクロック周期にもorfb=‘0’となると仮定したps00[i]との4通りの信号を予め作成しておく。(時刻tは、この或るクロック周期内の時刻を表しており、時刻t−1は、そのクロック周期の1周期前のクロック周期内の時刻を表しており、時刻t−2は、ps11[i]〜ps00[i]を作成するクロック周期内の時刻を表している。)
そして、時刻tにはどの仮定が正しかったのかが判明するので、検索結果予測ps11[i]及びps10[i]の組とps01[i]及びps00[i]の組とのうち正しかったほうを選択し、その選択した信号を次回のクロック周期において利用する。(図6の例では、1つ目のクロック周期についてorfb=‘0’が正しかったことが判明するので、ps01[i]及びps00[i]の組を選択する。)
これにより、各クロック周期におけるorfbを2クロック周期遅延させて、パイプライン処理による文字列検索の高速化を実現することができる。
ASIC(特定用途向けLSI)やプログラマブル・ロジック・デバイス(FPGA等)として設計する場合には、この「遅延2」の文字列検索回路は、ハードウェア記述言語の一種であるVerilog HDLを用いて図6のように表記することができる。
以上の各例では、orfbを1クロック周期または2クロック周期遅延させる文字列検索回路について説明した。しかし、より一般的には、或るクロック周期における検索結果を予測する信号として、そのクロック周期よりもn−1周期前(nは1以上の整数)のクロック周期からそのクロック周期までの各周期におけるorfbの値の仮定を組み合わせた2通りの信号を予め作成するようにすれば、各クロック周期におけるorfbをnクロック周期遅延させて、パイプライン処理による文字列検索の高速化を実現することができる。
また、以上の例では、LZ77法を採用したデータ圧縮回路内に設けられる文字列検索回路に本発明を適用した例について説明した。しかし、本発明は、これに限らず、入力された文字列に一致する文字列を辞書から検索する処理を、動作クロックの1周期毎にこの文字列の1文字ずつ行い、各クロック周期における検索結果を次回のクロック周期に利用するようにしたあらゆる文字列検索回路において、文字列検索の高速化のために適用することができる。
「遅延1」の文字列検索回路による文字列検索の高速化の原理を示す図である。 本発明を適用した文字列検索回路の構成を示すブロック図である。 図2の文字列検索回路をハードウェア記述言語を用いて表記した図である。 図2の文字列検索回路の動作を例示する図である。 「遅延2」の文字列検索回路による文字列検索の高速化の原理を示す図である。 「遅延2」の文字列検索回路をハードウェア記述言語を用いて表記した図である。 LZ77法における辞書からの文字列の検索の様子を例示する図である。 LZ77法を採用したデータ圧縮回路内に従来設けられていた文字列検索回路の構成を示すブロック図である。 図8の文字列検索回路をハードウェア記述言語を用いて表記した図である。 図8の文字列検索回路の動作を例示する図である。
符号の説明
1(i) 比較回路
2(i),3(i) アンド回路
4(i),9 マルチプレクサ
5(i),6(i),10 D型フリップ・フロップ
7,8 オア回路

Claims (3)

  1. 動作クロックの1周期毎に、入力された文字列の1文字ずつについて、該文字に一致する文字を辞書から検索し、且つ、検索対象と一致する文字が前記辞書に存在するか否かを示す一致/不一致信号を作成し、検索対象と一致する文字が前記辞書に存在する場合には、検索結果を次回のクロック周期で利用して、検索対象の文字数を1文字ずつ増やすようにした文字列検索回路において、
    前記一致/不一致信号を、前記動作クロックのn周期分(nは1以上の整数)遅延させる遅延手段と、
    或るクロック周期における検索結果を予測する信号として、該クロック周期よりも前記n−1周期前から該クロック周期までのn個の周期の各々(ただしn=1の場合は該クロック周期の1周期のみ)について、検索対象と一致する文字が前記辞書に存在する状態と前記辞書に存在しない状態との2つの状態をそれぞれ仮定し、前記2つの状態を前記n個の周期分組み合わせた2通りの信号を予め作成する作成手段と、
    前記遅延手段によって遅延された前記一致/不一致信号に従い、前記作成手段によって作成された前記2通りの信号のうち仮定が正しかった信号を選択する選択手段と
    を備え、
    前記選択手段によって選択された信号を、次回のクロック周期において利用す
    文字列検索回路。
  2. 請求項1に記載の文字列検索回路において、
    前記遅延手段は、前記一致/不一致信号を、前記動作クロックの1周期分遅延させ、
    前記作成手段は、或るクロック周期における検索結果を予測する信号として、該クロック周期には検索対象と一致する文字が辞書に存在すると仮定した信号と、該クロック周期には検索対象と一致する文字が辞書に存在しないと仮定した信号との2通りの信号を作成す
    文字列検索回路。
  3. 動作クロックの1周期毎に、入力された文字列の1文字ずつについて、該文字に一致する文字を辞書から検索し、且つ、検索対象と一致する文字が前記辞書に存在するか否かを示す一致/不一致信号を作成し、検索対象と一致する文字が前記辞書に存在する場合には、検索結果を次回のクロック周期で利用して、検索対象の文字数を1文字ずつ増やすようにした文字列検索方法において、
    前記一致/不一致信号を、前記動作クロックのn周期分(nは1以上の整数)遅延させる第1のステップと、
    或るクロック周期における検索結果を予測する信号として、該クロック周期よりも前記n−1周期前から該クロック周期までのn個の周期の各々(ただしn=1の場合は該クロック周期の1周期のみ)について、検索対象と一致する文字が前記辞書に存在する状態と前記辞書に存在しない状態との2つの状態をそれぞれ仮定し、前記2つの状態を前記n個の周期分組み合わせた2通りの信号を予め作成する第2のステップと、
    前記第1のステップによって遅延された前記一致/不一致信号に従い、前記第2のステップによって作成された前記2通りの信号のうち仮定が正しかった信号を選択する第3のステップと
    を有し、
    前記第3のステップによって選択された信号を、次回のクロック周期において利用す
    文字列検索方法。
JP2005149713A 2005-05-23 2005-05-23 文字列検索回路及び文字列検索方法 Expired - Fee Related JP4556766B2 (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2005149713A JP4556766B2 (ja) 2005-05-23 2005-05-23 文字列検索回路及び文字列検索方法
US11/383,308 US7221291B2 (en) 2005-05-23 2006-05-15 Character string retrieving circuit and character string retrieving method
CN2006100844424A CN1870131B (zh) 2005-05-23 2006-05-23 字符串检索电路和字符串检索方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2005149713A JP4556766B2 (ja) 2005-05-23 2005-05-23 文字列検索回路及び文字列検索方法

Publications (2)

Publication Number Publication Date
JP2006332775A JP2006332775A (ja) 2006-12-07
JP4556766B2 true JP4556766B2 (ja) 2010-10-06

Family

ID=37443776

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2005149713A Expired - Fee Related JP4556766B2 (ja) 2005-05-23 2005-05-23 文字列検索回路及び文字列検索方法

Country Status (3)

Country Link
US (1) US7221291B2 (ja)
JP (1) JP4556766B2 (ja)
CN (1) CN1870131B (ja)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8704686B1 (en) 2013-01-03 2014-04-22 International Business Machines Corporation High bandwidth compression to encoded data streams
US10720205B2 (en) * 2014-06-05 2020-07-21 Gsi Technology, Inc. Systems and methods involving multi-bank, dual-pipe memory circuitry
JP6742692B2 (ja) * 2015-01-30 2020-08-19 富士通株式会社 符号化プログラムおよび伸長プログラム
CN105553483B (zh) * 2015-12-09 2018-12-21 广东顺德中山大学卡内基梅隆大学国际联合研究院 一种产生lz77的方法及装置

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS62234424A (ja) * 1986-04-04 1987-10-14 Mitsubishi Electric Corp 木探索ベクトル量子化器
JPH03213019A (ja) * 1989-12-07 1991-09-18 Unisys Corp 反射2進エンコーダおよび不均一コードブックを創造する方法
JPH0697838A (ja) * 1992-07-02 1994-04-08 American Teleph & Telegr Co <Att> 復号化装置
JPH06259223A (ja) * 1992-11-12 1994-09-16 Internatl Business Mach Corp <Ibm> 分散データ処理システム
JPH08242176A (ja) * 1994-12-28 1996-09-17 Internatl Business Mach Corp <Ibm> データ圧縮用検索装置
JPH09232967A (ja) * 1996-02-22 1997-09-05 Fujitsu Ltd データ圧縮装置及び復元装置

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5627533A (en) * 1994-08-05 1997-05-06 Hayes Microcomputer Products, Inc. Adjusting encoding table size and memory allocation for data compression in response to input data
US5771011A (en) * 1996-07-15 1998-06-23 International Business Machines Corporation Match detect logic for multi-byte per cycle hardware data compression
US6490279B1 (en) * 1998-07-23 2002-12-03 Advanced Communication Device, Inc. Fast data base research and learning apparatus
JP3141866B2 (ja) * 1999-01-18 2001-03-07 日本電気株式会社 連想記憶装置及び連想メモリ検索方法
US6629250B2 (en) * 1999-04-23 2003-09-30 Cray Inc. Adjustable data delay using programmable clock shift
US7095341B2 (en) * 1999-12-14 2006-08-22 Broadcom Corporation Programmable variable-length decoder

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS62234424A (ja) * 1986-04-04 1987-10-14 Mitsubishi Electric Corp 木探索ベクトル量子化器
JPH03213019A (ja) * 1989-12-07 1991-09-18 Unisys Corp 反射2進エンコーダおよび不均一コードブックを創造する方法
JPH0697838A (ja) * 1992-07-02 1994-04-08 American Teleph & Telegr Co <Att> 復号化装置
JPH06259223A (ja) * 1992-11-12 1994-09-16 Internatl Business Mach Corp <Ibm> 分散データ処理システム
JPH08242176A (ja) * 1994-12-28 1996-09-17 Internatl Business Mach Corp <Ibm> データ圧縮用検索装置
JPH09232967A (ja) * 1996-02-22 1997-09-05 Fujitsu Ltd データ圧縮装置及び復元装置

Also Published As

Publication number Publication date
CN1870131A (zh) 2006-11-29
US7221291B2 (en) 2007-05-22
CN1870131B (zh) 2010-06-23
US20060261988A1 (en) 2006-11-23
JP2006332775A (ja) 2006-12-07

Similar Documents

Publication Publication Date Title
US6624762B1 (en) Hardware-based, LZW data compression co-processor
US9647684B2 (en) Memory-based history search
EP3094003B1 (en) Hardware data compressor that pre-huffman encodes to decide whether to huffman encode a matched string or a back pointer thereto
EP3094004B1 (en) Hardware data compressor using dynamic hash algorithm based on input block type
US9515678B1 (en) Hardware data compressor that directly huffman encodes output tokens from LZ77 engine
US9509335B1 (en) Hardware data compressor that constructs and uses dynamic-prime huffman code tables
US20140156790A1 (en) Bitstream processing using coalesced buffers and delayed matching and enhanced memory writes
EP3093998B1 (en) Hardware data compressor that sorts hash chains based on node string match probabilities
US11031951B2 (en) Verifying the correctness of a deflate compression accelerator
US9628111B2 (en) Hardware data compressor with multiple string match search hash tables each based on different hash size
JP4556766B2 (ja) 文字列検索回路及び文字列検索方法
Kim et al. Data dependency reduction for high-performance FPGA implementation of DEFLATE compression algorithm
US7307453B1 (en) Method and system for parallel state machine implementation
US10101965B1 (en) Method and apparatus for high speed streaming sorter
EP3094000B1 (en) Hardware data compressor that maintains sorted symbol list concurrently with input block scanning
JP6363581B2 (ja) 入力ブロックのスキャンと同時にソート済みシンボル・リストを維持するハードウェア・データ圧縮器
JP2006332982A (ja) デコーダ回路及びデコード方法
JP4323663B2 (ja) 画像フィルタ回路及び画像フィルタリング方法
Gao et al. MetaZip: a high-throughput and efficient accelerator for DEFLATE
US20120032823A1 (en) Method and apparatus for adaptive lossless data compression
Nunez‐Yanez et al. Gigabyte per second streaming lossless data compression hardware based on a configurable variable-geometry CAM dictionary
Wang et al. Lossless compression of bitstream configuration files: towards FPGA cloud
US11593311B2 (en) Compression system with longest match processing for generating compressed data
WO2023166877A1 (ja) 処理方法、非同期式回路、および論理回路
Papadopoulos Implementation of high-speed compressor using field programmable gate array

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20080411

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20100401

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20100420

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20100610

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20100629

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20100712

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130730

Year of fee payment: 3

LAPS Cancellation because of no payment of annual fees