(57)【要約】【課題】  被検索文字列からパターンを検索するデータ検索装置において、検索速度を向上させる。【解決手段】  ＣＡＭ２０の各エントリには、状態番号と遷移条件となるＮ文字の文字列とが登録されている。アソシエートデータＲＡＭ２３には、ＣＡＭ２０の各エントリと対応付けて、次の状態番号が登録されると共に、上記パターンのパターン番号が登録されている。ＣＡＭ２０は、状態番号と被検索文字列１０１中の連続するＮ文字（Ｎは複数）との組が入力される毎に、上記エントリを検索して、一致エントリのアドレス１２２を出力するというエントリ検索処理を、既に実行しているエントリ検索処理と並行して実行する。アソシエートデータＲＡＭ３３は、ＣＡＭ２０からアドレス１２２が出力される毎に、次の状態番号とパターン番号とを読み出すという読み出し処理を、既に実行している読み出し処理と並行して実行する。【選択図】    図１
2005242997.tif 000002
【特許請求の範囲】
【請求項１】
予め与えられた１種類以上のパターンを被検索文字列から検索するデータ検索装置において、
検索キーとして状態番号と前記被検索文字列中の連続するＮ文字（Ｎは２以上の整数）との組が入力される毎に、状態番号と前記パターン中の状態遷移条件となる各文字列との組み合わせに対して、次の状態番号と該次の状態番号に遷移したときに検索したことになる全てのパターンのパターン番号とを関連付けた状態遷移表を検索して該当する次の状態番号と該当する全てのパターン番号とを出力するという検索処理を、既に実行中の検索処理と並行して実行する状態遷移格納メモリと、
前記状態遷移格納メモリに対して検索キーの一部として入力した前記被検索文字列中の連続するＮ文字よりも先頭文字を１文字ずらしたＮ文字と、前記状態遷移格納メモリから出力された次の状態番号との組を検索キーとして前記状態遷移格納メモリに入力する入力手段とを備えたことを特徴とするデータ検索装置。
【請求項２】
前記状態遷移格納メモリに対して検索キーの一部として入力した前記被検索文字列中の連続するＮ文字よりも先頭文字を１文字ずらしたＮ文字と、Ｎ文字前の前記被検索文字列の検索結果として前記状態遷移格納メモリから出力された次の状態番号との組を検索キーとして前記状態遷移格納メモリに入力する入力手段を更に備えたことを特徴とする、請求項１に記載のデータ検索装置。
【請求項３】
前記入力手段が、
前記被検索文字列をシフトするＮ段構成のシフトレジスタと、
前記アソシエートデータメモリから出力される次の状態番号を保持する状態番号レジスタとを含むことを特徴とする、請求項２の何れか一に記載のデータ検索装置。
【請求項４】
前記状態遷移格納メモリが、
状態番号と前記パターン中の状態遷移条件となる各文字列との組み合わせ毎のエントリを有し、前記入力手段から検索キーが入力される毎に、前記エントリを検索して一致エントリを示す一致エントリ情報を出力するというエントリ検索処理を、既に実行中のエントリ検索処理と並行して実行する連想メモリと、
該連想メモリの各エントリに対応するエントリであって、次の状態番号と該次の状態番号に遷移したときに検索したことになる全てのパターンのパターン番号とが登録されたエントリを有し、前記連想メモリから一致エントリ情報が出力される毎に、前記一致エントリ情報によって示されるエントリから次の状態番号とパターン番号とを読み出すという読み出し処理を、既に実行中の読み出し処理と並行して実行するアソシエートデータメモリとから構成されることを特徴とする、請求項１〜３の何れか一に記載のデータ検索装置。
【請求項５】
前記アソシエートデータメモリから出力される、同一最終文字に対する複数のパターン番号の中から、所定の選択ルールに従って１つのパターン番号を選択して出力する選択手段を備えたことを特徴とする、請求項４に記載のデータ検索装置。
【請求項６】
前記選択手段が、
前記アソシエートデータメモリから出力された、前記アソシエートデータメモリの或るエントリに登録されているパターン番号を、前記或るエントリと対応する前記連想メモリのエントリに登録されている文字列における、前記パターン番号に対応する最終文字の位置に応じた時間だけ遅延させる遅延回路と、
該遅延回路から出力されるパターン番号の中から、予め定められたルールに従って１つのパターン番号を選択する選択回路とを含むことを特徴とする、請求項５に記載のデータ検索装置。
【請求項７】
前記状態遷移格納メモリが、
検索キーとして状態番号と前記被検索文字列中の連続するＮ文字（Ｎは２以上の整数）との組が入力される毎に、状態番号と前記パターン中の状態遷移条件となる各文字列との組み合わせに対して、次の状態番号と該次の状態番号に遷移したときに検索したことになる全てのパターンのパターン番号とを関連付けた状態遷移表を検索して該当する次の状態番号と該当する全てのパターン番号とを出力するという検索処理を実行する、複数の状態遷移メモリと、
状態遷移格納メモリへ入力された検索キーを前記状態遷移メモリへ振り分けを行う検索要求振り分け部と、
前記状態遷移メモリからの検索結果出力の多重を行う検索結果多重部から構成されることを特徴とする、請求項１〜３の何れか一に記載のデータ検索装置。
【請求項８】
決定性有限オートマトンに基づいて文字列検索を行うことを特徴とする、請求項１〜７の何れか一に記載のデータ検索装置。
【請求項９】
被検索文字列中のＮ文字の部分文字列と現在状態とに従って次状態を決定して状態遷移を行いつつ、予め与えられた１種類以上のパターンを被検索文字列から検索するデータ検索装置であって、
被検索文字列を先頭から順次に１文字ずつラッチし、該ラッチした被検索文字列のＮ文字の部分文字列を保持する被検索文字レジスタと、現在の状態番号を示す現在状態番号を保持する現在状態番号レジスタとを有し、前記被検索文字レジスタが保持するＮ文字の部分文字列と、前記現在状態番号レジスタが保持する現在状態番号とを検索キーとして出力する検索要求部と、
前記検索キーが入力されるごとに、該検索キーをキーとして、現在状態番号及び照合文字列の組合せと、該組合せによって遷移する次の状態の番号を示す次状態番号、及び、次状態に遷移した際に検索されたこととなる全てのパターンのパターン番号とを対応付けて記憶するテーブルを検索し、前記検索キーに一致する現在状態番号及び照合文字列の組合せに対応する次状態番号及びパターン番号を出力する検索処理部とを備え、
前記検索要求部は、前記検索処理部が前記検索キーをキーとする検索を終了する前に、当該検索キーに含まれるＮ文字の部分文字列から１文字分ずらしたＮ文字の部分文字列を含む新たな検索キーを出力し、前記検索処理部は、既に行っている検索と並行に、前記検索要求部が出力する新たな検索キーをキーとする検索を開始することを特徴とするデータ検索装置。
【請求項１０】
前記テーブルは、前記パターン番号と、前記Ｎ文字の部分文字列中の何文字目で当該パターンが検索されたこととなるかとを対応付けて記憶する、請求項９に記載のデータ検索装置。
【請求項１１】
前記照合文字列が、前記Ｎ文字の部分文字列との間で比較の対象とならないことを示すドントケア表現を含む、請求項９又は１０に記載のデータ検索装置。
【請求項１２】
前記検索処理部が、被検索文字列中のＮ文字の部分文字列を含む検索キーをキーとする検索による次状態番号及びパターン番号を出力すると、前記検索要求部は、当該次状態番号を現在状態番号レジスタに格納し、当該次状態番号と、前記Ｎ文字の部分文字列に後続する被検索文字列のＮ文字の部分文字列とを新たな検索キーとして出力する、請求項９〜１１の何れか一に記載のデータ検索装置。
【請求項１３】
予め与えられた１種類以上のパターンを被検索文字列から検索するデータ検索方法において、
状態番号と前記パターン中の状態遷移条件となる各文字列との組み合わせに対して、次の状態番号と該次の状態番号に遷移したときに検索したことになる全てのパターンのパターン番号とを関連付けた状態遷移表を状態遷移格納メモリに登録しておき、
検索キーとして状態番号と前記被検索文字列中の連続するＮ文字（Ｎは２以上の整数）との組が入力される毎に、前記状態遷移表を検索して該当する次の状態番号と該当する全てのパターン番号とを出力するという検索処理を、既に実行中の検索処理と並行して実行し、
前記検索処理によって出力された次の状態番号と、前記被検索文字列中の次のＮ文字とを、次の検索に使用する検索キーとすることを特徴とするデータ検索方法。
【請求項１４】
連想メモリの各エントリに、状態番号と前記パターン中の状態遷移条件となる文字列とを登録しておくと共に、アソシエートデータメモリの各エントリに、次の状態番号と該次の状態番号に遷移したときに検索したことになる全てのパターンのパターン番号とを登録しておき、
前記連想メモリが、検索キーが入力される毎に、前記エントリを検索して一致エントリを示す一致エントリ情報を出力するというエントリ検索処理を、既に実行中のエントリ検索処理と並行して実行し、
前記アソシエートデータメモリが、前記連想メモリから一致エントリ情報が出力される毎に、前記一致エントリ情報によって示されるエントリから次の状態番号とパターン番号とを読み出すという読み出し処理を、既に実行中の読み出し処理と並行して実行することを特徴とする、請求項１３に記載のデータ検索方法。
【請求項１５】
前記アソシエートデータメモリから出力される、同一最終文字に対する複数のパターン番号の中から、所定の選択ルールに従って１つのパターン番号を選択して出力することを特徴とする、請求項１４に記載のデータ検索方法。
【請求項１６】
前記状態遷移格納メモリに、検索キーが入力される毎に、
検索キーとして状態番号と前記被検索文字列中の連続するＮ文字（Ｎは２以上の整数）との組が入力される毎に、状態番号と前記パターン中の状態遷移条件となる各文字列との組み合わせに対して、次の状態番号と該次の状態番号に遷移したときに検索したことになる全てのパターンのパターン番号とを関連付けた状態遷移表を検索して該当する次の状態番号と該当する全てのパターン番号とを出力するという検索処理を実行する、複数の状態遷移メモリの中から、検索を実行する状態遷移メモリを選択し、エントリ検索処理を実行し、一つ以上の状態遷移メモリから出力される検索結果を多重して出力することを特徴とする、請求項１３〜１５の何れか一に記載のデータ検索方法。
【請求項１７】
決定性有限オートマトンに基づいて文字列検索を行うことを特徴とする、請求項１３〜１６の何れか一に記載のデータ検索方法。
【請求項１８】
被検索文字列中のＮ文字の部分文字列と現在状態とに従って次状態を決定して状態遷移を行いつつ、予め与えられた１種類以上のパターンを被検索文字列から検索するデータ検索方法であって、
被検索文字列から連続するＮ文字をラッチし、該ラッチしたＮ文字の部分文字列と現在の状態番号を示す現在状態番号とを検索キーとして出力する検索キー出力ステップと、
前記検索キーが入力されるごとに、該検索キーをキーとして、現在状態番号及び照合文字列の組合せと、該組合せによって遷移する次の状態の番号を示す次状態番号、及び、次状態に遷移した際に検索されたこととなる全てのパターンのパターン番号とを対応付けて記憶するテーブルを検索し、前記検索キーに一致する現在状態番号及び照合文字列の組合せに対応する次状態番号及びパターン番号を出力する検索処理ステップとを備え、
前記検索キー出力ステップが、既に出力された検索キーに従う検索処理ステップが終了する前に、当該検索キーに含まれるＮ文字の部分文字列から１文字分ずらしたＮ文字の部分文字列を含む新たな検索キーを出力し、既に開始している検索処理ステップと並行に、前記新たな検索キーをキーとして検索をする検索処理ステップが開始することを特徴とするデータ検索方法。
【請求項１９】
前記テーブルは、前記パターン番号と、前記Ｎ文字の部分文字列中の何文字目で当該パターンが検索されたこととなるかとを対応付けて記憶する、請求項１８に記載のデータ検索方法。
【請求項２０】
前記照合文字列が、前記Ｎ文字の部分文字列との間で比較の対象とならないことを示すドントケア表現を含む、請求項１８又は１９に記載のデータ検索方法。
【請求項２１】
前記検索処理ステップが、被検索文字列中のＮ文字の部分文字列を含む検索キーをキーとする検索による次状態番号及びパターン番号を出力すると、前記検索キー出力ステップは、当該出力された次状態番号と、前記Ｎ文字の部分文字列に後続する被検索文字列のＮ文字の部分文字列とを新たな検索キーとして出力する、請求項１８〜２０の何れか一に記載のデータ検索装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、比較的長い被検索文字列中に、別途与えられたパターンと呼ばれる比較的短い文字列が、部分文字列として存在するか否かを判定し、部分文字列が存在する場合は存在するパターンを抽出するデータ検索技術、特に、決定性有限オートマトンに基づいてデータ検索を行うデータ検索技術に関する。
【背景技術】
【０００２】
必要メモリ量の少ない文字列検索手法として、検索文字列（以後、パターンと称する）から状態遷移表を作成しておき、その状態遷移表が格納された連想メモリ（Content Addressable Memory、以後ＣＡＭと略す）を参照しながら決定性有限オートマトンに基づいた文字列検索を行う方法が従来から知られている（例えば、特許文献１参照）。
【０００３】
図１０は、特許文献１に記載されている従来の文字列検索器５０の構成を示すブロック図である。
【０００４】
文字列検索器５０は、入力された被検索文字列５００について決定性有限オートマトンに基づくパターン検索を実施し、一致検索されたパターンの番号を表すパターン番号５０１を出力する。
【０００５】
決定性有限オートマトンの状態遷移表は、ＣＡＭ７０と、このＣＡＭ７０に付随するアソシエートデータＲＡＭ７３にあらかじめ登録される。
【０００６】
ＣＡＭ７０の各エントリは、現状態番号格納域７１と照合文字格納域７２との２つの領域から構成される。現状態番号格納域７１には、状態遷移前の状態の番号（状態番号）が格納される。照合文字格納域７２には、状態遷移条件となる文字（１文字）が格納される。
【０００７】
アソシエートデータＲＡＭ７３の各エントリは、次状態番号格納域７４とパターン番号格納域７５との２つの領域から構成される。次状態番号格納域７４には、状態遷移後の状態の状態番号が格納される。パターン番号格納域７５には、この状態遷移によって検出されるパターンの番号が格納される。
【０００８】
図１１にＣＡＭ７０及びアソシエートデータＲＡＭ７３の内容例を示す。この例は、２種類のパターン“ＡＢＣ”、“ＢＣＤ”を検索する場合についてのものであり、パターン“ＡＢＣ”、“ＢＣＤ”のパターン番号は、それぞれ“１”、“２”となっている。また、図１２は、ＣＡＭ７０およびアソシエートデータＲＡＭ７３の内容に対応した状態遷移図を示す。
【０００９】
被検索文字レジスタ７６は、被検索文字列５００を１文字ずつ取り込み、被検索文字５２１として出力する。
【００１０】
ＣＡＭ７０は、現状態番号５２０と被検索文字５２１との組を検索キーとしてエントリを検索し、見つかったエントリのアドレス５２２をアソシエートデータＲＡＭ７３に対して出力する。
【００１１】
アソシエートデータＲＡＭ７３は、アドレス５２２に対応するエントリの内容を読み出し、次状態番号５２３とパターン番号５２４として出力する。
【００１２】
状態番号レジスタ７７は、次状態番号５２３を保持し、現状態番号５２０として出力する。
【００１３】
パターン番号レジスタ７８は、パターン番号５２４を保持し、パターン番号５０１として出力する。なお、特許文献１には、ＣＡＭ７０の検索の成否を示す信号と、ＣＡＭ７０の検索に失敗したときに状態番号レジスタ７７をリセットする回路が記載されているが、それらは従来技術の問題点とは無関係であるため省略されている。
【００１４】
次に、従来の文字列検索器５０の動作について述べる。
【００１５】
被検索文字列５００は１文字ずつ被検索文字レジスタ７６に取り込まれる。ＣＡＭ７０は、状態番号レジスタ７７から出力される現状態番号５２０と被検索文字レジスタ７６から出力される被検索文字５２１との組を検索キーとして検索処理を行い、一致したエントリのアドレス５２２をアソシエートデータＲＡＭ７３に対して出力する。例えば、現状態番号“１”と被検索文字“Ａ”との組が検索キーとして入力された場合は、アドレス“３”をアソシエートデータＲＡＭ７３に対して出力し、また、例えば、現状態番号“２”と被検索文字“Ｃ”との組が検索キーとして入力された場合は、アドレス“７”をアソシエートデータＲＡＭ７３に対して出力する（図１１参照）。
【００１６】
アソシエートデータＲＡＭ７３は、ＣＡＭ７０から入力されたアドレス５２２に対応するエントリの内容を、次状態番号５２３とパターン番号５２４として出力する。例えば、アドレス５２２として“３”が入力された場合は、次状態番号５２３及びパターン番号５２４として各々“１”及び“０”を出力し、また、例えば、アドレス５２２として“７”が入力された場合は、次状態番号５２３及びパターン番号５２４として各々“４”及び“１”を出力する。
【００１７】
次状態番号５２３は状態番号レジスタ７７にラッチされ、次回の検索時に使用される。また、パターン番号５２４はパターン番号レジスタ７８にラッチされ、パターン番号５０１として出力される。以上の動作を被検索文字列５００の全ての文字について繰り返し行うことにより、文字列検索が実行される。
【特許文献１】特開昭６２−１７９０８３号公報
【発明の開示】
【発明が解決しようとする課題】
【００１８】
特許文献１に記載されている従来の技術には、検索が低速であるという問題点がある。その理由は、被検索文字列５００の中の１文字を処理するたびに、ＣＡＭ７０のエントリ検索処理とアソシエートデータＲＡＭ７３のデータ読み出し処理の完了を待たなければならないからである。
【００１９】
そこで、本発明の目的は、一度に複数の被検索文字について検索を実施することにより、検索速度を向上させることにある。
【課題を解決するための手段】
【００２０】
上記目的を達成するために、本発明のデータ検索装置は、予め与えられた１種類以上のパターンを被検索文字列から検索するデータ検索装置において、検索キーとして状態番号と前記被検索文字列中の連続するＮ文字（Ｎは２以上の整数）との組が入力される毎に、状態番号と前記パターン中の状態遷移条件となる各文字列との組み合わせに対して、次の状態番号と該次の状態番号に遷移したときに検索したことになる全てのパターンのパターン番号とを関連付けた状態遷移表を検索して該当する次の状態番号と該当する全てのパターン番号とを出力するという検索処理を、既に実行中の検索処理と並行して実行する状態遷移格納メモリと、前記状態遷移格納メモリに対して検索キーの一部として入力した前記被検索文字列中の連続するＮ文字よりも先頭文字を１文字ずらしたＮ文字と、前記状態遷移格納メモリから出力された次の状態番号との組を検索キーとして前記状態遷移格納メモリに入力する入力手段とを備えたことを特徴とする。
【００２１】
本発明のデータ検索方法は、予め与えられた１種類以上のパターンを被検索文字列から検索するデータ検索方法において、状態番号と前記パターン中の状態遷移条件となる各文字列との組み合わせに対して、次の状態番号と該次の状態番号に遷移したときに検索したことになる全てのパターンのパターン番号とを関連付けた状態遷移表を状態遷移格納メモリに登録しておき、検索キーとして状態番号と前記被検索文字列中の連続するＮ文字（Ｎは２以上の整数）との組が入力される毎に、前記状態遷移表を検索して該当する次の状態番号と該当する全てのパターン番号とを出力するという検索処理を、既に実行中の検索処理と並行して実行し、前記検索処理によって出力された次の状態番号と、前記被検索文字列中の次のＮ文字とを、次の検索に使用する検索キーとすることを特徴とする。
【００２２】
本発明のデータ検索装置及び方法では、被検索文字列中のＮ文字の部分文字列を含む検索キーに対する検索処理が終了する前に、その部分文字列から１文字ずらしたＮ文字の部分文字列を含む検索キーに対する検索処理を開始する。従来のデータ検索装置では、１文字単位で状態遷移を行っていたため、前の文字の状態遷移先が決定するまでは、次の文字の検索処理を開始できなかった。本発明のデータ検索装置では、Ｎ文字単位で状態遷移を行うため、Ｎ文字の部分文字列に対する状態遷移先が決定していなくても、その部分文字列から１文字ずらしたＮ文字の部分文字列を含む検索キーの検索処理を開始することができる。このように、検索処理を並行して行うことにより、１文字単位で状態遷移を行う従来のデータ検索装置に比して、データ検索に要する時間を短縮できる。
【００２３】
本発明のデータ検索装置では、前記状態遷移格納メモリに対して検索キーの一部として入力した前記被検索文字列中の連続するＮ文字よりも先頭文字を１文字ずらしたＮ文字と、Ｎ文字前の前記被検索文字列の検索結果として前記状態遷移格納メモリから出力された次の状態番号との組を検索キーとして前記状態遷移格納メモリに入力する入力手段とを備えたことを特徴とする構成を採用できる。この場合、状態遷移格納メモリは、被検索文字列中のＮ文字の部分文字列（例えば“１２３４５６”中の“４５６”）と、前Ｎ文字（“１２３”）の検索処理による状態遷移の結果とを検索キーとして検索処理を行う。
【００２４】
本発明のデータ検索装置では、前記入力手段が、前記被検索文字列をシフトするＮ段構成のシフトレジスタと、前記アソシエートデータメモリから出力される次の状態番号を保持する状態番号レジスタとを含む構成を採用できる。この場合、シフトレジスタが、被検索文字列を１文字づつ読み込み、新たに取り込んだ１文字を含むＮ文字を検索キーの一部として出力することにより、被検索文字列中の連続するＮ文字よりも先頭文字を１文字ずらしたＮ文字を、新たな検索キーの一部として状態遷移格納メモリに入力できる。
【００２５】
本発明のデータ検索装置では、前記状態遷移格納メモリが、状態番号と前記パターン中の状態遷移条件となる各文字列との組み合わせ毎のエントリを有し、前記入力手段から検索キーが入力される毎に、前記エントリを検索して一致エントリを示す一致エントリ情報を出力するというエントリ検索処理を、既に実行中のエントリ検索処理と並行して実行する連想メモリと、該連想メモリの各エントリに対応するエントリであって、次の状態番号と該次の状態番号に遷移したときに検索したことになる全てのパターンのパターン番号とが登録されたエントリを有し、前記連想メモリから一致エントリ情報が出力される毎に、前記一致エントリ情報によって示されるエントリから次の状態番号とパターン番号とを読み出すという読み出し処理を、既に実行中の読み出し処理と並行して実行するアソシエートデータメモリとから構成される構成を採用できる。また、本発明のデータ検索方法では、連想メモリの各エントリに、状態番号と前記パターン中の状態遷移条件となる文字列とを登録しておくと共に、アソシエートデータメモリの各エントリに、次の状態番号と該次の状態番号に遷移したときに検索したことになる全てのパターンのパターン番号とを登録しておき、前記連想メモリが、前記入力手段から検索キーが入力される毎に、前記エントリを検索して一致エントリを示す一致エントリ情報を出力するというエントリ検索処理を、既に実行中のエントリ検索処理と並行して実行し、前記アソシエートデータメモリが、前記連想メモリから一致エントリ情報が出力される毎に、前記一致エントリ情報によって示されるエントリから次の状態番号とパターン番号とを読み出すという読み出し処理を、既に実行中の読み出し処理と並行して実行する構成を採用できる。このように、連想メモリとアソシエートデータメモリをパイプライン的に動作させることで、連想メモリのエントリ検索処理とアソシエートデータメモリの読み出し処理に要する遅延時間を隠蔽し、検索速度を向上させることができる。
【００２６】
本発明のデータ検索装置及び方法では、前記アソシエートデータメモリから出力される、同一最終文字に対する複数のパターン番号の中から、所定の選択ルールに従って１つのパターン番号を選択して出力する選択手段を備えたことを特徴とする。例えば、あるパターンの末尾が、他のパターンの末尾部分と一致する場合には、同じ時点で、複数のパターンが検索されることとなる。このような場合には、例えばパターン番号の大小に基づいて、複数のパターンのうちのいずれかを出力させる構成を採用することができる。
【００２７】
本発明のデータ検索装置では、前記選択手段が、前記アソシエートデータメモリから出力された、前記アソシエートデータメモリの或るエントリに登録されているパターン番号を、前記或るエントリと対応する前記連想メモリのエントリに登録されている文字列における、前記パターン番号に対応する最終文字の位置に応じた時間だけ遅延させる遅延回路と、該遅延回路から出力されるパターン番号の中から、予め定められたルールに従って１つのパターン番号を選択する選択回路とを含む構成を採用できる。この場合、パターン末尾文字のＮ文字中の位置に応じて、パターン番号を出力できる。
【００２８】
本発明のデータ検索装置では、前記状態遷移格納メモリが、検索キーとして状態番号と前記被検索文字列中の連続するＮ文字（Ｎは２以上の整数）との組が入力される毎に、状態番号と前記パターン中の状態遷移条件となる各文字列との組み合わせに対して、次の状態番号と該次の状態番号に遷移したときに検索したことになる全てのパターンのパターン番号とを関連付けた状態遷移表を検索して該当する次の状態番号と該当する全てのパターン番号とを出力するという検索処理を実行する、複数の状態遷移メモリと、状態遷移格納メモリへ入力された検索キーを前記状態遷移メモリへ振り分けを行う検索要求振り分け部と、前記状態遷移メモリからの検索結果出力の多重を行う検索結果多重部から構成される構成を採用できる。また、本発明のデータ検索方法では、前記状態遷移格納メモリに、前記入力手段から検索キーが入力される毎に、検索キーとして状態番号と前記被検索文字列中の連続するＮ文字（Ｎは２以上の整数）との組が入力される毎に、状態番号と前記パターン中の状態遷移条件となる各文字列との組み合わせに対して、次の状態番号と該次の状態番号に遷移したときに検索したことになる全てのパターンのパターン番号とを関連付けた状態遷移表を検索して該当する次の状態番号と該当する全てのパターン番号とを出力するという検索処理を実行する、複数の状態遷移メモリの中から、検索を実行する状態遷移メモリを選択し、エントリ検索処理を実行し、一つ以上の状態遷移メモリから出力される検索結果を多重して出力する構成を採用できる。この場合、検索処理を複数の状態遷移メモリに振り分けることで、検索処理を並列に行うことができる。
【００２９】
本発明のデータ検索装置及び方法は、決定性有限オートマトンに基づいて文字列検索を行うことを特徴とする構成を採用できる。
【００３０】
本発明の別の視点のデータ検索装置は、被検索文字列中のＮ文字の部分文字列と現在状態とに従って次状態を決定して状態遷移を行いつつ、予め与えられた１種類以上のパターンを被検索文字列から検索するデータ検索装置であって、被検索文字列を先頭から順次に１文字ずつラッチし、該ラッチした被検索文字列のＮ文字の部分文字列を保持する被検索文字レジスタと、現在の状態番号を示す現在状態番号を保持する現在状態番号レジスタとを有し、前記被検索文字レジスタが保持するＮ文字の部分文字列と、前記現在状態番号レジスタが保持する現在状態番号とを検索キーとして出力する検索要求部と、前記検索キーが入力されるごとに、該検索キーをキーとして、現在状態番号及び照合文字列の組合せと、該組合せによって遷移する次の状態の番号を示す次状態番号、及び、次状態に遷移した際に検索されたこととなる全てのパターンのパターン番号とを対応付けて記憶するテーブルを検索し、前記検索キーに一致する現在状態番号及び照合文字列の組合せに対応する次状態番号及びパターン番号を出力する検索処理部とを備え、前記検索要求部は、前記検索処理部が前記検索キーをキーとする検索を終了する前に、当該検索キーに含まれるＮ文字の部分文字列から１文字分ずらしたＮ文字の部分文字列を含む新たな検索キーを出力し、前記検索処理部は、既に行っている検索と並行に、前記検索要求部が出力する新たな検索キーをキーとする検索を開始することを特徴とする。
【００３１】
また、本発明の別の視点のデータ検索方法は、被検索文字列中のＮ文字の部分文字列と現在状態とに従って次状態を決定して状態遷移を行いつつ、予め与えられた１種類以上のパターンを被検索文字列から検索するデータ検索方法であって、被検索文字列から連続するＮ文字をラッチし、該ラッチしたＮ文字の部分文字列と現在の状態番号を示す現在状態番号とを検索キーとして出力する検索キー出力ステップと、前記検索キーが入力されるごとに、該検索キーをキーとして、現在状態番号及び照合文字列の組合せと、該組合せによって遷移する次の状態の番号を示す次状態番号、及び、次状態に遷移した際に検索されたこととなる全てのパターンのパターン番号とを対応付けて記憶するテーブルを検索し、前記検索キーに一致する現在状態番号及び照合文字列の組合せに対応する次状態番号及びパターン番号を出力する検索処理ステップとを備え、前記検索キー出力ステップが、既に出力された検索キーに従う検索処理ステップが終了する前に、当該検索キーに含まれるＮ文字の部分文字列から１文字分ずらしたＮ文字の部分文字列を含む新たな検索キーを出力し、既に開始している検索処理ステップと並行に、前記新たな検索キーをキーとして検索をする検索処理ステップが開始することを特徴とする。
【００３２】
本発明の別の視点のデータ検索装置及び方法では、Ｎ文字単位で状態遷移を行い、検索処理を、既に実行中の検索処理と並行して行う。このため、１文字単位で状態遷移を行う従来のデータ検索装置に比して、データ検索に要する時間を短縮できる。
【００３３】
本発明の別の視点のデータ検索装置及び方法では、前記テーブルは、前記パターン番号と、前記Ｎ文字の部分文字列中の何文字目で当該パターンが検索されたこととなるかとを対応付けて記憶することが好ましい。この場合、パターンが、Ｎ文字中のどの位置で検索されたかを知ることができる。
【００３４】
本発明の別の視点のデータ検索装置及び方法では、前記照合文字列が、前記Ｎ文字の部分文字列との間で比較の対象とならないことを示すドントケア表現を含む構成を採用できる。この場合、パターンの末尾がＮ文字に満たない場合でも、パターンの検索ができる。
【００３５】
本発明の別の視点のデータ検索装置及び方法では、被検索文字列中のＮ文字の部分文字列を含む検索キーをキーとする検索による次状態番号及びパターン番号を出力すると、当該次状態番号と、前記Ｎ文字の部分文字列に後続する被検索文字列のＮ文字の部分文字列とを新たな検索キーとして出力する構成を採用できる。被検索文字列中のＮ文字に対する状態遷移先は、そのＮ文字に選考するＮ文字に対する状態遷移先が決定していないと決定することができない。例えば、被検索文字列が“１２３４５６”であるときに、“６”を取り込むべきタイミングで、まだ“１２３”に対する状態遷移先が決定していないときには、状態遷移先が決定するまで“６”の取り込みを遅延することで、“４５６”に対する状態遷移先を決定することができる。
【発明の効果】
【００３６】
本発明に係るデータ検索装置、データ検索回路及びデータ検索方法は、複数文字単位の状態遷移表を作成し、一度に複数の被検索文字について検索を実施し、状態遷移格納メモリにおける検索キーに対する検索処理を並列に行うことにより、状態遷移格納メモリの検索処理に要する遅延時間を隠蔽し、検索速度を向上させることができる。また、選択回路を設ける場合には、選択回路が、同一最終文字に対する複数のパターン番号の中から所定のルールに従って１つのパターン番号を選択することで、複数のパターンが同時に検索された場合でも、検索結果をその内の１つに絞り込むことができる。
【発明を実施するための最良の形態】
【００３７】
次に本発明の実施の形態について図面を参照して詳細に説明する。
【００３８】
第１実施形態
〔実施の形態の構成〕
図１は、本発明の第１実施形態のデータ検索装置の構成を機能ブロック図で示している。データ検索装置１０は、状態遷移格納メモリ２００、検索要求部２０１、及び、出力パタン決定部２０２を有する。決定性オートマトンにおける入力文字列と状態遷移との関係はあらかじめ与えられており、データ検索装置１０は、入力された被検索文字列１０１について決定性有限オートマトンに基づくパターン検索を実施し、一致検索されたパターンを表すパターン番号１０２を出力する。
【００３９】
クロック信号１００は、データ検索装置１０を駆動させるクロックである。データ検索装置１０は、クロック信号１００に同期して動作する。説明を簡易化するため、以降の説明において、データ検索装置１０はクロック信号１００の立ち上がりエッジに同期するものとする。被検索文字列１０１は、１つ以上の任意の個数の文字から構成され、クロック信号１００の立ち上がり毎に、先頭文字から順に１文字ずつデータ検索装置１０に取り込まれる。ここで、文字とは、人間が認識可能な文字だけでなく、バイナリデータも含む。また、文字を表現するのに必要なビット数に制限はなく、１文字が８ビットで表現されても良く、或いは、１６ビットで表現されてもよい。
【００４０】
検索要求部２０１は、被検索文字列１０１を取り込んで保持するシフトレジスタ２６と、状態番号レジスタ２７から構成される。検索要求部２０１は、被検索文字列１０１をデータ検索装置１０に取り込み、状態遷移格納メモリ２００に入力する検索キー１２６を生成する。
【００４１】
シフトレジスタ２６は、それぞれ被検索文字列１０１中の一文字を保持する被検索文字レジスタ２６−１〜２６−Ｎ（Ｎは２以上の整数）を有する。これら被検索文字レジスタ２６−１〜Ｎは、それぞれ、初期状態では、パターン中に使用されない文字、例えば“−（ハイフン）”を記憶している。被検索文字レジスタ２６−１〜２６−Ｎが保持する文字は、クロック信号１００の立ち上がりで１文字分シフトされる。具体的には、被検索文字レジスタ２６−Ｍ（２≦Ｍ≦Ｎ）の内容が、被検索文字レジスタ２６−（Ｍ−１）に取り込まれ、新たに取り込まれた被検索文字列１０１の次の１文字が、被検索文字レジスタ２６−Ｎにラッチされる。状態番号レジスタ２７は、クロック信号１００の立ち上がりで次状態番号１２３をラッチしてこれを保持する。
【００４２】
シフトレジスタ２６は、被検索文字レジスタ２６−１〜２６−Ｎが保持する各文字を、被検索文字１２１−１〜１２１−Ｎとして出力する。状態番号レジスタ２７は、保持する状態番号を、現状態番号１２０として出力する。検索要求部２０２１は、現状態番号１２０と被検索文字１２１−１〜Ｎとを、検索キー１２６として、状態遷移格納メモリ２００に入力する。
【００４３】
例えば、被検索文字列１０１が“ＡＢＣＤＡＢＣ・・・”であり、Ｎ＝３である場合について考える。この場合、被検索文字レジスタ２６−１が先頭文字“Ａ”、被検索文字レジスタ２６−２が“Ｂ”、被検索文字レジスタ“Ｃ”を有しているときには、検索要求部２０１は、現状態番号１２０と“ＡＢＣ”とを検索キーとして、状態遷移格納メモリ２００に入力する。クロック信号１００の１クロック後には、被検索文字レジスタ２６−２、２６−３が格納する文字が、被検索文字レジスタ２６−１、２６−２にそれぞれシフトされ、データ検索装置１０に新たに取り込まれた文字“Ｄ”が被検索文字レジスタ２６−３に格納される。検索要求部２０１は、現状態番号１２０と“ＢＣＤ”とを検索キーとして、状態遷移格納メモリ２００に入力する。
【００４４】
状態遷移格納メモリ２００は、検索対象にするパターンに応じた状態遷移表を保持している。前記状態遷移表は、状態番号と、パターン中の状態遷移条件となる各文字列との組み合わせに対して、次状態番号とこの次状態番号に遷移したときに検索したことになる全てのパターンのパターン番号とを関連付けた表である。状態遷移格納メモリ２００は、検索要求部２０１から出力される検索キー１２６を入力し、状態遷移表を検索して、該当する次状態番号１２３とパターン番号１２４−１〜１２４−Ｎとを、検索結果として出力する。状態遷移格納メモリ２００は、このような検索処理を、既に入力されている検索キーに従った検索処理を行っている間も実行する並列検索機能を有する。
【００４５】
図２は、状態遷移格納メモリ２００における検索処理の実行の様子を示している。同図において、矢印は、１つの検索処理が開始されてから、その検索処理が終了するまでを表している。この例では、Ｎ＝５であり、状態遷移格納メモリ２００は、５つの検索処理を並行して行う。時刻ｔ１で、検索要求部２０１から検索キー１２６が入力されると、状態遷移格納メモリ２００は、その検索キー１２６に従った検索４００−１を開始する。同図の例では、検索４００−１は、時刻ｔ５とｔ６の間で終了し、検索４００−１の検索結果が得られる。時刻ｔ５とｔ６の間で検索が終了するといった場合、時刻ｔ６において、その直前に得られた検索結果（次状態番号）を用いて、次の検索処理２００−６を開始できることを意味する。時刻ｔ２で、検索要求部２０１から、新た検索キー１２６が入力されると、既に開始している検索４００−１の検索完了を待たずに、これと並列して、新たな検索キー１２６に従った検索４００−２を開始する。検索４００−２は、時刻ｔ６とｔ７の間で終了し、検索４００−２の検索結果が得られる。このように、状態遷移格納メモリ２００は、既に入力されている検索キーに従った検索処理の完了を待たずに別の検索キーを連続的に受け付け、入力順と同じ順序で、検索結果を出力する機能を有する。
【００４６】
本実施の形態では、上述した機能を有する状態遷移格納メモリ２００を、ＣＡＭ２０及びアソシエートデータＲＡＭ２３により実現している。ＣＡＭ２０及びアソシエートデータＲＡＭ２３には、決定性有限オートマトンにおける状態遷移に関する情報が予め格納されている。このような状態遷移格納メモリ２００は、例えばＮｅｔＬｏｇｉｃマイクロシステムズ社のＣＡＭ  ＮＳＥ５５１２（http://www.netlogicmicro.com/）と市販のＳＲＡＭを組み合わせることにより実現可能である。前記ＣＡＭ  ＮＳＥ５５１２は後述するＣＡＭの要件も満たす。
【００４７】
状態遷移格納メモリ２００に格納する状態遷移表の作成方法について、以下に具体例を挙げて説明する。状態遷移表の作成は、検索対象にするパターンから状態遷移図を作成するステップと、作成した状態遷移図を状態遷移表に変換するステップとの、２ステップより構成される。以下では、検索対象にするパターンが“Ｅ”（パターン番号「１」）、“ＢＣ”（パターン番号「２」）、“ＡＢＣＤＥ” （パターン番号「３」）、“ＢＣＤＡＢＣＤ” （パターン番号「４」）の４種類であり、Ｎ＝３の例について説明する。
【００４８】
本実施形態では、Ｎ文字の文字列に対して状態遷移を行う。状態遷移図の作成は、（１）検索対象パターンの登録、（２）部分一致パターンの解決、（３）状態遷移図の完成、の３つのステップに大きく分けられる。
【００４９】
「ステップ１」検索対象パターンの登録
検索対象パターンの登録を行う。本ステップは、初期状態から開始して、遷移先の状態を追加し、検索対象パターン各々について状態遷移の登録作業を繰り返し行う。パターンを全く登録していない状態では、初期状態である状態“０”のみが存在する。はじめに、検索対象とするパターンを先頭からＮ文字単位で分解する（ステップ１−１）。次いで、分解したＮ文字の文字列のうち、検索対象のパターン末尾でない文字列について、初期状態から順番に状態遷移図を辿り、着目した状態において該当するＮ文字の文字列に対応する遷移先が存在するか否かを判断する。遷移先が存在しない場合には、新たに遷移先の状態番号を割り当てて、状態遷移図に追加する。遷移先が既に存在する場合は、対応する遷移先に移動する。この作業を、分解したＮ文字の文字列がパターン末尾に達するまで繰り返す（ステップ１−２）。最後に、パターン末尾の文字列とパターン番号の対応付けを行う。具体的には、現在着目している状態において、パターン末尾の文字列に対応するＮ文字の文字列入力があった場合にパターンに一致したことが分かるように、着目中の状態に関連づけを行う（ステップ１−３）。
【００５０】
具体例として、ステップ１の作業を、“ＢＣＤＡＢＣＤ”（パターン４）を追加する場合について、図３を用いて説明する。同図（ａ）に示すように、パターン４の登録を行う前に、パターン１〜３が既に登録されているものとする。同図（ａ）において、丸数字ｘは状態番号を表している。また、三角内の数字ｙと三角の右にある文字列ｚとは、それぞれ、その状態において文字列ｚに一致する文字列が入力された際に、パターン番号ｙのパターンが検出されることを示す。
【００５１】
最初に、パターン４を、Ｎ（＝３）文字毎の文字列に分解すると、先頭から順に“ＢＣＤ”、“ＡＢＣ”、“Ｄ”の３つの文字列が得られる。このとき、パターン４のパターン末尾の文字“Ｄ”のように、パターン末尾の文字列がＮ（＝３）文字に満たない場合は、末尾の文字列を左詰めとし、残りの文字数分を比較の対象にならないことを示すドントケア（ｄｏｎ‘ｔ  ｃａｒｅ；以下、記号＊で表す）で埋める。この例では、“Ｄ＊＊”とする。この３つの文字列“ＢＣＤ”、“ＡＢＣ”、“Ｄ＊＊”を、順番に状態遷移図に追加する。
【００５２】
まず、パターン初期状態である状態“０”において、文字列“ＢＣＤ”が入力された場合に遷移する状態“２”を追加する（図３（ｂ））。次に、状態“２”において文字列“ＡＢＣ”が入力された場合に遷移する状態“３”を追加する（図３（ｂ））。その後、３つ目の文字列“Ｄ”は、パターン末尾の文字列であるので、状態“３”とパターン番号「４」との対応付けを行う。状態“３”において、文字列“Ｄ＊＊”が入力されると、“Ｄ”の入力時点で被検索文字列１０１の中にパターン４が含まれていることが分かるように、状態“３”に三角内の“４”を追加して、パターン４との対応付けを行う（図３（ｂ））。
【００５３】
「ステップ２」部分一致パターンの解決
ステップ１により検索対象となるパターンを登録しただけでは、あるパターンが他のパターンの部分文字列となるようなパターンを探すことができない。例えば、図３（ｂ）の状態“２”で、文字列“ＡＢＣ”が連続して入力されると、状態“２”から状態“３”への状態遷移が行われるが、“ＡＢＣ”という文字列は、状態“０”から状態“１”への遷移条件となっている。この状態で、続けて“ＤＥ＊”が入力されると、状態“３”において“Ｄ＊＊”と一致するためパターン４に一致すると同時に、状態“１”において“ＤＥ＊”と一致するため、パターン３にも一致することが分かる。つまり、状態“２”から“ＡＢＣ”＋“ＤＥ＊”という文字列が入力された場合には、パターン３とパターン４との双方に一致する。このため、状態３でのパターン対応付けとして、入力文字列“ＤＥ＊”に対し、パターン３、４の両方を関連づける必要がある（図３（ｃ））。
【００５４】
上記のような部分一致パターンの解決を、全ての状態番号について実施する。実際には、着目している状態よりも初期状態（状態０）からの遷移数が少ない状態に関連づけられている部分パターンに一致するものがないかを確認すれば十分である。例えば、状態２について確認を行う場合、状態２の初期状態からの遷移数は１であるため、初期状態からの遷移数が０（つまり初期状態）からの状態遷移に、関連する部分パターンがあるかどうかを確認すればよい。
【００５５】
「ステップ３」状態遷移図の完成
図３（ｃ）において、パターン番号が関連づけられている状態において、状態遷移先がない入力に対して状態“０”に戻る遷移を追加すると、同図（ｄ）に示す状態遷移図が完成する。例えば、同図（ｃ）において、状態１で“ＤＥ＊”が入力されるとパターン３にマッチするが、“ＤＥ＊”が入力された場合に対応する状態遷移先がない。対応する状態遷移先がないということは初期状態に戻ることを意味するため、状態“０”への遷移を追加する。同図（ｄ）の状態“１”から状態“０”への添字“ＤＥ＊”の矢印がこれに該当する。以上により、状態遷移図が完成され、図４に示すような状態遷移図が得られる。
【００５６】
図５は、状態遷移メモリ２００に格納される状態遷移表の内容を示している。図４に示す状態遷移図から状態遷移図表を作成し、これをＣＡＭ２０及びアソシエートデータＲＡＭ２３に格納すると、図５に示すようになる。ＣＡＭ２０の各エントリ、及び、そのエントリに対応するアソシエートデータＲＡＭ２３の各エントリには、状態遷移が１つずつ格納される。ＣＡＭ２０の各エントリは、現状態番号格納域２１と照合文字列格納域２２との２つの領域を有する。現状態番号格納域２１には、状態遷移前の状態の番号が格納され、照合文字列格納域２２には、状態遷移条件となる文字列が格納される。照合文字列格納域２２はＮ文字分の容量を有する。照合文字列格納域２２に格納される文字列の長さがＮ文字に満たない場合には、その文字列は左詰めされ、余剰領域はドントケア（＊）で埋められる。
【００５７】
ここで、ＣＡＭ２０の要件について述べる。ＣＡＭ２０は、完全一致検索だけでなく、部分一致検索の能力も有していなければならない。すなわち、ＣＡＭ２０は、値「０」と値「１」に加えて、比較の対象にしないことを示すドントケアの３値を記憶できるものとする。また、ＣＡＭ２０を検索した際に、同時に複数のエントリに一致した場合は、最も若いアドレスのエントリが採用されるものとする。例えば、図５において、現状態番号１２０＝“２”、被検索文字１２１−１＝“Ａ”、被検索文字１２１−２＝“Ｂ”、被検索文字１２１−３＝“Ｃ”からなる検索キーがＣＡＭ２０に入力されると、アドレス“２”、“５”、“９”の３つのエントリにヒットするが、最も若いアドレスである“２”がＣＡＭ２０の出力になる。
【００５８】
アソシエートデータＲＡＭ２３の各エントリは、次状態番号格納域２４とパターン番号群格納域２５との２つの領域を有する。次状態番号格納域２４には、状態遷移後の状態の番号が格納される。パターン番号群格納域２５には、状態遷移によって検出されるパターンの番号を格納する領域をＮ個有する。ここで、パターン番号“０”は、いずれのパターンにも一致していないことを示している。
【００５９】
パターン番号群格納域２５へのパターン番号の格納方法について述べる。パターン番号群格納域２５には、入力文字列の何文字目でパターンを検出するかに応じて、パターン番号が格納される位置が決定される。例えば、照合文字列格納域２２の左から１文字目で検出されるパターンの番号は、パターン番号群格納域２５の左から１番目に格納される。照合文字列格納域２２の左から２文字目で検出されるパターンの番号は、パターン番号群格納域２５の左から２番目に格納される。具体的に、あるエントリの照合文字列格納域２２が”ＢＣＤ”であるときには、その２文字目でパターン“ＢＣ”（パターン番号“２”）を検出したいため、パターン番号群格納域２５の２番目にパターン番号“２”を格納し、パターン番号格納域２５は、“０２０”となる。
【００６０】
ＣＡＭ２０に状態遷移の情報を格納後、ＣＡＭ２０の使用されていないエントリの内容を、全てドントケア（＊）とする。また、アソシエートデータＲＡＭ２３の使用されていないエントリの内容を、全て”０”とする。これは、検索キー１２６が、ＣＡＭ２０のどのエントリとも一致しなかった場合に、強制的に初期状態に遷移させるためである。
【００６１】
以上、具体例を挙げて説明したＣＡＭ２０及びアソシエートデータＲＡＭ２３への状態遷移表の格納方法を、一般的に説明すると次のようになる。先ず、検索対象とするパターンに基づいて、状態遷移図を作成する。次いで、作成した状態遷移図に含まれる全ての状態遷移を、ＣＡＭ２０及びアソシエートデータＲＡＭ２３の各エントリに１つずつ格納する。その際、以下の２つの条件を満たすようにする。
・遷移前の状態が初期状態（状態番号＝“０”）である状態遷移を、そうでない状態遷移よりも後のアドレス（大きなアドレス）のエントリに格納する。
・同一状態から遷移する２つの状態遷移については、遷移条件となる文字列が長い方の状態遷移を、短いものよりも若いアドレス（小さなアドレス）のエントリに格納する。
そして、最後に、ＣＡＭ２０の現状態番号格納域２１の内容が“０”（＝初期状態）であるエントリについて、現状態番号格納域の内容を“＊”に書き換える。
【００６２】
次に、ＣＡＭ２０及びアソシエートデータＲＡＭ２３の機能について説明する。ＣＡＭ２０は、現状態番号１２０と被検索文字１２１−１〜１２１−Ｎとの組を検索キーとしてエントリを検索し、見つかったエントリのアドレス１２２をアソシエートデータＲＡＭ２３に出力する。ＣＡＭ２０は、このようなエントリ検索処理を、クロック信号１００の１周期に、少なくとも１回、常に開始できる。言い換えれば、ＣＡＭ２０は、複数のエントリ検索処理を並行して実行することができる。ただし、エントリ検索処理に要する時間（検索が要求されてから、アドレス１２２を出力するまでの遅延時間）には、制約がない。なお、本実施の形態では、ＣＡＭ２０として、クロック信号１００の１周期につき、少なくとも１回、常にエントリ検索処理を開始できるものを使用したが、クロック信号１００のＫ周期（Ｋは整数）に１回しかエントリ検索処理を開始できないＣＡＭを使用した場合には、クロック信号１００をＫ逓倍したクロック信号を、ＣＡＭの動作クロックとすれば良い。
【００６３】
アソシエートデータＲＡＭ２３は、アドレス１２２に対応するエントリの内容を読み出し、その内容を次状態番号１２３とパターン番号１２４−１〜１２４−Ｎとして出力する。アソシエートデータＲＡＭ２３は、このような読み出し処理を、クロック信号１００の１周期に、少なくとも１回、常に開始できる。言い換えれば、アソシエートデータＲＡＭ２３は、複数の読み出し処理を並行して実行することができる。ただし、読み出し処理に要する時間（アドレス１２２が入力されてから、次状態番号１２３とパターン番号１２４−１〜１２４−Ｎを出力するまでの遅延時間）には、制約がない。なお、本実施の形態では、アソシエートデータＲＡＭ２３として、クロック信号１００の１周期につき、少なくとも１回、常に読み出し処理を開始できるものを使用したが、クロック信号１００のＫ周期に１回しか読み出し処理を開始できないアソシエートデータＲＡＭを使用した場合には、クロック信号１００をＫ逓倍したクロック信号をアソシエートデータＲＡＭの動作クロックとすれば良い。
【００６４】
状態番号レジスタ２７は、クロック信号１００の立ち上がりで、アソシエートデータＲＡＭ２３が出力する次状態番号１２３をラッチしてこれを保持する。状態番号レジスタ２７の初期値は“０”である。状態番号レジスタ２７は、保持する状態番号を、現状態番号１２０として出力する。
【００６５】
パターン番号レジスタ２８−Ｍ（１≦Ｍ≦Ｎ）は、それぞれクロック信号１００の立ち上がりで、アソシエートデータＲＡＭ２３が出力するパターン番号１２４−Ｍをラッチする。パターン番号レジスタ２８−Ｍ（２≦Ｍ≦Ｎ）それぞれの出力値は、遅延器２９−Ｍによってクロック信号１００の（Ｍ−１）周期分だけ遅延させられて、パターン番号１２５−Ｍとして出力される。
【００６６】
パターン選択回路３０は、パターン番号１２５−１〜１２５−Ｎを入力し、それらの中で最も大きいものをパターン番号１０２として出力する。これにより、同時に複数のパターンが検索された場合には、大きいパターン番号が割り当てられているパターンが優先されることになる。例えば、被検索文字列１０１が“ＡＢＣＤＥ”のとき、その５文字目において、パターン１（“Ｅ”）、及び、パターン３（“ＡＢＣＤＥ”）の両方が同時に検出されるが、パターン番号の大小関係により、パターン３（“ＡＢＣＤＥ”）が採用される。なお、本実施の形態では、パターン選択回路３０を使用して、パターン番号１２５−１〜１２５−Ｎの中から最も大きなパターン番号を選択するようにしているが、他の選択ルール（例えば、最も小さなパターン番号を選択する）に従ってパターン番号を選択する選択回路を使用することもできる。
【００６７】
数値Ｎの最適値について説明する。Ｎは自然数であり、ＣＡＭ２０の検索に要する時間の最大値と、アソシエートデータＲＡＭ２３の読み出しに要する時間の最大値との、合計によって決まる。この合計時間をＡＴと表記し、クロック信号１００の周期をＣＴと表すと（ＡＴとＣＴの単位は同一でなければならない）、
Ｎ×ＣＴ＝ＡＴ
を関係を満たすＮが、Ｎの最適値である。
【００６８】
検索キーとする文字列の文字数（＝シフトレジスタ２６の段数）Ｎは、２文字以上であればどのような値でも良いが、本実施の形態の説明で用いたように、Ｎとして上記式により求めた値を採用すると最も効率的な検索を行うことが可能となる。検索キーとする文字列の文字数Ｎが、上記式より求めた値より大きい場合には、Ｎ文字後の検索キーが検索要求部２０１に取り込まれるより前に、状態遷移格納メモリ２００から次状態番号１２３が出力され、状態番号レジスタ２７から出力される現状態番号１２０と検索キー１２６の出力のタイミングがずれる。この場合には、状態遷移格納メモリ２００から出力される次状態番号１２３を、遅延器によって遅延して状態番号レジスタ２７に入力することで、タイミングズレを回避すればよい。遅延器による遅延量は、（Ｎ−ＡＴ）／ＣＴにより求めることができる。逆に、検索キーとする文字列の文字数Ｎが、上記式よりもとめた値より小さい場合には、Ｎ文字前の検索キーに対応する検索結果が状態遷移格納メモリ２００から出力されるまで、検索要求部２０１の処理（シフトレジスタ２６への新たな被検索文字の取り込み及び状態遷移格納メモリ２００への検索キーの出力）を停止して、タイミングズレを回避すればよい。
【００６９】
［実施の形態の動作］
以下、図１のデータ検索装置１０の動作について、具体例を挙げて詳細に説明する。図６は、データ検索装置１０の各部の動作状況をタイミングチャートで示している。この例では、Ｎ＝３とし、被検索文字列１０１を“ＡＢＣＤＡＢＣＤＥＦ”とする。また、ＣＡＭ２０とアソシエートデータＲＡＭ２３は、図５に示す内容を記憶しており、データ検索装置１０は、図４に示す状態遷移図に従って、パターン１からパターン４を検出する。以下では、クロック信号１００の１０回目の立ち上がり時の動作について述べる。その他のタイミングにおける動作も同様であるため、それらの説明を割愛する。
【００７０】
クロック信号１００の１０回目の立ち上がりエッジでは、被検索文字レジスタ２６−１〜２６−３に格納された文字が１文字分シフトされ、被検索文字列１０１の１０文字目“Ｆ”が被検索文字レジスタ２６−３に格納される。この結果、被検索文字１２１−１〜１２１−３は、“ＤＥＦ”となる。また、次状態番号１２３の値“３”が状態番号レジスタ２７にラッチされ、現状態番号１２０が“３”になる。
【００７１】
検索要求部２０１は、現状態番号１２０の値“３”、及び、被検索文字１２１−１〜１２１−３の値“ＤＥＦ”を、検索キー１２６としてＣＡＭ２０に入力し、ＣＡＭ２０では、入力された検索キー１２６に従った検索が開始される。この検索キー１２６に一致するＣＡＭ２０のエントリのアドレスは、“３”、“４”、“９”であり、前述のように、複数のエントリに同時にヒットした場合は、最もアドレスの小さいエントリが採用されるため、ＣＡＭ２０が最終的に出力するアドレス１２２は”３”となる。次に、アドレス１２２の値“３”に対応するアソシエートデータＲＡＭ２３のエントリの内容が読み出され、次状態番号１２３が“０”に、パターン番号１２４−１〜１２４−３がそれぞれ“４”、“３”、“０”になる。
【００７２】
本例ではＮの値を“３”としているから、ＣＡＭ２０のエントリ検索処理とアソシエートデータＲＡＭ２３の読み出し処理に、クロック信号１００の３周期分の時間を要する。従って、現状態番号１２０の値“３”と、被検索文字１２１−１〜１２１−３の値“ＤＥＦ”がＣＡＭ２０に入力されてから、クロック信号１００の３周期後（すなわち、クロック信号１００の１３回目の立ち上がり時）に、次状態番号１２３の値“０”が状態番号レジスタ２７にラッチされ、パターン番号１２４−１〜１２４−３の値“４３０”がパターン番号レジスタ２８−１〜２８−３にラッチされる。また、ＣＡＭ２０のエントリ検索処理及びアソシエートデータＲＡＭ２３の読み出し処理と並行して、クロック信号１００の１１回目の立ち上がり時に入力された検索キー（現状態番号“１”と被検索文字列“ＥＦ−”との組）及び１２回目の立ち上がり時に入力された検索キー（現状態番号“０”と被検索文字列“Ｆ−−”との組）に従ったＣＡＭ２０のエントリ検索処理及びアソシエートデータＲＡＭ２３の読み出し処理も行われる。
【００７３】
パターン番号１２５−１は、パターン番号レジスタ２８−１の出力値であるから、クロック信号１００の１３回目の立ち上がり時にパターン番号１２５−１は“４”になる。パターン番号レジスタ２８−２の出力値は、遅延器２９−２によりクロック信号１００の１周期分だけ遅延される。また、パターン番号レジスタ２８−３の出力値は、遅延器２９−３によりクロック信号１００の２周期分だけ遅延される。従って、クロック信号１００の１４回目の立ち上がりでパターン番号１２５−２は“３”になり、クロック信号１００の１５回目の立ち上がりでパターン番号１２５−３は“０”になる。
【００７４】
クロック信号１００の１３回目の立ち上がりの際、パターン番号１２５−１〜１２５−３が“４００”になり、このときのパターン番号１０２は、それらの値の最大値である“４”になる。よって、パターン番号“４”に対応するパターン“ＢＣＤＡＢＣＤ”が一致検索されたことになる。このような操作を繰り返すことにより検索対象のパターンの検出を行うことができる。
【００７５】
従来のデータ検索装置では、１文字単位で状態遷移を行っており、１つ前の入力文字による状態遷移先が確定しないと、その次の文字の状態遷移が決定できず、状態遷移格納メモリの検索中に、次の文字を入力することができなかった。本実施形態では、状態遷移格納メモリ２００は、Ｎ文字単位で状態遷移を行う状態遷移表を格納しており、入力された検索キー１２６に一致するエントリの次状態番号１２３及びパターン番号１２４−１〜１２４−Ｎを出力する。また、状態遷移格納メモリ２００は、検索キー１２６を基づく検索を複数並列に実行できる。このため、１文字単位で状態遷移を行う従来に比して、パターン検出を高速化することができる。
【００７６】
本発明の効果を得るためのポイントに関して整理する。検索速度の向上という本発明の効果は、（１）並列検索機能を持つ状態遷移格納メモリ２００と、（２）入力文字Ｎ文字単位の状態遷移表と、（３）Ｎ文字単位の状態遷移表において長さがＮ文字に満たない場合の状態遷移を表すドントケア表現を格納できるＣＡＭ２０との３つを組み合わせることにより、初めて得ることができる。これら３つの要素のうち、いずれかひとつが欠けても本発明の効果を最大限に得ることはできない。
【００７７】
第２実施形態
本発明の第２実施形態のデータ検索装置は、図１に示す第１実施形態のデータ検索装置１０と同様な構成を有する。第１実施形態では、状態遷移格納メモリ２００は、検索キー１２６に対する検索結果を、一定の時間で出力している。本実施形態では、状態遷移格納メモリ２００による検索時間が一定の時間で終了せず、可変時間となる点で、第１実施形態のデータ検索装置１０と異なる。また、本実施形態では、状態番号レジスタ２７は最大Ｎ個の検索結果を保持する機能を有する。
【００７８】
図７は、本実施形態の検索要求部２０１の検索キー１２６の生成時の動作手順をフローチャートで示している。データ検索装置１００は、クロック信号１００に同期した、被検索文字列１０１の次の１文字を取り込む（ステップＳ１）。本実施形態では、状態遷移格納メモリ２００において検索結果が得られるまでにかかる時間が一定時間ではないため、Ｎ文字前の検索結果が得られている保証がない。そこで、検索要求部２０１は、状態遷移格納メモリ２００においてＮ文字前の検索結果が得られているか否か、つまり、Ｎ文字前の検索結果の状態番号が状態番号レジスタ２７に保持されたか否かを判断する（ステップＳ２）。
【００７９】
例えば被検索文字列が“ＡＢＣＤＥＦ”で、Ｎ＝３であり、ステップＳ１で６文字目の“Ｆ”を取り込んだときには、ステップＳ２では、シフトレジスタ２６が保持する３文字の文字列“ＤＥＦ”の３文字前の“ＡＢＣ”の検索結果が得られているか否かを判断する。検索要求部２０１は、ステップＳ２で、検索結果が得られていないと判断したときには、クロック信号１００の入力を待ち（ステップＳ３）、ステップＳ２に戻り、Ｎ文字前の検索結果が得られるまで処理を遅延する。検索要求部２０１は、ステップＳ２で検索結果が得られていると判断すると、前Ｎ文字の検索結果による次状態番号を、現状態番号１２０として、検索キー１２６を生成して、これを状態遷移格納メモリ２００に入力する（ステップＳ４）。検索要求部２０１は、以上のような動作手順により、検索キー１２６を生成して、状態遷移格納メモリ２００に検索キー１２６を入力する。
【００８０】
図８は、本実施形態の状態遷移格納メモリ２００における検索処理の様子を示している。この例では、Ｎ＝４とし、被検索文字列１０１を“ＡＢＣＤＥＦＧＨＩＫＬＭ・・・”とする。検索要求部２０１は、ステップ４１で、クロック信号の６回目の立ち上がりエッジ（時刻ｔ６）で被検索文字列中１０１の“Ｉ”を取り込むと、ステップＳ２で、新たに取り込んだ“Ｉ”を末尾の文字とする文字列４０１−６“ＦＧＨＩ”の４文字前の文字列４０１−２“ＢＣＤＥ“を検索キー１２６に含む検索４０２−２の検索結果が得られているか否かを判断する。
【００８１】
図８では、時刻ｔ６では、検索４０２−２の検索はまだ終了しておらず、検索結果は得られていない。このため、検索要求部２０１は、ステップＳ４で、クロック信号１００の１周期分だけ処理を遅延し、時刻ｔ７で、再び検索４０２−２の検索結果が得られているか否かを判断する。検索４０２−２は、時刻ｔ６と時刻ｔ７の間で終了し、現状態番号レジスタ２７は、時刻ｔ７で、その検索結果による次状態番号をラッチする。検索要求部２０１は、時刻ｔ７で、検索結果が得られていると判断し、現状態番号レジスタ２７の内容と、文字列４０１−６“ＦＧＨＩ”とを、検索キー１２６として状態遷移格納メモリ２００に入力する。
【００８２】
状態遷移格納メモリ２００は、時刻ｔ７で、入力された検索キー１２６に従った検索処理２０２−６を開始する。その後、次のクロックである時刻ｔ８で、新たに文字“Ｋ”を取り込み、文字列４０１−３“ＣＤＥＦ”の検索４０２−３の検索結果が得られているか否かを判断する。図６では、検索４０２−３の検索結果は時刻ｔ８と時刻ｔ９の間で得られるため、検索要求部２０１は、クロック信号１００の１周期分だけ処理を遅延して、文字列４０１−７“ＧＨＩＫ”を含む検索キー１２６を、状態遷移格納メモリ２００に入力し、状態遷移格納メモリ２００は、検索４０２−７を開始する。
【００８３】
本実施形態では、状態遷移格納メモリ２００の検索に要する時間が一定ではないため、先に開始した検索の結果が得られるよりも前に、後に開始した検索の結果が得られることが考えられる。このような場合に備えて、状態番号レジスタ２７は、複数の検索結果を保持できるように構成される。状態番号レジスタ２７が保持できる検索結果の数は、最大で、状態遷移格納メモリ２００の検索処理の並列実行数であり、状態番号レジスタ２７は、最大Ｎ個の検索結果を保持することができる。
【００８４】
例えば図６では、検索４０２−７は、検索４０２−３の結果を用いて行われるが、検索４０２−７を開始する時刻ｔ９より前に、検索４０２−３よりも後に開始した検索４０２−４、２０２−５の検索結果が得られている。この場合、状態番号レジスタ２７は、検索４０２−４の検索結果及び検索４０２−５の検索結果を、後に使用する検索結果として保持しておく。状態番号レジスタ２７が保持する検索４０２−４の検索結果は、文字列４０１−４“ＤＥＦＧ”に後続する文字列４０１−８“ＨＩＫＬ”に対する検索４０２−８を開始する時刻ｔ１０で、現在状態番号１２０として、状態遷移格納メモリ２００に入力される。状態遷移格納レジスタ２７に保持された検索結果は、次のＮ文字先の文字列と共に検索キー１２６として状態遷移格納メモリ２００に入力された後に、任意のタイミングで削除される。
【００８５】
本実施形態では、状態遷移格納メモリ２００における検索キー１２６に対する検索時間が、可変時間で終了する。このような場合には、Ｎ文字前の検索結果が得られるまで、検索キー１２６の入力を遅延することで、Ｎ文字前の状態遷移結果に基づいて、次のＮ文字の状態遷移を行うことができる。これにより、本実施形態では、第１実施形態と同様な効果を得ることができる。
【００８６】
第３実施形態
図９は、本発明の第３実施形態のデータ検索装置の構成を示している。本実施形態のデータ検索装置１００ａは、状態遷移格納メモリの構成が、第１及び第２実施形態と相違する。本実施形態の状態遷移格納メモリ３００は、検索要求振り分け回路３０２、状態遷移メモリ３０１−１〜３０１−Ｍ（Ｍは２以上の整数）、及び、検索結果多重回路３０３を備える。
【００８７】
状態遷移メモリ３０１−１〜３０１−Ｍは、それぞれ、図４に示すようなＮ文字単位の状態遷移図から作成した状態遷移表を格納し、状態遷移表に基づいて検索処理を実行する。各状態遷移格納メモリ３０１は、状態遷移表を格納し、検索処理を実行する機能を持っていれば、どのような構成であっても構わない。各状態遷移メモリ３０１の具体的な構成は、例えば第１実施形態状態遷移格納メモリ２００のように並列検索機能を持つものであってもよく、或いは、同時に１つの検索処理しか実行できないものであってもよく、また、その他の状態遷移表に基づく検索装置であってもよい。
【００８８】
検索要求振り分け回路３０２は、状態遷移格納メモリ３００に検索キー１２６が入力されると、状態遷移メモリ３０１−１〜３０１−Ｍのうち、いずれか一つの状態遷移メモリを選択し、選択した状態遷移メモリに検索キー１２６を入力する。このとき、検索キー１２６を入力する状態遷移メモリの選択にあたっては、どの状態遷移メモリを選択してもよいが、検索処理を実行中でない状態遷移メモリを選択するのが望ましい。
【００８９】
検索キー１２６が入力された状態遷移メモリ３０１は、状態遷移表に基づいて検索処理を実行し、検索結果として、次状態番号とパターン番号群を出力する。検索結果多重回路３０３は、状態遷移メモリ３０１−１〜３０１−Ｍから出力された検索結果（次状態番号とパターン番号群）を多重し、次状態番号１２３とパターン番号１２４−１〜１２４−Ｎを出力する。
【００９０】
本実施形態では、複数の状態遷移メモリ３０１を用いることにより、状態遷移格納メモリ３００ａの並列検索機能を実現する。本実施形態においても、第１実施形態と同様な効果を得ることができる。
【００９１】
以上、本発明をその好適な実施形態に基づいて説明したが、本発明のデータ検索装置及びデータ検索方法は、上記実施形態例にのみ限定されるものではなく、上記実施形態の構成から種々の修正及び変更を施したものも、本発明の範囲に含まれる。例えば、図１に示した構成をＬＳＩ化してデータ検索回路を構成する等の変更が可能である。
【図面の簡単な説明】
【００９２】
【図１】本発明の第１実施形態のデータ検索装置の構成を示すブロック図。
【図２】状態遷移格納メモリ２００における検索処理の様子を示すタイムチャート。
【図３】（ａ）〜（ｄ）は、状態遷移図の作成の様子を示す図。
【図４】第１実施形態における決定性有限オートマトンの状態遷移図の具体例を示す図。
【図５】状態遷移格納メモリ２００に格納された状態遷移表の内容を示す図。
【図６】データ検索装置１００の動作例を示すタイムチャート。
【図７】本発明の第２実施形態のデータ検索装置の動作手順を示すフローチャート。
【図８】データ検索装置の動作例を示すタイムチャート。
【図９】本発明の第３実施形態のデータ検索装置の構成を示すブロック図。
【図１０】従来のデータ検索装置の構成を示すブロック図。
【図１１】従来のデータ検索装置のＣＡＭ７０及びアソシエートデータＲＡＭ７３が記憶する内容を示す図。
【図１２】従来のデータ検索装置における状態遷移図のぐらい例を示す図。
【符号の説明】
【００９３】
１０：データ検索装置
２００：状態遷移格納メモリ
２０１：検索要求部
２０２：出力パタン決定部
２０：ＣＡＭ
２１：現状態番号格納域
２２：照合文字列格納域
２３：アソシエートデータＲＡＭ
２４：次状態番号格納域
２５：パターン番号群格納域
２６：シフトレジスタ
２６−１〜２６−Ｎ：被検索文字レジスタ
２７：状態番号レジスタ
２８−１〜２８−Ｎ：パターン番号レジスタ
２９−２〜２９−Ｎ：遅延器
３０：パターン選択回路
１００：クロック信号
１０１：被検索文字列
１０２：パターン番号
１２０：現状態番号
１２１−１〜１２１−Ｎ：被検索文字
１２２：アドレス
１２３：次状態番号
１２４−１〜１２４−Ｎ：パターン番号
１２５−１〜１２５−Ｎ：パターン番号
１２６：検索キー
【図１】
2005242997.tif 000003
【図２】
2005242997.tif 000004
【図３】
2005242997.tif 000005
【図４】
2005242997.tif 000006
【図５】
2005242997.tif 000007
【図６】
2005242997.tif 000008
【図７】
2005242997.tif 000009
【図８】
2005242997.tif 000010
【図９】
2005242997.tif 000011
【図１０】
2005242997.tif 000012
【図１１】
2005242997.tif 000013
【図１２】
2005242997.tif 000014