(57)【要約】  高速ネットワーク・トラフィック用の動的なパターンのサーチを最適化するように設計された改良された深いパケット・フィルター・システム。改良された深いパケット・フィルター・システムは、最適化されたロジック面積を有するハードウエアによるシステムである。１つの最適化技術は、必要なゲートの個数を低減するように設計されたハードウエアにおける共通のサブ・ロジックの共有である。他の最適化技術は、パターン・セットの部分を記憶する組み込みメモリの使用であり、ゲートの低減にもなる。ロジック面積の低減は、深いパケット・フィルター・システムを単一のフィールド・プログラム可能アレイ・チップ上に実現するのを可能にする。
2007537626.tif 000002
【特許請求の範囲】
【請求項１】
入力データの第１の非ヘッダ部分を接頭パターンと比較するように構成された接頭サーチ・ロジックと、
前記接頭サーチ・ロジックにつながれ、複数のサフィックス・パターンを記憶するメモリと、
前記入力データの前記第１の非ヘッダ部分の前記接頭パターンとの一致に基づいてサフィックス・インデックスを発生する手段と、
前記入力データの第２の非ヘッダ部分を、前記発生されたサフィックス・インデックスに基づいて特定されたサフィックス・パターンと比較するように構成されたコンパレータ・ロジックと、を備え、
前記入力データは、前記第２の非ヘッダ部分の前記比較に基づいて通過を許可されるか許可されない、深いパケット・フィルタ。
【請求項２】
前記接頭サーチ・ロジックは、前記入力データの前記第１の非ヘッダ部分を複数のサフィックス・パターンと並列に比較する請求項１に記載の深いパケット・フィルタ。
【請求項３】
前記接頭サーチ・ロジックは、前記入力データの前記第１の非ヘッダ部分の複数のバイトを前記複数のサフィックス・パターンのそれぞれの複数のバイトと並列に比較する請求項２に記載の深いパケット・フィルタ。
【請求項４】
前記接頭サーチ・ロジックは、前記入力データの前記第１の非ヘッダ部分の複数のバイトを前記複数のサフィックス・パターンのそれぞれの異なるバイト・アライメントと並列に比較する請求項３に記載の深いパケット・フィルタ。
【請求項５】
前記接頭サーチ・ロジックは、前記接頭パターンの特定のサブストリングを検出するためのデコーダのチェーンを有する請求項１に記載の深いパケット・フィルタ。
【請求項６】
前記特定のサブストリングを検出するための前記デコーダのチェーンは、前記特定のサブストリングを有する異なる接頭パターンを検出するように構成された複数の接頭サーチ・ロジック・ユニットにより共有される請求項５に記載の深いパケット・フィルタ。
【請求項７】
前記接頭サーチ・ロジック、メモリ、前記サフィックス・インデックスを発生するための手段、及び前記コンパレータ・ロジックは、単一のフィールド・プログラム可能ゲート・アレイ上にすべて組み込まれている請求項１に記載の深いパケット・フィルタ。
【請求項８】
前記メモリは、ソートされたサフィックス・インデックスのリストを記憶し、
前記リストの偶数入力におけるパターンは前記メモリの第１の入力から最後の入力までに記憶され、前記リストの奇数入力におけるパターンは前記メモリの前記最後の入力から前記第１の入力までに記憶される請求項７に記載の深いパケット・フィルタ。
【請求項９】
前記サフィックス・インデックスを発生するための手段は、前記接頭サーチ・ロジックの出力につながれたＯＲゲートの２値ツリーから導出されたロジック式に基づいて、前記サフィックス・インデックスの各ビットを発生する手段を有する請求項１に記載の深いパケット・フィルタ。
【請求項１０】
前記接頭サーチ・ロジックはバイト・アライメントを示し、前記コンパレータ・ロジックは、前記指示されたバイト・アライメントに従って前記入力データの前記第２の非ヘッダ部分をシフトするシフタを有する請求項１に記載の深いパケット・フィルタ。
【請求項１１】
前記入力データの前記第１及び第２の非ヘッダ部分は、前記データのペイロード部分である請求項１に記載の深いパケット・フィルタ。
【請求項１２】
複数のパターンを接頭部分とサフィックス部分に区分けし、
前記複数のパターンのそれぞれの前記サフィックス部分をメモリに記憶し、
入力データの第１の非ヘッダ部分の少なくとも一部を前記複数のパターンのそれぞれの前記サフィックス部分の少なくとも一部と並列に比較し、
前記入力データの前記第１の非ヘッダ部分の特定パターンの接頭部分とのマッチに基づいてサフィックス・インデックスを発生し、
前記サフィックス・インデックスに基づいて前記メモリ内に記憶された前記特定のパターンのサフィックス部分を特定し、
前記入力データの第２の非ヘッダ部分を前記特定されたサフィックス部分と比較し、
前記第２の非ヘッダ部分の前記特定されたサフィックス部分との比較に基づいて、前記入力データを進めるか又は進めない深いパケット・フィルタリング方法。
【請求項１３】
前記並列の比較は、前記入力データの前記第１の非ヘッダ部分の複数のバイトを前記複数のパターンのそれぞれの前記サフィックス部分の異なるバイト・アライメントとの並列の比較を有する請求項１２に記載の方法。
【請求項１４】
前記比較は、特定のサブストリングを検出するように構成されたデコーダのチェーンを介して達成される請求項１２に記載の深い方法。
【請求項１５】
前記特定のサブストリングを検出するための前記デコーダのチェーンは、前記特定のサブストリングを有する前記複数のパターンの異なる接頭パターンを検出するように構成された複数の接頭サーチ・ロジック・ユニットにより共有される請求項１４に記載の方法。
【請求項１６】
前記メモリは、フィールド・プログラム可能ゲート・アレイに組み込まれた読出専用メモリである請求項１２に記載の方法。
【請求項１７】
前記メモリは、前記複数のパターンのソートされたサフィックス部分のリストを記憶し、
前記リストの偶数入力に挙げられたサフィックス部分は前記メモリの第１の入力から最後の入力までに記憶され、前記リストの奇数入力に挙げられたサフィックス部分は前記メモリの前記最後の入力から前記第１の入力までに記憶される請求項１２に記載の方法。
【請求項１８】
前記サフィックス・インデックスの発生は、接頭サーチ・ロジックの出力につながれたＯＲゲートの２値ツリーから導出されたロジック式に基づいて、前記サフィックス・インデックスの各ビットを発生することを有し、前記接頭サーチ・ロジックは、入力データの前記第１の非ヘッダ部分の少なくとも一部を前記複数のパターンのそれぞれの前記接頭部分の少なくとも一部と並列に比較する請求項１２に記載の方法。
【請求項１９】
前記入力データの前記第１の非ヘッダ部分のマッチに関係するバイト・アライメントを、前記特定のパターンの前記接頭部分に対して特定し、
前記指示されたバイト・アライメントに従って前記入力データの前記第２の非ヘッダ部分をシフトすることを、更に備える請求項１２に記載の方法。
【請求項２０】
前記入力データの前記第１及び第２の非ヘッダ部分は、前記データのペイロード部分である請求項１２に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
連邦後援の研究／開発に関する声明
本発明は、国立科学基金（ＮＳＦ）により査定された認可第0220100の下で政府の援助で行われた。政府はこの発明に関して一定の権利を有する。
【背景技術】
【０００２】
発明の背景
猛威を振るっているネットワーク・ウイルスは、ネットワーク・パケットのヘッダのみを調べるこれまでのファイア・ウォールはコンピュータを侵入から防護するには十分でないことを示している。新しい攻撃の多くは、静的なヘッダ部分でなく、各種の動的な配置におけるパケットのペイロード部分に隠れている。例えば、インターネットで発見された多くの最近のウォーム（虫）は、未知の位置のパケット・ペイロードに組み込まれたアプリケーションレベルの攻撃である。このような攻撃のためのパケット・ヘッダは、パケットが違法であることを示しておらず、実際適法なパケットのように見える。従って、多層インスペクション・ユニットとも呼ばれる静的なパケット・ヘッダを調べるだけでなくペイロード全体を通して所定のパターンを調べる深いパケット・インスペクション（検査）・ユニットを有するセキュリティ・システムを有することが望ましい。
【０００３】
図１は、典型的な多層（マルチ・レイヤー）インスペクション・システムのブロック図である。このシステムは、入力パケット２０を受けて、パケットのレイヤー３−７を、すべてのパケット・フィルタ・パターン３０に対して調べる。パターン３０のいずれか１つがレイヤー３−７における情報とマッチ（一致）すれば、パケットは通過することが許されない。そうでなければ、パケットは通過することが許される。
【０００４】
マルチ・レイヤーインスペクション・ユニット２０は、ルール・ベースのパケット・フィルタリング・ソフトウエアを走らせる１つ以上の汎用プロセッサの形で実現される。しかし、ソフトウエア・システムにより使用される徹底的なパターン・インスペクション検出アルゴリズムのために、ソフトウエアで１Ｇｂｐｓ以上の高速ネットワーク・トラフィックをフィルタするのが難しいことがしばしばある。特に、パターンの位置が予め決まっていないため、パターンはサーチ（調査）・プロセスの間ペイロードのすべてのバイト・アライメント（配置）から始めて比較しなければならない。このように、ルール・ベースのパケット・フィルタリング・ソフトウエアは、このような高速ネットワークで使用するのは現実的でない。
【０００５】
より高速のネットワークをサポートする従来技術のカスタム（既製）ハードウエア・チップが存在する。これらはパケットの静的なフィールドのサーチに基づくパケット分類器として使用すると効率的であるが、深いパケット・フィルタで必要な動的なパターン・サーチの候補としては不十分である。これは、必要とするパターン・チェック数が増加するに従って性能のボトルネックとなるフォン・ノイマン・アーキテクチャで実行するシーケンシャル・アルゴリズムを行うことに主として原因がある。
【発明の開示】
【発明が解決しようとする課題】
【０００６】
従って、高速ネットワークのための改良された深いパケット・フィルタ・システムが望まれている。
【課題を解決するための手段】
【０００７】
本発明は、入力データの第１の非ヘッダ部分を接頭パターンと比較するように構成された接頭サーチ・ロジックを有する深いパケット・フィルタに向けられる。このフィルタは、複数のサフィックス・パターンを記憶するメモリと、前記入力データの前記第１の非ヘッダ部分の前記接頭パターンとの一致に基づいてサフィックス・インデックスを発生するアドレス・インデックスと、を更に有する。フィルタは、前記入力データの第２の非ヘッダ部分を、前記発生されたサフィックス・インデックスに基づいて特定されたサフィックス・パターンと比較するように構成されたコンパレータ・ロジックを、更に備える。前記入力データは、前記第２の非ヘッダ部分の前記比較に基づいて通過を許可されるか許可されない。
【０００８】
１つの実施例によれば、前記接頭サーチ・ロジックは、前記入力データの前記第１の非ヘッダ部分を複数のサフィックス・パターンと並列に比較する。これは、前記入力データの前記第１の非ヘッダ部分の複数のバイトを前記複数のサフィックス・パターンのそれぞれの複数のバイトと並列に比較することによりなされる。
【０００９】
１つの実施例によれば、前記接頭サーチ・ロジックは、前記入力データの前記第１の非ヘッダ部分の複数のバイトを前記複数のサフィックス・パターンのそれぞれの異なるバイト・アライメントと並列に比較する。
【００１０】
１つの実施例によれば、前記接頭サーチ・ロジックは、前記接頭パターンの特定のサブストリングを検出するためのデコーダのチェーンを有する。最適化のために、前記特定のサブストリングを検出するための前記デコーダのチェーンは、前記特定のサブストリングを有する異なる接頭パターンを検出するように構成された複数の接頭サーチ・ロジック・ユニットにより共有される。
【００１１】
１つの実施例によれば、前記接頭サーチ・ロジック、メモリ、前記サフィックス・インデックスを発生するための手段、及び前記コンパレータ・ロジックは、単一のフィールド・プログラム可能ゲート・アレイ上にすべて組み込まれている。
【００１２】
１つの実施例によれば、前記メモリは、ソートされたサフィックス・インデックスのリストを記憶し、前記リストの偶数入力におけるパターンは前記メモリの第１の入力から最後の入力までに記憶され、前記リストの奇数入力におけるパターンは前記メモリの前記最後の入力から前記第１の入力までに記憶される。
【００１３】
１つの実施例によれば、前記アドレス・エンコーダは、前記接頭サーチ・ロジックの出力につながれたＯＲゲートの２値ツリーから導出されたロジック式に基づいて、前記サフィックス・インデックスの各ビットを発生する。
【００１４】
１つの実施例によれば、前記接頭サーチ・ロジックはバイト・アライメントを示し、前記コンパレータ・ロジックは、前記指示されたバイト・アライメントに従って前記入力データの前記第２の非ヘッダ部分をシフトするシフタを有する。
【００１５】
１つの実施例によれば、前記入力データの前記第１及び第２の非ヘッダ部分は、前記データのペイロード部分である。
【００１６】
他の実施例によれば、本発明は、複数のパターンを接頭部分とサフィックス部分に区分けし、前記複数のパターンのそれぞれの前記サフィックス部分をメモリに記憶し、入力データの第１の非ヘッダ部分の少なくとも一部を前記複数のパターンのそれぞれの前記サフィックス部分の少なくとも一部と並列に比較し、前記入力データの前記第１の非ヘッダ部分の特定パターンの接頭部分とのマッチに基づいてサフィックス・インデックスを発生し、前記サフィックス・インデックスに基づいて前記メモリ内に記憶された前記特定のパターンのサフィックス部分を特定し、前記入力データの第２の非ヘッダ部分を前記特定されたサフィックス部分と比較し、前記第２の非ヘッダ部分の前記特定されたサフィックス部分との比較に基づいて、前記入力データを進めるか又は進めない深いパケット・フィルタリング方法に向けられる。
【００１７】
本発明のこれら及び他の特徴、態様及び利点は、以下の詳細な説明、請求の範囲、付属の図面について考慮された時により十分に理解されるであろう。もちろん、本発明の実際の範囲は、請求の範囲により定義される。
【発明を実施するための最良の形態】
【００１８】
詳細な説明
本発明は、例えば１Ｇｂｐｓ以上のネットワーク・トラフィックのような高速ネットワーク・トラフィックのための動的なパターンのサーチ（調査）を最適にするように設計された改良された深いパケット・フィルタ・システムに関する。１つの実施例によれば、改良された深いパケット・フィルタ・システムは、ハードウエアを介して実現される。このようなハードウエアに基づくシステムの設計における１つの挑戦は、多数のリソースが多数のパターン・セットをサポートするのに一般に必要とされているということである。このようなパターン・セットは、例えば、Ｓｎｏｒｔとして普通に知られているオープン・ソース・ネットワーク侵入検出システムにより提供される。
【００１９】
１つの実施例によれば、改良されたシステムは、いくつかの最適な技術を適用することによりハードウエアの必要な論理部分を低減する。１つの最適化技術は、使用されるゲート数を低減するハードウエア設計における共通の副論理（サブ・ロジック）の共有である。他の最適化技術は、ゲートの低減になるパターン・セットの部分を記憶するための組み込みメモリの使用である。
【００２０】
ロジック領域の低減は、深いパケット・フィルタ・システムを単一チップで実現するのを可能にする。侵入検出のためのパターン・セットは新しいウィルス及びウォームの出現に対して常時更新されるため、チップは速く及び容易に再プログラムされるように使用されることが望ましい。従って、本発明の１つの実施例では、使用されるチップは、単一のフィールドでプログラム可能なゲート・アレイ（ＦＰＧＡ）である。しかし、当業者であれば、本発明がＦＰＧＡに限定されず、速く及び容易に再プログラム可能な他の類似のチップも使用できることが理解される。
【００２１】
図２は、改良された深いパケット・フィルタ・システムが本発明の例示の実施例に従って採用されたネットワークを示す。図示のネットワークでは、パケットは、例えば、インターネットのような信頼できない媒体４０を介して伝達され、例えばローカル・エリア・ネットワークにおける機器のようなネットワーク機器５０を侵入から防護するように構成されたファイア・ウォール４５により受け取られて検査される。１つの実施例によれば、ファイア・ウォールは、パケットを止めるか又は通過を許可するかを決定するために、パケットのヘッダのみを検査するだけでなく、ペイロード部分も検査する改良された深いパケット・インスペクション・システム６０が備えられている。１つの実施例によれば、ファイア・ウォールは、改良された深いパケット・インスペクション・システム６０を補助するための他の従来の侵入検出及び防護機構も備えられている。
【００２２】
本発明の１つの実施例では、改良された深いパケット・インスペクション・システムは、高速のルータ又はスイッチも組み込まれている。システムにこのようなルータ又はスイッチを組み込むことにより、既知のアプリケーションレベルの攻撃の多くはフィルタで除去される。
【００２３】
図３は、本発明の１つの実施例の改良された深いパケット・フィルタ・システム６０の概略ブロック図である。図示の深いパケット・フィルタ・システムは、並列に接続された各種のインスペクション・モジュール１００ａ−１００ｎ（まとめて参照番号１００で表す）で構成されている。この方法では、各インスペクション・モジュールは、各クロック・サイクルにおいて、入力データの一部を対象（ターゲット）パターン（ルール又はサインという場合もある）の所定のセット（組）に対して比較する。１つの実施例によれば、各インスペクション・モジュールは、単一Ｓｎｏｒｔルール・サインを実現するための論理を有する。
【００２４】
入力パケット・データ１０２は、３２ビットのバス１００を介して３２ビットのレジスタ１１２に送られる。レジスタに保持されたデータは、その後マッチ（一致）検出のためにインスペクション・モジュール１００ａ−１００ｎに並列に進められる。
【００２５】
本発明の１つの実施例によれば、各インスペクション・モジュール１００は、入力データのペイロード部分を特別なルール・パターンに対して比較し、その結果をアドレス・エンコーダ１０８に送る動的なパターン・サーチ・エンジン１０４で構成される。本発明の１つの実施例によれば、サーチ・エンジン１０４は、各種の並列にパイプライン化された一連の再構成可能なディスクリート（個別の）・ロジックを有する。
【００２６】
アドレス・エンコーダ１０８は、各インスペクション・モジュールからマッチ指示を受け取り、検出されたパターンを示すパターンＩＤを出力する。または、アドレス・エンコーダ１０８は、マッチがあったかを示すだけのＯＲゲートで置き換えることも可能である。マッチ指示は、その後ユーザに警告するか及び／又は入力パケットを止めるのに使用される。
【００２７】
動的なパターン・サーチ・エンジン１０４は、入力データ１０２の静的なヘッダ部分でヘッダ情報の特別なタイプをサーチする（探す）１つ以上の静的なヘッダ・パターン検出器１０６ａ−１０６ｄと一緒にも動作する。検出したヘッダ情報に基づいて、動的なパターン・サーチ・エンジン１０４による深いパケット・インスペクションが可能になるか又はそうでない。例えば、静的なヘッダ検出器は特別な物理的なアドレス、プロトコル、ＩＰアドレス、ポート番号などをサーチする。
【００２８】
本発明の１つの実施例によれば、動的なパターン・サーチ・エンジン１０４は、異なるバイト・オフセットで特定のパターンをサーチするように構成されたデコーダのパイプライン化されたチェーンとして実現される。図４は、本発明の１つの実施例のデコーダによるパターン・サーチ・エンジン１０４ａの動作図である。サーチ・エンジン１０４ａは、入力データを特定のサインと比較するサブストリング（部分列）コンパレータ（比較器）のパイプライン化されたチェーン２００を有する。１つの実施例では、再構成可能なロジックが使用されるため、各個別のコンパレータ２０２は１バイトのデータを検出する８から１(8-to-1)のデコーダで実現される。
【００２９】
図示のデコーダによるパターン・サーチ・エンジンは、ストリング”ＰＡＴＴＥＲＮＳ”をサーチするように構成されている。図示の例では、スループットを増加するように、４バイトのデータがパイプラインの各ステージ／チェーンで合わされる。入力データの多重バイトを提供するデータ・パス（経路）のため、同一のデータがバスの異なるバイト・アライメントで検査されなければならない。このように、サブストリング・コンパレータ２０４の４つの異なるセットが各パイプライン・ステージで使用され、４バイトの入力データのすべての異なるバイト・オフセットを並列に検査する。各マッチ結果は、その後サブストリング・コンパレータ２００の各セットにつながる１ビット・レジスタ２０６に送られる。
【００３０】
図示の例では、３２ビット・レジスタ１１２を構成する各８ビット・レジスタは、入力データ・ストリーム（流）のＡＳＣＩＩキャラクタを記憶する。レジスタＡは第１のクロック・サイクルの間入力データを示し、レジスタＢは第２のクロック・サイクルの間入力データを示し、レジスタＣは第３のクロック・サイクルの間入力データを示す。同時に、パイプライン化されたレジスタＡ、Ｂ、及びＣの内容は、ストリング・ストリーム”ＰＡＴＴＥＲＮＳ”を表す。
【００３１】
図示の例での第１のサイクルの間、サブストリング”ＰＡＴ”は、列１に異なるバイト・オフセットを有する４個の異なるサブストリングと比較される。すべての１ビットレジスタ２０２が０に初期化されているので、もし列２及び３にマッチパターンがあっても結果はラッチされない。この例では、サブストリング”ＰＡＴ”とマッチする行１で列２のコンパレータ２００ａのセットが”１”の結果値を生じる。この値は対応する１ビット・レジスタ２０２ａを通してラッチされ、１ビット・レジスタの次の列を動作可能にする。
【００３２】
第２のサイクルの間、レジスタＢにおけるサブストリングはレジスタＡにラッチされる。サブストリングは次にすべてのパターン・サブセットと比較される。しかし、ラッチされたコンパレータの結果だけが、行１のコンパレータと行２の列２のコンパレータのセット２００ｂのすべてである。パターンが第１のサイクルでレジスタＢの内容で実際に開始してしまう可能性のために、行１のすべてのレジスタを可能にすることが望ましい。コンパレータ２００ｂのセットでのマッチパターンは、”１”の値を発生し、それは対応する１ビットレジスタ２０２ｂを通してラッチされ、１ビットレジスタの次の行を可能にする。
【００３３】
第３のサイクルの間、レジスタＣにおけるサブストリングはレジスタＡにラッチされる。行３の列２のコンパレータ２００ｃのセットで構成されたマッチパターンはアドレス・エンコーダ１０８に”１”の値を送る。
【００３４】
上記のように、ハードウエアによる深いパケット・フィルタ・システムの設計における挑戦の１つは、多数のロジック・リソースを必要とするということである。例えば、Ｓｎｏｒｔルール・セットに２２０７個のサインを組み込むためには、最大のＦＰＧＡを１２個以上も必要とするのが一般的である。このように、本発明の１つの実施例によれば、深いパケット・フィルタ・システム６０を単一のＦＰＧＡ上に組み込むのを可能にするために、各種の最適化技術が使用される。このような最適化技術の１つは、サブストリング・コンパレータの共有を可能にするデコーダによるパターン・サーチ・エンジン１０４ａを設計することである。再度図４に示した設計を参照すると、同一のバイト・アライメントのためのサブストリング・コンパレータのすべてのセットは、同一の入力ピンに接続されている。これらのピンのいくつかは同一のサブストリングをチェックする。従って、サブストリング・コンパレータの二重のセットは、設計の機能性を失うこと無しに安全に取り除くことができる。
【００３５】
１つの実施例によれば、サブストリング・コンパレータの二重のセットを除去するための第１のステップの１つは、各ターゲット・ストリングを１から４バイトのセグメントのセットに分割することである。次に、唯一のセグメントのセットが、元のセットから取り出される。唯一のセグメントのすべては、サブストリング・コンパレータの唯一のセットに作り直される。最後に、サブストリング・コンパレータの出力は対応する動的なパターン・サーチ・エンジン１０４に進められる。
【００３６】
図５Ａは、本発明の１つの実施例での、異なるバイト・アライメントでパターン”ＢＡＢＡＢ”及び”ＡＢＡＢ”をチェックするようにそれぞれ構成された２個のデコーダによるパターン・サーチ・エンジン１０４ｂを示す。図示を簡単にするために、サブストリング・コンパレータの各セットにおける８ビットの関係するコンパレータが示されている。
【００３７】
図示の例では、二重のサブストリング・コンパレータのセットの４つのペアがあり、それらは、サブストリング”ＡＢＡＢ”をチェックするサブストリング・コンパレータ・セット３０４ａ、３０４ｂと、サブストリング”ＢＡＢ”をチェックするサブストリング・コンパレータ・セット３０６ａ、３０６ｂと、サブストリング”ＡＢ”をチェックするサブストリング・コンパレータ・セット３０８ａ、３０８ｂと、サブストリング”Ｂ”をチェックするサブストリング・コンパレータ・セット３１０ａ、３１０ｂ、である。同一のバイト・アライメントのための二重のサブストリング・コンパレータのセットの各ペアは同一の入力ピンに接続されているため、各ペアからの１つのサブストリング・コンパレータのセットが問題無しに除去されてＡＮＤゲートで置き換えられる。
【００３８】
図５Ｂは、図５Ａのサブストリング・コンパレータのセットを示すが、二重のセットは除去されている。図示の例では、サブストリング・コンパレータのセット３０４ａは、サブストリング・コンパレータのセット３０４ｂからの出力を入力として受けるＡＮＤゲート３５６で置き換えられる。サブストリング・コンパレータのセット３１０ｂは、サブストリング・コンパレータのセット３０４ａからの出力を入力として受けるＡＮＤゲート３５４で置き換えられる。サブストリング・コンパレータのセット３０８ｂは、サブストリング・コンパレータのセット３０８ａからの出力を入力として受けるＡＮＤゲート３５２で置き換えられる。サブストリング・コンパレータのセット３０６ｂは、サブストリング・コンパレータのセット３０６ａからの出力を入力として受けるＡＮＤゲート３５０で置き換えられる。
【００３９】
本発明の１つの実施例によれば、デコーダによるパターン・サーチ・エンジンのロジック面積を低減するのに使用される他の最適化技術は、同一のバイト・アライメント内の個別のコンパレータを共用するのを可能にするようにエンジンを設計することである。例えば、図５Ｂのデコーダによるパターン・サーチ・エンジン１０４ｂ、１０４ｃでは、特定の入力ピンから入力を受ける第１のパイプライン・ステージにおける”Ｂ”コンパレータ３６０の出力は、同一の入力ピンからの入力を受ける第２のパイプライン・ステージにおける２個の他のコンパレータ３０４ａ、３６２のために再利用される。これに関して、冗長なコンパレータ３０４ａ、３６２は、”Ｂ”コンパレータ３６０からの出力を入力として受けるＡＮＤゲートで置き換えられる。図５Ｂに示した例示のサーチ・エンジン１０４ｂ、１０４ｃにおける全ての二重部分を除去した後、機能的に等価な設計が８個の８ビットコンパレータのみで得られ、そこでは各８ビットコンパレータは２個の４ビットの再構成可能なルック・アップ・テーブルで構成される。これにより、この例では、ロジック全体の必要部分は２５％低減される。
【００４０】
本発明の１つの実施例によれば、改良された深いパケット・フィルタ・システム６０のロジック面積を低減するための他の最適化技術は、パイプライン・チェーンを組み合わせるのを可能にするパターン・サーチ・エンジン１０４のキーワード・ツリーの使用である。例えば、サーチされるパターンが”ＡＢＣＤＥＦ”、”ＡＢＣＸＸＸ”及び”ＡＢＣＹＹＹ”であれば、サブストリング・コンパレータは、図６Ａに示したように二重部分を除去する方法で使用できる。図示の例では、サブストリング・コンパレータ４００は、サブストリング”ＡＢＣ”を検出し、サブストリング・コンパレータ４０２は、サブストリング”ＤＥＦ”を検出し、サブストリング・コンパレータ４０４は、サブストリング”ＸＸＸ”を検出し、サブストリング・コンパレータ４０６は、サブストリング”ＹＹＹ”を検出する。各サブストリング・コンパレータの出力は、次にＡＮＤゲートを有する３つのパイプライン化されたチェーンを発生するのに使用される。１つの実施例によれば、チェーンは図６Ｂに示したように、チェーンのリソースを低減するためにつぶされる。変換は、必要な記憶量を低減するだけでなく、プログラムがツリーを下に進むに従って、可能性のあるパターンの個数を狭くもする。１つの実施例によれば、図４から図５の実施例で示したような並列設計におけるツリーの構築は、コンパレータ４００−４０６の長さがデータ・パス幅の多重度であることを要求する。
【００４１】
図３の実施例におけるインスペクション・モジュール１００ａ−１００ｎは、クロック・サイクルでマッチが生じたかを示す１ビット出力を発生する。１５２９個の唯一のインスペクション・モジュールがルール・セットを表すのに使用される構成では、インスペクション・モジュールの出力は１５１９ビットである。いくつかのアプリケーションでは、単にこれらのビットの全ての論理和をとってマッチを示すようにして、マッチしたパターンの特定はソフトウエアで行われるようにしても十分である。しかし、マッチしたパターンのインデックス番号をハードウエアで発生するようにすることが更に望ましい。
【００４２】
インデックス番号の発生における１つの挑戦は、インデックス番号が例えば１５１９ビットのような非常に大きな入力からしばしば発生されることである。他の挑戦は、１つ以上のインスペクション・モジュールは同一のクロック・サイクルの間マッチを示すことである。
【００４３】
本発明の１つの実施例によれば、アドレス・エンコーダ１０８は、インスペクション・モジュールにより生成された１５１９ビットを取り出して、アドレス・エンコーダ１０８により提供されるＯＲゲートの２値のツリーからの出力の組合せを使用して、マッチしたパターンの１１ビットのインデックス番号を発生する。図７Ａは、例示の実施例のＯＲゲート５００の例示の２値ツリーを示し、それは１５ビットの入力５０２を４ビットのインデックスにエンコードする。２値ツリーの自然な特徴に基づいて、ツリーの対応するレベルにおける奇数ノードのいずれかが主張されるならば、インデックスの各インデックス・ビットが主張されるように決定される。このように、唯一の入力ピンがいずれかのクロック・サイクルで主張される（すなわち、１つのパターンのみが各サイクルで検出される）と仮定すれば、１５ビット入力のための４ビットのインデックス・エンコーダは次のインデックス・ビット式（１）−（４）に従って発生される。
【００４４】
Ｉｎｄｅｘ３＝ａ１                                                      （１）
Ｉｎｄｅｘ２＝ｂ１＋ｂ３                                                （２）
Ｉｎｄｅｘ１＝ｃ１＋ｃ３＋ｃ５＋ｃ７                                    （３）
Ｉｎｄｅｘ０＝ｄ１＋ｄ３＋ｄ５＋ｄ７＋ｄ９＋ｄ１１＋ｄ１３＋ｄ１５      （４）
このように、４ビットのインデックス・エンコーダを発生させる場合、ロジックは式で示されるように、２値ツリーの各種のノードの入力を組み合わせるのに使用される。例えば、インデックスのビット０を発生するためのロジックは、ツリー・レベルＤにおける奇数番の入力ピンの出力を取り込む複数のＯＲゲートを有する。インデックスのビット１を発生するためのロジックは、ツリー・レベルＣにおける奇数番の入力ピンの出力を取り込む複数のＯＲゲートを有する、などである。各インデックス・ビットのロジックの出力における１ビットのレジスタはエンコードされたインデックス・ビットを記憶する。
【００４５】
上記の議論のように、式（１）−（４）に従って発生されたアドレス・エンコーダは、１つ入力ピン以外は特定のクロック・サイクルで主張されることが無いと仮定される単純なエンコーダである。しかし、１つの入力ピン以外は主張されないならば、簡単なアドレス・エンコーダはパターン・インデックスを適切に示すには十分でないかもしれない。競合に対する１つの解答は、ルール・セットを、それぞれが重ならないパターンを含む多重のサブセットに分割することである。簡単なアドレス・エンコーダは、その後各サブセット・パターン・サーチ・ユニットのために提供される。しかし、いくつかの場合には、限られた出力ピンの個数が多重のインデックス出力を有するのを不可能にする。従って、このような場合には、パターン・インデックスに対して優先度を与えることが望ましい。
【００４６】
本発明の１つの実施例によれば、ソフトウエアによる前処理がインデックス番号に優先度を割当てるのに使用される。他の実施例によれば、ハードウエアがインデックス優先度を割当てるようにそのまま変形される。
【００４７】
ソフトウエア前処理方法によれば、同時にエンコーダ入力を主張できるすべてのパターンには式（５）に従ってインデックス番号が割当てられる。
【００４８】
【数１】
2007537626.tif 000003
【００４９】
式（５）は、ビット型ＯＲを重なりパターンのすべてのインデックスに適用し、そこでは、Ｉｎはｎのより高い値を有するインデックス番号であり、高いｎの値ほど高い優先度を示す。一旦すべてのインデックスが所望の優先度に従って重なりパターンに割り当てられると、インデックスは次にパターンの残りに割当てられる。
【００５０】
ソフトウエア処理の実施例によるインデックスの優先度の割り当ての機構は、優先されたパターン・セットのサイズに制限を設ける。各セットのインデックスの最大番号は、インデックス出力ピンの個数に等しい。実際の構成では重なりパターンのいくつかの独立のセットがあるかもしれないが、同時に重なるパターンの個数は通常４より小さい。従って、大部分のセットについては、この技術で十分である。ソフトウエア処理機構を使用する利点は、付加するゲートが必要ないことである。
【００５１】
厳密な優先度が必要な場合については、ハードウエアによる優先度インデックス・エンコーダは、アドレス・エンコーダのために付加されるゲートを使用する優先度によるインデックスを構築するように使用される。このハードウエアによる優先度エンコーダによれば、より高いインデックスがより高い優先度を示す。
【００５２】
ハードウエアによる優先度エンコーダは、図７Ａの２値ＯＲツリーの以下の試験に基づいて設計される。図示の２値ＯＲツリーでは、もしＡ１ノード５０４の下の１５ビット入力（Ｄノード）のいずれかが主張されたら、最大のインデックス・ビットは”１”である。より高い番号のＤノードはより低い番号に対して優先度を有するので、Ａ０ノード５１２の出力は考慮する必要がない。このように、ハードウエアによる優先度エンコーダは、インデックスの最大ビット値をＡ１の出力に割当てる。
【００５３】
次のインデックス・ビットについては、Ａ１及びＡ０ノード５０４、５１２の直ぐの子供であるノードを有するブランチ（分岐）が考慮される。これにより、もしＢ３ノード５０８の出力が主張されるならば、第２のインデックス・ビットは”１”であるという推論になる。しかし、もしＢ１ノード５０６の出力が”１”で、より高いフラグに”１”がなければ、第２のインデックス・ビットも”１”である。図示の２値ＯＲツリーでは、より高いフラグを構成するその子供のノードのいずれも主張されていないことを確認するようにＡ１ノード５０４が”０”であることをチェックする必要があるだけである。次のアドレス／インデックス・ビットは、この推論方法を使用して構成されている。このように、４ビット優先度インデックス・エンコーダは、次のインデックス・ビット式（６）−（９）に従って１５ビット入力に対して発生される。
【００５４】
【数２】
2007537626.tif 000004
【００５５】
このように、ハードウエアによる優先度エンコーダの発生においては、付加されるロジックが、式により示されるように、２値ツリーの各種ノードの入力を組み合わせるのに使用される。例えば、式（７）による優先度インデックスのビット２を発生するロジックは、式（２）による簡単なエンコーダのロジックと異なり、Ａ１ノード５０４が”０”であることを確認するための追加のロジックを加える。
【００５６】
本発明の１つの実施例によれば、アドレス・エンコーダのリソースを最小にするために、いずれの式でも使用されないＯＲツリーのノードが除去される。これにより、図７Ａに示した例では、ツリーの左エッジ上のすべてのノード５１０、５１２、５１４、５１６、及び５１８は、主ルート・ノード５１０の初めから取り除かれる。出力のエンコードされたアドレス・ビットでのレジスタでは、限界パスは(log n)-1の最大ゲート遅延を有し、ここでｎは入力ピンの個数である。パターン・サーチ構造は各ゲートの後でパイプライン化され、そのような長いゲートのチェーンが限界パスになる。大部分のＦＰＧＡにおける各ルック・アップ・テーブルは、通常Ｄ型フリップ・フロップと組み合わされる。このようにして、エンコーダのハードウエア設計は追加のパイプラインレジスタを挿入する。
【００５７】
図７Ｂは、Ｄ型フリップ・フロップが続く１−４入力の入力ゲートにより置き換えられた最大２−２入力ゲートを有するパイプライン化されたＯＲツリーを示している。インデックス式を実現するロジックは、パイプライン化されたレジスタ内又はそれらの間での単一ゲート・レベルを維持するように更にパイプライン化される。
【００５８】
本発明の他の実施例によれば、改良された深いパケット・フィルタ・システム６０を実現するためのロジック面積が、例えばＦＰＧＳチップ内に含まれる読出専用メモリ（ＲＯＭ）のような組み込みメモリの使用を行うメモリによるパターン・サーチ・エンジンとしてパターン・サーチ・エンジン１０４を実現することにより低減される。
【００５９】
図８は、本発明の１つの実施例のメモリによるパターン・サーチ・エンジン１０４ｄのブロック図である。図８に示すように、以後接頭と呼ぶ入力データ６００の開始部分は、以後サフィックスと呼ぶデータの残りとの完全な比較を行う前に、接頭サーチ・エンジン６０２により予備スクリーニングされる。接頭サーチ・エンジン６０２は、接頭部分を所定の接頭パターンと合わせる。多重バイト入力を有するデータ・パスのために、接頭サーチ・エンジン６０２は、接頭合わせのアライメント情報も発生する。接頭合わせパターンのインデックスは、その後図９に示すように、異なるサフィックス・パターンが記憶された組み込みメモリ６０４のアドレスに直接配置（マッピング）される。入力データ及びサフィックスは、対応するアライメントのコンパレータ・モジュール６０６により比較されて正確なマッチが発生しているかが決定される。
【００６０】
メモリによる設計が正確に機能するように、ルール・セット内のパターンは区分けされて１つ以上のＲＯＭに配置される。本発明の１つの実施例によれば、パターンは、各区分け内の接頭が唯一であるように区分けされる。これについて、異なる長さの接頭については、パターンは、区分け内のより長い接頭の終端がより短い接頭に合わないように区分けされる。さもなければ、１つ以上の接頭のマッチが起きる。もし１つ以上の接頭が検出されたら、接頭サーチ・エンジン６０２はどの接頭がメモリから読まれたか決定できない。
【００６１】
接頭長はどのようなサイズでもよい。しかし、本発明の１つの実施例によれば、接頭は例えば４バイトのような入力バス長に等しく設定される。すべてのクロックはサフィックスを再生するための有効インデックスを潜在的に生成できるので、サフィックス比較はサイクル当たり最大１回行われる。このようにして、２つの異なるアライメントを生成できるどのようなサフィックスも分離したＲＯＭに割当てられる。１バイト入力のデータ・パスについては、データは常時ゼロアライメントであるから、この強制は何の問題も生じない。しかし、データ・パスが多重バイト入力を提供するならば、特定の接頭は、２つの異なるアライメントをマッチさせることができる。
【００６２】
例えば、４バイト・データ・パスで、接頭サーチ・エンジン６０２は、接頭”ＡＢＡＢ”であるように構成されていると仮定する。もし入力データ６００が”ＡＢＡＢ”で始まるとすると、接頭のアライメントは０又は２である。これは第２のサブストリング”ＡＢ”がパターンの実際の開始点になり得るからである。従って、データ・パス長及び接頭長に依存して、セット内のすべてのパターンを検査して各サイクルで１つのインデックス検出だけを可能にする状態が形成される。
【００６３】
固定の４バイト接頭を有する４バイト・データ・パスについては、区分け内のすべての接頭は次の３つの状態に合致するように構成される。第１の状態は、接頭のバイト１がバイト４に一致せず、第２の状態は、バイト１からバイト２のサブストリングがバイト３からバイト４のサブストリングに合致せず、そして、第３の状態は、バイト１からバイト３のサブストリングがバイト２からバイト４のサブストリングに合致しない。
【００６４】
図１０は、本発明の１つの実施例による、メモリによるパターン・サーチ・エンジン１０４ｄに含まれる接頭サーチ・エンジン６０２のより詳細なブロック図である。接頭サーチ・エンジン６０２は、複数のサーチ・モジュール６１０ａ−６１０ｎを有し、本発明の１つの実施例によれば、複数のサーチ・モジュールは図４から図６に示したデコーダによるパターン・サーチ・エンジンとして実現される。各サーチ・モジュール６１０ａ−６１０ｎは、所定の接頭パターンの異なるバイト・アライメントにおいて入力データの接頭部分を比較する。各サーチ・モジュール６１０ａ−６１０ｎに接続されるアライメント・モジュール６１２ａ−６１２ｎは、マッチする接頭パターンのアライメントを示す。いろいろなアライメント・モジュール６１２ａ−６１２ｎからのマッチ信号は、次にアライメント情報を提供するようにエンコードされる。更に、アドレス・エンコーダ６１４は、いろいろなサーチ・モジュール６１０ａ−６１０ｎからのマッチ信号に基づいてサフィックス・インデックスを発生する。例えば、アドレス・エンコーダ６１４は、図３のアドレス・エンコーダ１０８に類似している。上記のように接頭は区分けされているので、所定のサブセット内の１つの接頭のみが各クロック・サイクルで検出される。従って、アライメント及びアドレス・エンコーディングはマッチ・パターンの優先度を考慮する必要はなく、これによりロジックは簡単で小型にできる。
【００６５】
本発明の１つの実施例によれば、メモリ６０４は、チップ内に組み込まれて、改良された深いパケット・フィルタ・システム６０を実現するのに使用される。例えば、メモリ６０４は、ＦＰＧＡチップ内に設けられたＲＯＭである。１つの実施例によれば、メモリの幅は、セット内の最長のサフィックス入力と同じ幅に固定される。サフィックスの変動する長さのために、そのような固定長を有するメモリの利用は非効率的である。
【００６６】
図１１は、本発明の１つの実施例によるメモリの利用を改良するための機構を示す。図１１に示すように、メモリ６０４ａは、ソートされた形で、変動幅のＮ個のサフィックス入力を記憶する。しかし、メモリ６０４ａの利用は、メモリの約半分が使用されないで残るので、非効率である。本発明の１つの実施例によれば、メモリ空間のより効率的な利用は、有効データの未使用空間を満たすことで達成される。このため、記憶されるサフィックス・パターンは、まずその長さに従ってソートされる。次に、すべての偶数入力はメモリの第１の入力から最後の入力に順番に記憶される。そして、すべての奇数入力は、そのビット順番がはじかれて、メモリ６０４ｂの内容により示されるように、メモリの最後の入力から第１の入力に順番に記憶される。このプロセスは奇数入力を移動したメモリに効率よく記憶する。
【００６７】
再配列されたメモリ入力を正確に読み出すために、少量のラッパー・ロジックが使用される。図１２は、本発明の１つの実施例によるラッパー・ロジックの概略ブロック図である。メモリのアドレス入力では、最下位ビット（ＬＳＢ）７００を除くすべてのビットがメモリ６０４に送られる。ＬＳＢ７００は、アドレスが偶数であるか奇数であるかを判定するのに使用される。もしアドレスが偶数であれば、アドレスビットの残りは変更されずに物理アドレスとして送られる。あるいは、アドレス・ビットはまずインバータ７０２により反転され、その後メモリ６０４に送られる。同様に、メモリ６０４の出力は２から１のマルチプレクサ７０４に接続され、ＬＳＢはマルチプレクサの選択ピンに接続される。ＬＳＢが偶数の入力を示す時、通常の出力７０６が選択され。もし奇数入力が示されると、反転されたビット順の出力が選択される。
【００６８】
図１３は、本発明の１つの実施例によるコンパレータ・モジュール６０６の概略ブロック図である。一旦サフィックス・パターンがメモリ６０４から読み取られると、入力パケット・データ８０２は、パイプライン化されてコンパレータ・モジュールにより提供されるシフタ８０４を介して適当なバイト・アライメントにシフトされる。パイプライン・ステージの段数は、最長パターン長及びＲＯＭレイテンシィに基づいて決定される。
【００６９】
シフタはマルチプレクサの単一レベルを介して実現されるか、又は入力バス長に依存する多重レベルにパイプライン化される。１バイト・データ・パスだけは単一アライメントを有し、そのためシフタは不要である。
【００７０】
サフィックス・パターンに加えて、メモリ６０４は各パターン長も記憶し、その長さ８０８をビット型コンパレータ８０６に提供する。この長さは、指示された長さのコンパレータを活性化するだけのためにビット型コンパレータ８０６によりデコードされる。ビット型コンパレータ８０６は、次に受け取ったサフィックス・パターン８１０をバイト配列（アラインされた）パケット・データと比較する。データがサフィックス・パターンとマッチする時、サフィックス・メモリ・アドレスとして使用される接頭サーチ・エンジン６０２により発生された接頭インデックスは、検出したパターンを特定するための出力として前に送られる。入力データ・パケットは停止されるか、及び／又は疑問のあるパケットのユーザへの警告とされる。
【００７１】
本発明の１つの実施例によれば、ビット型コンパレータ８０６は、１バイトＸＯＲコンパレータとして実現される。２つのルック・アップ・テーブルで作られた図４から図６のデコーダによる設計で使用したデコーダと異なり、ＸＯＲコンパレータは、８個のルック・アップ・テーブルで作られる。しかし、コンパレータの１つのセットだけは、ＲＯＭに記憶されたすべてのパターンで使用されるから、バイト当たりの平均ゲートは、全でコーダを作った時よりはるかに少ない。
【００７２】
本発明の１つの実施例によれば、改良された深いパケット・フィルタ・システム６０は、図４から図６のデコーダによる設計と図８から図１３のメモリによる設計の両方を有する。図１４は、両方の設計を組み合わせた本発明の１つの実施例のパターン・サーチ・エンジン１０４ｅのブロック図である。メモリに記憶されたパターンの接頭は、基本的により短いパターンのセットであるから、それらはパターンの残りと組み合わされて効率的なキーワード・ツリー９００を作る。より短いパターンについては、デコーダ・サーチ・エンジン９０６が比較を実行してマッチ指示をアドレス・デコーダ９０２に送る。アドレス・デコーダ９０２は、図３のアドレス・デコーダ１０８に類似している。アドレス・デコーダ９０２は、次に対応するパターンＩＤを出力する。
【００７３】
より長いパターンについては、デコーダによるサーチ・エンジン９０８は接頭の比較を実行し、出力インデックスは、メモリによるサーチ・エンジン９０４に記憶されたサフィックスを選択するのに使用される。インデックスは対応するパターンＩＤとして出力される。
【００７４】
大量のパターンがメモリに記憶されるので、図１４の結合した設計は、デコーダによるフィルタよりはるかに少ないゲートを必要とするだけである。その結果、全フィルタはより小さいSpartan 3-XC3S400装置内に配置して組み込める。実験の間、システムはXC3S400装置内での２００ＭＨｚ及びXC3S1000装置内の２３７ＭＨｚのクロック・レートで、４４１５個のルック・アップ・テーブルを使用した。XC3S1000装置での速度向上は、より大きなＦＰＧＡ内に要素を配置する自由度をより高くする。
【００７５】
パターン検出レートが低い例では、パターンを特定せずにマッチ信号を示せば十分である。次に、ソフトウエアがどのパターンが検出されたかを決定するためにデータベース全体のサーチを行うそのような設計では、すべてのインデックス・エンコーダ９０２は、ゲート量を低減するためＯＲゲートのツリーで置き換えられる。しかし、この効率的なインデックス・エンコーダのために、７５５個のルック・アップ・テーブルのみがデコーダによる設計から再利用され、６５個のルック・アップ・テーブルのみがメモリによる設計から再利用される。
【００７６】
特定の例示の実施例を付属の図面に示して上記のように詳細を説明したが、このような実施例は説明のためであり、広い発明を制限するものではない。特に、発明が教示は、システム及びプロセッサの広い変形に適用されることが認識されるべきである。このように、各種の変形例が、広い発明の範囲から逸脱すること無しに、上記の発明の示された実施例及び他の実施例にすることができることが認識される。例えば、動的なパターン・サーチ・エンジンはデータ・パケットのペイロード部分をサーチするとして説明されたが、当業者には、サーチ・エンジンはペイロード部分に加えて又はそれに代わってパケットのほかの部分をサーチするように構成できることが認識される。
【００７７】
上記の観点から、本発明は記載した特定の実施例又は配置に限定されず、むしろ特許請求の範囲及びそれの等価物により定義される発明の範囲及び精神内にあるいかなる変更、適応又は変形をカバーするように意図されていることが理解されるであろう。
【図面の簡単な説明】
【００７８】
【図１】図１は、典型的なマルチ・レイヤー・インスペクション・システムのブロック図である。
【図２】図２は、本発明の例示の実施例による、改良された深いパケット・フィルタ・システムが採用されたネットワークを示す。
【図３】図３は、本発明の１つの実施例による、図１の改良された深いパケット・フィルタ・システムデコーダの概略ブロック図である。
【図４】図４は、本発明の１つの実施例による、デコーダによるパターン・サーチ・エンジンの動作図である。
【図５Ａ】図５Ａは、本発明の１つの実施例による、異なるバイト・アライメントでパターン”ＢＡＢＡＢ”及び”ＡＢＡＢ”をそれぞれチェックするように構成された２つのデコーダによるパターン・サーチ・エンジンを示す。
【図５Ｂ】図５Ｂは、図５Ａのサブストリング・コンパレータを示すが、二重セットが除去されている。
【図６Ａ】図６Ａは、本発明の１つの実施例による、二重のコンパレータを除去したパターン”ＡＢＣＤＥＦ”、”ＡＢＣＸＸＸ”及び”ＡＢＣＹＹＹ”をサーチするサブストリング・コンパレータを示す。
【図６Ｂ】図６Ｂは、パターン”ＡＢＣＤＥＦ”、”ＡＢＣＸＸＸ”及び”ＡＢＣＹＹＹ”をサーチするコンパレータのつぶされたパイプライン化チェーンを示す。
【図７Ａ】図７Ａは、本発明の１つの実施例による、１５ビットの入力を４ビット・インデックスにエンコードするＯＲゲートの例示の２値ツリーを示す。
【図７Ｂ】図７Ｂは、本発明の１つの実施例による、Ｄ型フリップ・フロップが接続される、１−４入力ゲートにより置き換えられる最大２−２入力ゲートを有するパイプライン化されたＯＲツリーを示す。
【図８】図８は、本発明の１つの実施例による、メモリによるパターン・サーチ・エンジンのブロック図である。
【図９】図９は、接頭部分とサフィックス部分に分割された入力データを示し、接頭部分は接頭サーチ・エンジンによりマッチされて、入力データの対応するサフィックス部分を記憶する読出専用メモリ内のアドレスを発生する。
【図１０】図１０は、本発明の１つの実施例による、図８のメモリによるパターン・サーチ・エンジンに含まれる接頭サーチ・エンジンのより詳細なブロック図である。
【図１１】図１１は、本発明の１つの実施例による、メモリ利用を改良する機構を示す。
【図１２】図１２は、本発明の１つの実施例による、図８のメモリによるパターン・サーチ・エンジンのメモリと一緒に使用するラッパー・ロジックの概略ブロック図である。
【図１３】図１３は、本発明の１つの実施例による、図８のメモリによるパターン・サーチ・エンジンのコンパレータ・モジュールの概略ブロック図である。
【図１４】図１４は、本発明の１つの実施例による、図４から図６のデコーダによる設計と図８から図１３のメモリによる設計の両方を組み合わせるパターン・サーチ・エンジンのブロック図である。
【図１】
2007537626.tif 000005
【図２】
2007537626.tif 000006
【図３】
2007537626.tif 000007
【図４】
2007537626.tif 000008
【図５Ａ】
2007537626.tif 000009
【図５Ｂ】
2007537626.tif 000010
【図６Ａ】
2007537626.tif 000011
【図６Ｂ】
2007537626.tif 000012
【図７Ａ】
2007537626.tif 000013
【図７Ｂ】
2007537626.tif 000014
【図８】
2007537626.tif 000015
【図９】
2007537626.tif 000016
【図１０】
2007537626.tif 000017
【図１１】
2007537626.tif 000018
【図１２】
2007537626.tif 000019
【図１３】
2007537626.tif 000020
【図１４】
2007537626.tif 000021