説明

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

【課題】 LZ77法を採用したデータ圧縮回路内に設けられる文字列検索回路等において、パイプライン処理による文字列検索の高速化を実現する。
【解決手段】 各クロック周期において作成される、検索対象と一致する文字が辞書に存在するか否かを示す一致/不一致信号を、1クロック周期分遅延させる遅延手段10と、或るクロック周期後の検索結果を予測する信号として、そのクロック周期において検索対象と一致する文字が辞書に存在すると仮定した信号ps1[i]と存在しないと仮定した信号ps0[i]との2通りの信号を予め作成する作成手段2(i),3(i),5(i),6(i)と、遅延手段10によって遅延された一致/不一致信号に従い、この2通りの信号のうち仮定が正しかった信号を選択する選択手段4(i)とを備え、選択手段4(i)によって選択された信号を、次回のクロック周期において利用する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、例えばLZ77法を採用したデータ圧縮回路内に設けられる文字列検索回路に関し、特に、文字列検索処理の高速化を図ったものに関する。
【背景技術】
【0002】
辞書型のデータ圧縮アルゴリズムの一種として、LZ(Lempel-Ziv)77法が存在している。LZ77法は、例えばAITフォーマット,S−AITフォーマットまたはLTOフォーマットのテープドライブ内のALDC(Adaptive Lossless Data Compression)エンコーダなど、各種のデータ記録装置内のデータ圧縮回路に採用されている(例えば、特許文献1参照。)。
【0003】
LZ77法の圧縮原理は、過去に入力された文字列(データ列)のうちの直近の所定サイズの文字列を辞書に登録し、新たに入力された(すなわち、圧縮しようとする)文字列と一致する文字列をその辞書から検索して、当該新たに入力された文字列をその一致する文字列のアドレス情報で置き換えるというものである。この辞書は、静的なものではなく、圧縮が進むにつれて、今まさに圧縮しようとする文字列の直前の文字列を追加して古い文字列を除外するようにアップデートされるので、スライド辞書とも呼ばれる。
【0004】
図7は、この辞書からの文字列の検索の様子を例示する図である。通常は辞書のサイズは512バイト,1024バイトまたは2048バイトであることが多いが、ここでは説明の都合上16バイトとしている。過去に入力された文字列のうちの直近の16文字の文字列「ABCCAB…BCC」(各文字A,B,Cは1バイト)が辞書として登録されている。16バイト前に入力された文字「A」にはアドレス0が付与されており、15バイト前に入力された文字「B」にはアドレス1が付与されており、1バイト前に入力された文字「C」にはアドレス15が付与されている。
【0005】
例えば、新たに入力された文字列が「ABCA」である場合には、辞書内のアドレス9〜12の文字列が「ABCA」と一致する。そこで、この場合には、マッチアドレス(一致する文字列の最後のアドレスとして定義されるアドレス)として12を出力する。(最終的には、文字列「ABCA」を先頭アドレス9と一致長4とで置換することにより、4バイトの文字列「ABCA」が2バイトに圧縮される。)
【0006】
また例えば、新たに入力された文字列が「ABC」である場合には、辞書内のアドレス0〜2,4〜6,9〜11,12〜14の文字列がそれぞれ「ABC」と一致する。そこで、この場合には、マッチアドレス(一致する文字列の最後のアドレスとして定義されるアドレス)として2,6,11及び14を出力する。
【0007】
このように、LZ77法では、圧縮しようとする文字列に一致する文字列を辞書から検索することによって圧縮を行う。そのため、LZ77法を採用したデータ圧縮回路内には、この検索処理を行う文字列検索回路が設けられる。
【0008】
図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が設けられている。
【0009】
各比較回路51(i)は、検索対象の文字と辞書の対応するアドレスiの文字とを比較し、比較結果m[i](一致するとき‘1’になり不一致のとき‘0’になる信号)を出力する。このm[i]は、同じ組のアンド回路52(i)の一方の入力端に供給されるとともに、同じ組のマルチプレクサ53(i)の入力端S2に供給される。
【0010】
各アンド回路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に供給される。
【0011】
オア回路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は、各クロック周期において、検索対象に一致する文字が辞書に存在するか否かを示す一致/不一致信号である。
【0012】
各マルチプレクサ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]として供給される。
【0013】
なお、図8にはブロック図を示したが、ASIC(特定用途向けLSI)やプログラマブル・ロジック・デバイス(FPGA等)として設計する場合には、この文字列検索回路は、ハードウェア記述言語の一種であるVerilog HDLを用いて図9のように表記することができる。
【0014】
この文字列検索回路では、1回(動作クロックの1周期)毎に、入力された文字列の1文字ずつについて、その文字に一致する文字を辞書から検索し、且つ、検索対象と一致する文字が辞書に存在するか否かを示すorfbを作成する。そして、検索対象と一致する文字が辞書に存在する場合には、検索結果を次回のクロック周期で利用して、検索対象の文字数を1文字ずつ増やしていく。
【0015】
すなわち、新たに入力された文字列が例えば「ABCA」であれば、この文字列検索回路は、次の手順で検索を行う。
・1回目:1文字目の「A」と一致する文字を辞書から検索する。
・2回目:「A」と一致する文字が辞書に存在する場合、2文字目の「B」と一致する文字を辞書から検索し、前回の「A」の検索結果を利用して、「AB」と一致する文字列を検索する。
・3回目:「AB」と一致する文字列が辞書に存在する場合、3文字目の「C」と一致する文字を辞書から検索し、前回の「AB」の検索結果を利用して、「ABC」と一致する文字列を検索する。
・4回目:「ABC」と一致する文字列が辞書に存在する場合、4文字目の「A」と一致する文字を辞書から検索し、前回の「ABC」の検索結果を利用して、「ABCA」と一致する文字列を検索する。
【0016】
図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’になる。
【0017】
また、前述の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’になる。
【0018】
その結果、アドレスi=12に対応する組のアンド回路52(i)の出力ps_and_m[i](match)のみが‘1’になり、残りの組のアンド回路52(i)の出力ps_and_m[i](match)は‘0’になる。
【0019】
そして、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が求められる。
【0020】
図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文字ずつの手順で再検索が開始される。
【0021】
図8の文字列検索回路は、オア回路55の出力orfbを遅延させることなく各組のマルチプレクサ53(i)に供給するので、「遅延0」の回路と呼ぶ。
【0022】
【特許文献1】国際公開番号W02003/032296の再公表特許公報(第12〜13頁、第3図、第4図)
【発明の開示】
【発明が解決しようとする課題】
【0023】
ところで、図8の文字列検索回路は、次のような理由から、文字列検索処理を高速化するのに不向きであった。すなわち、この文字列検索回路は、各フリップ・フロップ54(i)の出力ps[i]がアンド回路52(i)やオア回路55での処理を経て再びフリップ・フロップ54(i)に入力するループ構造になっているので、このループが高速に動作することが文字列検索処理の高速化の必要条件になる。しかるに、orfbを出力するオア回路55は、複雑な組み合わせ回路であり遅延量が大きいため、このループがクリティカルパス(遅延の最も大きい経路)になる。そのため、このループによって動作クロックの最大周波数が制限されるので、高速化に不向きであった。
【0024】
ここで、回路の動作速度を上げる一般的な方法としては、回路中にフリップ・フロップのような遅延手段を挿入することによって処理をパイプライン化するという方法が知られている。しかし、図8の文字列検索回路において、単純にオア回路55の後段にフリップ・フロップを挿入してorfbを遅延させたのでは、「各クロック周期における検索結果を次回のクロック周期に利用する」というアルゴリズムが別のアルゴリズムに変わってしまうので、本来の動作をしなくなってしまう。
【0025】
本発明は、上述の点に鑑み、LZ77法を採用したデータ圧縮回路内に設けられる文字列検索回路のように、動作クロックの1周期毎に、入力された文字列の1文字ずつについて、その文字に一致する文字を辞書から検索し、且つ、検索対象と一致する文字が辞書に存在するか否かを示す一致/不一致信号を作成し、検索対象と一致する文字が辞書に存在する場合には、検索結果を次回のクロック周期で利用して、検索対象の文字数を1文字ずつ増やすようにした文字列検索回路において、パイプライン処理による文字列検索の高速化を実現することを課題としてなされたものである。
【課題を解決するための手段】
【0026】
この課題を解決するために、本発明に係る文字列検索回路は、動作クロックの1周期毎に、入力された文字列の1文字ずつについて、その文字に一致する文字を辞書から検索し、且つ、検索対象と一致する文字が辞書に存在するか否かを示す一致/不一致信号を作成し、検索対象と一致する文字が辞書に存在する場合には、検索結果を次回のクロック周期で利用して、検索対象の文字数を1文字ずつ増やすようにした文字列検索回路において、この一致/不一致信号を、この動作クロックのn周期分(nは1以上の整数)遅延させる遅延手段と、或るクロック周期における検索結果を予測する信号として、そのクロック周期よりもn−1周期前からそのクロック周期までの各周期における、検索対象と一致する文字が辞書に存在するという仮定と、検索対象と一致する文字が辞書に存在しないという仮定とを組み合わせた2通りの信号を予め作成する作成手段と、この遅延手段によって遅延された一致/不一致信号に従い、この作成手段によって作成された2通りの信号のうち仮定が正しかった信号を選択する選択手段とを備え、この選択手段によって選択された信号を、次回のクロック周期において利用するようにしたことを特徴とする。
【0027】
この文字列検索回路では、各クロック周期において作成される、検索対象と一致する文字が辞書に存在するか否かを示す一致/不一致信号(前出の図8のorfbのような信号)が、nクロック周期分遅延される。また、或るクロック周期における検索結果を予測する信号として、そのクロック周期よりもn−1周期前からそのクロック周期までの各周期における、検索対象の文字列と一致する文字列が辞書に存在するという仮定と存在しないという仮定とを組み合わせた2通りの信号が、予め作成される。
【0028】
そして、この遅延された一致/不一致信号に従い、この2通りの信号のうち仮定が正しかった1つの信号が選択され、その選択された信号が、次回のクロック周期において利用される。
【0029】
これにより、「各クロック周期における検索結果を次回のクロック周期に利用する」というアルゴリズムを変えることなく、前出の図8の出力orfbのような一致/不一致の結果を示す信号を遅延させて、パイプライン処理による文字列検索の高速化を実現することができる。
【0030】
次に、本発明に係る文字列検索方法は、動作クロックの1周期毎に、入力された文字列の1文字ずつについて、その文字に一致する文字を辞書から検索し、且つ、検索対象と一致する文字が辞書に存在するか否かを示す一致/不一致信号を作成し、検索対象と一致する文字が辞書に存在する場合には、検索結果を次回のクロック周期で利用して、検索対象の文字数を1文字ずつ増やすようにした文字列検索方法において、この一致/不一致信号を、この動作クロックのn周期分(nは1以上の整数)遅延させる第1のステップと、或るクロック周期における検索結果を予測する信号として、そのクロック周期よりもn−1周期前からそのクロック周期までの各周期における、検索対象と一致する文字が辞書に存在するという仮定と、検索対象と一致する文字が辞書に存在しないという仮定とを組み合わせた2通りの信号を予め作成する第2のステップと、この第1のステップによって遅延された一致/不一致信号に従い、この第2のステップによって作成された2通りの信号のうち仮定が正しかった信号を選択する第3のステップとを有し、この第3のステップによって選択された信号を、次回のクロック周期において利用するようにしたことを特徴とする。
【0031】
この文字列検索方法によれば、前述の、本発明に係る文字列検索回路について述べたのと全く同様にして、「各クロック周期における検索結果を次回のクロック周期に利用する」というアルゴリズムを変えることなく、前出の図8の出力orfbのような一致/不一致の結果を示す信号を遅延させて、パイプライン処理による文字列検索の高速化を実現することができる。
【発明の効果】
【0032】
本発明によれば、入力された文字列に一致する文字列を辞書から検索する処理を、動作クロックの1周期毎に、前回のクロック周期における検索結果を利用して1文字ずつ文字数を増やして行う文字列検索回路において、パイプライン処理による文字列検索の高速化を実現できるという効果が得られる。
【発明を実施するための最良の形態】
【0033】
以下、LZ77法を採用したデータ圧縮回路内に設けられる文字列検索回路に本発明を適用した例について、図面を用いて具体的に説明する。
【0034】
〔遅延1の回路〕
最初に、図8の文字列検索回路を前提として、各クロック周期に作成されるorfbを1クロック周期だけ遅延させる文字列検索回路(「遅延1」の回路)について説明する。
【0035】
図1は、この「遅延1」の回路による文字列検索の高速化の原理を示す図である。orfbは‘1’か‘0’か(一致する文字列が存在するか否か)の2つの状態しかとらないので、或るクロック周期における検索結果ps[i]を予測する信号として、そのクロック周期にはorfb=‘1’になると仮定したps1[i]と、そのクロック周期にはorfb=‘0’になると仮定したps0[i]との2通りの信号を予め作成しておく。(時刻tは、この或るクロック周期内の時刻を表しており、時刻t−1は、ps1[i],ps0[i]を作成するクロック周期内の時刻を表している。)
【0036】
そして、時刻tにはorfb=‘1’,orfb=‘0’とのうちのどちらの仮定が正しかったのかが判明するので、検索結果予測ps1[i],ps0[i]のうち正しかったほうを選択し、その選択した信号を次回のクロック周期において利用する。(図1の例ではorfb=‘0’が正しかったことが判明するので、ps0[i]を選択する)。
【0037】
これにより、動作クロックの各周期におけるorfbを1クロック周期だけ遅延させて、パイプライン処理による文字列検索の高速化を実現することができる。
【0038】
図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組の回路群が設けられている。
【0039】
また、N入力1出力のオア回路7と、N入力1出力のオア回路8と、オア回路7及び8の出力が供給される2入力1出力のマルチプレクサ9と、マルチプレクサ9の出力が供給されるD型フリップ・フロップ10とが設けられている。
【0040】
各比較回路1(i)は、検索対象の文字と辞書の対応するアドレスiの文字とを比較し、一致するとき‘1’になり不一致のとき‘0’になる信号m[i]を出力する。この出力m[i]は、同じ組のアンド回路2(i)及び3(i)の一方の入力端に供給されるとともに、同じ組のD型フリップ・フロップ6(i)のD入力端に供給されて、次の入力があるまで出力端Qに保持される。
【0041】
各アンド回路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に供給される。
【0042】
各アンド回路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に供給される。
【0043】
オア回路7,8の出力は、それぞれマルチプレクサ9の入力端S1,S2に供給される。マルチプレクサ9の出力端Dから出力された信号は、D型フリップ・フロップ10のD入力端に供給されて、次の入力があるまで出力端Qに保持される。このD型フリップ・フロップ10の出力は、各クロック周期におけるorfb(検索対象の文字列と一致する文字列が辞書に存在するか否かを示す信号)を1クロック周期だけ遅延させたorfb_dとして、マルチプレクサ9の選択制御端子Cに供給されるとともに、各組のマルチプレクサ4(i)の選択制御端子Cに供給される。
【0044】
マルチプレクサ9は、この出力orfb_dが‘1’であるとき(すなわち、1クロック周期前の検索対象の文字列に一致する文字列が辞書中に1つでも存在したとき)には、入力端S1に供給されたオア回路7の出力を、今回のクロック周期における検索結果として選択して、出力端Dから出力する。他方、この出力orfb_dが‘0’であるとき(すなわち、1クロック周期前の検索対象の文字列に一致する文字列が辞書中に存在しなかったとき)には、入力端S2に供給されたオア回路8の出力を、今回のクロック周期における検索結果として選択して、出力端Dから出力する。
【0045】
各マルチプレクサ4(i)は、この出力orfb_dが‘1’であるとき(1クロック周期前の検索対象の文字列に一致する文字列が辞書中に1つでも存在したとき)には、入力端S1に供給されたps1_and_m[i]を選択して出力端Dから出力する。他方、この出力orfb_dが‘0’のとき(1クロック周期前の検索対象の文字列に一致する文字列が辞書中に存在しなかったとき)には、入力端S2に供給されたps0_and_m[i]を選択して出力端Dから出力する。
【0046】
各マルチプレクサ4(i)の出力は、同じ組のフリップ・フロップ5(i)のD入力端に供給されて、次の入力があるまで出力端Qに保持される。各フリップ・フロップ5(i)の出力端Qに保持されている出力ps1[i]は、前述のように、辞書の1つ後のアドレスに対応する組のアンド回路2(i)にps1[i−1]として供給される。
【0047】
各フリップ・フロップ6(i)の出力端Qに保持されている出力ps0[i]は、前述のように、辞書の1つ後のアドレスに対応する組のアンド回路2(i)にps0[i−1]として供給される。
【0048】
なお、図2にはブロック図を示したが、ASIC(特定用途向けLSI)やプログラマブル・ロジック・デバイス(FPGA等)として設計する場合には、この文字列検索回路は、ハードウェア記述言語の一種であるVerilog HDLを用いて図3のように表記することができる。
【0049】
この文字列検索回路では、動作クロックの各周期における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]として供給する。
【0050】
そして、どちらの仮定が正しかったのかが1クロック周期後にorfb_dとして判明すると、各マルチプレクサ4(i)で、アンド回路2(i),3(i)のうち正しかったほうの検索結果予測が供給されたほうの出力を選択する(マルチプレクサ9でも、オア回路7,8のうち正しかった検索結果予測に対応するほうの出力を選択する)。
【0051】
そして、各マルチプレクサ4(i)で選択した信号を、フリップ・フロップ5を介して辞書の1つ後のアドレスに対応する組のアンド回路2(i)にps1[i−1]として供給することにより、次回のクロック周期において利用する。
【0052】
具体的には、新たに入力された文字列が例えば「ABCA」であれば、この文字列検索回路では、1回(動作クロックの1周期)毎に、次の手順で検索を行う。
<1周期目>
各比較回路1(i)で、1文字目の「A」についての比較結果m[i]を求める。このm[i]は、フリップ・フロップ6(i)からps0[i]として出力される(次の周期に、辞書の1つ後のアドレスに対応する組のアンド回路3(i)にps0[i−1]として供給される)。
【0053】
<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]として供給される)。
【0054】
また、比較結果m[i]は、フリップ・フロップ6(i)からps0[i]として出力される(次の周期に、辞書の1つ後のアドレスに対応する組のアンド回路3(i)にps0[i−1]として供給される)。このps0[i]は、「A」と一致する文字が辞書に存在しないと仮定して、2文字目の「B」から再検索を行った結果を示す信号となる。
【0055】
<3周期目>
各比較回路1(i)で、3文字目の「C」についての比較結果m[i]を求める。
このとき、各アンド回路2(i)の出力は、「AB」と一致する文字が辞書に存在すると仮定した、「ABC」の検索結果を予測する信号となる。
また、各アンド回路3(i)の出力は、「AB」と一致する文字列が辞書に存在しないと仮定した、「BC」の検索結果を予測する信号となる。
【0056】
この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]として供給される)。
【0057】
他方、このorfb_dが‘0’であれば、「A」と一致する文字が辞書に存在しないという仮定が正しかったので、各マルチプレクサ4(i)でアンド回路3(i)の出力(「BC」の検索結果予測)を選択する(マルチプレクサ9でもオア回路8の出力を選択する)。
この「BC」の検索結果予測は、フリップ・フロップ5(i)からps1[i]として出力される(次の周期に、辞書の1つ後のアドレスに対応する組のアンド回路2(i)にps1[i−1]として供給される)。
【0058】
また、比較結果m[i]は、フリップ・フロップ6(i)からps0[i]として出力される(次の周期に、辞書の1つ後のアドレスに対応する組のアンド回路2(i)にps1[i−1]として供給される)。このps0[i]は、「B」と一致する文字が辞書に存在しないと仮定して、3文字目の「C」から再検索を行った結果を示す信号となる。
【0059】
<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から出力される。
【0060】
この orfb_dが‘1’であれば、「AB」と一致する文字が辞書に存在するという仮定が正しかったので、各マルチプレクサ4(i)でアンド回路2(i)の出力(「ABCA」の検索結果予測)を選択する(マルチプレクサ9でもオア回路7の出力を選択する)。
この「ABCA」の検索結果予測は、フリップ・フロップ5(i)からps1[i]として出力される(次の周期に、辞書の1つ後のアドレスに対応する組のアンド回路2(i)にps1[i−1]として供給される)。
【0061】
他方、このorfb_dが‘0’であれば、「AB」と一致する文字が辞書に存在しないという仮定が正しかったので、各マルチプレクサ4(i)でアンド回路3(i)の出力(「CA」の検索結果予測)を選択する(マルチプレクサ9でもオア回路8の出力を選択する)。
この「CA」の検索結果予測は、フリップ・フロップ5(i)からps1[i]として出力される(次の周期に、辞書の1つ後のアドレスに対応する組のアンド回路2(i)にps1[i−1]として供給される)。
【0062】
また、比較結果m[i]は、フリップ・フロップ6(i)からps0[i]として出力される(次の周期に、辞書の1つ後のアドレスに対応する組のアンド回路2(i)にps1[i−1]として供給される)。このps0[i]は、「C」と一致する文字が辞書に存在しないと仮定して、4文字目の「A」から再検索を行った結果を示す信号となる。
【0063】
図4は、前出の図7の辞書を例にとって、この4周期目における検索動作(「ABC」の検索結果予測を利用して「ABCA」を検索する場合)を示す図である。
【0064】
アドレスi=0,4,9,12の文字が「A」に一致するので、アドレスi=0,4,9,12に対応する組の比較回路1(i)の比較結果m[i]は‘1’になり、残りの組の比較回路1(i)の比較結果m[i]は‘0’になる。
【0065】
また、「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’になる。
【0066】
その結果、図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’になる。
【0067】
ps0[i−1]は、1つ前のアドレスに対応する組における3文字目の「C」の再検索結果である。ps0[i]は、4文字目の「A」の再検索結果である。
【0068】
なお、3周期目においてorfb_dが‘0’であった場合には、この4周期目には、各アンド回路2(i)の出力は、「BCA」の検索結果を予測する信号となる。そして、この4周期目に、「B」と一致する文字列が辞書に存在するか否かを示すorfb_dが、フリップ・フロップ10から出力される。
【0069】
このorfb_dが‘1’であれば、各マルチプレクサ4(i)でアンド回路2(i)の出力(「BCA」の検索結果予測)を選択する(マルチプレクサ9でもオア回路7の出力を選択する)。
この「BCA」の検索結果予測は、フリップ・フロップ5(i)からps1[i]として出力される(次の周期に、辞書の1つ後のアドレスに対応する組のアンド回路2(i)にps1[i−1]として供給される)。
【0070】
他方、このorfb_dが‘0’であれば、各マルチプレクサ4(i)でアンド回路3(i)の出力(「CA」の検索結果予測)を選択する(マルチプレクサ9でもオア回路8の出力を選択する)。
この「CA」の検索結果予測は、フリップ・フロップ5(i)からps1[i]として出力される(次の周期に、辞書の1つ後のアドレスに対応する組のアンド回路2(i)にps1[i−1]として供給される)。
【0071】
この4周期目に続く5周期目には、「ABC」と一致する文字列が辞書に存在するか否かを示すorfb_dがフリップ・フロップ10から出力される。「ABCA」の後にも入力文字列が続いている場合には、5周期以降の各周期にも、orfb_dの値に応じて同様な処理を繰り返す。
【0072】
このようにして、この文字列検索回路によれば、「各クロック周期における検索結果を次回のクロック周期に利用する」というアルゴリズムを変えることなく、各クロック周期において作成されるorfb(検索対象に一致する文字が辞書に存在するか否かを示す一致/不一致信号)を遅延させて、パイプライン処理による文字列検索の高速化を実現することができる。
【0073】
しかも、検索結果を予測する信号は2通り作成するだけであり、orfbも1クロック周期遅延させるだけなので、回路構成を簡素化することができる(ハードウェア記述言語を用いてASICやプログラマブル・ロジック・デバイスとして設計する場合には、ロジックを簡素化することができる)。
【0074】
〔遅延2の回路〕
次に、図8の文字列検索回路を前提として、出力orfbを2クロック周期遅延させる文字列検索回路(「遅延2」の回路)について説明する。
【0075】
図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]を作成するクロック周期内の時刻を表している。)
【0076】
そして、時刻tにはどの仮定が正しかったのかが判明するので、検索結果予測ps11[i]及びps10[i]の組とps01[i]及びps00[i]の組とのうち正しかったほうを選択し、その選択した信号を次回のクロック周期において利用する。(図6の例では、1つ目のクロック周期についてorfb=‘0’が正しかったことが判明するので、ps01[i]及びps00[i]の組を選択する。)
【0077】
これにより、各クロック周期におけるorfbを2クロック周期遅延させて、パイプライン処理による文字列検索の高速化を実現することができる。
【0078】
ASIC(特定用途向けLSI)やプログラマブル・ロジック・デバイス(FPGA等)として設計する場合には、この「遅延2」の文字列検索回路は、ハードウェア記述言語の一種であるVerilog HDLを用いて図6のように表記することができる。
【0079】
以上の各例では、orfbを1クロック周期または2クロック周期遅延させる文字列検索回路について説明した。しかし、より一般的には、或るクロック周期における検索結果を予測する信号として、そのクロック周期よりもn−1周期前(nは1以上の整数)のクロック周期からそのクロック周期までの各周期におけるorfbの値の仮定を組み合わせた2通りの信号を予め作成するようにすれば、各クロック周期におけるorfbをnクロック周期遅延させて、パイプライン処理による文字列検索の高速化を実現することができる。
【0080】
また、以上の例では、LZ77法を採用したデータ圧縮回路内に設けられる文字列検索回路に本発明を適用した例について説明した。しかし、本発明は、これに限らず、入力された文字列に一致する文字列を辞書から検索する処理を、動作クロックの1周期毎にこの文字列の1文字ずつ行い、各クロック周期における検索結果を次回のクロック周期に利用するようにしたあらゆる文字列検索回路において、文字列検索の高速化のために適用することができる。
【図面の簡単な説明】
【0081】
【図1】「遅延1」の文字列検索回路による文字列検索の高速化の原理を示す図である。
【図2】本発明を適用した文字列検索回路の構成を示すブロック図である。
【図3】図2の文字列検索回路をハードウェア記述言語を用いて表記した図である。
【図4】図2の文字列検索回路の動作を例示する図である。
【図5】「遅延2」の文字列検索回路による文字列検索の高速化の原理を示す図である。
【図6】「遅延2」の文字列検索回路をハードウェア記述言語を用いて表記した図である。
【図7】LZ77法における辞書からの文字列の検索の様子を例示する図である。
【図8】LZ77法を採用したデータ圧縮回路内に従来設けられていた文字列検索回路の構成を示すブロック図である。
【図9】図8の文字列検索回路をハードウェア記述言語を用いて表記した図である。
【図10】図8の文字列検索回路の動作を例示する図である。
【符号の説明】
【0082】
1(i) 比較回路
2(i),3(i) アンド回路
4(i),9 マルチプレクサ
5(i),6(i),10 D型フリップ・フロップ
7,8 オア回路

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

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate


【公開番号】特開2006−332775(P2006−332775A)
【公開日】平成18年12月7日(2006.12.7)
【国際特許分類】
【出願番号】特願2005−149713(P2005−149713)
【出願日】平成17年5月23日(2005.5.23)
【出願人】(000002185)ソニー株式会社 (34,172)
【Fターム(参考)】