JP5440812B2 - パターンマッチング装置 - Google Patents
パターンマッチング装置 Download PDFInfo
- Publication number
- JP5440812B2 JP5440812B2 JP2011504896A JP2011504896A JP5440812B2 JP 5440812 B2 JP5440812 B2 JP 5440812B2 JP 2011504896 A JP2011504896 A JP 2011504896A JP 2011504896 A JP2011504896 A JP 2011504896A JP 5440812 B2 JP5440812 B2 JP 5440812B2
- Authority
- JP
- Japan
- Prior art keywords
- node
- circuit unit
- metacharacter
- character
- unit
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/02—Comparing digital values
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2207/00—Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F2207/02—Indexing scheme relating to groups G06F7/02 - G06F7/026
- G06F2207/025—String search, i.e. pattern matching, e.g. find identical word or best match in a string
Landscapes
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Design And Manufacture Of Integrated Circuits (AREA)
Description
本発明は、オートマトン回路と、この回路を用いるパターンマッチ(文字列照合)装置と、この装置を用いるパターンマッチ方法とに係り、特に、正規表現を再構成可能な有限オートマトン回路と、この回路を用いるパターンマッチ装置と、この装置を用いるパターンマッチ方法とに係る。
正規表現とは、通常の文字と、メタキャラクタ(metacharacter)と呼ばれる特定の意味を持った特殊な記号を組み合わせて、任意の文字列をパターンとして表現する記法である。
この正規表現を用いた文字列照合(パターンマッチ)は、様々な分野で用いられている。例えば、ある文書ファイルからの文字列検索や、ネットワークセキュリティの分野においてネットワーク中のパケットペイロードから特定の文字列を検索する、等の場面で用いられている。
近年、ネットワーク帯域は急速に増加している。このため、特に、ネットワーク中においてパケットペイロード等に対する正規表現を用いたパターンマッチを行う場合には、ネットワーク帯域に合う高速な検索スループットで処理を行う必要がある。
一般的に、マイクロプロセッサ上では、正規表現を用いたパターンマッチは、与えられた正規表現の検索対象パターンから生成したNFA(Non−deterministic Finite Automaton:非決定性有限オートマトン)、又は、DFA(Deterministic Finite Automaton:決定性有限オートマトン)を用いて行われる。
正規表現からNFA、DFAへの変換方法については、例えば、非特許文献1(近藤 嘉雪 著、「定本Cプログラマのためのアルゴリズムとデータ構造」、ソフトバンクパブリッシング、1998年、第297−330頁)に記載されている。非特許文献1には、正規表現を構文木(Syntax Tree)に変換し、この構文木からNFAを生成し、このNFAからDFAを生成できることが記載されている。
図1は、正規表現“a(bc)*(d|e)f”の構文木の一例である。図2は、正規表現“a(bc)*(d|e)f”の構文木を変換して得られるNFAの一例である。なお、図2のNFAは、ε遷移(epsilon−transition)を含まないNFAの一例である。ε遷移とは、入力を待たずに遷移が可能な特殊な遷移である。
ある状態における入力文字に対して状態遷移先が1つしか存在しないDFAでは、1文字あたり一定の速度、つまり、O(1)の処理時間で、パターンマッチングを行うことができる。このため、長さmの入力ストリーム(検索対象の文字列)に対してはO(m)の処理時間が必要となる。DFAの状態数は、正規表現の長さnに対して、最悪の場合、O(2n)で増加する恐れがある。したがって、状態を保持するために必要なメモリ量が爆発的に増大する可能性がある。このことは、特許文献1(特表2005−537550号公報)、非特許文献1、非特許文献2(Reetinder Sidhu、Viktor K. Prasanna、「Fast Regular Expression Matching using FPGAs」、Proceedings of the 9th Annual IEEE Symposium on Field−Programmable Custom Computing Machines、2001年、第227−238頁)にも記載されている。
一方、NFAには、ある状態における入力文字に対して状態遷移先が複数存在する場合がある。この場合のNFAは、逐次処理を行うマイクロプロセッサ上において、1文字あたりO(n)の処理時間でパターンマッチングを行う。ここで、nは正規表現の長さである。このため、長さmの入力ストリームに対しては、O(mn)の処理時間が必要となるが、その状態数は、O(n)でしか増加せず、DFAに比べて小さいことが知られている。
近年、例えば、非特許文献2では、NFAを直接回路化し、FPGA(Field Programmable Gate Array)のような再構成可能なデバイス上に組み込むことで、高速なパターンマッチングを行う手法が提案されている。
図3は、非特許文献2において、NFAを直接回路化するために用いられる基本ブロックの回路図である。この単位回路は、Flip−Flop(F/F)502と、Comparator(比較器、または比較回路部)602と、ANDゲート803とを具備する。ここで、Flip−Flop502は、NFAの各状態を構成するためのものである。Comparator602は、当該状態からの遷移条件である文字と入力されるテキスト文字を比較するためのものである。ANDゲート803は、Flip−Flopの出力とComparatorの出力を入力して状態遷移信号を生成するためのものである。
非特許文献2では、このような構成の基本ブロックを複数用意し、これら複数の基本ブロックを適宜に配置し、さらにANDゲート、ORゲート等の組み合わせ回路を接続することによって、対象となるNFAを回路化している。
図4は、非特許文献2における、正規表現“a(bc)*(d|e)f”に対応するパターンマッチング回路の回路図である。このような手法では、ハードウェアによる並列処理の特徴を活かし、NFAの状態数はO(n)のままで、1文字あたりの処理時間をDFAと同じO(1)に減少させることが可能である。このため、長さmの入力ストリームに対してO(m)の処理時間でパターンマッチングを行うことが可能となる。
一方で、上記のような手法は、FPGA上に組み込む正規表現パターンの変更・追加・削除等の更新を行う場合、verilog−HDLやVHDL(Very high−speed integrated circuit Hardware Description Language)等のHDL(Hardware Description Language:ハードウェア記述言語)の修正、その合成(Synthesis)、FPGAに対するPAR(Place and Route:配置配線)、プログラミングといったFPGAの再構成処理(以下、FPGAのコンパイルと呼ぶ)が必要となる。したがって、1つのパターンだけを更新するためであっても、当該FPGAを含むシステム全体の処理を、再構成の間、停止する必要がある。また、上記の理由から、ASIC(Application Specific Integrated Circuit)化による専用回路化にも適していないという課題がある。
そこで、上記の課題を解決する目的で、非特許文献3(Divyasree J、Rajashekar H、Kuruvilla Varghese、「Dynamically Reconfigurable Regular Expression Matching Architecture」、Proceedings of the 19th IEEE International Conference on Application−Specific Systems,Architectures and Processors、2008年、第120−125頁)、特許文献1に記載されているような、回路アーキテクチャが提案されている。
非特許文献3に示された手法でも、非特許文献2と同様に、複数の基本ブロック(非特許文献3では、Basic Blockと呼ぶ)を用いてNFAの状態を回路化している。ただし、非特許文献3における回路は、Flip−Flop、Comparatorからの出力信号等の接続関係において、非特許文献2のものとは若干異なる。
また、非特許文献3は、正規表現“R{n}”(正規表現Rのn回繰り返し)、“R{n,m}”(正規表現Rのn回以上、m回以下の繰り返し)等の一定回数のCR(Constrained Repetition:繰り返し)を実現するための8bitカウンタ、CRの回数判定を行うCount Decoderを含み、複数の信号線を選択するMUX(MUltipleXer:マルチプレクサ)をもったGeneric Blockを一列の配列状に並べ、各入出力信号を接続したアーキテクチャを提案している。
このアーキテクチャは、FPGA上に構成することを前提としている。また、各Generic BlockにおけるMUXやCount Decoderは、FPGAの回路構成を決定するメモリ(SRAM:Static Random Access Memory)で構成されたLUT(Look−Up Table)の内容を変更することで、その動作を決定する。
非特許文献3では、Xilinx社のFPGAを想定しており、SRL(Shift Register LUT)を用いて、LUTの内容を変更することを想定している。ただし、SRL相当のレジスタやメモリを用意することでASIC化することも可能であると考えられる。
本手法では、上記のようにFPGA上に実装されたGeneric Blockの中に構成されたMUXの動作を変更する。こうすることで、FPGAをコンパイルすることなく、所望の正規表現を構成する動的再構成を実現している。
このアーキテクチャでは、Generic Blockが一列の配列状に接続されている。また、あるGeneric Blockから前のGeneric Blockに対するフィードバック信号が1本しか存在しない。これらのこと等から、このアーキテクチャには、構成できる正規表現に制限があるという課題が存在する。例えば、“a(bcd)*e”のような正規表現は構成可能であるが、“a(b+cd)*e”のようにネスト内にもメタキャラクタが存在するような正規表現は構成できない。
また、特許文献1でも、レジスタ配列に設定する値によって状態間の接続構成や状態遷移条件の再設定を行うことができる再構成可能なNFA回路アーキテクチャが示されている。本アーキテクチャは、ASIC化することを想定しているが、前述のアーキテクチャ同様、FPGAでも構成可能であると考えられる。
特許文献1のアーキテクチャには、NFAの状態の役割をもつレジスタ配列と、その状態を表す各レジスタからそれぞれの状態を表す全てのレジスタへの配線が用意されている。さらに、状態間の接続を設定するためのレジスタ配列が用意されており、そのレジスタに設定する値を用いたスイッチ構成により、状態を示すレジスタ間の接続が設定される。また、各状態からその遷移先への状態遷移情報を設定するレジスタ群も用意されており、例えば正規表現のような文字で遷移する際には、このレジスタ群の対応する箇所に遷移条件である文字を設定する。この設定した値は、入力されたテキスト文字と比較され、これが一致していれば、対応する状態遷移に相当する信号と論理積(AND)を取り、状態遷移が成立する。本手法では、状態間の接続情報(スイッチ)を設定するレジスタ配列と、状態遷移情報を設定するレジスタ群を書き換えることで、所望の正規表現が示すNFAを動的に再構成することが可能となる。
このアーキテクチャでは、動的にあらゆるNFAを構成することが可能なアーキテクチャとなっている。その一方で、汎用性のために各状態間の配線を用意しているため、状態数Nに対して、O(N2)で配線数、状態間の接続情報(スイッチ)を設定するレジスタ配列、状態遷移情報を設定するレジスタ群が増加してしまう。つまり、状態数に対してスケーラビリティの面で課題があると考えられる。
まとめると、上記のような、正規表現を示すNFAや汎用的なNFAの再構成可能な回路アーキテクチャには、以下のような問題点がある。
第1の問題点は、特定の正規表現の一部を構成できるブロック(モジュール)を用意し、それを1次元の配列状に接続した再構成可能NFA回路において現れている。このような再構成可能NFA回路では、例えば、“a(b+cd)*e”のようなネスト内にもメタキャラクタを用いた正規表現は構成することができない。つまり、構成する正規表現に制約条件が存在するというのが第1の問題点である。
その理由は、特定の正規表現の一部を構成できるブロック(モジュール)(非特許文献3では、Generic Block)は1次元の配列状に接続されており、構成できる正規表現に制約条件が生じるためである。これは、あるブロックから前段のブロックへのフィードバック信号がただ1つしか存在しないためであり、同様に、複数ブロック先へ直接接続すべき信号が複数存在した場合にも、後段のブロックを通過させる信号線の数が限定されているためである。
第2の問題点は、状態を表すレジスタから全てのレジスタへの配線を有し、レジスタ配列に設定する値によって状態間の接続構成や状態遷移条件の再設定を行うことで、動的にNFAを構成することが可能なアーキテクチャに現れている。このようなアーキテクチャでは、どのような遷移をもつNFAでも構成できる一方、状態数Nに対してそのハードウェア量がO(N2)で増加するため、状態数に対するスケーラビリティの面で課題がある、というのが第2の問題点である。
その理由は、本アーキテクチャの特徴でもある、汎用的なNFAを構成可能な回路であることにある。すなわち、各状態間の全ての配線、その状態間の接続情報(スイッチ)を設定するレジスタ配列、状態遷移情報を設定するレジスタ群を用意する必要があるためである。
その他、非特許文献4(Reetinder Sidhu、「Efficient Computation Using Self−Reconfiguration」、University of Southern California 博士論文(Ph.D Thesis)、2005年、第159−162頁)には、「ノード数n(n>0)の任意の2分木tは、n×(layers(t)+1)個のセル(cell)で位置できる」こと、「ノード数2n−1(n>1)の任意の2分木tにおけるlayers(t)は、高々n−1である」ことが示されており、これらのことから、「ノード数2n−1(n>1)の任意の2分木tは、高々(2n−1)×n個のセルで配置できる」ことが示されている。
近藤 嘉雪 著、「定本Cプログラマのためのアルゴリズムとデータ構造」、ソフトバンクパブリッシング、1998年、第297−330頁
Reetinder Sidhu、Viktor K. Prasanna、「Fast Regular Expression Matching using FPGAs」、Proceedings of the 9th Annual IEEE Symposium on Field−Programmable Custom Computing Machines、2001年、第227−238頁
Divyasree J、Rajashekar H、Kuruvilla Varghese、「Dynamically Reconfigurable Regular Expression Matching Architecture」、Proceedings of the 19th IEEE International Conference on Application−Specific Systems,Architectures and Processors、2008年、第120−125頁
Reetinder Sidhu、「Efficient Computation Using Self−Reconfiguration」、University of Southern California 博士論文(Ph.D Thesis)、2005年、第159−162頁
本発明の目的は、構成できる正規表現に制約の少ないオートマトン回路と、この回路を用いたパターンマッチング装置と、この装置を用いるパターンマッチング方法とを提供することにある。
本発明によるパターンマッチング装置は、設定用制御回路(Configuration Controller)と、オートマトン回路とを具備する。ここで、設定用制御回路は、テキスト文字であるキャラクタと、所定の機能的意味を持つメタキャラクタとを組み合わせた任意の正規表現に対応する、所定の形式を有する構成データをオートマトン回路に設定するものである。構成データに基づいて、正規表現に対応する設定を行い、正規表現とのパターンマッチングを行うためのものである。なお、この設定は再設定可能である。また、オートマトン回路は、キャラクタノード回路部と、メタキャラクタノード回路部と、スイッチノード回路部とを具備する。ここで、キャラクタノード回路部は、正規表現におけるキャラクタに対応するデータを格納するものである。メタキャラクタノード回路部は、正規表現におけるメタキャラクタに対応するデータを格納し、キャラクタノード回路部との接続関係の設定を行うものである。なお、このメタキャラクタノード回路部は、他のメタキャラクタノード回路部との接続関係の設定をも行う。スイッチノード回路部は、メタキャラクタノード回路部同士の接続関係の設定を行うものである。
本発明によるパターンマッチング方法は、(a)テキスト文字であるキャラクタと、所定の機能的意味を持つメタキャラクタとを組み合わせた任意の正規表現に対応する、所定の形式を有する構成データを生成するステップと、(b)構成データに基づいて、オートマトン回路に正規表現に対応する設定を行うステップと、(c)オートマトン回路を用いてパターンマッチングを行うステップとを具備する。なお、ステップ(b)の設定は、再設定可能である。また、ステップ(b)は、(b−1)オートマトン回路におけるキャラクタノード回路部に、正規表現におけるキャラクタに対応するデータを格納するステップと、(b−2)オートマトン回路におけるメタキャラクタノード回路部に、正規表現におけるメタキャラクタに対応するデータを格納し、キャラクタノードまたは他のメタキャラクタノードとの接続関係の設定を行うステップと、(b−3)オートマトン回路におけるスイッチノード回路部に、メタキャラクタノード同士の接続関係の設定を行うステップとを具備する。
本発明のオートマトン回路と、パターンマッチング装置と、パターンマッチング方法とによれば、所定の形式を有する構成データに変換することで、以下の条件を満たす正規表現を入力できる。すなわち、‘|’、‘*’、‘・’の3種類のメタキャラクタだけを用いて表現可能な正規表現であり、かつ、含まれるテキスト文字、メタキャラクタの総数が、オートマトン回路における1つのGeneric Logicにおけるchar_nodeとmchar_nodeの総数に依存する長さ以内で記述できる正規表現である。また、オートマトン回路の内部における接続関係を、構成データに応じて変更するので、本発明によるオートマトン回路は再構成可能である。
上記発明の目的、効果、特徴は、添付される図面と連携して実施の形態の記述から、より明らかになる。
以下、添付図面を参照して、本発明によるオートマトン回路と、この回路を用いたパターンマッチング装置と、この装置を用いたパターンマッチング方法とを実施するための形態を以下に説明する。
(第1の実施形態)
図5は、本発明の第1の実施形態によるパターンマッチング装置の構成を説明するためのブロック図である。本実施形態によるパターンマッチング装置は、Configuration Controller1と、記憶装置2と、Generic Logic3とを具備する。ここで、Configuration Controller1は、NFAを構成するハードウェア回路であるGeneric Logic3内に存在する設定レジスタ、又は設定メモリの設定値を書き換えることで、構文木で表現できる任意の正規表現を設定する設定用制御回路である。記憶装置2は、設定する構成データ(Configuration Data)を記憶するものである。Generic Logic3は、Configuration Dataとして伝達される構文木で表現できる任意の正規表現を構成する再構成可能有限オートマトン回路である。
図5は、本発明の第1の実施形態によるパターンマッチング装置の構成を説明するためのブロック図である。本実施形態によるパターンマッチング装置は、Configuration Controller1と、記憶装置2と、Generic Logic3とを具備する。ここで、Configuration Controller1は、NFAを構成するハードウェア回路であるGeneric Logic3内に存在する設定レジスタ、又は設定メモリの設定値を書き換えることで、構文木で表現できる任意の正規表現を設定する設定用制御回路である。記憶装置2は、設定する構成データ(Configuration Data)を記憶するものである。Generic Logic3は、Configuration Dataとして伝達される構文木で表現できる任意の正規表現を構成する再構成可能有限オートマトン回路である。
Configuration Controller1は、記憶装置2と、Generic Logic3の双方に接続されている。
図5には、1つの有限オートマトンを構成することができるGeneric Logicが1つだけ描かれている。しかし、本実施形態によるパターンマッチング装置は、この構成に限定されない。すなわち、本実施形態によるパターンマッチング装置は、このGeneric Logicを複数個含むことができる。さらに、各Generic Logicは、Configuration Controllerによってその構成を変更できるものである。
また、本実施形態によるパターンマッチング装置は、上記以外にも、その動作を制御するためのクロック信号(clock)、有限オートマトン等の初期化を行うリセット信号(reset)、さらに評価結果を示す追加の制御信号を用いる。
記憶装置2は、メモリ等の記憶媒体を具備する。記憶装置2は、Configuration Controller1からの制御信号に応じて、Configuration Dataの記憶、又は、Configuration Dataの読み出しを行う。
Configuration Controller1は、外部からのコマンド信号(Command)に応じて、その動作を決定する。本Configuration Controller1の動作機能としては、以下の機能が挙げられる。
(1)外部から入力されるConfiguration Dataを記憶装置2へ記憶させる。
(2)外部から入力されるConfiguration Dataを直接Generic Logicに設定する。
(3)記憶装置2に記憶されているConfiguration Dataを読み出し、Generic Logicに設定する。
(4)記憶装置2に記憶されているConfiguration Dataを読み出し、外部へ出力する。
(5)記憶装置2に記憶されているConfiguration Dataを読み出し、Generic Logicに設定すると共に、同時に外部へ出力する。
(6)Generic Logicに設定されているConfiguration Dataを読み出し、外部へ出力する。
外部からのコマンド信号は、上記に示すConfiguration Controller1の6つの動作機能のうちのどれを実行するのかを示す動作制御信号と、その動作の開始を知らせるタイミング信号を含む。また、複数のGeneric Logicを含む構成である場合には、本コマンド信号には、どのGeneric Logicに対する動作を行うのかを示す指定制御情報を含む。
Configuration Controller1は、コマンド信号に応じて、記憶装置2の所定のアドレス範囲にConfiguration Dataを記憶し、また、所定のアドレス範囲に記憶されているConfiguration Dataを読み出す、などの制御を行う。
Generic Logic3は、Configuration Controller1により設定されるConfiguration Dataによって特定の正規表現を表す有限オートマトンを構成する再構成可能な有限オートマトン回路である。正規表現を用いたパターンマッチは、本回路に入力される文字列に対して行われる。この文字列は、1クロックサイクルに1文字(=8bit)ずつ入力される。
図6は、本実施形態によるGeneric Logicの構成を説明するためのブロック図である。図6のGeneric Logicは、キャラクタノード(char_node)100〜104と、メタキャラクタノード(mchar_node)200〜203と、3入力3出力のスイッチノード(snode)300〜305と、マルチプレクサ(MUX)400〜403とを具備する。ここで、char_node100〜104はそれぞれ、正規表現におけるテキスト文字に対応する。また、mchar_node200〜203はそれぞれ、メタキャラクタに対応する。
ここで、char_node100〜104と、mchar_node200〜203と、snode300〜305と、MUX400〜403とにおける接続関係について説明する。
snode301の第1の出力部は、snode300の第1の入力部に接続されている。snode301の第2の出力部は、snode302の第1の入力部に接続されている。
snode300の第1の出力部は、snode301の第1の入力部に接続されている。snode300の第2の出力部は、MUX400の第1の入力部に接続されている。snode300の第3の出力部は、MUX401の第1の入力部に接続されている。
snode302の第1の出力部は、snode301の第2の入力部に接続されている。snode302の第2の出力部は、MUX402の第1の入力部に接続されている。snode302の第3の出力部は、MUX403の第1の入力部に接続されている。
snode304の第1の出力部は、snode303の第1の入力部に接続されている。snode304の第2の出力部は、snode305の第1の入力部に接続されている。
snode303の第1の出力部は、snode304の第1の入力部に接続されている。snode303の第2の出力部は、MUX400の第2の入力部に接続されている。snode303の第3の出力部は、MUX401の第2の入力部に接続されている。
snode305の第1の出力部は、snode304の第2の入力部に接続されている。snode305の第2の出力部は、MUX402の第2の入力部に接続されている。snode305の第3の出力部は、MUX403の第2の入力部に接続されている。
MUX400の出力部は、mchar_node200の第1の入力部に接続されている。
MUX401の出力部は、mchar_node201の第1の入力部に接続されている。
MUX402の出力部は、mchar_node202の第1の入力部に接続されている。
MUX403の出力部は、mchar_node203の第1の入力部に接続されている。
mchar_node200の第1の出力部は、snode300の第2の入力部およびsnode303の第2の入力部に接続されている。mchar_node200の第2の出力部は、char_node100の第1の入力部に接続されている。mchar_node200の第3の出力部は、char_node101の第1の入力部に接続されている。mchar_node200の第4の出力部は、mchar_node201の第2の入力部に接続されている。
mchar_node201の第1の出力部は、snode300の第3の入力部およびsnode303の第3の入力部に接続されている。mchar_node201の第2の出力部は、char_node101の第2の入力部に接続されている。mchar_node201の第3の出力部は、char_node102の第1の入力部に接続されている。mchar_node201の第4の出力部は、mchar_node200の第2の入力部に接続されている。mchar_node201の第5の出力部は、mchar_node202の第2の入力部に接続されている。
mchar_node202の第1の出力部は、snode302の第2の入力部およびsnode305の第2の入力部に接続されている。mchar_node202の第2の出力部は、char_node102の第2の入力部に接続されている。mchar_node202の第3の出力部は、char_node103の第1の入力部に接続されている。mchar_node202の第4の出力部は、mchar_node201の第3の入力部に接続されている。mchar_node202の第5の出力部は、mchar_node203の第2の入力部に接続されている。
mchar_node203の第1の出力部は、snode302の第3の入力部およびsnode305の第3の入力部に接続されている。mchar_node203の第2の出力部は、char_node103の第2の入力部に接続されている。mchar_node203の第3の出力部は、char_node104の第1の入力部に接続されている。mchar_node203の第4の出力部は、mchar_node202の第3の入力部に接続されている。
char_node100の出力部は、mchar_node200の第3の入力部に接続されている。
char_node101の第1の出力部は、mchar_node200の第4の入力部に接続されている。char_node101の第2の出力部は、mchar_node201の第4の入力部に接続されている。
char_node102の第1の出力部は、mchar_node201の第5の入力部に接続されている。char_node102の第2の出力部は、mchar_node202の第4の入力部に接続されている。
char_node103の第1の出力部は、mchar_node202の第5の入力部に接続されている。char_node103の第2の出力部は、mchar_node203の第3の入力部に接続されている。
char_node104の出力部は、mchar_node203の第4の入力部に接続されている。
以上の接続関係を言い換えれば、本実施形態によるGeneric Logicは、mchar_nodeを葉、snodeを葉でないノードとした2分木(binary tree)が複数(図6では2つ)存在する形で構成される。より具体的には、葉ノードであるmchar_nodeは各2分木に共通であり、MUXはこの葉ノードを複数の2分木で共通に使用するための役割を果たす。
なお、図6のGeneric Logicは、5文字以内のテキスト文字と、4文字以内のメタキャラクタから構成される正規表現を構成できる有限オートマトン回路である。図6のGeneric Logicは、2つの2分木を具備する。ここで、第1の2分木は、snode301を根ノードとして、snode300、302、mchar_node200〜203を具備する。また、第2の2分木は、snode304を根ノードとして、snode303、305、mchar_node200〜203を具備する。
より多くのテキスト文字、メタキャラクタを含む正規表現を構成することができるGeneric Logicについても構成可能である。すなわち、本実施形態によるGeneric Logicは、図6の例とは異なる数のchar_nodeおよびmchar_nodeを具備しても良い。その場合、MUXの数はmchar_nodeの数と同様に変化する。さらに、snodeの総数はMUXの数に応じて変化し、多段式に接続されているsnodeの段数はsnodeの総数に応じて変化する。その構成方法については後ほど説明する。
図7は、本発明によるchar_nodeの入出力部について説明するためのブロック図である。このchar_node10は、li信号入力部と、ri信号入力部と、テキスト文字入力部と、lo信号出力部と、ro信号出力部とを具備する。
ここで、li信号は、そのchar_nodeの左に隣接するmchar_nodeから入力する1bitの入力信号である。ri信号は、そのchar_nodeの右に隣接するmchar_nodeから入力する1bitの入力信号である。lo信号は、そのchar_nodeの左に隣接するmchar_nodeへ出力する1bitの出力信号である。ro信号は、そのchar_nodeの右に隣接するmchar_nodeへ出力する1bitの出力信号である。
また、テキスト文字入力部には、パターンマッチングを行う対象となるテキスト文字が1クロックサイクル毎に1文字ずつ供給される。
なお、左右一列に並んで配置されている複数のchar_nodeのうち、左端のchar_nodeは、当然ながらli信号入力部とlo信号出力部とを必要としない。同様に、右端のchar_nodeは、当然ながらri信号入力部とro信号出力部とを必要としない。これら必要とされない入出力部は、省略可能である。
本実施形態によるchar_node10の内部構成は、図3に示すNFAを直接埋め込んだハードウェア回路における基本ブロックと同様の構成である。すなわち、本実施形態によるchar_nodeは、Flip−Flop502と、Comparator(比較器)602と、ANDゲート803とを具備する。ここで、Flip−Flop502の出力部およびComparator602の出力部は、ANDゲート803の両入力部にそれぞれ接続されている。
ただし、本実施形態によるchar_node10は、li信号と、ri信号の2つの信号を入力する。したがって、図3の信号入力部(Input)の前段において、2つの入力信号の一方を選択する必要がある。この入力信号の選択は、Configuration Dataによって構成される有限オートマトンに依存する。
また、本実施形態によるchar_node10の出力信号については、図3の出力信号(Output)がそのままloとroの両出力信号として同時に出力されてもよい。または、選択された入力信号と同じmchar_nodeへの出力信号としてのみ出力するための選択回路を後段に追加しても良い。
図8は、本発明によるmchar_nodeの入出力部を説明するためのブロック図である。このmchar_node20は、pi信号入力部と、Li信号入力部と、Ri信号入力部と、li信号入力部と、ri信号入力部と、po信号出力部と、Lo信号出力部と、Ro信号出力部と、lo信号出力部と、ro信号出力部とを具備する。
ここで、pi信号は、そのmchar_nodeの上部にあるMUXから供給される1bitの入力信号である。Li信号およびRi信号は、そのmchar_nodeの左右に隣接する2つのmchar_nodeからそれぞれ供給される1bitの入力信号である。li信号およびri信号は、そのmchar_nodeの左右に隣接する2つのchar_nodeからそれぞれ供給される1bitの入力信号である。
また、po信号は、そのmchar_nodeの上部にある対応する複数のsnodeへ出力される1bitの出力信号である。Lo信号およびRo信号は、そのmchar_nodeの左右に隣接する2つのmchar_nodeへそれぞれ出力される1bitの出力信号である。lo信号およびro信号は、そのmchar_nodeの左右に隣接する2つのchar_nodeへそれぞれ出力される1bitの出力信号である。
なお、左右一列に配置された複数のmchar_nodeのうち、左端のmchar_nodeは、当然ながら、Li信号入力部、Lo信号出力部を必要としない。同様に、右端のmchar_nodeも、当然ながら、Ri信号入力部、Ro信号出力部を必要としない。これら必要とされない入出力部は、省略可能である。
mchar_node20の内部では、5つの入力信号の論理演算によって各出力信号が生成される。この論理演算は、Configuration Dataによって構成される有限オートマトンに依存する。
図9は、本実施形態によるsnodeの入出力部について説明するためのブロック図である。このsnode30は、i0信号入力部と、i1信号入力部と、i2信号入力部と、o0信号出力部と、o1信号出力部と、o2信号出力部とを具備する。
ここで、i0信号は、そのsnodeの上部にあるsnodeから供給される1bitの入力信号である。i1信号は、そのsnodeの左に隣接するsnode、又はmchar_nodeから供給される1bitの入力信号である。i2信号は、そのsnodeの右に隣接するsnode、又はmchar_nodeから供給される1bitの入力信号である。
また、o0信号は、そのsnodeの上部にあるsnodeへ出力される1bitの出力信号である。o1信号は、そのsnodeの左に隣接するsnode、又はMUXへ出力される1bitの出力信号である。o2信号は、そのsnodeの右に隣接するsnode、又はMUXへ出力される1bitの出力信号である。
snode30は、その内部において、3つの入力信号のうちのいずれかを各出力信号に接続するスイッチを具備する。各出力信号のそれぞれがどの入力信号を選択的に出力するかは、Configuration Dataによって構成される有限オートマトンに依存する。
次に、Generic Logic3の動作の説明を行う前段階として、まず、2分木の各ノードを一列に並べた際の配置方法について説明する。非特許文献4には、この配置方法を用いると、「ノード数n(n>0)の任意の2分木tは、n×(layers(t)+1)個のセル(cell)で位置できる」こと、「ノード数2n−1(n>1)の任意の2分木tにおけるlayers(t)は、高々n−1である」ことが示されており、これらのことから、「ノード数2n−1(n>1)の任意の2分木tは、高々(2n−1)×n個のセルで配置できる」ことが示されている。以下では、上記の非特許文献4が示している配置方法について説明する。
図10A、図10Bは、2分木の変換における、セルとlayers(t)について説明するための概念図である。この図に基づいて、上記のセルとlayers(t)について、以下に補足する。なお、図10A、図10Bは、非特許文献4で示されている図に、補足説明を加えた図である。
セルは、ノード自身と、ノードを中心に上下左右の4方向に接続ポートを持ち得るブロックとして定義される。すなわち、ノードを含まず、ノード間の接続のために配置されるセルも存在し得る。
セルがノードを含む場合、そのセルは最下位層に配置されるものとする。このため、ノードを含むセルは、4方向のうち、上と左右の3方向の接続ポートのみを使用できる。
また、ノードを含まないセルが、例えば、上下のポートを接続した配線と左右のポートを接続した配線とを具備する場合、これら2本の配線はお互いに交差することはできないものとする。
通常、2分木では、任意の1ノードは最大で3ノードと接続する。ここで、使用されていない上方向のポートが存在する場合は、この上方向のポートを、隣接するノードが上方向のセルと接続するためのポートとして使用しても良い。
本配置方法では、2分木tの根ノードを右端に配置する。また、根ノードの左の子ノードを根とする部分木(Left−Subtree)lと、根ノードの右の子ノードを根とする部分木(Right−Subtree)rを左から順に配置する。
各部分木についても同様に、根ノードを右端に配置し、根ノードの左の子ノードを根とする部分木と、根ノードの右の子ノードを根とする部分木を、左から順に配置していく。
このとき、ノード数n(n>0)の任意の2分木tは、n×(layers(t)+1)個のセル(cell)で配置できることが知られている。
非特許文献4では、これらの縦横に並んだセルに2分木tを配置する際、ノードを含まないセルの高さをもってlayers(t)と定義している。また、その算出方法は以下のように定義されている。
1.2分木tがノード数0の場合、layers(t)=−1
2.2分木tが根ノードの左の子ノードを根とする部分木l、根ノードの右の子ノードを根とする部分木rで構成されるとき、
2.1 layers(l)とlayers(r)が異なる場合、
layers(t)=max{layers(l),layers(r)}
2.2 layers(l)とlayers(r)が等しい場合、
layers(t)=layers(l)+1
例えば、図10Aは根ノードの左の子ノードを根とする部分木lのlayars(l)と根ノードの右の子ノードを根とする部分木rのlayers(r)が異なるノード数nの2分木tを配置した場合の概念図である。また、図10Bは根ノードの左の子ノードを根とする部分木lのlayars(l)と根ノードの右の子ノードを根とする部分木rのlayers(r)が等しいノード数nの2分木tを配置した場合の概念図である。図10Aの場合、2分木tは、n×(layers(l)+1)セルで配置されており、layers(t)はlayers(l)と等しくなるため、n×(layers(t)+1)セルで配置可能である。また、図10Bの場合、2分木tは、n×(layers(l)+2)セルで配置されており、layers(t)はlayers(l)+1と等しくなるため、n×(layers(t)+1)セルで配置可能となる。
1.2分木tがノード数0の場合、layers(t)=−1
2.2分木tが根ノードの左の子ノードを根とする部分木l、根ノードの右の子ノードを根とする部分木rで構成されるとき、
2.1 layers(l)とlayers(r)が異なる場合、
layers(t)=max{layers(l),layers(r)}
2.2 layers(l)とlayers(r)が等しい場合、
layers(t)=layers(l)+1
例えば、図10Aは根ノードの左の子ノードを根とする部分木lのlayars(l)と根ノードの右の子ノードを根とする部分木rのlayers(r)が異なるノード数nの2分木tを配置した場合の概念図である。また、図10Bは根ノードの左の子ノードを根とする部分木lのlayars(l)と根ノードの右の子ノードを根とする部分木rのlayers(r)が等しいノード数nの2分木tを配置した場合の概念図である。図10Aの場合、2分木tは、n×(layers(l)+1)セルで配置されており、layers(t)はlayers(l)と等しくなるため、n×(layers(t)+1)セルで配置可能である。また、図10Bの場合、2分木tは、n×(layers(l)+2)セルで配置されており、layers(t)はlayers(l)+1と等しくなるため、n×(layers(t)+1)セルで配置可能となる。
なお、本配置方法では、基本的には帰りがけ順(postorder traversal)によって2分木tを辿ればノードの配置順が決まる。ただし、部分木lと部分木rに対するlayersの値、layers(l)とlayers(r)のうち、大きなlayersの値をもつ部分木を左の部分木としている。つまり、layers(l)よりもlayers(r)の方が大きければ、左の部分木lと右の部分木rを入れ替える。
図11は、ノード数が15である2分木の一例について説明するためのグラフである。図12Aは、図11の2分木に基づいて、本発明で用いる配置方法に従ってセルを配置した結果を示す図である。
ここで、15=24−1なので、n=4が得られる。この場合、最大15×4個のセルで配置できることが分かる。実際に、図11に示す2分木tに対してはlayers(t)=2であり、15×3個のセルで配置できる。したがって、上記に示した必要セル数の条件を満たしている。詳細は省略するが、ノード数15の完全2分木を考えた場合、layers(t)=3となり、これも上記条件を満たす。
図10A、図10B、図11、図12Aより、このlayersは、2分木の各ノードを一列に配置した場合に、その接続を正しく行うために必要な水平方向のチャネルであることが分かる。このため、以降、これを“Routing Layer”と呼ぶ。
上記を踏まえて、M文字のメタキャラクタと、N文字のテキスト文字を含む正規表現を表す有限オートマトン回路であるGeneric Logicの構成方法を考える。
本発明において扱うことができる正規表現は、ORを意味する‘|’、0回以上マッチすることを意味する‘*’に加え、連結(Concatenation)を意味する記号‘・’を用いて構文木で表現できる正規表現である。以降、この連結を意味する記号‘・’もメタキャラクタとして扱う。
例えば、N1、N2がそれぞれ正規表現だとすると、正規表現“N1|N2”はN1、もしくは、N2に一致することを意味する。同様に、正規表現“N1*”は、N1が0回以上一致することを意味する。さらに、正規表現“N1・N2”は、N1の次にN2が連続することを意味する。
これ以外のメタキャラクタを含む正規表現は、これらのメタキャラクタのみを含む正規表現に書き換えることで対応する。
図6に示すように、本実施形態のGeneric Logicにおいて、テキスト文字に対応するchar_nodeは、メタキャラクタに対応するmchar_nodeの下位層に配置されている。また、char_nodeの数はmchar_nodeの数よりも1つ多い。つまり、N=mchar_nodeの数と置き、M=char_nodeの数と置くと、M=N+1の関係が得られる。本Generic Logicは、メタキャラクタをN文字、テキスト文字をN+1文字含む正規表現に対応することができる。
このとき、ノード数Nの2分木に必要なRouting Layer数は、上記の非特許文献4より、最大log2(N+1)−1となる。なお、ノード数2n−1=Nとすると、n=log2(N+1)であることから、layer数は最大n−1=log2(N+1)−1であることは明らかである。
上述したように、このRouting Layerは、2分木の各ノードを一列に配置した場合に、その接続を正しく行うために必要な水平方向のチャネルであり、Generic Logicにおけるmchar_nodeを葉ノード、snodeをノードとした2分木の必要数に関連する。本2分木には、あるmchar_node間を接続した場合に利用するため、当該mchar_node間において双方向の信号線が具備されている。しかし、同じレイヤ番号に相当するmchar_node間の接続が、同一snode間の信号線を利用しなければならない場合がある。例えば、図12Bは、図12Aに示した配置方法をGeneric Logicに当てはめた場合の概念図を示している。但し、正規表現の構文木においては、葉ノードはテキスト文字を示すため、図12Aの配置とは若干異なっている。図12Bにおいて、丸で表したノードはchar_node、四角で表したノードはmchar_node、三角形で表したノードはsnodeに相当する。図12Bでは、ノード1とノード3のmchar_nodeの実線で示した接続(図では、ノード4を経由させて接続している)と、ノード3とノード6の波線で示した接続は、図中では太線で示した同一snode間の接続を利用している。このため、Generic Logicにおけるmchar_nodeを葉ノード、snodeをノードとした2分木の数は、Routing Layerの2倍の数が必要となる。厳密に言えば、Generic Logicに具備されるmchar_nodeの数が少ない場合には、Routing Layerと同数でも良いが、一般的には、2倍の数だけ必要となる。
以上をまとめると、本発明において、N文字のメタキャラクタと、N+1文字のテキスト文字を含む正規表現を構築する場合、Generic Logicは、以下の方法で構築することができる。
(1)mchar_nodeをN個、char_nodeをN+1個配置する。
(2)N個のmchar_nodeを葉ノードとし、snodeを葉ではないノードとする2分木をB個用意する。ここで、2分木の必要数Bは、B=[log2(N+1)−1]×2であり、[x]は、xを下回らない最小の整数を意味する。
(3)各MUXはB入力のMUXとする。
なお、図5、図6に示すGeneric Logicでは、mchar_nodeを葉ノードとし、snodeを葉ではないノードとする2分木が2個しか表示していないが、実際は同様の2分木がさらに2個、合計4個必要である。これは、上記(2)より、必要数Bがlog25−1を下回らない最小の整数である2の2倍、つまり4となることから明らかである。但し、上述したように、mchar_node数が少ない場合、特に、図5、図6では、あるmchar_node間を、同一の2分木上で同一のsnode間の接続信号を用いて接続する場合は考えられないため、事実上2個あれば問題はないが、一般的に上記B個用意すれば良い。
(1)mchar_nodeをN個、char_nodeをN+1個配置する。
(2)N個のmchar_nodeを葉ノードとし、snodeを葉ではないノードとする2分木をB個用意する。ここで、2分木の必要数Bは、B=[log2(N+1)−1]×2であり、[x]は、xを下回らない最小の整数を意味する。
(3)各MUXはB入力のMUXとする。
なお、図5、図6に示すGeneric Logicでは、mchar_nodeを葉ノードとし、snodeを葉ではないノードとする2分木が2個しか表示していないが、実際は同様の2分木がさらに2個、合計4個必要である。これは、上記(2)より、必要数Bがlog25−1を下回らない最小の整数である2の2倍、つまり4となることから明らかである。但し、上述したように、mchar_node数が少ない場合、特に、図5、図6では、あるmchar_node間を、同一の2分木上で同一のsnode間の接続信号を用いて接続する場合は考えられないため、事実上2個あれば問題はないが、一般的に上記B個用意すれば良い。
最後に、本Generic Logic回路に実際の正規表現を構成する方法について説明する。一般的に、N+1文字のテキスト文字を含む正規表現には、最大N+1文字のメタキャラクタ‘|’、‘*’、‘・’が含まれる可能性がある。これは、メタキャラクタ‘*’が1つの子ノードしか持たないためであり、メタキャラクタ‘*’を含む正規表現の構文木は全2分木にならない場合がある。一方、本Generic Logic回路では、N文字のメタキャラクタと、N+1文字のテキスト文字から成る正規表現しか構成できない。そこで、本発明においては、メタキャラクタ‘*’を他のメタキャラクタとマージする、もしくは、メタキャラクタ‘*’に空のテキスト文字を子ノードとして追加することで構文木を生成することにより、上記の課題を解決する。
図13A、図13Bは、本発明によるノード配置方法を正規表現“a(bc)*(d|e)f”に適用して得られる構文木の一例について説明するためのグラフである。図13Aでは、メタキャラクタ‘*’とその子ノードであるメタキャラクタ‘・’とをマージし、“*・”というメタキャラクタノードを生成している。なお、このメタキャラクタのマージによって本来の正規表現の意味が変わることは無い。また、図13Bでは、‘*’の子ノードである‘・’を左の子ノードとし、空のキャラクタを意味する‘φ’を右の子ノードとして生成している。上記、図13A、図13Bでは、メタキャラクタ‘*’の子ノードがメタキャラクタ‘・’である場合に、マージする方法、及び、空(‘φ’)のテキスト文字を追加する方法を示したが、一般的には、メタキャラクタ‘*’の子ノードがメタキャラクタである場合にはマージし、子ノードがテキスト文字の場合にのみ、空のテキスト文字を追加する方法を採用した方が、Generic Logicのmchar_node、及びchar_nodeを効率よく利用できる。
このような2分木のノード配置を行った後、Generic Logicの各ノードにそれぞれのメタキャラクタ、テキスト文字を割り当てる。さらに、必要な接続を行うためのConfiguration Dataを生成する。最後に、Configuration Controllerによって、生成したConfiguration Dataを設定する。このようにすることで、その長さや利用可能なメタキャラクタに制約はあるものの、任意の正規表現に対応する構文木を本発明によるGeneric Logicとして具現化することが可能である。
図14は、本実施形態によるGeneric Logicで図13Aの構文木を構成した例について説明するためのブロック図である。但し、図14のGeneric Logicは、7個のmchar_nodeと、8個のchar_nodeを具備する場合の構成例である。したがって、この例では、char_nodeの数も、mchar_nodeの数も、MUXの数も、snodeの数も、snodeの段数も、図6のGeneric Logicのものより多くなっている。但し、実際にはmchar_nodeを葉ノードとし、snodeを葉ではないノードとする2分木が2個しか表示していないが、実際は同様の2分木がさらに2個、合計4個必要である。これは、必要数log28−1を下回らない最小の整数である2の2倍、つまり4となることから明らかである。
なお、このGeneric Logicでは、パターンマッチング対象となるテキスト文字の入力信号が省略されている。また、本正規表現を構成するのに不要な配線等は点線で示されている。
図14のように、各ノードに適切なメタキャラクタ、テキスト文字を割り当て、snodeの接続を行った後の、パターンマッチングを行う方法について説明する。
パターンマッチングは、正規表現の先頭の文字‘a’を割り当てているchar_node107から始める。
なお、各char_nodeの内部の基本的な動作は、非特許文献2や非特許文献3と同様であるが、念のために再度図3に基づいて簡単に説明する。すなわち、Flip−Flop502は、NFAの各状態を構成する。Comparator(比較器)602は、当該状態からの遷移条件である文字と入力されるテキスト文字を比較する。ANDゲート803は、Flip−Flop502の出力と、Comparator602の出力を入力して、状態遷移信号を生成する。また、図3以外に、空のキャラクタ‘φ’が割り当てられた場合の動作として、入力された状態遷移信号をそのまま内部の処理を通さずに出力することもできる。
各mchar_nodeでは、その接続に応じて、入力信号から出力信号線を生成する論理演算をためのConfiguration Dataが設定される。
例として、mchar_node205の動作を、図8と図14を参照して説明する。
mchar_node205は、自分から見て右に隣接するchar_node107から出力される信号を、ri信号として入力する。mchar_node205はさらに、このri信号を、自分から見て左に隣接するmchar_node204に向けて、Lo信号として出力する。このとき、mchar_node205の内部では、ri信号入力部とlo信号出力部とを接続されている。
同時に、mchar_node205は、自分から見て左に隣接するmchar_node204が出力する信号をLi信号として入力する。mchar_nodeはさらに、この入力信号Liを、snode313に向けて、出力信号poとして出力する。このとき、mchar_nodeの内部では、Li信号入力部と、po信号出力部とが接続されている。
このとき、mchar_node205の各出力信号の論理は以下のように設定されている。
<mchar_node205の出力信号>
po=Li
Lo=ri
Ro=Low
lo=Low
ro=Low
<mchar_node205の出力信号>
po=Li
Lo=ri
Ro=Low
lo=Low
ro=Low
同様に、mchar_node204では、自分から見て右に隣接するmchar_node205が出力する信号をRi信号として入力する。その後、文字列“bc”が0回以上マッチするための出力信号を生成するためのConfiguration Dataが設定される。ここで、文字列“bc”は、mchar_node204に接続された2つのchar_node105、106にそれぞれ格納されたテキスト文字‘b’および‘c’と、mchar_node205に格納されたメタキャラクタ‘・’を組み合わせて得られるものである。また、「0回以上マッチ」することは、mchar_node204に格納されたメタキャラクタ‘*’が意味するものである。
この場合の、各出力信号の論理は、以下のように設定される。
<mchar_node204の出力信号>
po=Low
Ro=Ri+ri
lo=Ri+ri
ro=li
<mchar_node204の出力信号>
po=Low
Ro=Ri+ri
lo=Ri+ri
ro=li
なお、mchar_node204は、左右一列に配置された複数のmchar_node204〜210の左端に配置されているので、mchar_node204において入力信号Li、出力信号Loは当然ながら存在し得ない。
他のmchar_nodeについての詳細な説明は省略するが、上記の例と同様に、各mchar_nodeの出力信号を生成する論理がConfiguration Dataにより設定される。また、snode313、314、316、317、318、MUX409についても、図14に実線で示された接続の通りに設定が行われるが、出力信号の論理は自明なため詳細な説明は省略する。
正規表現の先頭の文字‘a’を割り当てているchar_node107からマッチングが開始され、正規表現の最後の文字‘f’が割り当てられているchar_node110の内部にあるFlip−FlopがHighになると、本正規表現のパターンが見つかったと判断できる。なお、このマッチング結果を示す制御信号は別に具備されているものとする。
上記のような方法により、所望する任意の正規表現をGeneric Logic上に構成することができる。
(実施例1)
(実施例1)
次に、本発明の実施例1を、図面を参照して説明する。かかる実施例は本発明を実施するための第1の実施形態に対応するものである。
本実施例では、Configuration Controller1とGeneric Logic3のハードウェア回路をFPGA上に実装する。
記憶装置2は、FPGA上のOn−Chip RAMでも良いし、FPGAとは別のチップ上に存在する外部メモリ等の記憶素子でも構わない。
Configuration Controller1は、外部から入力されるコマンドによって上記(1)〜(6)の動作を行うハードウェア回路として実現される。
Generic Logic3は、所望のメタキャラクタ数Nに応じて、上述した構成方法により、各ノードが適切な数備えた回路が構成される。なお、テキスト文字数は、メタキャラクタ数Nに依存して決定される。
本実施例におけるパターンマッチング装置をFPGA上で構成する場合、各組み合わせ回路は、LUT(Look−Up Table)と呼ばれる論理演算テーブルによって構築される。LUTの入力信号数は、FPGAデバイスによって異なるが、例えば、Xilinx社のVirtex−5 FPGAでは、6入力LUTが実装されている。この場合の各ノードのアーキテクチャについて以下に説明する。
図15は、本実施例におけるchar_nodeの詳細なアーキテクチャを説明するための回路図である。このchar_node40は、LUT700と、Flip−Flop(F/F)500と、comparator600と、ANDゲート800と、LUT701と、li信号入力部と、ri信号入力部と、パターンマッチング対象となる入力テキスト文字の入力部と、o信号出力部とを具備する。
なお、比較器600もLUTから構成されるが、ここでは簡単化のため、比較器600として記載している。比較器600をLUTで構成する方法については、非特許文献2に記載されているので、ここでは詳細な説明を省略する。
また、ANDゲート800もFPGAではLUTによって構成されるが、ここでは静的な論理素子であるため、ANDゲートとして記載している。このANDゲートは単独のLUTで構成してもよいし、LUT701にマージして構成してもよい。
このchar_node40の内部における各構成要素間の接続関係について説明する。li信号入力部は、LUT700の第1の入力部と、LUT701の第1の入力部とに接続されている。ri信号入力部は、LUT700の第2の入力部と、LUT701の第2の入力部とに接続されている。LUT700の出力部は、Flip−Flop500の入力部に接続されている。Flip−Flop500の出力部は、ANDゲート800の第1の入力部に接続されている。テキスト文字入力部は、comparator600の入力部に接続されている。comparator600の出力部は、ANDゲート800の第2の入力部に接続されている。ANDゲート800の出力部は、LUT701の第3の入力部に接続されている。LUT701の出力部は、o信号出力部に接続されている。
この信号oは、出力信号loおよび出力信号roとして、char_node40の左右に隣接するmchar_nodeに向けて出力される。
図15のように構成されたchar_nodeは、2つの信号li、riを入力すると、そのどちらかをLUT700の設定により選択することができる。選択された入力信号は、LUT700の出力信号となり、Flip−Flop500に保持される。Flip−Flop500は、保持する内容を、ANDゲート800に向けた信号として出力する。
比較器600には、構成データによって比較する対象となる文字が設定される。比較器600は、この設定された文字と、入力されたパターンマッチング対象となるテキスト文字とを比較する。比較器600は、この比較による結果を、ANDゲート800に向けた信号として出力する。
ANDゲート800は、Flip−Flop500が出力する信号と、比較器600が出力する信号とを入力し、AND(論理積)演算してその結果を出力する。
LUT701は、ANDゲート800が出力する信号と、入力信号liと、入力信号riとを入力する。LUT701は、3つの入力信号のうち、LUT701の設定に応じて選択されたいずれかを出力する。
なお、図15では、char_node40の出力信号lo、roとして、共に、出力信号oがそのまま出力される。しかし、char_node40の内部でそれぞれの出力信号を選択するLUTを用意し、それらのLUTの設定により、個別に出力してもよい。この場合、LUT701と同じ接続関係をもったLUTが別途1つ必要となる。
図16は、本発明によるmchar_node50の内部構造を説明するためのブロック図である。このmchar_node50は、5つの入力部と、5つの5入力1出力LUT702〜706と、5つの出力部とを具備する。
LUT702の5つの入力部には、pi信号入力部と、Li信号入力部と、Ri信号入力部と、li信号入力部と、ri信号入力部とがそれぞれ接続されている。この、mchar_node50における5つの信号入力部が、LUTにおける5つの信号入力部にそれぞれ接続されている構成は、他のLUT703〜706においても同様である。また、LUT702〜706の出力部は、それぞれ、po信号出力部と、Lo信号出力部と、Ro信号出力部と、lo信号出力部と、ro信号出力部とに接続されている。
このmchar_node50において、どの入力信号がどの出力信号として出力されるかは、LUT702〜706の設定に応じた論理演算によって任意に設定可能である。
図17は、本発明の第1の実施形態によるsnodeの詳細なアーキテクチャについて説明するための回路図である。このsnode60は、3つのLUT707〜709と、i0信号入力部と、i1信号入力部と、i2信号入力部と、o0信号出力部と、o1信号出力部と、o2信号出力部とを具備する。
LUT707は、i1信号入力部に接続された入力部と、i2信号入力部に接続された入力部と、o0信号出力部に接続された出力部とを具備する。LUT707の設定に応じて、入力信号i1またはi2のいずれかが、信号o0として出力される。
同様に、LUT708は、i0信号入力部に接続された入力部と、i2信号入力部に接続された入力部と、o1信号出力部に接続された出力部とを具備する。LUT708の設定に応じて、入力信号i0またはi2のいずれかが、信号o1として出力される。
さらに、LUT709は、i0信号入力部に接続された入力部と、i1信号入力部に接続された入力部と、o2信号出力部に接続された出力部とを具備する。LUT709の設定に応じて、入力信号i0またはi1のいずれかが、信号o2として出力される。
本実施例によるGeneric Logic3における各MUXは、各mchar_nodeに供給される信号を、複数の候補の中から選択するための回路である。これら複数の候補の数は、Generic Logic3が具備する、snodeで構成された2分木と同じである。各MUXの構成は、いわゆる当業者にとって自明であるので、詳細な説明を省略する。
このようなノード回路によって構成されるGeneric Logic3の各LUTの内部データを、Configuration Controller1から設定されるConfiguration Dataによって書き換えることで、Generic Logic3上に構成する正規表現を動的に再構成することが可能となる。なお、このようなFPGAに存在するLUTの内容を変更する具体的な方法については、非特許文献3でも利用されているが、例えば、Xilinx社のFPGAでは、LUTをShift Registerとして利用することが可能なLUTが存在するため、このような既知の方法を利用することになる。
なお、実施例1で示した各ノードの構成はあくまでも一例であって、これに限定されない。つまり、ここに記載されているものと同じ個数のLUTを使って構成する必要はなく、同様の機能を複数のLUTを使って構成しても良いし、レジスタ等の記憶素子を用いてLUTを構成しても良い。
(実施例2)
(実施例2)
続いて、本発明の第2の実施例を、図面を参照して説明する。かかる実施例は本発明を実施するための第1の実施の形態に対応するものである。
本実施例を実施例1と比較すると、Generic Logic3のchar_nodeの構成が異なる。その他の構成について、本実施例は実施例1と同じである。
図18は、本実施例によるchar_nodeの詳細なアーキテクチャについて説明するための回路図である。このchar_node70は、実施例1におけるchar_node40の構成におけるLUT700の代わりにLUT710が配置されている。また、LUT700が入力する2つの信号li、riに加えて、LUT710は、ANDゲート800からの出力信号をも入力する。したがって、LUT710がFlip−Flop500に向けて出力する信号は、入力信号liと、入力信号riと、ANDゲート800の出力信号とに基づく論理演算により生成される。なお、このchar_node70におけるその他の構成については、実施例1におけるchar_node10の構成と同じであるので、その詳細な説明を省略する。
実施例1では、Generic Logic3上に構成する正規表現に含まれるメタキャラクタ‘*’は、他のメタキャラクタとマージする、あるいは、空のテキスト文字を子ノードに追加することで構文木を生成し、mchar_nodeに割り当てられている。しかし、本実施例2では、図18のように構成されたchar_nodeを用いることにより、メタキャラクタ‘*’が1文字のテキスト文字の0回以上繰り返しを意味する場合、つまり、メタキャラクタ‘*’の子ノードがテキスト文字である場合に限り、そのテキスト文字とマージして、char_nodeに割り当てることが可能となる。
例として、正規表現“ab*(c|d)e”を扱う場合について、本実施例と実施例1との違いを説明する。
図19は、実施例1によるノード配置方法を正規表現“ab*(c|d)e”に適用して得られる構文木の一例について説明するためのグラフである。実施例1では、メタキャラクタ‘*’と、その親ノードであるメタキャラクタ‘・’とをマージして、“・*”というメタキャラクタノードを生成し、それをmchar_nodeに割り当て、その意味を考慮してConfiguration Dataを生成する必要があった。
図20は、本実施例によるノード配置方法を正規表現“ab*(c|d)e”に適用して得られる構文木の一例について説明するためのグラフである。本実施例2では、メタキャラクタ‘*’と文字‘b’とをマージしてchar_nodeに割り当てることが可能となる。これより、当該char_nodeが左に隣接するmchar_nodeと接続されている場合には、char_node70のLUT710は、入力信号li、またはANDゲート800の出力信号のうち、いずれか1つがHigh状態であれば、その出力をHighとすれば良い。また、当該char_nodeが右に隣接するmchar_nodeと接続されている場合には、char_node70のLUT710は、入力信号ri、またはANDゲート800の出力信号のうち、いずれか1つがHigh状態であれば、その出力をHighとすればよい。この際、mchar_nodeの各出力信号の論理演算は、メタキャラクタ‘*’の示す意味を考慮して行う必要はない。
このように、本実施例2では、メタキャラクタ‘*’が1文字のテキスト文字に対する0回以上マッチを意味する場合に限り、そのテキスト文字とマージして、char_nodeへ割り当てることが可能である。その結果、mchar_nodeの各出力信号の論理演算を生成するConfiguration Dataの生成をより簡単化することが可能である。
なお、本実施例2においても、実施例1と同様に、メタキャラクタ‘*’を他のメタキャラクタとマージして、mchar_nodeに割り当てることは可能である。また、実施例1と同様、実施例2で示した各ノードの構成はあくまでも一例であって、これに限定されない。ここに記載されているものと同じ個数のLUTを使って構成する必要はなく、同様の機能を複数のLUTを使って構成しても良い。
(実施例3)
(実施例3)
続いて、本発明の第3の実施例を、図面を参照して説明する。かかる実施例は本発明を実施するための第1の実施の形態に対応するものである。
本実施例におけるConfiguration Controller1とGeneric Logic3のハードウェア回路は、ASICのように専用ハードウェア化して、チップ上に実装される。
また、本実施例における記憶装置2は、上記のチップとは別のチップ上に存在する外部メモリ等の記憶素子で構成される。
本実施例におけるConfiguration Controller1は、実施例1、又は実施例2と同じ機能を有する。すなわち、Configuration Controller1は、その内部がLUTによる論理真理値表を用いた論理演算がANDゲートやORゲート等の論理素子によって演算処理を行うハードウェア回路として実現される。
本実施例におけるGeneric Logic3は、上記Configuration Controller1と同様に、実施例1、又は実施例2と同じ構成、動作機能を持つ。すなわち、Generic Logic3は、その内部がLUTによる論理真理値表による論理演算がANDゲートやORゲート等の論理素子によって演算されるハードウェア回路として実現される。但し、本Generic Logicの各構成ノードの論理演算は、レジスタ、レジスタ配列等によって信号線の選択や論理を書き換えることができる。つまり、これらの設定レジスタは、Configuration Controller1から設定されるConfiguration Dataによって書き換えることができるアーキテクチャとなる。
図21は、本実施例によるchar_nodeの詳細なアーキテクチャについて説明するための回路図である。このchar_node80は、li信号入力部と、ri信号入力部と、設定レジスタ91と、MUX411と、設定レジスタ90と、ANDゲート801と、ORゲート900と、Flip−Flop(F/F)501と、パターンマッチング対象となる入力テキスト文字の入力部と、設定レジスタ92と、比較器601と、ORゲート802と、設定レジスタ93と、MUX412と、o信号出力部とを具備する。
このchar_node80における、各構成要素間の接続関係について説明する。li信号入力部は、MUX411の第1の入力部と、MUX412の第1の入力部とに接続されている。ri信号入力部は、MUX411の第2の入力部と、MUX412の第2の入力部とに接続されている。設定レジスタ91の出力部は、MUX411の第3の入力部に接続されている。設定レジスタ90の出力部は、ANDゲート801の第1の入力部に接続されている。MUX411の出力部は、ORゲート900の第1の入力部に接続されている。ANDゲート801の出力部は、ORゲート900の第2の入力部に接続されている。ORゲート900の出力部は、Flip−Flop501の入力部に接続されている。入力テキスト文字の入力部は、比較器601の第1の入力部に接続されている。設定レジスタ92の出力部は、比較器601の第2の入力部に接続されている。Flip−Flop501の出力部は、ANDゲート802の第1の入力部に接続されている。比較器601の出力部は、ANDゲート802の第2の入力部に接続されている。ANDゲート802の出力部は、ANDゲート801の第2の入力部と、MUX412の第3の入力部とに接続されている。設定レジスタ93の出力部は、MUX412の第4の入力部に接続されている。MUX412の出力部は、o信号出力部に接続されている。
なお、本実施例のchar_node80における信号入出力部については、図15で示した実施例1や、図18で示した実施例2と同じである。
本実施例によるchar_nodeの動作について、以下に説明する。まず、各設定時レジスタに記録される値は、Configuration Controller1から設定されるConfiguration Dataによって書き換えることができる。これら設定レジスタの値を書き換えることによって、char_nodeが行う論理演算を任意に構成することが可能となる。
MUX411は、設定レジスタ91によって設定された値に従って、入力信号liおよびriのいずれかを選択的に出力する。
本実施例では、実施例2と同様に、メタキャラクタ‘*’をテキスト文字1文字とマージし、char_nodeに割り当てることができる。このマージが行われているかどうか、に応じた値を設定レジスタ90に設定する。例えば、マージされていれば、設定レジスタ90に‘1’を設定し、マージされていなければ、設定レジスタに‘0’を設定する。
ANDゲート801は、ANDゲート802の結果と、設定レジスタ90に設定されている値とのAND(論理積)を取って出力する。ORゲート900は、このAND出力と、MUX411で選択された入力信号とのOR(論理和)を取って出力する。Flip−Flop501は、このOR出力を入力する。
同様に、設定レジスタ93は、MUX412が、入力信号liと、入力信号riと、ANDゲート802の演算結果とのうちいずれかを選択するために用いる値を設定する。
設定レジスタ92は複数ビット分のレジスタ群から構成され、当該char_nodeでマッチングを行う文字が設定されている。比較器601は、設定レジスタ92に設定された値と、入力されたテキスト文字とを比較して、その結果を出力する。
なお、図21の例では、出力信号oが、char_node80の出力信号loおよびroとしてそのまま用いられる。しかし、char_node80の内部で、出力信号loおよびroにそれぞれ異なる出力信号を選択するための論理素子や設定レジスタなどを用意してもよい。
また、本実施例におけるchar_node80は、実施例2におけるchar_node70を論理素子によってハードウェア回路化する構成である。なお、実施例1におけるchar_node40を同様にハードウェア回路化する構成としても良い。ただし、この場合、メタキャラクタ‘*’は、必ず他のメタキャラクタとマージされるか、空を表す文字を子ノードとして追加されることで、mchar_nodeに割り当てられる。
また、本実施例のGeneric Logicにおける他のノード構成も、同様に構成してよい。すなわち、実施例1または実施例2と同様の機能を、設定レジスタ群をノードの内部に用意し、その内容をConfiguration Controller1から設定されるConfiguration Dataに応じて書き換えることで変更できる構成であれば良い。
実施例1および実施例2のGeneric Logicでは、FPGAにおけるLUTの論理真理値表を用いた論理演算を行っていた。しかし、本実施例3のGeneric Logicでは、上記のように、LUTを用いず、設定レジスタ群と、論理素子によって直接ハードウェア化する。これにより、Configuration Controller1から設定されるConfiguration Dataによってそれらの設定レジスタ群を書き換えることで、所望の有限オートマトンを構成することが可能となる。
次に、本発明の第1の実施の形態の作用効果について説明する。
本実施の形態においては、メタキャラクタ‘|’および‘*’、連結を示す記号‘・’並びにテキスト文字のみを用いる構文木として表現できる正規表現を、Generic Logic上に動的に構成することができる。
前述した通り、従来の手法を用いると、正規表現を動的に再構成することができるものの、そのメタキャラクタを含む正規表現をネスト内にも含むような正規表現は構成することができない。すなわち、従来の手法には、正規表現に制約条件が存在するという課題がある。例えば、従来の手法では、“a(b+cd)*e”のような正規表現は構成することができない。
一方、本実施の形態では、上記のような正規表現を、メタキャラクタ‘|’、‘*’のみを使った正規表現“a(bb*cd)*e”として書き換えた後、これを構文木で表現することによって、本実施の形態におけるGeneric Logic上に構成することが可能である。また、一般的に、メタキャラクタ‘|’、‘*’以外のメタキャラクタを用いた正規表現も、これら2つのメタキャラクタのみを含む正規表現に書き換えることができるため、本実施の形態によって、より柔軟な表現をもつ正規表現に対応することができる。
また、従来の手法では、状態を表すレジスタから全てのレジスタへの配線を有し、レジスタ配列に設定する値によって状態間の接続構成や状態遷移条件の再設定を行うことで、動的にNFAを構成することが可能である。つまり、従来の手法では、どのような遷移をもつNFAでも構成できる。その一方で、従来の手法には、状態数Nに対してそのハードウェア量がO(N2)で増加するため、状態数に対するスケーラビリティの面で課題がある。
転じて、本実施の形態において、N個の状態を有するGeneric Logicについて考える。このとき、N個のchar_nodeが存在することになるので、mchar_nodeの数はN−1個、MUXの数はN−1個になる。すると、mchar_nodeを葉とし、snodeと構成するチャネルの役割を担う2分木の必要数は、最大でlog2N−1個となる。また、このとき、1つの2分木に存在するsnodeの増加量は、O(N)である。このため、全体として状態数Nに対して、ハードウェア量がO(Nlog2N)で増加することになる。つまり、本実施の形態では、従来の手法よりもハードウェア量の増加を抑えることが可能である。
(第2の実施形態)
次に、本発明の第2の実施の形態について図面を参照して詳細に説明する。
次に、本発明の第2の実施の形態について図面を参照して詳細に説明する。
図22は、本発明の第2の実施の形態によるパターンマッチング装置の構成について説明するためのブロック図である。本実施形態によるパターンマッチング装置と、図5に示した第1の実施形態によるパターンマッチング装置とは、Generic Logic3とGeneric Logic4とが違う以外は同じ構成である。なお、本実施形態によるGeneric Logic4も、第1の実施形態によるGeneric Logicと同じく、Configuration Dataにより構文木で表現できる任意の正規表現を構成する再構成可能有限オートマトン回路である。
本実施形態によるGeneric Logic4は、Configuration Controller1により設定されるConfiguration Dataによって特定の正規表現を表す有限オートマトンを構成する再構成可能な有限オートマトン回路である。これは、実施の形態1において、mchar_nodeとsnodeで構成される2分木が任意のM分木に置き換えられた構成であり、その他の条件は全て実施の形態1によるGeneric Logic3と同じである。図22では、4分木を再構成可能に構成したGeneric Logicの例を示している。
図23は、本実施形態による4分木を再構成可能なGeneric Logicの構成について説明するためのブロック図である。本実施形態によるGeneric Logic4は、第1の実施形態によるGeneric Logic3における3入力3出力のスイッチノードを、5入力5出力のスイッチノード(snode)320、321に置き換えた構成である。本実施形態によるGeneric Logic4におけるその他の条件は、全て第1の実施形態によるGeneric Logic3と同じである。本実施形態では、mchar_nodeとsnodeで構成される2分木を、任意の自然数Mを用いるM分木として構成している。
本実施形態による、M分木として構成したsnodeは、M+1個の信号入力部と、M+1個の信号出力部とを具備するスイッチを用いて構成される。本M分木は、第1の実施形態の説明で述べたとおり、2分木の各ノードを一列に配置した場合に、その接続を正しく行うために必要な水平方向のチャネルである。したがって、必要なM分木の数は、第1の実施形態における2分木構成の必要数に等しい。つまり、M分木構成のチャネルの数は、Mの値に関わらず、Generic Logic4におけるmchar_node数Nに依存する。そして、その必要数Bは、B=[log2(N+1)−1]×2となる。なお、[x]は、xを下回らない最小の整数を意味する。なお、第1の実施形態における2分木構成の必要数と同様、Generic Logicに具備されるmchar_nodeの数が少ない場合には、Routing Layerと同数でも良いが、一般的には、2倍の数だけ必要となる。ここで、図22、図23に示すM=4の場合のGeneric Logic4では、mchar_nodeを葉ノードとし、snodeを葉ではないノードとする4分木を2個しか表示していない。この場合、あるmchar_node間を、同一の2分木上で同一のsnode間の接続信号を用いて接続する場合は考えられないため、事実上2個あれば問題はないが、一般的には上記B個用意すれば良い。
図24は、本実施形態によるM+1入力M+1出力snodeにおいて、M=4とし、FPGA上に実装するとした場合の構成例について説明するための回路図である。このsnode1000は、i0信号入力部と、i1信号入力部と、i2信号入力部と、i3信号入力部と、i4信号入力部と、5つのLUT711〜715と、o0信号出力部と、o1信号出力部と、o2信号出力部と、o3信号出力部と、o4信号出力部とを具備する。5つのLUT711〜715のそれぞれは、4つの入力部と、1つの出力部とを具備する。
LUT711の4つの入力部には、i1信号入力部と、i2信号入力部と、i3信号入力部と、i4信号入力部とがそれぞれ接続されている。LUT712の4つの入力部には、i0信号入力部と、i2信号入力部と、i3信号入力部と、i4信号入力部とがそれぞれ接続されている。LUT713の4つの入力部には、i0信号入力部と、i1信号入力部と、i3信号入力部と、i4信号入力部とがそれぞれ接続されている。LUT714の4つの入力部には、i0信号入力部と、i1信号入力部と、i2信号入力部と、i4信号入力部とがそれぞれ接続されている。LUT715の4つの入力部には、i0信号入力部と、i1信号入力部と、i2信号入力部と、i3信号入力部とがそれぞれ接続されている。5つのLUT711〜715の入力部には、o0信号出力部と、o1信号出力部と、o2信号出力部と、o3信号出力部と、o4信号出力部とがそれぞれ接続されている。
LUT711〜715のそれぞれは、その設定に応じて、4つの入力信号のうちいずれか1つを選択的に出力する。
また、第1の実施形態の場合と同様、本実施形態によるパターンマッチング装置でも、FPGAではなく、ASICのように専用ハードウェア化し、チップ上に実装することができる。この場合においても、Generic Logic4におけるmchar_node、char_nodeおよびMUXの構成は、第1の実施形態と同様である。snodeについても、第1の実施形態と同様に、設定レジスタ群を用い、その内容をConfiguration Controller1から設定されるConfiguration Dataに応じて書き換えることで変更できる構成であれば良い。
次に、本発明の第2の実施形態における作用効果について説明する。
本実施の形態においても、第1の実施形態と同様、柔軟な表現をもつ正規表現に対応することができる。
また、本実施の形態においては、M分木におけるMの値が2よりも大きければ、mchar_nodeの数の増加に伴うsnodeの増加量が、第1の実施形態よりも少なくなる。
一般的に、2以上の整数Mと、1以上の整数nにおいて、M分木の葉ノードの総数がMn−1より大きく、かつ、Mn以下であるときに、葉でないノードの総数は(Mn−1)/(M−1)以下である。すなわち、本発明によるパターンマッチング装置では、メタキャラクノード回路部の総数がMn−1より大きく、かつ、Mn以下であるときに、1つのM分木におけるスイッチノード回路部の総数は(Mn−1)/(M−1)以下である。例えば、22n個のmchar_nodeを含むGeneric Logicについて考える。このとき、2分木構成のチャネルブロック内にあるsnodeの数は、22n−1であるのに対し、4分木で構成した場合には、(4n−1)/3=(22n−1)/3となる。すなわち、4分木で構成すると、snodeの必要数が、2分木で構成した場合の1/3となる。このように、本実施形態では、第1の実施形態に比べて、ハードウェア量の増加をより抑えることが可能である。
本発明は、正規表現を用いたパターンマッチング処理をハードウェア回路にて高速に行い、かつ、動的にその正規表現を再構成するためのハードウェア回路、及びパターンマッチング装置の分野に適用できる。
さらに、本発明によるハードウェア回路3、4またはこれらの回路を用いたパターンマッチング装置は、パソコンやワークステーションに搭載されているソフトウェアベースでのパターンマッチング処理におけるオフロードエンジンやアクセラレーションの分野にも適用できる。
また、本発明では、有限オートマトンを用いてパターンマッチングを行い、構文木、つまり2分木で表現できる正規表現を例として扱った。しかし、本発明によれば、同様に、2分木で表現することによってパターンマッチングを行うことができるアプリケーション全般に適用することができる。本発明は、例えば、通信機器におけるIPアドレスの検索、ACL(Access Control List)におけるIPアドレスの検索、ポート番号等の検索、等の分野にも適用可能である。
以上、実施形態を参照して本願発明を説明したが、本願発明は上記実施形態に限定されるものではない。本願発明の構成や詳細には、本願発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
この出願は、2009年3月19日に出願された日本出願特願2009−068011を基礎とする優先権を主張し、その開示の全てをここに取り込む。
Claims (15)
- テキスト文字であるキャラクタと、所定の機能的意味を持つメタキャラクタとを組み合わせた任意の正規表現に対応する、所定の形式を有する構成データを設定する設定用制御回路(Configuration Controller)と、
前記構成データに基づいて、前記正規表現に対応する設定を再設定可能に行い、前記正規表現とのパターンマッチングを行うためのオートマトン回路と、
を具備し、
前記オートマトン回路は、
前記正規表現におけるキャラクタに対応するデータを格納するキャラクタノード回路部と、
前記正規表現におけるメタキャラクタに対応するデータを格納し、前記キャラクタノード回路部との接続関係の設定を行うメタキャラクタノード回路部と、前記メタキャラクタノード回路部は、他のメタキャラクタノード回路部との接続関係の設定をも行い、
前記メタキャラクタノード回路部同士の接続関係の設定を行うスイッチノード回路部とを具備する
パターンマッチング装置。 - 請求項1に記載のパターンマッチング装置において、
前記キャラクタノード回路部の総数は、前記メタキャラクタノード回路部の総数より1つだけ多く、
前記キャラクタノード回路部と、前記メタキャラクタノード回路部とは、1つずつ交互に直列に配置されており、
前記メタキャラクタノード回路部のそれぞれは、左右に配置された2つの前記キャラクタノード回路部に相互に接続されており、
同一のキャラクタノード回路部に接続された2つの前記メタキャラクタノード回路部同士は相互に接続されている
パターンマッチング装置。 - 請求項2に記載のパターンマッチング装置において、
前記スイッチノード回路部は、同一のキャラクタノード回路部に接続された前記メタキャラクタノード回路部同士の接続以外の、前記メタキャラクタノード回路部同士の接続を行い、
前記スイッチノード回路部における接続関係は、
前記メタキャラクタノード回路部を葉ノードとするM分木の形状
を具備し、
前記メタキャラクタノード回路部の総数をNと置くとき、前記M分木の総数は
log2(N+1)−1を下回らない最小の整数の2倍
である
パターンマッチング装置。 - 請求項3に記載のパターンマッチング装置において、
前記M分木において、異なるスイッチノード回路部から同一のメタキャラクタノードに向けて出力される複数の信号をまとめるためのマルチプレクサ回路部
をさらに具備し、
前記マルチプレクサ回路部のそれぞれは、前記メタキャラクタノード回路部のそれぞれに一対一に対応する
パターンマッチング装置。 - 請求項4に記載のパターンマッチング装置において、
前記メタキャラクタノード回路部は、
対応するマルチプレクサ回路部と、左側に接続されたメタキャラクタノード回路部と、右側に接続されたメタキャラクタノード回路部と、左側に接続されたキャラクタノード回路部と、右側に接続されたキャラクタノード回路部とからの5つの入力信号をそれぞれ入力するための5つの入力部と、
対応するスイッチノード回路部と、左側に接続されたメタキャラクタノード回路部と、右側に接続されたメタキャラクタノード回路部と、左側に接続されたキャラクタノード回路部と、右側に接続されたキャラクタノード回路部とへの信号をそれぞれ出力するための5個の出力部と、
前記5個の出力部にそれぞれ接続された5個のスイッチ回路部と
を具備し、
前記5個のスイッチ回路部は、前記5つの入力信号の論理演算結果を出力し、
前記構成データは、
前記5個のスイッチ回路部がそれぞれ行う論理演算に係る設定値
を具備する
パターンマッチング装置。 - 請求項3〜5のいずれかに記載のパターンマッチング装置において、
所定の整数nにおいて、前記メタキャラクノード回路部の総数がMn−1より大きく、かつ、Mn以下であるときに、1つの前記M分木における前記スイッチノード回路部の総数は
(Mn−1)/(M−1)以下
である
パターンマッチング装置。 - 請求項6に記載のパターンマッチング装置において、
前記スイッチノード回路部は、
前段のスイッチノード回路部およびM個のメタキャラクタノード回路部からの信号、または前段のスイッチノード回路部およびM個の後段のスイッチノード回路部からの信号をそれぞれ入力するためのM+1個の入力部と、
前段のスイッチノード回路部およびM個のメタキャラクタノード回路部に対応するMUXとへの信号、または前段のスイッチノード回路部およびM個の後段のスイッチノード回路部とへの信号をそれぞれ出力するためのM+1個の出力部と、
前記M+1個の出力部にそれぞれ接続されたM+1個のスイッチ回路部と
を具備し、
前記M+1個のスイッチ回路部は、対応する出力部に接続された先の回路部以外からの入力信号のいずれか1つを選択的に出力し、
前記構成データは、
前記M+1個のスイッチ回路部がそれぞれ行う選択の設定値
を具備する
パターンマッチング装置。 - 請求項6または7に記載のパターンマッチング装置において、
前記M分木は、2分木である
パターンマッチング装置。 - 請求項6または7に記載のパターンマッチング装置において、
前記M分木は、4分木である
パターンマッチング装置。 - 請求項2〜9のいずれかに記載のパターンマッチング装置において、
前記キャラクタノード回路部は、
左側に接続されたメタキャラクタノード回路部の出力信号を入力するための第1の入力部と、
右側に接続されたメタキャラクタノード回路部の出力信号を入力するための第2の入力部と、
前記第1の入力部で入力する第1の入力信号と、前記第2の入力部で入力する第2の入力信号とのいずれかを選択的に出力する第1のスイッチ回路部と、
前記第1のスイッチ回路部の出力信号を記憶するためのフリップフロップ回路部と、
パターンマッチングを行うためのテキスト文字データを入力する第3の入力部と、
前記テキスト文字データと、前記キャラクタノード回路部が記憶するキャラクタとを比較する比較回路部と、
前記比較回路部の出力信号と、前記記憶回路部の出力信号との論理積を算出する論理積回路部と、
前記論理積回路部の出力信号と、前記第1の入力信号と、第2の入力信号とのいずれかを選択的に出力する第2のスイッチ回路部と、
前記第2のスイッチ回路部の出力信号を出力する出力部と
を具備し、
前記構成データは、
前記第1のスイッチ回路部が行う選択の設定値と、
前記第2のスイッチ回路部が行う選択の設定値と、
前記キャラクタノード回路部が記憶するキャラクタのデータと
を具備する
パターンマッチング装置。 - 請求項2〜9のいずれかに記載のパターンマッチング装置において、
前記キャラクタノード回路部は、
左側に接続されたメタキャラクタノード回路部の出力信号を入力するための第1の入力部と、
右側に接続されたメタキャラクタノード回路部の出力信号を入力するための第2の入力部と、
前記第1の入力部で入力する第1の入力信号と、前記第2の入力部で入力する第2の入力信号と、第3の信号とのいずれかを選択的に出力する第1のスイッチ回路部と、
前記第1のスイッチ回路部の出力信号を記憶するためのフリップフロップ回路部と、
パターンマッチングを行うためのテキスト文字データを入力する第3の入力部と、
前記テキスト文字データと、前記キャラクタノード回路部が記憶するキャラクタとを比較する比較回路部と、
前記比較回路部の出力信号と、前記記憶回路部の出力信号との論理積を前記第3の信号として算出する論理積回路と、
前記論理積回路の出力信号と、前記第1の入力信号と、第2の入力信号とのいずれかを選択的に出力する第2のスイッチ回路部と、
前記第2のスイッチ回路部の出力信号を出力する出力部と
を具備し、
前記構成データは、
前記第1のスイッチ回路部が行う選択の設定値と、
前記第2のスイッチ回路部が行う選択の設定値と、
前記キャラクタノード回路部が記憶するキャラクタのデータと
を具備する
パターンマッチング装置。 - 請求項11に記載のパターンマッチング装置において、
前記第1のスイッチ回路部は、
前記第1の入力部または前記第2の入力部のいずれかを選択するための設定値を格納するための第1の記憶回路部と、
前記第1の記憶回路部に格納された設定値に基づいて、前記第1の入力部または前記第2の入力部のいずれかを選択的に出力する第3のスイッチ回路部と、
前記キャラクタノード回路部が記憶するキャラクタに「0回以上マッチ」を意味するメタキャラクタ「*」がマージされているかどうかに係る情報を記憶する第2の記憶回路部と、
前記第3の信号と、前記第2の記憶回路部からの出力信号との論理積を算出するための論理積回路部と、
前記論理積回路部の出力信号との論理和を演算し、前記フリップフロップ回路部に向けて出力するための論理和回路部と
を具備し、
前記第2のスイッチ回路部は、
前記第2のスイッチ回路が行う選択の設定値を格納し、前記第2のスイッチ回路部に接続されている第3の記憶回路部
を具備し、
前記キャラクタノード回路部が記憶するキャラクタのデータを格納し、前記比較回路部に接続されている第4の記憶回路部
をさらに具備する
パターンマッチング装置。 - 請求項1〜12のいずれかに記載のパターンマッチング装置において、
前記設定用制御回路に接続されて、前記構成データを記憶するための記憶装置
をさらに具備する
パターンマッチング装置。 - 請求項1〜13のいずれかに記載のパターンマッチング装置における
オートマトン回路。 - (a)テキスト文字であるキャラクタと、所定の機能的意味を持つメタキャラクタとを組み合わせた任意の正規表現に対応する、所定の形式を有する構成データを、オートマトン回路に再設定可能に行うステップと、
(b)前記オートマトン回路を用いてパターンマッチングを行うステップと
を具備し、
前記ステップ(a)は、
(a−1)前記オートマトン回路におけるキャラクタノード回路部に、前記正規表現におけるキャラクタに対応するデータを格納するステップと、
(a−2)前記オートマトン回路におけるメタキャラクタノード回路部に、前記正規表現におけるメタキャラクタに対応するデータを格納し、前記キャラクタノードまたは他のメタキャラクタノードとの接続関係の設定を行うステップと、
(a−3)前記オートマトン回路におけるスイッチノード回路部に、前記メタキャラクタノード同士の接続関係の設定を行うステップと
を具備する
パターンマッチング方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2011504896A JP5440812B2 (ja) | 2009-03-19 | 2010-03-19 | パターンマッチング装置 |
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2009068011 | 2009-03-19 | ||
JP2009068011 | 2009-03-19 | ||
JP2011504896A JP5440812B2 (ja) | 2009-03-19 | 2010-03-19 | パターンマッチング装置 |
PCT/JP2010/054807 WO2010107114A1 (ja) | 2009-03-19 | 2010-03-19 | パターンマッチング装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPWO2010107114A1 JPWO2010107114A1 (ja) | 2012-09-20 |
JP5440812B2 true JP5440812B2 (ja) | 2014-03-12 |
Family
ID=42739770
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2011504896A Expired - Fee Related JP5440812B2 (ja) | 2009-03-19 | 2010-03-19 | パターンマッチング装置 |
Country Status (3)
Country | Link |
---|---|
US (1) | US8725671B2 (ja) |
JP (1) | JP5440812B2 (ja) |
WO (1) | WO2010107114A1 (ja) |
Families Citing this family (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20120158768A1 (en) * | 2010-12-15 | 2012-06-21 | Microsoft Corporation | Decomposing and merging regular expressions |
US9032421B2 (en) | 2011-02-21 | 2015-05-12 | Nec Corporation | Computation device and computation execution method |
US20130282648A1 (en) * | 2012-04-18 | 2013-10-24 | International Business Machines Corporation | Deterministic finite automaton minimization |
JP5942600B2 (ja) * | 2012-05-28 | 2016-06-29 | 富士通株式会社 | 入力文字列確認装置 |
US9268881B2 (en) | 2012-10-19 | 2016-02-23 | Intel Corporation | Child state pre-fetch in NFAs |
US9117170B2 (en) | 2012-11-19 | 2015-08-25 | Intel Corporation | Complex NFA state matching method that matches input symbols against character classes (CCLs), and compares sequence CCLs in parallel |
US9665664B2 (en) | 2012-11-26 | 2017-05-30 | Intel Corporation | DFA-NFA hybrid |
US9304768B2 (en) | 2012-12-18 | 2016-04-05 | Intel Corporation | Cache prefetch for deterministic finite automaton instructions |
US9268570B2 (en) | 2013-01-23 | 2016-02-23 | Intel Corporation | DFA compression and execution |
US9177253B2 (en) * | 2013-01-31 | 2015-11-03 | Intel Corporation | System and method for DFA-NFA splitting |
WO2015084360A1 (en) * | 2013-12-05 | 2015-06-11 | Hewlett-Packard Development Company, L.P. | Regular expression matching |
US9449134B1 (en) | 2015-06-25 | 2016-09-20 | International Business Machines Corporation | Dynamically reconfigurable logic circuits using native field-programmable gate array primitives |
US9875045B2 (en) * | 2015-07-27 | 2018-01-23 | International Business Machines Corporation | Regular expression matching with back-references using backtracking |
CN105930360B (zh) * | 2016-04-11 | 2019-10-15 | 云南省国家税务局 | 一种基于Storm流计算框架文本索引方法及系统 |
JP6737117B2 (ja) * | 2016-10-07 | 2020-08-05 | 富士通株式会社 | 符号化データ検索プログラム、符号化データ検索方法および符号化データ検索装置 |
CN108549751A (zh) * | 2018-03-28 | 2018-09-18 | 湖南融创微电子有限公司 | 寄存器矩阵的布局方法 |
GB201916801D0 (en) | 2019-11-19 | 2020-01-01 | Ibm | Identifying data relationships from a spreadsheet |
GB201916800D0 (en) * | 2019-11-19 | 2020-01-01 | Ibm | Detecting errors in spreadsheets |
GB201916803D0 (en) | 2019-11-19 | 2020-01-01 | Ibm | Identifying content and structure of olap dimensions from a spreadsheet |
GB201916804D0 (en) | 2019-11-19 | 2020-01-01 | Ibm | Generating an OLAP model from a spreadsheet |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070130140A1 (en) * | 2005-12-02 | 2007-06-07 | Cytron Ron K | Method and device for high performance regular expression pattern matching |
WO2008081932A1 (ja) * | 2006-12-28 | 2008-07-10 | Nec Corporation | 文字列照合用有限オートマトン生成システム、その生成方法、及び生成プログラム |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7119577B2 (en) | 2002-08-28 | 2006-10-10 | Cisco Systems, Inc. | Method and apparatus for efficient implementation and evaluation of state machines and programmable finite state automata |
JP5429164B2 (ja) | 2008-06-04 | 2014-02-26 | 日本電気株式会社 | 有限オートマトン生成システム |
-
2010
- 2010-03-19 JP JP2011504896A patent/JP5440812B2/ja not_active Expired - Fee Related
- 2010-03-19 US US13/138,668 patent/US8725671B2/en not_active Expired - Fee Related
- 2010-03-19 WO PCT/JP2010/054807 patent/WO2010107114A1/ja active Application Filing
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070130140A1 (en) * | 2005-12-02 | 2007-06-07 | Cytron Ron K | Method and device for high performance regular expression pattern matching |
WO2008081932A1 (ja) * | 2006-12-28 | 2008-07-10 | Nec Corporation | 文字列照合用有限オートマトン生成システム、その生成方法、及び生成プログラム |
Non-Patent Citations (3)
Title |
---|
CSNG200701022004; 山垣則夫、外: 'NFA埋め込み型パターンマッチング回路におけるマルチバイト処理化に関する検討' 電子情報通信学会技術研究報告 Vol.107, No.225, 20070913, P.65-70 * |
JPN6013057481; 山垣則夫、外: 'NFA埋め込み型パターンマッチング回路におけるマルチバイト処理化に関する検討' 電子情報通信学会技術研究報告 Vol.107, No.225, 20070913, P.65-70 * |
JPN6013057482; Sidhu, R. et al.: 'Fast Regular Expression Matching using FPGAs' Proceedings of the 9th Annual IEEE Symposium on Field-Programmable Custom Computing Machines (FCCM'0 , 2001, P.227-238 * |
Also Published As
Publication number | Publication date |
---|---|
WO2010107114A1 (ja) | 2010-09-23 |
US8725671B2 (en) | 2014-05-13 |
JPWO2010107114A1 (ja) | 2012-09-20 |
US20120011094A1 (en) | 2012-01-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5440812B2 (ja) | パターンマッチング装置 | |
US9792097B2 (en) | Method and apparatus for compiling regular expressions | |
US9864584B2 (en) | Code generator for programmable network devices | |
EP2668577B1 (en) | Unrolling quantifications to control in-degree and/or out degree of automaton | |
Clark et al. | A Unified Model of Pattern-Matching Circuit Architectures | |
US8138788B2 (en) | Reconfigurable device | |
KR20140005258A (ko) | 요소 이용을 위한 상태 그룹화 | |
EP2777155B1 (en) | Embedded memory and dedicated processor structure within an integrated circuit | |
Pao et al. | IP address lookup using bit-shuffled trie | |
JP4468452B2 (ja) | グローバルセルオートマトンを組み込むためのリコンフィギュアラブルなアーキテクチャをもつコンピュータ装置 | |
US8358653B1 (en) | Generating a pipeline of a packet processor from a parsing tree | |
Suvorova | An approach to dynamic reconfigurable transport protocol controller unit development | |
US11120874B2 (en) | Electronic memory device and a method of manipulating the electronic memory device | |
JP2011141627A (ja) | 再構成可能有限オートマトン回路の構成データ生成方法、生成装置、及び生成プログラム | |
James-Roxby et al. | An efficient content-addressable memory implementation using dynamic routing | |
JPWO2007113964A1 (ja) | 多段論理回路の再構成装置及び再構成方法、論理回路修正装置、並びに再構成可能な多段論理回路 | |
Ye | Using the minimum set of input combinations to minimize the area of local routing networks in logic clusters containing logically equivalent I/Os in FPGAs | |
Thoma et al. | An adaptive FPGA and its distributed routing. | |
JP4330472B2 (ja) | 処理装置 | |
CN106024056A (zh) | 基于复用器的三态内容寻址存储器 | |
CN103038744A (zh) | 数据移位器及其控制方法、复用器、数据筛分器和数据分类器 | |
JP4601567B2 (ja) | データフローグラフの生成方法、及び処理装置 | |
JP2017169070A (ja) | 半導体装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20130213 |
|
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: 20131120 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20131203 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
LAPS | Cancellation because of no payment of annual fees |