(57)【要約】      （修正有）【課題】メモリ消費量が少ない検索装置を提供する。【解決手段】検索装置１は、第１検索キーによって検索される第１連想メモリ１１と、第２検索キーによって検索される第２連想メモリ１２と、第１連想メモリのマルチヒットを含むヒット情報に基づいて第１検索情報を生成する連結サーチデータ生成部１３と、検索データの一部を第１検索キーとして生成する第１検索キー生成部、及び、第１検索情報と検索データの他の一部とを第２検索キーとして生成する第２検索キー生成部と、を有する検索キー生成部１４と、を備える。【選択図】図７Ａ
2018010505.tif 000002
【特許請求の範囲】
【請求項１】
検索装置は、
第１検索キーによって検索される第１連想メモリと、
第２検索キーによって検索される第２連想メモリと、
前記第１連想メモリのマルチヒットを含むヒット情報に基づいて第１検索情報を生成する第１連結サーチデータ生成部と、
検索データに基づいて前記第１検索キーを生成する第１検索キー生成部と、前記第１検索情報および前記検索データに基づいて前記第２検索キーを生成する第２検索キー生成部と、を有する検索キー生成部と、
を備える。
【請求項２】
請求項１の検索装置において、
前記第１検索キーは前記検索データの一部で構成され、前記第２検索キーは前記第１検索情報と前記検索データから前記一部を除いたものとで構成される。
【請求項３】
請求項１の検索装置において、
前記第１連想メモリはＭ個のエントリを有し、
前記第２連想メモリはＬ個のエントリを有し、
前記第１連結サーチデータ生成部は前記第１連想メモリの複数のヒット情報を予め設定されるルール数のデータに圧縮して前記第１検索情報を生成し、
前記ルール数はＮ個である。
【請求項４】
請求項３の検索装置において、
前記第１連結サーチデータ生成部は、
前記第１連想メモリのエントリに対応するルール情報を格納するメモリと、
前記メモリから読み出される前記第１連想メモリのヒットしたエントリのルール情報から前記Ｎビット長の前記第１検索情報を生成する圧縮回路と、
を備える。
【請求項５】
請求項４の検索装置において、
前記メモリはエントリごとに前記Ｎビット長のルール情報を格納し、
前記圧縮回路は前記メモリの出力データをビットごとにオアまたはノアまたはワイヤード・オアまたはワイヤード・ノアする回路を備える。
【請求項６】
請求項４の検索装置において、
前記メモリはエントリごとに前記Ｎビット長のルール情報を格納し、
前記圧縮回路はＣＰＵを備え、前記メモリの出力データに基づいて前記第１検索情報を生成する。
【請求項７】
請求項１の検索装置において、
前記第２連想メモリはプライオリティエンコーダを備え、マルチヒットする場合は予め決められた優先度に応じて１つのヒット情報を出力する。
【請求項８】
請求項７の検索装置において、さらに、
前記第２連想メモリの出力によるアクセスによって次動作情報を出力するアクションメモリを備える。
【請求項９】
請求項１の検索装置において、
前記第１連想メモリおよび前記第２連想メモリはＴＣＡＭで構成される。
【請求項１０】
請求項１の検索装置において、さらに、
第３検索キーによって検索される第３連想メモリと、
前記第３連想メモリのマルチヒットを含むヒット情報に基づいて第２検索情報を生成する第２連結サーチデータ生成部と、
を備え、
前記検索キー生成部は、さらに、前記第２検索情報および前記検索データに基づいて前記第３検索キーとして生成する第３検索キー生成部を有する。
【請求項１１】
請求項１の検索装置において、さらに、
前記第２検索キーによって検索される第４連想メモリと、
サーチイネーブル信号生成部と、
ヒットインデックスの属するテーブルの連結情報を前記サーチイネーブル信号生成部に伝達するテーブルデータ管理部と、
を備え、
前記サーチイネーブル信号生成部は、前記連結情報に基づいて、前記第２連想メモリおよび前記第３連想メモリの少なくとも１つを活性化する信号を生成する。
【請求項１２】
請求項１１の検索装置において、さらに、
前記第２連想メモリの出力と前記第４連想メモリの出力との優先度を定めるプライオリティエンコーダを備える。
【請求項１３】
請求項１の検索装置において、さらに、
前記第１検索キーによって検索される第５連想メモリを備え、
前記第１連結サーチデータ生成部は、前記第１連想メモリのマルチヒットを含むヒット情報および前記第５連想メモリのマルチヒットを含むヒット情報に基づいて第１検索情報を生成する。
【請求項１４】
請求項３の検索装置において、
前記Ｌは前記Ｍよりも小さい値であり、
前記Ｎは前記Ｍよりも小さい値である。
【請求項１５】
半導体装置は、
ＴＣＡＭで構成され、第１検索キーによって検索される第１連想メモリと第２検索キーによって検索される第２連想メモリとを有する連想メモリ部と、
前記第１連想メモリのマルチヒットを含むヒット情報に基づいて第１検索情報を生成する連結サーチデータ生成部と、
検索データに基づいて前記第１検索を生成する第１検索キー生成部と、前記第１検索情報および前記検索データに基づいて前記第２検索キーを生成する第２検索キー生成部と、を有する検索キー生成部と、
を備え、
前記連想メモリ部は１つの半導体チップで形成され、
前記連結サーチデータ生成部は前記連想メモリ部とは異なる半導体チップで形成される。
【請求項１６】
請求項１５の半導体装置において、
前記検索キー生成部は前記連想メモリ部の半導体チップまたは前記連結サーチデータ生成部の半導体チップに形成される。
【請求項１７】
請求項１６の半導体装置において、さらに、
前記連想メモリ部が実装される基板と、前記連想メモリが実装される面とは反対側の面にバンプ電極と、を備える。
【請求項１８】
請求項１７の半導体装置において、
前記連結サーチデータ生成部は前記基板に実装される。
【請求項１９】
請求項１８の半導体装置において、
前記連結サーチデータ生成部は複数の半導体チップをＴＳＶで積層して形成される。
【請求項２０】
請求項１７の半導体装置において、
前記連結サーチデータ生成部は複数の半導体チップをＴＳＶで積層して形成され、前記連結サーチデータ生成部の半導体チップと前記連想メモリ部の半導体チップはＴＳＶで積層される。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は検索装置に関し、例えば連想メモリを有する検索装置に適用可能である。
【背景技術】
【０００２】
連想メモリは例えば内容検査メモリ（Content Addressable Memory：以下「ＣＡＭ」という。）で構成される。ＣＡＭは与えられた検索（入力）データに対して、それを格納するＣＡＭのインデックス（アドレス）を生成する。ＣＡＭは、パターン・マッチング、インターネットのルータ、プロセッサのキャッシュ、ＴＬＢ（Translation Lookaside Buffer）、データ圧縮、データベースのアクセラレータ、ニューラルネット、メモリパッチなど幅広い分野において利用されている。通常、ＣＡＭは、その機能から、２値ＣＡＭ（Binary CAM：以下「ＢＣＡＭ」という。）及び３値ＣＡＭ（Ternary CAM：以下「ＴＣＡＭ」という。）の二種類に分類される。ＢＣＡＭでは、各セルに０及び１を格納する。ＴＣＡＭでは各セルに０，１，及び＊を格納する。ここで、「＊」はドント・ケア（don't care）を表し、０と１の両方にマッチする。
本開示に関連する先行技術として、例えば米国特許第６８７４０１６号明細書、米国特許第７０２４５１５号明細書がある。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】米国特許第６８７４０１６号明細書
【特許文献２】米国特許第７０２４５１５号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００４】
例えば、タプル（tuple）の一例であるネットワーク機器に定義されるＡＣＬ（Access Control List）のようなルールテーブルは、ネットワーク上に接続される機器間の接続情報が複雑化するにつれて、より詳細で、細分化かれた設定が必要となってくるため、長く、複雑な記述が増えてきている。また、接続される機器も、近年飛躍的に上昇しており、連想メモリに要求されている最大ルール格納数の急速な拡大が望まれている。
本開示の課題はメモリ消費量が少ない検索装置を提供することにある。
その他の課題と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
【課題を解決するための手段】
【０００５】
本開示のうち、代表的なものの概要を簡単に説明すれば、下記のとおりである。
すなわち、実施形態に係る検索装置は、テーブルを分割して第１連想メモリと第２連想メモリに格納し、第１連想メモリから出力されたマルチマッチ出力された結果を、あらかじめ設定しておいたルールに従って検索結果を分類または論理圧縮する機能を用いて、検索情報をマージし、その結果を第２連想メモリに引き継ぐ。
【発明の効果】
【０００６】
上記検索装置によれば、メモリを効率的に使用することができる。
【図面の簡単な説明】
【０００７】
【図１】ＡＣＬテーブルの一例を説明するための図
【図２】図１の[17-33]のレンジ表現とドント・ケア表現の関係を説明するための図
【図３】図１の[6-30]のレンジ表現とドント・ケア表現の関係を説明するための図
【図４】比較例に係る連想メモリへのデータ格納方法を説明するための図
【図５Ａ】比較例に係るネットワーク装置の検索動作時のデータの流れを説明するための図
【図５Ｂ】図５Ａの検索データおよび第１検索キーを示す図
【図５Ｃ】図５Ａの連想メモリを示す図
【図５Ｄ】図５Ａのアクションメモリ部を示す図
【図６】実施形態に係る連想メモリへのデータ格納方法を説明するための図
【図７Ａ】実施例に係るネットワーク装置の検索動作時のデータの流れを説明するための図
【図７Ｂ】図７Ａの検索データ、第１検索キー、第１検索情報および第２検索情報を示す図
【図７Ｃ】図７Ａの第１連想メモリおよび連結サーチデータ生成部を示す図
【図７Ｄ】図７Ａの第２連想メモリを示す図
【図７Ｅ】図７Ａのアクションメモリ部を示す図
【図８】図７Ａの検索キー生成部の構成例を示すブロック図
【図９】図７Ａの第１連想メモリの構成例を示す図
【図１０】図７Ａの第２連想メモリの構成例を示す図
【図１１】図７Ａの連結サーチデータ生成部の構成例を示す図
【図１２】図７Ａのアクションメモリ部の構成例を示す図
【図１３】図１１の連結サーチデータ生成部の第１例を示す図
【図１４】図１１の連結サーチデータ生成部の第２例を示す図
【図１５Ａ】図１１の連結サーチデータ生成部の第３例を示す図
【図１５Ｂ】図１５Ａのメモリ格子状レジスタの構成を示す図
【図１６】図１５Ｂのメモリ格子状レジスタの第１変形例を示す図
【図１７】図１５Ｂのメモリ格子状レジスタの第２変形例を示す図
【図１８】第１の接続例に係る連想メモリ部を示す図
【図１９】第２の接続例に係る連想メモリ部を示す図
【図２０】第３の接続例に係る連想メモリ部を示す図
【図２１】第４の接続例に係る連想メモリ部を示す図
【図２２】第５の接続例に係る連想メモリ部を示す図
【図２３】第６の接続例に係る連想メモリ部を示す図
【図２４】第１の実装例に係る半導体装置を示す断面図
【図２５】第２の実装例に係る半導体装置を示す断面図
【図２６】第３の実装例に係る半導体装置を示す断面図
【図２７】第４の実装例に係る半導体装置を示す断面図および分解平面図
【図２８】ＡＣＬテーブルのレンジ表現とドント・ケア表現の関係を説明するための図
【図２９Ａ】ＡＣＬテーブルの例を示す図
【図２９Ｂ】図２９ＡのＡＣＬテーブルを比較例の連想メモリへ格納する例を示す図
【図３０】変形例に係る第１連想メモリへのデータ格納方法を説明するための図
【図３１】変形例に係る連結サーチデータ生成部に対する事前プログラムを説明するための図
【図３２】変形例に係る第２連想メモリへのデータ格納方法を説明するための図
【図３３Ａ】変形例に係るネットワーク装置の検索動作時のデータの流れを説明するための図
【図３３Ｂ】図３３Ａの検索データ、第１検索キー、第１検索情報および第２検索情報を示す図
【図３３Ｃ】図３３Ａの第１連想メモリおよび連結サーチデータ生成部を示す図
【図３３Ｄ】図３３Ａの第２連想メモリおよびアクションメモリ部を示す図
【発明を実施するための形態】
【０００８】
以下、比較例、実施形態、実施例および変形例について、図面を用いて説明する。ただし、以下の説明において、同一構成要素には同一符号を付し繰り返しの説明を省略することがある。
【０００９】
まず、ＡＣＬテーブルについて図１〜３を用いて説明する。図１はＡＣＬテーブルの一例を示す図である。図２は図１の[17-33]のレンジ表現とドント・ケア表現の関係を示す図である。図３は図１の[6-30]のレンジ表現とドント・ケア表現の関係を示す図である。
【００１０】
図１に示すＡＣＬテーブル（ACL Table）には、送信元ポート番号（Src. Port）、宛先ポート番号（Dst. Port）、送信元ＩＰアドレス（Src. Add）、宛先ＩＰアドレス（Dst. Add）、プロトコルタイプ（Proto, Protocol）、アクション（Action）が格納される。ここで、宛先ポート番号（Dst. Port）の[17-33]はレンジ表現で、ドント・ケア（Don’t Care）表現（＊）を使用すると図２に示すようになる。宛先ポート番号（Dst. Port）の[6-30]も、ドント・ケアを使用すると図３に示すようになる。「１６’ｂ」は１６ビットの２進数表示を意味する。
【００１１】
次に、本願発明者らが検討した技術（以下、比較例という。）について図４、５Ａ〜５Ｄを用いて説明する。図４は比較例に係る連想メモリへのデータ格納方法を説明する図である。図５Ａは比較例に係るネットワーク装置の検索動作時のデータの流れを示す概念図である。図５Ｂは図５Ａの検索データおよび第１検索キーを示す図である。図５Ｃは図５Ａの連想メモリを示す図である。図５Ｄは図５Ａのアクションメモリ部を示す図である。
【００１２】
比較例では、連想メモリ（Associative Memory）としてＴＣＡＭを使用する例を説明する。図４に示すように、比較例では、図１に示すＡＣＬテーブルを１つのデータベースとして格納して検索動作を行う。そのため、ＡＣＬテーブルにある５つのルールをＴＣＡＭに格納しようとすると、１４エントリを消費する。それは、図２、３に示すように、[17-33]、[6-30]というレンジ（範囲）を持ったルール記述をＴＣＡＭに格納しようとすると、それぞれ、５エントリ、６エントリが必要となるからである。また、例えばＩＰｖ４の仕様では、送信元ポート番号（Src. Port）、宛先ポート番号（Dst. Port）で１６ビットずつ、また、送信元ＩＰアドレス（Src. Add）、宛先ＩＰアドレス（Dst. Add）で３２ビットずつ、プロトコルタイプ（Proto）で、８ビットとすると合計で、１０４ビット幅が１エントリに必要となる。したがって、合計で、メモリとして、１０４ビット×１４＝１，４５６ビット必要となる。
【００１３】
ここで、注目しなければいけない部分は、送信元ＩＰアドレス（Src. Add）と宛先ＩＰアドレス（Dst. Add）の部分で、１つのルールでレンジ表現を使用した全エントリに対して同一データを入れる必要があることである。そのため、レンジ表現によって、１ルールは複数行を使って表現するようなケースでは冗長なメモリ消費が起きる。なお、ＡＣＬテーブルのアクション（Action）はアクションメモリ（Action Memory）部に格納される。
【００１４】
図５Ａの比較例に係るネットワーク装置は検索装置１Ｒとネットワーク制御装置２とを備える。検索装置１Ｒは連想メモリ部１０Ｒとアクションメモリ部２０とを備える。連想メモリ部１０Ｒは連想メモリ１１Ｒと検索キー生成部１４Ｒとを備える。ネットワーク制御装置（ＮＣＵ）２はＮＰＵ（ネットワークプロセッサ）やＡＳＩＣ等で構成される。
【００１５】
ここで、検索装置１Ｒの主な動作の流れについて説明をする。
（１）ネットワーク制御装置２は、図５Ｂに示すような検索対象となるデータ（検索データ）を検索装置１Ｒの連想メモリ部１０Ｒ内の検索キー生成部１４Ｒに送る。最初に、検索キー生成部１４Ｒは送られてきた検索データから図５Ｂに示すような第１検索キー（1st Search Key）を生成する。検索データと第１検索キー（1st Search Key）は同じである。
【００１６】
（２）連想メモリ１１Ｒは、検索キー生成部１４Ｒで生成した第１検索キー（1st Search Key）を用いて、連想メモリ１１Ｒ内のデータを検索する。この時、検索キーデータである第１検索キー（1st Search Key）に対して複数のデータが一致した場合は、一致した全てのマルチヒット情報（複数のデータでキーとの一致があった状態）をプライオリティエンコーダ（Priority Encoder：ＰＥ）１１２Ｒに伝達する。図５Ｃに示すように、連想メモリ１１Ｒのエントリ＃１３にはすべてに「any」が格納されているので、すべての第１検索キーに対して一致し、マルチヒットが発生する。ここでは、連想メモリ１１Ｒのエントリ＃０、＃１３でマルチヒットが発生する。
【００１７】
（３）複数のデータで一致があった場合は、プライオリティエンコーダ（ＰＥ）１１２Ｒを接続している構成をとっているので、一致アドレスの中で最も優先度の高いアドレスのみを、最終の検索結果（ヒットインデックス（Index））として、アクションメモリ部２０に検索結果を送る。プライオリティエンコーダ１１２ＲはＬＳＢが最も優先度が高く、ＭＳＢが最も優先度が低い。よって、エントリ＃０が出力される。
【００１８】
（４）アクションメモリ部２０では、検索結果をもとに、検索装置１Ｒに入力されてきたデータ（例えば、ＩＰアドレスや、ポート番号等）に対して、どのような処置（Action）を行うのかをあらかじめプログラムされている。アクションメモリ部２０は、最終検索結果のアドレスに対応したデータの読み出し動作をし、その結果をネットワーク制御装置２に送信する。図５Ｄに示すように、エントリ＃０のdenyがActionとして出力される。これにより、一連の検索動作が完了する。
【００１９】
図５Ａに示すように、１つのＡＣＬテーブルを１つの連想メモリに格納することで、冗長なエリアを動作させることになり、メモリ消費量が増加するだけでなく、それに比例して消費電力も増加してしまう。連想メモリをＴＣＡＭ等のＣＡＭで構成した場合は、メモリの使用容量に応じて電力が増加してしまう特性があるため、電力増加による発熱対策や、電源設計に対する課題があり、単純にメモリ容量を増加させることが難しくなっている。そのため、メモリそのものの効率的な使用手法が必要である。比較例では、説明を簡単にするために、送信元ポート番号（Src. Port）部分にはレンジ表現のルールを使用しなかったが、この部分に、宛先ポート番号（Dst. Port）部分と同様なレンジ表現のルールを適用する場合、全組み合わせ分のエントリをＴＣＡＭに格納することが必要になるため、複雑なルール記述になればなるほどエントリ数は増大していく。
【００２０】
次に、実施形態に係る検索機構について図６を用いて説明する。図６は実施形態に係る連想メモリに対するデータ格納の方法を示す図である。
【００２１】
実施形態に係る検索装置は、テーブルを分割して第１連想メモリと第２連想メモリに格納し、第１連想メモリから出力されたマルチマッチ出力された結果を、あらかじめ設定しておいたルールに従って検索結果を、分類または論理圧縮する機能を用いて、検索情報（ヒット情報、ミス情報、ヒットアドレス等）をマージし、その結果を第２連想メモリに引き継ぐ。第２連想メモリに第１連想メモリとの連結をするために追加するデータ（例えばRule Flag）が格納されるが、第２連想メモリに１つのルールでレンジ表現を使用した全エントリに対して同一データを入れる必要がないため、レンジ表現によって、１ルールは複数行を使って表現するようなケースでも冗長なメモリ消費が起きない。よって、網掛け部分が不要となるのでメモリの消費を節約することができる。第１連想メモリのエントリ数をＭ、第２連想メモリのエントリ数をＬ、ルール数をＮとすると、Ｌ＜Ｍ、Ｎ＜Ｍの関係にある。なお、ＡＣＬテーブルの検索でない場合はアクションメモリに相当するメモリは必ずしも必要ない。
【００２２】
実施形態によれば、比較例のように重複したデータを格納する必要がなくなるため、大幅なメモリの削減を行うことができる。この効果は、連想メモリにＴＣＡＭを使用する場合、メモリの低消費効果も期待できるだけでなく、ビット単価の効果なメモリリソースを効率的に利用できる。
【００２３】
実施形態は検索テーブルを連結して、マルチマッチ情報を伝達して検索を実現するものであるので、連結するための機構として、連想メモリと連結サーチデータ生成部のセットで、シリアル接続させて追加していくことで、テーブルサイズを自由に選択可能である。従来は、ツリー検索などのように１つの検索動作に対してレーテンシーが多く必要な検索手法でしか長い文字列の検索を実現することができなかったが、実施形態では直列に連想メモリをつなげていくことで実現可能となる。したがって、今まで実現が困難であった横幅の大きいテーブル（例えば、文字数、数字の桁数が大きいテーブル）に対しても検索可能となる。
【００２４】
さらに、実施形態は、分岐処理を作らずに、パイプライン構成を取ることが容易であるため、処理能力を上げやすく大量なデータ処理を行うのにも適した構成である。そのため、ネットワーク機器だけでなく、ワークステーションにおけるビッグデータ解析にも適用することができる。
【００２５】
実施形態の効果として、以下のようなものが挙げられる。
（１）長い文字列の検索が可能。
（２）同じ文字列の部分をテーブルごとに分割して纏めることができるため、メモリの消費量を削減可能。また、単位あたりのルール格納数の向上が可能。
（３）メモリ消費量を減らすことが可能でありので、電力も削減可能。
（４）ルールファイルが大きくなっても対応可能。
（５）テーブルメンテナンス動作の高速化が可能。
（６）分割動作が可能であり、不必要な検索動作を止めることができるようになるため、さらなる低消費電力化が可能。
【００２６】
連想メモリの形態は、ハードウエアのみで構成されるＴＣＡＭやＢＣＡＭ等のＣＡＭであっても、汎用的なＲＡＭ（ＤＲＡＭ、ＳＲＡＭ、ＦＬａｓｈメモリ等）と木構造検索やハッシュテーブルを使って連想メモリの機能をエミュレートするような形態であっても、ソフトウエア（ＣＰＵとメモリ）を使用してエミュレートした形態であってもよい。
【００２７】
検索したマルチヒット情報を分類する仕組みやデータを圧縮する機能部分は、ＦＰＧＡを用いて構成したものでもよい。また、マルチヒット情報を分類する仕組みは、ＣＰＵなどのプログラム可能な論理回路でも、メモリと論理回路を格子状にならべたもの行っても、ソフトウエアで分類する機能をエミュレートしてもよい。
以下に、上述の実施形態の一例である実施例を説明する。実施例は上述の実施形態の効果を奏する。
【実施例】
【００２８】
実施例に係る検索機構について図７Ａ〜７Ｅを用いて説明する。図７Ａは実施例に係るネットワーク装置の検索動作時のデータの流れを示す概念図である。図７Ｂは図７Ａの検索データ、第１検索キー、第１検索情報、第２検索キーを示す図である。図７Ｃは図７Ａの第１連想メモリ、連結サーチデータ生成部を示す図である。図７Ｄは図７Ａの第２連想メモリを示す図である。図７Ｅは図７Ａのアクションメモリを示す図である。
【００２９】
実施例に係るネットワーク装置は検索装置１とネットワーク制御装置（ＮＣＵ）２とを備える。検索装置１は連想メモリ部１０とアクションメモリ部２０とを備える。連想メモリ部１０は第１連想メモリ１１と第２連想メモリ１２と連結サーチデータ生成部１３と検索キー生成部１４とを備える。検索キー生成部１４は、第１検索キー（1st Search Key）生成部と第２検索キー（2nd Search Key）生成部とを含む。ネットワーク制御装置２はＮＰＵ（ネットワークプロセッサ）やＡＳＩＣ等で構成される。実施例では、連想メモリとしてＴＣＡＭを使用する例を説明する。第１連想メモリのエントリ数（Ｍ）は１５、第２連想メモリのエントリ数（Ｌ）は第１連想メモリのエントリ数よりも少ない５、ルール数（Ｎ）は５の例について説明する。
【００３０】
ここで、検索装置１の主な動作の流れについて説明をする。
（１）ネットワーク制御装置２は、図７Ｂに示すような検索対象となるデータ（検索データ）を検索装置１の連想メモリ部１０内の検索キー生成部１４に送る。最初に、検索キー生成部１４は送られてきた検索データから図７Ｂに示すような第１検索キー（1st Search Key）を第１検索キー（1st Search Key）生成部により生成する。第１検索キー（1st Search Key）は検索データから一部を切り出したものであるので、容易に生成することができる。
【００３１】
（２）第１段目の検索では、第１連想メモリ１１は検索キー生成部１４の第１検索キー（1st Search Key）生成部で生成した第１検索キー（1st Search Key）を用いて第１連想メモリ１１内のデータを検索する。この時、検索キーデータである第１検索キー（1st Search Key）に対して複数のデータが一致する場合は、一致する全てのマルチヒット情報（複数のデータでキーとの一致がある状態）を連結サーチデータ生成部１３に伝達する。図７Ｃに示すように、第１連想メモリ１１のエントリ＃０、＃６、＃１３には「any」が格納されているので、すべての第１検索キーに対して一致し、マルチヒットが発生する。
【００３２】
（３）次に、連結サーチデータ生成部１３は、第１連想メモリ１１にて検索された結果を分類、論理圧縮をした後、第２検索キー（2nd Search Key）を生成するため、図７Ｂに示すような第１検索（1st search）情報を検索キー生成部１４に出力する。図７Ｃの楕円破線Ａに示すように、ヒット（Hit）が発生したエントリ（Index）のマルチヒット情報が連結サーチデータ生成部１３に送られて、検索情報の引継ぎが行われる。連結サーチデータ生成部１３はエントリに対応するデータ（ルール番号（Rule #））が格納され、ルール数のデータに圧縮する。
【００３３】
（４）次に、検索キー生成部１４の第２検索キー（2nd Search Key）生成部は、連結サーチデータ生成部１３から供給された第１連想メモリ１１での検索結果情報（1st search情報）と、最初に入ってきた検索データを使用して、図７Ｂに示すような第２段目の検索に使用する第２検索キー（2nd Search Key）を生成する。第２検索キー（2nd Search Key）は、検索結果情報（1st search情報）と検索データから第１検索キー（1st Search Key）を除いたとものを連結するので容易に生成することができる。
【００３４】
（５）第２連想メモリ１２は、検索キー生成部１４の第２検索キー（2nd Search Key）生成部で作られた第２検索キー（2nd Search Key）を使用して、第２連想メモリ１２内のデータに、第２検索キー（2nd Search Key）が含まれているかどうかの検索を行う。図７Ｄに示すように、第２連想メモリ１２のエントリ＃０、＃４でマルチヒットが発生する。なお、第２連想メモリ１２の検索は第１連想メモリ１１の検索の終了後に行われるので、１度に動作する連想メモリの容量を削減することができ、比較例よりも低消費電力化が可能である。
【００３５】
（６）複数のデータで一致がある場合は、本例では、第２連想メモリ１２のメモリ部１２１に、プライオリティエンコーダ（Priority Encoder：ＰＥ）１２２を接続している構成をとっているので、一致アドレスの中で最も優先度の高いアドレスのみを、最終の検索結果（ヒットインデックス）として、アクションメモリ部２０に検索結果を送る。プライオリティエンコーダ１２２ではＬＳＢが最も優先度が高く、ＭＳＢが最も優先度が低い。よって、エントリ＃０が出力される。
【００３６】
（７）アクションメモリ部２０では、検索結果をもとに、検索装置１に入力されてきたデータ（例えば、ＩＰアドレスや、ポート番号等）に対して、どのような処置（Action）を行うのかをあらかじめプログラムされる。アクションメモリ部２０は、最終検索結果のアドレスに対応したデータの読み出し動作をし、その結果をネットワーク制御装置２に送信する。図７Ｅではエントリ＃０のdenyがアクション（Action）として出力される。これにより、一連の検索動作が完了する。
【００３７】
次に、図７の検索キー生成部について図８を用いて説明する。図８は図７Ａの検索キー生成部の構成例を示すブロック図である。
【００３８】
検索キー生成部１４は、キーデータバッファ（Key Data Buffer）１４１、キーパーサ（Key Parser）部１４２、パーシング（Parsing）ルール管理部１４３、キーサイズ（Key Size）設定管理部１４４、第１検索キー（1st Search Key）生成部１４５、第２検索キー（2nd Search Key）生成部１４６、ＦＩＦＯ１４７で構成されている。
【００３９】
まず、入力される検索データは、キーデータバッファ１４１に貯められる。その後、第１検索キー生成部１４５は、パーシングルール管理部１４３にプログラムされる情報と、キーサイズ設定管理部１４４にプログラムされる情報をもとに、検索データを、第１連想メモリ１１用に切り分けて第１検索キーを生成する。また、第２検索キー生成部１４６は、検索データから第１検索キーを除いたものに第１段目の検索によって得られた一致情報（1st Search 情報）を加えて、第２連想メモリ１２用に対応する第２検索キーを生成する。1st Search 情報には、例えばマルチヒット情報、ヒットルール番号、タグ番号、ヒットインデックス（Hit Index）等が含まれる。
【００４０】
すなわち、第２検索キー（2nd Search Key）は、入力されてきた検索データに対する一致情報（1st Search 情報）によってリアルタイムに変化することになる。このリアルタイムに変化できる仕組みを利用して、第１段目の検索結果と第２段目の検索結果を連結することができる。
【００４１】
キーデータバッファ１４１は、検索データの一次記憶、レーテンシーの調整を行う部分である。ＦＩＦＯ構成や、２ポートＳＲＡＭ等のメモリを利用して構成することが可能である。
【００４２】
パーシングルール管理部１４３は、検索キーを生成する際に、一部の検索キーのみ組み替えて複数の検索キーを生成して、複数の検索を同時に実行するためのデータを生成する。
【００４３】
キーサイズ設定管理部１４４では、第１検索キー、第２検索キーそれぞれのサイズを設定しておき、予め設定しておいたサイズにキーパーサ１４２で検索キーサイズを振り分ける情報を提供する機能を有する。
【００４４】
第１検索キー（1st Search Key）生成部１４５では、予め、パーシングルール管理部１４３やキーサイズ設定管理部１４４にプログラムされた情報を基に、第１連想メモリ１１の検索テーブルサイズに合わせて、第１検索キーを生成する機能を有する。
【００４５】
第２検索キー生成部１４６では、第１段目の検索で得られたマルチヒット情報を含めた検索結果と、キーデータバッファ１４１に第１段目の検索の検索結果が確定するまで一時的に保持されていたオリジナルの検索データを基に、第２連想メモリ１２の検索テーブルサイズに合わせた第２検索キーを生成する機能を持つ。
【００４６】
次に、連想メモリの機能について図９、１０を用いて説明する。図９は第１連想メモリを示す図である。図１０は第２連想メモリを示す図である。
【００４７】
第１連想メモリ１１、第２連想メモリ１２はそれぞれメモリ部１１１、１２１に対する検索機能の他に書き込み機能および読み出し機能を備えている。ネットワーク制御装置２はWrite系制御によって検索対象データを連想メモリ内にあらかじめ所定のデータ設定手順で格納することにより、第１連想メモリ１１および第２連想メモリ１２にデータベースを構成する。Write系制御には制御信号、アドレス、書き込みデータが含まれる。第１連想メモリ１１および第２連想メモリ１２はこのデータベースと検索データ(サーチキー)との比較一致を行い、検索データと一致するものがある場合は、一致したデータが格納されているアドレス情報（サーチ結果）を出力する機能を持っている。また、第１連想メモリ１１および第２連想メモリ１２は、ネットワーク制御装置２からのRead系制御によって記憶しているデータベースの内容を読み出して、その読み出しデータを出力する機能も持つ。Read系制御には制御信号、アドレスが含まれる。第１連想メモリ１１の検索データは第１検索キーで、第２連想メモリ１２の検索データは第２検索キーである。第１連想メモリ１１のサーチ結果はマルチヒット情報、ヒットアドレス、ヒットカウンタ等で、第２連想メモリ１２の検索結果はマルチヒット情報、ヒットアドレス、ヒットカウンタ等である。
【００４８】
第１連想メモリ１１は、複数の一致情報が得られる場合、複数のヒット情報（マルチヒット情報）を出力する。第１連想メモリ１１で得られるサーチ結果は、連結サーチデータ生成部１３で圧縮して、検索キー生成部１４に伝達して、第２検索キーの生成を行うのに用いられる。連結サーチデータ生成部１３は複数のヒット情報を纏めて、次段の連想メモリに伝達する。これにより、伝達する際のデータ量が増大することを抑制することができ、複数の検索結果を連結するための多くの情報が必要なくなる。したがって、検索テーブルの更新があった際に検索結果を連結するためのデータを再構築する必要がなくなる。
【００４９】
第２連想メモリ１２は、第１段目の検索結果の情報を基に検索キー生成部１４が生成する第２検索キーを使用してデータの一致を検査する。１つの一致情報しか得られない場合には、そのアドレスをそのまま出力する。複数のアドレスでデータの一致がある場合には、プライオリティエンコーダ１２２を介して、最も優先度の高いアドレス（本実施例では、ＬＳＢアドレスの例を挙げている）を出力する。なお、第２連想メモリ１２のエントリ数（Ｌ）は第１連想メモリ１１のエントリ数（Ｍ）よりも少ない。
【００５０】
第２連想メモリ１２で出力されるヒットアドレスは、最終的には、入力されたデータに対する処理を決定するために、アクションメモリ部２０の読み出しアドレス（または、アドレス情報のベース）として使用され、アクションメモリ部２０内にあらかじめプログラムしておく動作情報などのデータを読み出し、ネットワーク制御装置２に結果を送り、一連の動作を完了することができる。
【００５１】
次に、連結サーチデータ生成部の機能について図１１を用いて説明する。図１１は連結サーチデータ生成部を示す図である。
【００５２】
連結サーチデータ生成部１３は、データ圧縮機能の他に書き込み機能および読み出し機能を備えている。ネットワーク制御装置２はWrite系制御によってルール番号をあらかじめ所定のデータ設定手順で記憶することにより、連結サーチデータ生成部１３にデータ圧縮機能を構成する。Write系制御には制御信号、アドレス、書き込みデータが含まれる。連結サーチデータ生成部１３は、第１連想メモリ１１の出力（ヒット情報、インデックス）によってこのルール番号がアクセスされることにより、第１検索情報であるマルチマッチ情報（ヒットルールフラグ、ルール情報、分類情報、Hash値等）を出力する機能を持っている。また、連結サーチデータ生成部１３は、ネットワーク制御装置２からのRead系制御をよって記憶しているルール番号を読み出して、その読み出しデータを出力する機能も持つ。Read系制御には制御信号、アドレスが含まれる。
【００５３】
次に、アクションメモリ部の機能について図１２を用いて説明する。図１２はアクションメモリ部を示す図である。
【００５４】
アクションメモリ部２０は、書き込み機能および読み出し機能を備えている。ネットワーク制御装置２はWrite系制御によってアクションをあらかじめ所定のデータ設定手順で記憶する。Write系制御には制御信号、アドレス、書き込みデータが含まれる。アクションメモリ部２０は、第２連想メモリ１２の出力（ヒット情報、インデックス）によってこのアクションがアクセスされ次動作情報（Deny、Permit等）を出力する機能を持っている。また、アクションメモリ部２０は、ネットワーク制御装置２からのRead系制御によって記憶しているアクションを読み出して、その読み出しデータを出力する機能も持つ。Read系制御には制御信号、アドレスが含まれる。アクションメモリ部２０は連想メモリ内の内蔵メモリまたはＱＤＲ  ＳＲＡＭやＤＤＲ  ＳＤＲＡＭの外部メモリ等に格納される。
【００５５】
次に、連結サーチデータ生成部１３の構成例について図１３〜１７を用いて説明する。これらの構成例は説明を簡単にするために説明を省略するが、予め、プログラム可能にするための機構（Write回路や、レジスタ、ヒューズ回路、外部信号による設定回路等の機能）を備えている。
【００５６】
図１３は連結サーチデータ生成部の第１の構成例を示す図である。第１の構成例に係る連結サーチデータ生成部１３Ａはメモリ部１３１と圧縮回路１３２Ａを備える。第１連想メモリ１１の各エントリに対応付け、第１連想メモリ１１より出力されたサーチ結果を受けた場合に、予め何のルール番号を出力するかをメモリ部１３１にプログラムしておく構成で実現した例である。
【００５７】
出力データは、第１連想メモリ１１の検索結果（Hit、Index）とメモリ部１３１に格納されるデータの関係でマルチヒットとなる場合がある。その場合は、マルチヒット情報は、予め設定しておいたルール数のデータに圧縮する。図１３では、エントリ数が１４あるので最大１４個のマルチヒットの発生がありえるが、ルール数を５個に圧縮する。なお、エントリ数およびルール数はこれらの値に限定されるものではない。圧縮回路１３２Ａでの圧縮する方法として、論理的にオア（ＯＲ）やノア（ＮＯＲ）をとる方法、ワイヤード・オア（Wired-OR）やワイヤード・ノア（Wired-NOR）で実現する方法が適用できる。この例では、ルール番号が１（Rule #1）で複数のヒット情報があるが、１ビットに集約されていることがわかる。なお、圧縮回路をクロスバースイッチで構成し、クロスバースイッチを所望のスイッチ接続状態になるようにプログラムすることでもマルチヒットした情報のデータ圧縮することも可能である。
【００５８】
図１４は連結サーチデータ生成部の第２の構成例を示す図である。第２の構成例に係る連結サーチデータ生成部１３Ｂはメモリ部１３１と圧縮回路１３２Ｂを備える。圧縮回路１３２Ｂは、第１の構成例と同様にエントリ数が１４あるので最大１４個のマルチヒットの発生がありえるが、ルール数の５個に圧縮する。なお、エントリ数およびルール数はこれらの値に限定されるものではない。圧縮回路１３２Ｂは、キャッシュメモリ１３４を含むＣＰＵ１３２と、ワークメモリ１３５と、不揮発性メモリ１３６と、レジスタ（Register）１３７と、を備える。レジスタ１３７にあらかじめプログラムしておいたルールに従って、ヒットエントリに対応するルール単位でデータを圧縮して出力することを、ＣＰＵ１３３と、プログラムを格納するキャッシュメモリ１３４およびデータを格納するワークメモリ１３５を使用したソフトウエア処理によって行う。このときの、ワークメモリ１３５は、内蔵型でも、外付け型でも構わない。また、ＣＰＵ１３３での処理を行うのを容易化させるために、第１連想メモリ１１より出力されたマルチヒット情報に適当な符号化処理（例えば、ハッシュ（Hash）関数やデコーダーを用いた符号化処理）を行ってもよい。さらに、不揮発性メモリ１３６を付加することで、予め設定する必要があるプログラムやルールをロードすることが可能な仕組みを構成することができる。このときの、ワークメモリ１３５、不揮発性メモリ１３６は、内蔵型でも、システムの外付け型でもよい。
【００５９】
図１５Ａは連結サーチデータ生成部の第３の構成例を示す図である。図１５Ｂは図１５Ａのメモリ格子状レジスタの構成を示す回路図である。
【００６０】
第３の構成例に係る連結サーチデータ生成部１３Ｃは、メモリ部１３１Ｃと、ライト回路（Write Circuit）１３８と、レジスタ（Register）１３９と、を備える。メモリ部１３１Ｃは、連想メモリ１１のエントリに対応するサーチ結果と連結サーチデータ生成部１３Ｃとを対応付けし、予めプログラムしておいたエントリに対応つけられたルール番号に対してヒットエントリに対応する部分のメモリ格子状レジスタ１３１１にフラグを立てておき、ルールに対応つけられたフラグ毎に論理的に圧縮する。論理的圧縮は、アレイ構成の縦方向をＯＲ回路１３１２で数珠つなぎして構成している。メモリ格子状レジスタ１３１１は、最小の素子の単位として、Ｄ−フリップフロップ１３１３と、ＡＮＤ回路１３１４と、ＯＲ回路１３１２と、で構成し、連想メモリのエントリ毎に、対応するフラグをプログラムできるように構成している。メモリ格子状レジスタ１３１１のＯＲ回路１３１２の入力には１つ上段のＯＲ回路１３１２の出力信号が入力され、ＯＲ回路１３１２の出力信号は１つ下段のＯＲ回路１３１２に入力される。なお、最上段のＯＲ回路１３１２にはLowが入力される。この例では、横方向に、Ｎビット（N-bits）分、縦方向に、最大でＭエントリ分（連想メモリのエントリ数と同じＭ個の場合）並べる。Ｎは分類するためのルール数やカテゴリの数を表している。Ｎの値は、２以上の数であれば可変であって構わない。マルチヒットは最大Ｍ個発生し、圧縮回路でＮ個に圧縮するので、ルール数やカテゴリの数（Ｎ）は連想メモリのエントリ数（Ｍ）よりも小さい値である。
【００６１】
メモリ部１３１ＣのＲＷＬ（Read Word Line）を連想メモリ１１のマッチ出力（Match Out）信号と直接またはバッファ（Buffer）を介して接続する構成をとっている。予め、ＷＷＬ（Write Word Line）をHighにしている時に、“１”をプログラムしておきたいときは、ＷＤ（Write Data）をHighに、“０”をプログラムする場合には、ＷＤ（Write Data）がLowになるようにWrite回路１３８を制御する。こうすることで、Ｄ−フリップフロップ１３１３にデータを記憶することができる。
【００６２】
対象のメモリ格子状レジスタ１３１１で、プログラムしたいルール番号に相当する箇所のフラグを活性するようにするために、“１”をＤ−フリップフロップ１３１３に記憶させておく。これにより、ＲＷＬがHigh、すなわち、接続されたマッチ出力（Match Out）信号が、High（Hit状態）になると、ＲＤ（Read Data）はHighになり、ＯＲ回路１３１２の出力もHighとなりフラグが生成され、レジスタ１３９に格納される。
【００６３】
エントリ毎でハードウエハの構成上接続が不可能であるケースまたは困難なケースにおいては、ブロックレベルに信号を纏めて、連想メモリのエントリ数をいくつかのブロックにまとめたものを、マッチ出力（Match Out）信号として連結サーチデータ生成部と接続しても構わない。この場合は、連想メモリへの格納方法で、ブロック単位で同じルールが固まるようにする等の処理をあらかじめ実施してデータの格納方法を接続方法に合わせておくことで本構成例を適用することができる。
【００６４】
また、連想メモリとしてＴＣＡＭを用いる場合、ＴＣＡＭのマッチアンプ（Match Amp）出力または論理的に等価なものをパイプラインで、連結サーチデータ生成部に接続することにより、サーチのスループットはそのままで、検索動作を実行することが可能となる。この構成はロングキー検索の場合にも有効である。
【００６５】
図１６は図１５Ｂのメモリ格子状レジスタ１３１１の第１変形例を示す図である。第１変形例に係るメモリ格子状レジスタ１３１１Ｄは、図１５Ｂのメモリ格子状レジスタ１３１１より素子数を削減して構成されたもので、レイアウト面積を小さくすることができる。
【００６６】
メモリ格子状レジスタ１３１１ＤのＲＷＬ（Read Word Line）を連想メモリ１１のマッチ出力（Match Out）信号と直接またはバッファ（Buffer）を介して接続する構成をとっている。予め、ＷＷＬ（Write Word Line）をHighにしている時に、“１”をプログラムしておきたいときは、ＷＤ（Write Data）をHighに、“０”をプログラムする場合には、／ＷＤ（Write Data Bar）がHighになるように制御する。こうすることで、トランジスタＮ１とトランジスタＮ２の間にあるインバータＩＮ１とインバータＩＮ２で構成されるラッチ部にデータを記憶することができる。
【００６７】
対象のメモリ格子状レジスタ１３１１Ｄで、プログラムしたいルール番号に相当する箇所のフラグを活性するようにするために、“１”をラッチに記憶させておく。これにより、ＲＷＬがHigh、すなわち、接続されたマッチ出力（Match Out）信号が、High（Hit状態）になると、ＲＤ（Read Data）はLowになる。ＲＤを予めHigh電位にプリチャージしていれば、ＲＤにつながるメモリ格子状レジスタ１３１１Ｄの中で、１つでもＧＮＤへの引き抜くパス（トランジスタＮ３、Ｎ４が導通するもの）があれば、ＲＤがLowになり、コンパレータＣＭＰの出力信号（／ＯＲing）はLowとなりフラグを生成することができる。この変形例では、データのマージ動作としては、ワイヤード・ノア（Wired-NOR）で実現している。
【００６８】
図１７は図１５Ｂのメモリ格子状レジスタの第２変形例を示す図である。第１変形例に係るメモリ格子状レジスタ１３１１Ｄは、ＲＤのレベルを検知するために、データを比較する際のリファレンス電位である基準電位（Vref）という比較用のレベルを別途生成する必要があったが、第２変形例に係るメモリ格子状レジスタ１３１１Ｅは、ＲＤと／ＲＤ（Read Data Bar）との相補バスのレベルを比較する構成をとることによって基準電位（Vref）生成回路を設ける必要がなくなる。なお、／ＲＤはトランジスタＮ５、Ｎ６を介してＧＮＤに接続される。
【００６９】
次に、図７Ａの連想メモリ部１０、すなわち、第１段目（先頭）の連想メモリ１１と、連結サーチデータ生成部１３と、第ｎ段目（最終段）の連想メモリ１２の接続例について図１８〜２３を用いて説明する。
【００７０】
図１８は第１の接続例に係る連想メモリ部を示す図である。連想メモリ部１０Ｆはアレイサイズの異なる複数の連想メモリ１１Ｆ、１２Ｆを直列に連結して構成される。連想メモリ部１０Ｆは第１段目の連想メモリ１１Ｆと最終段の連想メモリ１２Ｆと連結サーチデータ生成部１３Ｆと検索キー生成部１４Ｆとを備える。最終段の連想メモリ１２Ｆはプライオリティエンコーダ（ＰＥ）を有する。
【００７１】
第１段目の連想メモリ１１Ｆには、ポート（Port）番号のようにレンジ表現で、３（Ternary）値を使用するデータを格納し、最終段の連想メモリ１２Ｆのサーチでは、それ以外の検索を行う。第１段目の検索では、送信元ポート（Source Port）番号と、宛先ポート（Destination Port）番号で、それぞれ１６ビット（16 bits）なので合計３２ビット（32 bits）を使用して、検索を実行することで、メモリの使用量を抑えることができる。
【００７２】
さらには、アレイサイズを小さくした場合に、エントリ（Entry）数を比例して増やすことができる構成をとっておく（縦と横のバランスを切り替えることができる構成：例えば、３２ビット×Ｍエントリ（32 bits × Ｍ entries）と、１６０ビット×Ｌエントリ（160 bits × Ｌ entries）が同じ大きさのメモリアレイブロックで構成しておく）ことで、レンジ展開をする部分のデータは、その他のレンジ展開を必要としない部分のデータ記述の部分よりもエントリ数を必要とするので、メモリ使用量でバランスがとりやすくなり、効率的にメモリを使用することが可能となる。なお、Ｌ＜Ｍの関係にある。図１８ではＬがＭより小さい場合の例について説明したが、これに限定されるものではなく、Ｌ≧Ｍであってもよい。この場合、第１段目の連想メモリ１１Ｆの１エントリのビット数は最終段の連想メモリ１２Ｆの１エントリのビット数以上になる。
【００７３】
図１９は第２の接続例に係る連想メモリ部を示す図である。連想メモリ部１０Ｇは３つのサーチ結果を直列に連結して構成される。連想メモリ部１０Ｇは第１段目の連想メモリ１１＿１Ｇと第２段目の連想メモリ１１＿２Ｇと最終段の連想メモリ１２Ｇと第１段目の連結サーチデータ生成部１３＿１Ｇと第２段目の連結サーチデータ生成部１３＿２Ｇと検索キー生成部１４Ｇとを備える。最終段の連想メモリ１２Ｇはプライオリティエンコーダ（ＰＥ）を有する。
【００７４】
このように、連想メモリを２つだけの接続ではなく、３つ以上つなげることで、従来実現できなかったロングキーサーチを実現することが可能となる。
【００７５】
図２０は第３の接続例に係る連想メモリ部を示す図である。連想メモリ部１０Ｈは最終段の連想メモリ１２Ｈのテーブル内部にテーブルを連結させるためのデータ（フラグ）を埋め込んで構成される。第３の接続例は、連想メモリ部１０の構成と同様である。
【００７６】
図２１は第４の接続例に係る連想メモリ部を示す図である。連想メモリ部１０Ｉは１つの連想メモリからの連結サーチデータを、複数の連想メモリに連結して構成される。連想メモリ部１０Ｉは第１段目の連想メモリ１１Ｉと最終段の連想メモリ１２＿１Ｉ、・・・、１２＿ｎＩと連結サーチデータ生成部１３Ｉと検索キー生成部１４Ｉとプライオリティエンコーダ（ＰＥ）１５Ｉとサーチイネーブル信号生成部１６Ｉとテーブルデータ管理部１７Ｉとを備える。最終段の連想メモリ１２＿１Ｉ、・・・、１２＿ｎＩはそれぞれプライオリティエンコーダ（ＰＥ）を有する。
【００７７】
この方法を実現するために、連結サーチデータ生成部１３Ｉからサーチイネーブル信号生成部１６Ｉにヒットアドレスを送ることで、サーチイネーブル信号生成部１６Ｉはテーブルデータ管理部１７Ｉにヒットインデックスの属するテーブルの連結情報を問い合わせ、テーブルデータ管理部１７Ｉはサーチイネーブル信号生成部１６Ｉに連結情報を伝達する。サーチイネーブル信号生成部１６Ｉは対象となるデータベースを格納している最終段の連想メモリをサーチイネーブル（Search Enable）信号で選択して活性化する。また、検索キー生成部１４Ｉは第２検索キーを第１最終段の連想メモリ（最終１）１２＿１Ｉ、・・・、第ｎ最終段の連想メモリ（最終ｎ）１２＿ｎＩに並行して送り、サーチイネーブル信号で活性化される連想メモリが検索動作を実行する。
【００７８】
その検索結果は、サーチイネーブル信号で活性化される連想メモリそれぞれにあるプライオリティエンコーダ（ＰＥ）に送られて最優先アドレスが選び出されたのち、さらに連想メモリ間での優先アドレスを次段のプライオリティエンコーダ（ＰＥ）１５Ｉに送り最終的なヒットアドレスが確定する。この手法を用いることで、最終段の連想メモリのテーブルデータが大きくなって１つのメモリブロックで収まらなくなった場合の拡張が実現できる。サーチイネーブル信号で活性化されない連想メモリがあるので、低消費電力化が可能になる。なお、最終段の連想メモリが２個の場合は、サーチイネーブル信号（サーチイネーブル信号生成部１６Ｉおよびテーブルデータ管理部１７Ｉ）とプライオリティエンコーダ（ＰＥ）１５Ｉのいずれか一方はなくてもよい。
【００７９】
図２２は第５の接続例に係る連想メモリ部を示す図である。連想メモリ部１０Ｊは複数のサーチ結果を複数ブロックに直列に連結して構成される。連想メモリ部１０Ｊは第１段目の連想メモリ１１＿１Ｊ、・・・、１１＿ｎＪと最終段の連想メモリ１２＿１Ｊ、・・・、１２＿ｎＪと連結サーチデータ生成部１３Ｊと検索キー生成部１４Ｊとプライオリティエンコーダ（ＰＥ）１５Ｊとサーチイネーブル信号生成部１６Ｊとテーブルデータ管理部１７Ｊとを備える。最終段の連想メモリ１２＿１Ｊ、・・・、１２＿ｎＪはそれぞれプライオリティエンコーダ（ＰＥ）を有する。
【００８０】
第５の接続例と図２１の第４の接続例との違いは、第１段目で複数連想メモリ（連想メモリ１１＿１Ｊ、・・・、１１＿ｎＪ）の検索結果を纏めることを行うことである。連結サーチデータ生成部１３Ｊは複数の１段目の連想メモリの検索結果を纏めて、２段目（最終段）の複数の連想メモリのための情報を検索キー生成部１４Ｊに渡す。このような接続を実現することで、複数の連想メモリに対して連結サーチデータ生成部を共有化できることで面積削減や低消費電力効果が実現できる。
【００８１】
図２３は第６の接続例に係る連想メモリ部を示す図である。連想メモリ部１０Ｋは最初に複数のサーチ結果を纏めたのちに１つの連想メモリに連結して構成される。連想メモリ部１０Ｋは第１段目の連想メモリ１１＿１Ｋ、・・・、１１＿ｎＫと最終段の連想メモリ１２Ｋと連結サーチデータ生成部１３Ｋと検索キー生成部１４Ｋとを備える。最終段の連想メモリ１２Ｋはプライオリティエンコーダ（ＰＥ）を有する。各連想メモリに格納するデータは、ルールの記述する内容によって、レンジ表現が多く含まれているケースや、ルールの細分化状態等の条件によって先頭（１段目）のテーブルサイズのみが大きくなってしまうことがある。このような場合には、先頭の連想メモリのテーブルサイズのみ複数をまとめて引き継ぎ、２つ目（最終段）の連想メモリに連結させることで効率的にメモリを使用することが可能となる。
【００８２】
（実装例）
図２４は第１の実装例に係る半導体装置を示す断面図である。半導体装置１００Ａは同一基板１１０Ａ上に連想メモリ１２０Ａと連結サーチデータ生成部１３０Ａを実装している。連想メモリ１２０Ａは第１連想メモリ１１と第２連想メモリ１２とを含んだ半導体チップであり、バンプ電極ＰＥＡ１で基板１１０Ａに電気的に接続されるとともに固定され、レジンＲＥＡ１等の樹脂材料によって半導体チップの回路形成面はバンプ電極ＰＥＡ１と共に封止されている。連結サーチデータ生成部１３０Ａは連結サーチデータ生成部１３を含んだ半導体チップであり、バンプ電極ＰＥＡ２で基板１１０Ａに電気的に接続されるとともに固定され、レジンＲＥＡ２等の樹脂材料によって半導体チップの回路形成面はバンプ電極ＰＥＡ２と共に封止されている。連想メモリ１２０Ａおよび連結サーチデータ生成部１３０Ａのそれぞれは既にレジン等で封止されたものであってもよい。検索キー生成部１４は連結サーチデータ生成部１３０Ａまたは連想メモリ１２０Ａに含まれてもよい。
【００８３】
連結サーチデータ生成部１３では、予めヒット情報を分類するためのルールを記憶しておくメモリが必要となるが、従来製品との互換性を保ちたいだけの顧客には本機能がコストアップにつながるケースがある。そのため、連想メモリ１２０Ａのチップ外部に連結サーチデータ生成部１３の機能を持ち出すことを実施し、必要に応じてパッケージのオプション化としてコストの最適化を図ることが可能となる。連結サーチデータ生成部１３０Ａとしては、ＤＲＡＭやＳＲＡＭなどの一般的なメモリ製品にロジックを加えた形態や、ＦＰＧＡで、連結サーチデータ生成部の機能を実現した形態でも実現可能である。
【００８４】
図２５は第２の実装例に係る半導体装置を示す断面図である。半導体装置１００Ｂは連想メモリ１２０Ｂと連結サーチデータ生成部１３０Ｂを３Ｄ実装技術で基板１１０Ｂに実装している。連想メモリ１２０Ｂは第１連想メモリ１１と第２連想メモリ１２とを含んだ半導体チップであり、バンプ電極ＰＥＢで基板１１０Ｂに電気的に接続されるとともに固定され、レジンＲＥＢ等の樹脂材料によって半導体チップの回路形成面はバンプ電極ＰＥＣと共に封止されている。連結サーチデータ生成部１３０Ｂは連結サーチデータ生成部１３を含んだ２つの半導体チップ１３０Ｂ＿Ｕ、１３０Ｂ＿ＬをＴＳＶ（Though Silicon Via）技術で（シリコン貫通ビア電極１３０Ｂ＿Ｖによって）連想メモリ１２０Ｂに電気的に接続している。検索キー生成部１４は連結サーチデータ生成部１３０Ｂまたは連想メモリ１２０Ｂに含まれてもよい。
【００８５】
連想メモリ１２０Ｂ上に、連結サーチデータ生成部１３０Ｂを配置すること実装面積を削減することができる。ＴＳＶ技術に代えてＰｏｎＰ(Package on Package)技術を用いてもよい。ＴＳＶ技術や、ＰｏｎＰ技術を適用することで、連想メモリ１２０Ｂと、連結サーチデータ生成部１３０Ｂを低レーテンシーで接続できる上に、配線距離も短くできるため、信号を伝達するための電力も低減可能となる。
【００８６】
図２６は第３の実装例に係る半導体装置を示す断面図である。半導体装置１００Ｃは同一基板上に連想メモリ１２０Ａと、連結サーチデータ生成部１３０Ｂを実装している。連想メモリ１２０Ａは第１連想メモリ１１と第２連想メモリ１２とを含んだ半導体チップであり、バンプ電極ＰＥＣ１で基板１１０Ｃに電気的に接続されるとともに固定され、レジンＲＥＣ１等の樹脂材料によって半導体チップの回路形成面はバンプ電極ＰＥＣ１と共に封止されている。連結サーチデータ生成部１３０Ｂは連結サーチデータ生成部１３を含んだ２つの半導体チップ１３０Ｂ＿Ｕ、１３０Ｂ＿Ｌをシリコン貫通ビア電極１３０Ｂ＿Ｖによってベースダイ２００Ｃに電気的に接続している。ベースダイ２００Ｃは半導体チップであり、バンプ電極ＰＥＣ２で基板１１０Ｃに電気的に固定され、レジンＲＥＣ２等での樹脂材料によってベースダイ２００Ｃはバンプ電極ＰＥＣ２と共に封止されている。検索キー生成部１４は連結サーチデータ生成部１３０Ｂまたは連想メモリ１２０Ａに含まれてもよい。
【００８７】
連結サーチデータ生成部１３０Ｂの部分の機能と連想メモリ１２０Ａの機能の組み合わせをそれぞれの用途に合わせて選択できるため自由度が大きくすることが可能となる。
【００８８】
図２７は第４の実装例に係る半導体装置を示す断面図および分解平面図である。図２７の一番上は断面図、二番目は連結サーチデータ生成部の上面（矢印Ｂ）における平面図、三番目は連結サーチデータ生成部の下層の半導体チップの上面（矢印Ｃ）における平面図、一番下は連想メモリの上面（矢印Ｄ）における平面図である。半導体装置１００Ｄは連想メモリ１２０Ｄ上に、２個の連結サーチデータ生成部１３０＿１、１３０＿２を実装している。連想メモリ１２０Ｄは第１連想メモリ１１と第２連想メモリ１２とを含んだ半導体チップであり、バンプ電極で基板１１０Ｄに固定され、レジン等で半導体チップの回路形成面はバンプ電極と共に封止されている。連結サーチデータ生成部１３０＿１は連結サーチデータ生成部１３を含んだ２つの半導体チップ１３０＿１Ｕ、１３０＿１Ｌをシリコン貫通ビア電極１３０＿１Ｖで連想メモリ１２０Ｄに接続している。連結サーチデータ生成部１３０＿２は連結サーチデータ生成部１３を含んだ２つの半導体チップ１３＿２Ｕ、１３０＿２Ｌをシリコン貫通ビア電極１３０＿２Ｖで連想メモリ１２０Ｄに接続している。検索キー生成部１４は連結サーチデータ生成部１３０＿１、１３０＿２または連想メモリ１２０Ｄに含まれてもよい。
【００８９】
図２５の第２の実装例では、連想メモリのメモリ容量が大きくなってくると、チップサイズ大きくなるため、全連想メモリに対応できる連結サーチデータ生成部をのせることができない場合がでる可能性がある。そのため、連想メモリのメモリアレイ上に複数配置することで、連想メモリのパッケージサイズの増加を押さえつつ改善することができるようになる。例えば、ＴＣＡＭのアレイ構成に合わせて最適な配置が可能となるため低レーテンシーと、低消費が実現可能になる。
【００９０】
第１〜第４の実装例における基板としては、パッケージ内で使用する基板やシステムボードの基板であってもよい。
【００９１】
＜変形例＞
実施例の変形例について説明する。
【００９２】
連結サーチデータ生成部へのデータ格納方法を有効に利用することで、さらに連想メモリ部分を効率的に使用することが可能となる。例えば、ネットワークの機器では、ＩＰアドレスや、ポート（Port）番号などは、ＴＣＡＭを連想メモリとして使用する場合には、１つのルールで多くのエントリに展開する必要があるが、ルール内で重複する部分をフラグ情報として共有化することができるため、メモリ使用量を減らすことを提案する。比較例の方法では、それぞれの組み合わせの積で増加してしまっていたが、フラグ方式では、実質的にフラグの和ですむようになるため大幅なメモリの節約が実現できる。
【００９３】
まず、変形例におけるＡＣＬテーブルのレンジ表現について図２８を用いて説明する。図２８はＡＣＬテーブルのレンジ表現とドント・ケアの関係を示す図である。
【００９４】
[2-9]をルールとして記述する場合は、Ｎｏ．１〜３の３つ（[2-3][4-7][8-9]）のレンジ表現を使用して表現することが可能である。[10-15]をルールとして記述する場合は、Ｎｏ．４とＮｏ．５の２つ（[10-11][12-15]）のレンジ表現を使用して表現することが可能である。
【００９５】
次に、ＡＣＬテーブルを比較例の連想メモリに格納する一例について図２９Ａ、２９Ｂを用いて説明する。図２９ＡはＡＣＬテーブルの例を示す図である。図２９Ｂは図２９ＡのＡＣＬテーブルを比較例の連想メモリへ格納する例を示す図である。
【００９６】
図２９Ａに示すように、ＡＣＬテーブルとして３つのルールを記載している。図２９Ｂに示すように、ルール＃１では、送信元ポート番号（Src. Port）の[2-9]の部分で[2-3][4-7][8-9]の３種類の表現、宛先ポート番号（Dst. Port）の[10-15]部分で[10-11][12-15]の２種類の表現を必要とするため、これらの組み合わせをルールとして表現する際には、３×２、すなわち６エントリ分を使用して表現することが行われる。
【００９７】
同様に、図２９Ｂに示すように、ルール＃２では、送信元ポート番号（Src. Port）の[4-9]の部分で[4-7][8-9]の２種類の表現、宛先ポート番号（Dst. Port）の[12-17]部分で[12-15][16-17]の２種類の表現を必要とするため、これらの組み合わせをルールとして表現する際には、２×２、すなわち４エントリが必要となる。
【００９８】
一方で、図２９Ｂに示すように、ルール＃３では、送信元ポート番号（Src. Port）も宛先ポート番号（Dst. Port）も、各１種類の表現で実現できるため、組み合わせとしては、１×１で、結局のところ１でよいことになる。
【００９９】
したがって、３ルールを比較例の連想メモリに格納するのに、合計で１１エントリ分のメモリ消費をする。例えば、送信元ポート番号（Src. Port）が１６ビット、宛先ポート番号（Dst. Port）が１６ビット、プロトコル（Protocol）が８ビット、送信元ＩＰアドレス（Src. Add）が３２ビット、宛先ＩＰアドレス（Dst. Add）が３２ビットであると、１エントリ当たり１０４ビット必要であり、１１エントリ×１０４ビット＝１，１４４ビットのメモリを消費する。
【０１００】
今回の例では、ルール＃３のような組み合わせでルールの表現が膨れ上がらないものには効果はでないため比較例の表現方法を使用してもよいが、今回の表現方法でも実現可能であることを示すため、例としてあげた。
【０１０１】
次に、変形例に係る連想メモリへのデータ格納方法について図３０〜３２を用いて説明する。図３０は変形例に係る第１連想メモリ部へのデータ格納方法説明するための図である。図３０の上段は図２９Ａと同じＡＣＬテーブルである。図３０の下段は第１連想メモリである。変形例では、連想メモリとしてＴＣＡＭを使用する例を説明する。
【０１０２】
変形例では、レンジ表現として同じものを、違うルールにおいても共通に使用することでメモリ消費を抑えることを行う。
【０１０３】
そのために、まず、送信元ポート番号（Src. Port）部を連想メモリに格納する方法を説明する。ルール＃１では、送信元ポート番号（Src. Port）の[2-9]を記載している。そのため、図２８に示すように、[2-9]は、[2-3]と[4-7]と[8-9]の３つで表現できる。次に、ルール＃２では、[4-9]を使用しているので、[4-7]と[8-9]の２つで表現できる。次に、ルール＃３では、[4-7]を使用しているため、[4-7]の１つで表現できる。これらをまとめると、[2-3]、[4-7]、[8-9]の３種類で、３ルールの送信元ポート番号（Src. Port）部分に関しては表現可能となっていることが分かる。したがって、図３０に示すように、第１連想メモリ１１Ｌの左の列のような形でデータを格納する。
【０１０４】
次に、宛先ポート番号（Dst. Port）の部分の説明をする。同様に、ルール＃１の部分では、[10-15]を使用しているので、図２８に示すように、[1-15]は、[10-11]と[12-15]の２つの種類で表現できる。次に、ルール＃２では、[12-17]を使用しているので、[12-15]と[16-17]の２つで表現できる。最後にルール＃３では、[0-15]を使用しているので、[0-15]の１つで表現できる。これらを、送信元ポート番号（Src. Port）のときと同様に、重複部分を除いてみると、[10-11]、[12-15]、[16-17]、[0-15]の４種類で表現される。したがって、図３０に示すように、第１連想メモリ１１Ａの右の列のような形でデータを格納する。このときに、送信元ポート番号（Src. Port）のレンジ表現でデータを格納した部分の右側（宛先ポート番号（Dst. Port）部分に相当する箇所）に“＊”を埋めているが、この部分を、“＊”（ドント・ケア）にすることで、この後説明する連結サーチデータ生成部１３Ｌ、第２の連想メモリ１２Ｌへの検索データの連結を実現することができる。
【０１０５】
ドント・ケアを利用することで、連結サーチデータ生成部１３Ｌや第２連想メモリ１２Ｌでは、フラグ方式でルールをテーブルに格納することができるためルールの重複分のメモリ消費量を抑えることができることになる。同様に、宛先ポート番号（Dst. Port）へデータ格納をしている部分で、送信元ポート番号（Src. Port）に相当する部分は“＊”（ドント・ケア）にしている。
【０１０６】
よって、第１連想メモリ１１Ｌでは、合計で７エントリ×１６ビット（送信元ポート番号（Src. Port）、宛先ポート番号（Dst. Port）をそれぞれ、ＩＰｖ４、ＩＰｖ６で一般的な１６ビットと仮定した場合）で表現できることになる。
【０１０７】
レンジ表現されたルールを、格納するために複数のエントリを使用してデータを格納するが、別ルールでも使うことができるレンジ表現を共有化する
次に、連結サーチデータ生成部でのフラグの管理方法、引き継ぎデータについて説明する。図３１は変形例に係る連結サーチデータ生成部に対する事前プログラムを説明するための図である。図３１の上段は図２９Ａと同じＡＣＬテーブルである。図３１の下段左側は第１連想メモリ１１Ｌである。図３１の下段右側は連結サーチデータ生成部１３Ｌである。
【０１０８】
連結サーチデータ生成部１３Ｌには、サーチ結果の引き継ぎを行うために予め、ルール情報（各ルール対応する場所に“１”）を検索を実行する前にプログラムしておく。連結サーチデータ生成部１３Ｌは、第１連想メモリ１１Ｌのぞれぞれのエントリに対応してメモリをアサインしておく。
【０１０９】
まず、ルール番号が０（Rule#0）に対するデータ格納方法について説明する。連結サーチデータ生成部１３Ａの、送信元ポート番号（Src.Port）のブロックの左端にルール＃０（Rule#0）のデータを格納する。第１連想メモリ１１Ｌでは、それぞれのレンジ表現を重複しないように格納したためルール情報がなくなっている。そのためそれを表現しておく必要がある。前述したように、第１連想メモリ１１Ｌと連結サーチデータ生成部１３Ｌはエントリ単位で対応付けをさせておいて、各ルールに必要なレンジ表現をフラグ形式で使用する。ルール＃０では、送信元ポート番号（Src. Port）の表現で、[2-3]、[4-7]、[8-9]の３つを使用するため、連結サーチデータ生成部１３Ａの＃０と、＃１と、＃２とに“１”をプログラムする。＃３−６は、宛先ポート番号（Dst. Port）に相当する部分であるので、“０”をプログラムする。同様に、ルール＃２（Rule#2）、ルール＃３（Rule#3）に相当する部分も、使用しているレンジ表現部分に“１”を立てる。
【０１１０】
宛先ポート番号（Dst. Port）に関しては、本例では、第１連想メモリ１１Ｌの＃３−６を使用して表現したので、連結サーチデータ生成部１３Ａの、＃３−６に送信元ポート番号（Src. Port）で行ったように各ルールで使用しているレンジ表現をフラグ形式で選択し、送信元ポート番号（Src. Port）で行った手順と同様にルール（Rule）毎に使用しているレンジ表現部分に“１”を立てる。宛先ポート番号（Dst. Port）のデータ領域で、＃０−２には、対応する送信元ポート番号（Src. Port）に関するフラグは立てないで“０”としておく。送信元ポート番号（Src. Port）に３ビット、宛先ポート番号（Dst. Port）に３ビット使用される。
【０１１１】
次に、第２連想メモリ１２Ｌへのデータの格納方法について述べる。図３２は変形例に係る第２連想メモリへのデータ格納方法を説明するための図である。図３２の上段は図２９Ａと同じＡＣＬテーブルである。図３２の下段は第２連想メモリである。この例では、連想メモリの一部（本例では６ビット分）をサーチ結果の連結を行うためのフラグとして使用している。
【０１１２】
第２連想メモリ１２Ｌの送信元ポート番号（Src. Port）と記載した箇所に各ルール（Rule）に相当するエントリに“１”を立てる。このとき、自己のルールと異なる箇所に関しては、“＊”で埋める。この例では、送信元ポート番号（Src. Port）の[2-9]の列は、＃０に“１”、＃１と＃２には“＊”が埋められている。[4-9]の列は、＃１に“１”を、＃０と＃２には“＊”を埋める。[4-7]の列には、＃０と＃１には、“＊”を、＃２に“１”を埋める。同様に宛先ポート番号（Dst. Port）の部分でも、[10-15]の列には、＃０に“１”、その他は、“＊”、[12-17]の列は、＃１に“１”、＃０と＃２は“＊”を埋める。[0-15]の列は、＃２に“１”、＃０と＃１には“＊”を埋める。送信元ポート番号（Src. Port）に３ビット、宛先ポート番号（Dst. Port）に３ビット使用される。残り、プロトコル（Protocol）、送信元ＩＰアドレス（Src. Add）、宛先ＩＰアドレス（Dst. Add）は、そのままルール（Rule）のデータをコピーしてよい。この“＊”を使用することで、第１連想メモリ１１Ｌで複数のルールでヒットが起きているサーチ結果を引き継いでも第２連想メモリ１２Ｌにて正しい結果を得ることができる。
【０１１３】
次に、変形例に係る検索機構について図３３Ａ〜３３Ｄを用いて説明する。図３３Ａは変形例に係る検索機構の概要を説明するための図である。図３３Ｂは図３３Ａの検索データ、第１検索キー、第１検索情報および第２検索キーを示す図である。図３３Ｃは図３３Ａの第１連想メモリおよび連結サーチデータ生成部を示す図である。図３３Ｄは図３３Ａの第２連想メモリおよびアクションメモリを示す図である。
【０１１４】
変形例に係るネットワーク装置は検索装置１Ｌとネットワーク制御装置（ＮＣＵ）２Ｌとを備える。検索装置１Ｌは連想メモリ部１０Ｌとアクションメモリ部２０Ｌとを備える。連想メモリ部１０Ｌは第１連想メモリ１１Ｌと第２連想メモリ１２Ｌと連結サーチデータ生成部１３Ｌと検索キー生成部１４Ｌとを備える。ネットワーク制御装置２ＬはＮＰＵ（ネットワークプロセッサ）やＡＳＩＣ等で構成される。実施例では、連想メモリとしてＴＣＡＭを使用する例を説明する。第１連想メモリのエントリ数は７、第２連想メモリのエントリ数は第１連想メモリのエントリ数よりも少ない３、ルール数は３の例について説明する。
【０１１５】
ここで、検索装置１Ｌの主な動作の流れについて説明をする。
（１）ネットワーク制御装置２Ｌは、図３３Ｂに示すような検索対象となるデータ（検索データ）を検索装置１Ｌの連想メモリ部１０Ｌ内の検索キー生成部１４Ｌに送る。最初に検索キー生成部１４Ｌは送られてきた検索データから図３３Ｂに示すような第１検索キー（1st Search Key）を生成する。
【０１１６】
（２）第１段目の検索では、第１連想メモリ１１Ｌは、検索キー生成部１４Ｌで生成した第１検索キー（1st Search Key）を用いて、第１連想メモリ１１Ｌ内のデータを検索する。この時、検索キーデータである第１検索キー（1st Search Key）に対して複数のデータが一致する場合は、一致する全てのマルチヒット情報（複数のデータでキーとの一致がある状態）を連結サーチデータ生成部１３Ｌに伝達する。図３３Ｃに示すように、第１連想メモリ１１Ｌのエントリ＃２、＃３、＃６では第１検索キーに対して一致し、マルチヒットが発生する。
【０１１７】
（３）次に、第１連想メモリ１１Ｌにて検索された結果は、連結サーチデータ生成部１３Ｌで分類、論理圧縮をした後、第２検索キー（2nd Search Key）を生成するため、図３３Ｂに示すような第１検索（1st search）情報として検索キー生成部１４Ｌに出力される。図３３Ｃに示すように、ヒット（Hit）が発生したエントリ（Index）のマルチヒット情報が連結サーチデータ生成部１３Ｌに送られて、検索情報の引継ぎが行われる。連結サーチデータ生成部１３Ｌはエントリに対応するデータ（ルール番号（Rule #））が格納され、ルール数のデータに圧縮する。より具体的には、連結サーチデータ生成部１３Ｌに送られたデータは、事前に“１”にプログラムされた部分と、第１連想メモリ１１Ｌでヒット（Hit）したエントリ＃とＡＮＤした結果をマージし、第２連想メモリ１２Ｌに引き継ぎを行う検索結果情報（サーチ結果フラグ）を生成する。この例では、連結サーチデータ生成部１３Ｌにて、連結サーチデータとして、「6’b110101」のサーチ結果フラグを生成し、検索キー生成部１４Ｌに送る。
【０１１８】
（４）次に、検索キー生成部１４Ｌは、連結サーチデータ生成部１３Ｌから供給された第１連想メモリ１１Ｌでの検索結果情報（1st search情報）と、最初に入ってきた検索データを使用して、図３３Ｂに示すような第２段目の検索に使用する第２検索キー（2nd Search Key）を生成する。より具体的には、第２検索キー(2nd Search Key)は、検索キー生成部１４Ｌで、ネットワーク制御装置２から送られてきたオリジナルの検索データの内、第１検索キー（1st Search Key）で使用しなかった残りキーと、サーチ結果フラグを合成した形で生成する。こうすることで、予め、第２連想メモリ１２Ｌの部分にプログラムしておいたサーチ結果を連結させるためのフラグ部分を使用して検索動作を成立させることができる。検索キー生成部１４Ｌは、サーチ結果フラグを、{Protocol, Src. Add, Dst. Add}＝{P1, S2, D1}と合成し、｛6’b110101, P1, S2, D1}の形で第２検索キー(2nd Search Key)を生成する。
【０１１９】
（５）第２連想メモリ１２Ｌは、検索キー生成部１４Ｌで作られた第２検索キー（2nd Search Key）を使用して、第２連想メモリ１２Ｌ内のデータに、第２検索キー（2nd Search Key）が含まれているかどうかの検索を行う。図３３Ｄに示すように、第２連想メモリ１２Ｌのエントリ＃０でヒットが発生する。
【０１２０】
（６）複数のデータで一致がある場合は、本例では、第２連想メモリ１２Ｌのメモリ部１２１Ｌに、プライオリティエンコーダ（ＰＥ）１２２Ｌを接続している構成をとっているので、一致アドレスの中で最も優先度の高いアドレスのみを、最終の検索結果（ヒットインデックス）として、アクションメモリ部２０Ｌに検索結果を送る。
【０１２１】
（７）アクションメモリ部２０Ｌでは、検索結果をもとに、検索装置１に入力されてきたデータ（例えば、ＩＰアドレスや、ポート番号等）に対して、どのような処置を行うのかをあらかじめプログラムしておき、最終検索結果のアドレスに対応した、アクションメモリ部２０Ｌのデータの読み出し動作をした結果を、ネットワーク制御装置２に送信して一連の検索動作が完了する。図３３Ｄではエントリ＃０のdenyがアクション（Action）として出力される。
【０１２２】
次に、比較例と変形例のメモリ消費量の比較をした結果について説明する。図２９Ａに示すＡＣＬテーブルに対して、比較例では、図２９Ｂに示すように、
１１エントリ×１０４ビット＝１，１４４ビット
使用することが必要である。それに対して、変形例では、図３０、３１、３２に示すように、
第１連想メモリ１１Ｌで、７エントリ×１６ビット×２＝２２４ビット
連結サーチデータ生成部１３Ｌで、７エントリ×６ビット＝４２ビット
第２連想メモリ１２Ａで、３エントリ×（６ビット＋７２ビット)＝２３４ビット、
合計して、５０４ビットで実現ができる。したがって、５０４ビット／１，１４４ビット＝４４．１％、すなわち、変形例は比較例に比べて、約５６％メモリ使用量が節約できる。
【０１２３】
以上、本発明者によってなされた発明を実施形態、実施例および変形例に基づき具体的に説明したが、本発明は、上記実施形態、実施例および変形例に限定されるものではなく、種々変更可能であることはいうまでもない。
【０１２４】
実施例および変形例ではプライオリティエンコーダを用いて最終的な検索結果を１つにして、アクションメモリ部内のデータを読み出すためのアドレス情報を生成する例を説明したが、第２段目のサーチ結果をそのままマルチマッチとして出力可能とする形態の方がアプリケーションとして適している場合（セキュリティ用途等）はプライオリティエンコーダを設けなくてもよい。
【０１２５】
実施例および変形例では、連想メモリにＴＣＡＭを使用する例を説明したが、ＢＣＡＭを使用してもよい。ＢＣＡＭを使った場合は、３（Ternary）値は扱えないという制限はあるがロングキー検索は可能である。また、メモリ使用量の節約効果、消費電力の削減効果は実施例と同様に有効である。
【０１２６】
実施例および変形例では、説明を簡単にするために、検索装置を１つだけの例で示したが、検索装置を複数個同時動作させることによって、並列処理を容易に実現することができ、処理能力を大きく改善することも可能となる。また、アクションメモリ部は、検索装置内に記載しているが、市販のＤＤＲメモリをボード上に配置する等して、検索装置外のメモリとしてもよい。
【符号の説明】
【０１２７】
１・・・検索装置
２・・・ネットワーク制御装置
１０・・・連想メモリ部
１１・・・第１連想メモリ
１２・・・第２連想メモリ
１３・・・連結サーチデータ生成部
１４・・・検索キー生成部
２０・・・アクションメモリ部
【図１】
2018010505.tif 000003
【図２】
2018010505.tif 000004
【図３】
2018010505.tif 000005
【図４】
2018010505.tif 000006
【図５Ａ】
2018010505.tif 000007
【図５Ｂ】
2018010505.tif 000008
【図５Ｃ】
2018010505.tif 000009
【図５Ｄ】
2018010505.tif 000010
【図６】
2018010505.tif 000011
【図７Ａ】
2018010505.tif 000012
【図７Ｂ】
2018010505.tif 000013
【図７Ｃ】
2018010505.tif 000014
【図７Ｄ】
2018010505.tif 000015
【図７Ｅ】
2018010505.tif 000016
【図８】
2018010505.tif 000017
【図９】
2018010505.tif 000018
【図１０】
2018010505.tif 000019
【図１１】
2018010505.tif 000020
【図１２】
2018010505.tif 000021
【図１３】
2018010505.tif 000022
【図１４】
2018010505.tif 000023
【図１５Ａ】
2018010505.tif 000024
【図１５Ｂ】
2018010505.tif 000025
【図１６】
2018010505.tif 000026
【図１７】
2018010505.tif 000027
【図１８】
2018010505.tif 000028
【図１９】
2018010505.tif 000029
【図２０】
2018010505.tif 000030
【図２１】
2018010505.tif 000031
【図２２】
2018010505.tif 000032
【図２３】
2018010505.tif 000033
【図２４】
2018010505.tif 000034
【図２５】
2018010505.tif 000035
【図２６】
2018010505.tif 000036
【図２７】
2018010505.tif 000037
【図２８】
2018010505.tif 000038
【図２９Ａ】
2018010505.tif 000039
【図２９Ｂ】
2018010505.tif 000040
【図３０】
2018010505.tif 000041
【図３１】
2018010505.tif 000042
【図３２】
2018010505.tif 000043
【図３３Ａ】
2018010505.tif 000044
【図３３Ｂ】
2018010505.tif 000045
【図３３Ｃ】
2018010505.tif 000046
【図３３Ｄ】
2018010505.tif 000047