(57)【要約】      （修正有）【課題】チップ面積の増加を抑制するとともに、消費電流の増加を抑制する検索メモリを提供する。【解決手段】各々が並列に入力されるＮ個の検索データの入力を受け付ける入力制御部１０１と、Ｎ個の検索ユニット１０２−０〜１０２−３と、Ｎ個の検索データの中から２個の検索データを選択するＮ個の第１のセレクタ２０３−０〜２０３−３とを備える。各検索ユニットは、複数の検索ブロック２００−０〜２００−１５と、複数の検索ブロックにそれぞれ対応して設けられ、対応する検索ユニットに対して設けられた第１のセレクタにより選択された２個の検索データのうちのいずれか一方の検索データを選択するためのＭ個の第２のセレクタＳＬ０〜ＳＬ１５とを含む。Ｎ個の検索ユニットのうちの検索ユニットについて、Ｎ個の検索データにそれぞれ対応するＮ種類のエントリーデータのうちの２種類のエントリーデータが複数の検索ブロックにそれぞれ格納される。【選択図】図５
2019117677.tif 000002
【特許請求の範囲】
【請求項１】
入力された検索データがメモリセルアレイに格納されたエントリデータに一致するか否かを検索し、一致するエントリデータに対応するアドレス情報を出力する検索メモリであって、
各々が並列に入力されるＮ個（Ｎ：２以上）の検索データの入力を受け付ける入力制御部と、
Ｎ個の検索ユニットと、
前記Ｎ個の検索ユニットにそれぞれ対応して設けられ、前記Ｎ個の検索データの中から２個の検索データを選択するＮ個の第１のセレクタとを備え、
各前記検索ユニットは、
複数の検索ブロックと、
前記複数の検索ブロックにそれぞれ対応して設けられ、対応する検索ユニットに対して設けられた前記第１のセレクタにより選択された２個の検索データのうちのいずれか一方の検索データを選択するためのＭ個の第２のセレクタとを含み、
前記Ｎ個の検索ユニットのうちの少なくとも１つの検索ユニットについて、前記Ｎ個の検索データにそれぞれ対応するＮ種類のエントリーデータのうちの２種類のエントリーデータが前記複数の検索ブロックにそれぞれ格納されるように割り当てられる、検索メモリ。
【請求項２】
各前記検索ユニットは、前記複数の検索ブロックに対応して設けられ、各前記検索ブロックから出力される一致するエントリデータに対応するアドレス情報のうち優先度の高いアドレス情報を出力するための２個のアドレス情報出力回路をさらに含む、請求項１記載の検索メモリ。
【請求項３】
前記Ｎ個の検索ユニットに対応して設けられ、各前記検索ユニットから出力されるアドレス情報のうちＮ個の検索データに対して優先度の高いＮ個のアドレス情報をそれぞれ出力するためのＮ個のアドレス情報決定回路をさらに備える、請求項２記載の検索メモリ。
【請求項４】
前記検索ユニットに含まれる前記複数の検索ブロックの個数以上の検索ブロックに対して前記Ｎ種類のエントリーデータのうちの一部のエントリーデータを格納する場合に、所定のルールに従って前記Ｎ種類のエントリーデータを前記Ｎ個の検索ユニットの前記複数の検索ブロックにそれぞれ割り当てて格納する制御部をさらに備える、請求項１記載の検索メモリ。
【請求項５】
前記アドレス情報は、前記複数の検索ブロックのうちの少なくとも１つを指定するためのブロックアドレスと、指定された検索ブロックにおけるエントリデータに対応するローカルアドレスとを含み、
各前記検索ユニットは、
前記複数の検索ブロックにそれぞれ対応して設けられ、割り当てられた検索ブロックのブロックアドレスを格納する複数のブロックレジスタと、
前記複数の検索ブロックにそれぞれ対応して設けられ、対応するブロックレジスタに格納されているブロックアドレスと、対応するローカルアドレスとに基づいて指定された検索ブロックにおける一致したエントリデータに対応する論理アドレスに変換する複数のアドレス変換部とを有する、請求項１記載の検索メモリ。
【請求項６】
各前記アドレス変換部は、前記対応するブロックアドレスを上位ビットとし、前記対応するローカルアドレスを下位ビットとして合成した論理アドレスに変換する、請求項１記載の検索メモリ。
【請求項７】
各前記検索ユニットに含まれる前記複数のブロックレジスタに格納される物理ブロックアドレスを論理ブロックアドレスに変更するアドレス変換テーブルをさらに備える、請求項６記載の検索メモリ。
【発明の詳細な説明】
【技術分野】
【０００１】
この開示は、半導体装置に関し、たとえば、検索メモリに関する。
【背景技術】
【０００２】
検索メモリまたはＣＡＭ（内容参照メモリ：Content Addressable Memory）と呼ばれる記憶装置は、記憶しているデータワードの中から検索ワードに一致しているものを検索し、一致しているデータワードが見つかった場合は、そのアドレスを出力するものである。
【０００３】
ＣＡＭにはＢＣＡＭ（Binary CAM）とＴＣＡＭ（Ternary CAM）とがある。ＢＣＡＭの各メモリセルは“０”か“１”かのいずれかの情報を記憶する。一方、ＴＣＡＭの場合には、各メモリセルは、“０”および“１”の他に“ドントケア（Don't Care）”（本例においては、“＊”の記号を用いる）の情報を記憶可能である。“＊”は“０”および“１”のどちらでも良いことを示す。
【０００４】
ＴＣＡＭ装置は、インターネットなどのネットワーク用のルータにおいてアドレス検索およびアクセス制御のために幅広く利用されている。大容量化に対応するために、ＴＣＡＭ装置は、通常、複数のアレイを有し、各アレイに対して同時にサーチ動作が実行される構成となっている。
【０００５】
ＴＣＡＭ装置は、入力サーチデータ（入力パケット）とＴＣＡＭセルデータとを一斉に比較することができるので、全ての検索用途においてＲＡＭ（Random Access Memory）よりも高速である。
【０００６】
具体的には、ＴＣＡＭ装置は、メモリセルに格納した情報とユーザーが検索したいデータとを比較して、双方のデータが一致、不一致を示すためのマッチ線（ＭＬ）を有している。
【０００７】
そして、一致したマッチ線に対応するアドレス情報（Hit Index）を出力する構成が設けられている。
【０００８】
近年ＣＡＭの大容量化のためにＣＡＭアレイ数が増加している。
また、複数の検索キーを用いて並列に検索処理を実行する方式が提案されている（特許文献１および２）。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】米国特許第６３７４３２６号明細書
【特許文献２】米国特許第９１５９４２０号明細書
【発明の概要】
【発明が解決しようとする課題】
【００１０】
一方で、複数の検索キーでの並列的に検索処理を実行させるためにはそれぞれの検索キーをＣＡＭアレイに伝送する必要が生じる。
【００１１】
これによりデータバス幅が増加することによりチップ面積が増加するとともに、消費電流が増加する可能性がある。
【００１２】
本開示は、上記の課題を解決するためになされたものであって、チップ面積の増加を抑制するとともに、消費電流の増加を抑制することが可能な検索メモリを提供する。
【００１３】
その他の課題と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
【課題を解決するための手段】
【００１４】
ある局面に従う、入力された検索データがメモリセルアレイに格納されたエントリデータに一致するか否かを検索し、一致するエントリデータに対応するアドレス情報を出力する検索メモリである。検索メモリは、各々が並列に入力されるＮ個（Ｎ：２以上）の検索データの入力を受け付ける入力制御部と、Ｎ個の検索ユニットと、Ｎ個の検索ユニットにそれぞれ対応して設けられ、Ｎ個の検索データの中から２個の検索データを選択するＮ個の第１のセレクタとを備える。各検索ユニットは、複数の検索ブロックと、複数の検索ブロックにそれぞれ対応して設けられ、対応する検索ユニットに対して設けられた第１のセレクタにより選択された２個の検索データのうちのいずれか一方の検索データを選択するためのＭ個の第２のセレクタとを含む。Ｎ個の検索ユニットのうちの少なくとも１つの検索ユニットについて、Ｎ個の検索データにそれぞれ対応するＮ種類のエントリーデータのうちの２種類のエントリーデータが複数の検索ブロックにそれぞれ格納されるように割り当てられる。
【発明の効果】
【００１５】
一実施例によれば、本開示の検索メモリは、チップ面積の増加を抑制するとともに、消費電流の増加を抑制することが可能である。
【図面の簡単な説明】
【００１６】
【図１】実施形態１に基づく通信機器１の構成を説明する図である。
【図２】ＴＣＡＭセルの構成の一例を示す回路図である。
【図３】図２のＸセルおよびＹセルの記憶内容とＴＣＡＭデータとの対応関係を表形式で示す図である。
【図４】実施形態１に基づく検索メモリ８に含まれる検索ブロック２００の構成を説明する図である。
【図５】実施形態１に基づく検索メモリ８に含まれる複数の検索ユニットの構成を説明する図である。
【図６】実施形態１に基づくセレクタ２０３−０の構成について説明する図である。
【図７】実施形態１に基づくセレクタＳＬ０の構成について説明する図である。
【図８】実施形態１に基づく中段プライオリティエンコーダ３００−０の構成について説明する図である。
【図９】実施形態１に基づくプライオリティエンコーダ３０１の構成について説明する図である。
【図１０】検索ブロック２００とエントリデータとの割り当てについて説明する図である。
【図１１】実施形態１に基づく入力サーチデータKeyに対応するエントリデータを格納した検索ブロック２００の概念図である。
【図１２】実施形態１に基づく検索ブロック２００の割当の方式について説明するフロー図である。
【図１３】図１０（Ｂ）の検索ユニットに割り当てられた場合の選択信号を説明する図である。
【図１４】検索メモリのデータ更新について説明する図である。
【図１５】実施形態２に基づく検索メモリ８＃の構成について説明する図である。
【図１６】実施形態２に基づく検索ユニット７００−０の構成について説明する図である。
【図１７】実施形態２に基づく物理ブロックアドレスと論理ブロックアドレスとの関係について説明する図である。
【図１８】実施形態２に基づく物理ブロックアドレスと論理ブロックアドレスとの関係について説明する別の図である。
【図１９】実施形態２に基づく検索メモリのデータ更新について説明する図である。
【図２０】実施形態２に基づく制御部６０１に含まれている書込制御部８００を説明する図である。
【図２１】実施形態２の変形例に基づく書込制御部８０１の構成について説明する図である。
【発明を実施するための形態】
【００１７】
実施形態について図面を参照しながら詳細に説明する。なお、図中同一または相当部分には同一符号を付し、その説明は繰り返さない。
【００１８】
（実施形態１）
＜通信機器１の全体構成＞
図１は、実施形態１に基づく通信機器１の構成を説明する図である。
【００１９】
図１に示されるように、通信機器１は、スイッチあるいはルータ等の通信装置である。
通信機器１は、ＣＰＵ（Central Processing Unit）２と、転送制御回路４と、汎用メモリ６と、検索メモリ８とを含む。
【００２０】
ＣＰＵ２は、機器全体を制御する。
ＣＰＵ２は、汎用メモリ６に格納されたプログラムと協働して種々の機能を実現する。たとえば、汎用メモリ６は、ＤＲＡＭ（Dynamic Random Access Memory）で構成することが可能であり、ＣＰＵ２と協働することによりオペレーティングシステム（ＯＳ）を構築する。ＣＰＵ２は、隣接する通信機器等と情報交換し、転送処理に必要な情報を維持管理する。
【００２１】
転送制御回路４は、通信パケットの転送処理を実行する。転送制御回路４は、転送処理に特化したＡＳＩＣ（Application Specific Integrated Circuit）回路あるいはＮＰＵ(Network Processing Unit)といった専用ハードウェアが設けられている。転送制御回路４は、検索メモリ８にアクセスして、転送処理に必要な情報を取得する。
【００２２】
検索メモリ８は、本例においては、ＴＣＡＭ装置を用いる場合について説明する。
［ＴＣＡＭセルの構成］
図２は、ＴＣＡＭセルの構成の一例を示す回路図である。
【００２３】
図２を参照して、ＴＣＡＭセル（メモリセルＭＣとも称する）は、２個のＳＲＡＭセル（Static Random Access Memory Cell）１１，１２と、データ比較部１３とを含む。ＳＲＡＭセル１１をＸセルとも称し、ＳＲＡＭセル１４をＹセルとも称する。Ｘセル１１は、内部の記憶ノード対ＮＤ１，ＮＤ１＿ｎに互いに相補となる（一方が“１”のとき他方が“０”となる）１ビット（ｂｉｔ）のデータを記憶する。Ｙセル１４は、内部の記憶ノード対ＮＤ２，ＮＤ２＿ｎに互いに相補となる１ビットのデータを記憶する。ＴＣＡＭセルは、検索メモリセルとも称する。
【００２４】
ＴＣＡＭセルは、ビット線対ＢＬ，／ＢＬ、サーチ線対ＳＬ，／ＳＬ、マッチ線ＭＬ、およびワード線ＷＬＸ，ＷＬＹと接続される。ビット線対ＢＬ，／ＢＬは、図４のＴＣＡＭセルアレイ２０の列方向（Ｙ方向）に延在し、列方向に配列された複数のＴＣＡＭセルによって共有される。サーチ線対ＳＬ，／ＳＬは、ＴＣＡＭセルアレイ２０の列方向（Ｙ方向）に延在し、列方向に配列された複数のＴＣＡＭセルによって共有される。
【００２５】
マッチ線ＭＬは、ＴＣＡＭセルアレイ２０の行方向（Ｘ方向）に延在し、行方向に配列された複数のＴＣＡＭセルによって共有される。ワード線ＷＬＸ，ＷＬＹは、ＴＣＡＭセルアレイ２０の行方向（Ｘ方向）に延在し、行方向に配列された複数のＴＣＡＭセルによって共有される。
【００２６】
Ｘセル１１は、インバータＩＮＶ１，ＩＮＶ２と、ＮチャネルＭＯＳ（Metal Oxide Semiconductor）トランジスタＱ１，Ｑ２とを含む。インバータＩＮＶ１は、記憶ノードＮＤ１＿ｎから記憶ノードＮＤ１へ向かう方向が順方向となるように、記憶ノードＮＤ１と記憶ノードＮＤ１＿ｎの間に接続される。インバータＩＮＶ２は、ＩＮＶ１と並列かつ逆方向に接続される。ＭＯＳトランジスタＱ１は、記憶ノードＮＤ１とビット線ＢＬとの間に接続される。ＭＯＳトランジスタＱ２は、記憶ノードＮＤ１＿ｎとビット線／ＢＬとの間に接続される。ＭＯＳトランジスタＱ１，Ｑ２のゲートは、ワード線ＷＬＸと接続される。
【００２７】
Ｙセル１４は、インバータＩＮＶ３，ＩＮＶ４と、ＭＯＳ（Metal Oxide Semiconductor）トランジスタＱ３，Ｑ４とを含む。インバータＩＮＶ３は、記憶ノードＮＤ２＿ｎから記憶ノードＮＤ２に向かう方向が順方向となるように、記憶ノードＮＤ２と記憶ノードＮＤ２＿ｎの間に接続される。インバータＩＮＶ４は、ＩＮＶ３と並列かつ逆方向に接続される。ＭＯＳトランジスタＱ３は、記憶ノードＮＤ２とビット線ＢＬとの間に接続される。ＭＯＳトランジスタＱ４は、記憶ノードＮＤ２＿ｎとビット線／ＢＬとの間に接続される。ＭＯＳトランジスタＱ３，Ｑ４のゲートは、ワード線ＷＬＹと接続される。
【００２８】
データ比較部１３は、ＮチャネルＭＯＳトランジスタＱ６〜Ｑ９を含む。ＭＯＳトランジスタＱ６，Ｑ７はマッチ線ＭＬとの接続点であるノードＮＤ３と接地ノードＧＮＤとの間に直列に接続される。ＭＯＳトランジスタＱ８，Ｑ９は、ノードＮＤ３と接地ノードＧＮＤとの間に直列に、かつ、直列接続されたＭＯＳトランジスタＱ６，Ｑ７の全体と並列に接続される。ＭＯＳトランジスタＱ６，Ｑ８のゲートは、記憶ノードＮＤ１，ＮＤ２とそれぞれ接続される。ＭＯＳトランジスタＱ７，Ｑ９のゲートは、サーチ線ＳＬ，／ＳＬとそれぞれ接続される。
【００２９】
図３は、図２のＸセルおよびＹセルの記憶内容とＴＣＡＭデータとの対応関係を表形式で示す図である。
【００３０】
図２および図３を参照して、ＴＣＡＭセルは、２ビットのＳＲＡＭセルを用いて、“０”、“１”、“＊”（ドントケア：don't care）の３値を格納することができる。具体的に、Ｘセル１１の記憶ノードＮＤ１に“１”が格納され、Ｙセル１４の記憶ノードＮＤ２に“０”が格納されているとき、ＴＣＡＭセルには“０”が格納されているとする。Ｘセル１１の記憶ノードＮＤ１に“０”が格納され、Ｙセル１４の記憶ノードＮＤ２に“１”が格納されているとき、ＴＣＡＭセルには“１”が格納されているとする。Ｘセル１１の記憶ノードＮＤ１に“０”が格納され、Ｙセル１４の記憶ノードＮＤ２に“０”が格納されているとき、ＴＣＡＭセルには“＊”（ドントケア）が格納されているとする。Ｘセル１１の記憶ノードＮＤ１に“１”が格納され、Ｙセル１４の記憶ノードＮＤ２に“１”が格納されている場合は使用しない。
【００３１】
上記のＴＣＡＭセルの構成によれば、サーチデータが“１”（すなわち、サーチ線ＳＬが“１”、かつ、サーチ線／ＳＬが“０”）であり、ＴＣＡＭデータが“０”（記憶ノードＮＤ１が“１”、かつ、記憶ノードＮＤ２が“０”）である場合には、ＭＯＳトランジスタＱ６，Ｑ７がオン状態となるために、プリチャージされたマッチ線ＭＬの電位が接地電位まで引き抜かれる。サーチデータが“０”（すなわち、サーチ線ＳＬが“０”、かつ、サーチ線／ＳＬが“１”）であり、ＴＣＡＭデータが“１”（記憶ノードＮＤ１が“０”、かつ、記憶ノードＮＤ２が“１”）である場合には、ＭＯＳトランジスタＱ８，Ｑ９がオン状態となるために、プリチャージされたマッチ線ＭＬの電位が接地電位まで引き抜かれる。すなわち、サーチデータとＴＣＡＭデータとが不一致の場合には、マッチ線ＭＬの電位は接地電位まで引き抜かれる。
【００３２】
逆に、入力されたサーチデータが“１”であり、かつ、ＴＣＡＭデータが“１”または“＊”の場合、もしくは、サーチデータが“０”であり、かつ、ＴＣＡＭデータが“０”または“＊”の場合（すなわち、両者が一致する場合）、プリチャージされたマッチ線ＭＬの電位（電源電圧ＶＤＤレベル）は維持される。
【００３３】
上記のように、ＴＣＡＭでは、１つのエントリ（行）に対応するマッチ線ＭＬに接続された全てのＴＣＡＭセルのデータが入力サーチデータと一致しない限り、マッチ線ＭＬに蓄えられた電荷が引き抜かれる。このため、ＴＣＡＭでの検索は高速であるが、消費電流が大きいという問題がある。
【００３４】
図４は、実施形態１に基づく検索メモリ８に含まれる検索ブロック２００の構成を説明する図である。
【００３５】
図４に示されるように、検索ブロック２００は、ＴＣＡＭセルアレイ２０（単にセルアレイとも称する）と、書込ドライバ２１と、サーチ線ドライバ２２と、マッチアンプ部２３と、制御論理回路２４と、読出回路２５とを含む。
【００３６】
検索ブロック２００は、図示していないがワード線ＷＬＸ，ＷＬＹを駆動するためのワード線ドライバ（不図示）と、制御信号やアドレス信号等の入力を受ける入出力回路（不図示）とを含む。
【００３７】
ＴＣＡＭセルアレイ２０は、行列状（ｊ行；ｋ列）に配列されたＴＣＡＭセルを含む。本例においては、セルアレイ２０は、行数（エントリ数）ｊがＬであり、列数（ビット数）ｋが４０の場合が示されている。なお、セルアレイ２０は、少なくとも１つ以上の冗長メモリセル列を有している。
【００３８】
セルアレイ２０の各列に対応して、ｋ個（ｋ＝４０）のビット線対（ＢＬ０，／ＢＬ０からＢＬ（ｋ−１），／ＢＬ（ｋ−１）まで）と、ｋ個（ｋ＝４０）のサーチ線対（ＳＬ０，／ＳＬ０からＳＬ（ｋ−１），／ＳＬ（ｋ−１）まで）とが設けられる。
【００３９】
セルアレイ２０の各行に対応して、ｍ本（ｍ＝Ｎ）のマッチ線（ＭＬ０〜ＭＬ（Ｌ−１）まで）と、図示しないｍ本のＸセル用のワード線（ＷＬＸ０〜ＷＬＸ（Ｌ−１）まで）と、図示しないｍ本のＹセル用のワード線（ＷＬＹ０〜ＷＬＹ（Ｌ−１）まで）とが設けられている。
【００４０】
書込ドライバ２１は、書込時に、ビット線対ＢＬ，／ＢＬを介して各ＴＣＡＭセルに書込データを供給する。サーチ線ドライバ２２は、検索時に、サーチ線対ＳＬ，／ＳＬを介して各ＴＣＡＭセルにサーチデータを供給する。
【００４１】
制御論理回路２４は、検索ブロック２００全体の動作を制御する。たとえば、制御論理回路２４は、検索時には、サーチコマンドを受け取り、サーチ線ドライバ２２と、マッチアンプ部２３に制御信号を出力することによって、サーチ線ドライバ２２、マッチアンプ部２３、およびプリチャージ回路の動作を制御する。制御論理回路２４は、読出時には読出コマンドを受け取り、読出回路２５を制御する制御信号を出力する。これによりセルアレイ２０に格納されているエントリデータを読み出して出力することが可能である。
【００４２】
マッチアンプ部２３は、セルアレイの行にそれぞれ対応する複数のマッチアンプＭＡを含む。マッチアンプＭＡは、検索時に、対応するマッチ線ＭＬの電位に基づいて、対応するＴＣＡＭセルデータと入力サーチデータの対応部分とが一致するか否かを検出する。この実施形態では、マッチアンプＭＡは、検索時に対応するマッチ線ＭＬをプリチャージするためのプリチャージ回路を含む。
【００４３】
図５は、実施形態１に基づく検索メモリ８に含まれる複数の検索ユニットの構成を説明する図である。
【００４４】
図５を参照して、複数の検索ユニット１０２−０〜１０２−３（以下総称して検索ユニット１０２とも称する）と、制御部１０１と、グローバルプライオリティエンコーダ（ＧＰＥ）３０１とが設けられる。
【００４５】
制御部１０１は、複数の入力サーチデータKey０〜Key３（以下、総称して入力サーチデータKeyとも称する）の入力をそれぞれ並列に受ける。
【００４６】
制御部１０１は、複数の入力サーチデータKey０〜Key３をそれぞれ各検索ユニット１０２にそれぞれ出力する。
【００４７】
制御部１０１は、選択信号ＳＥＬＰおよびＳＥＬＱを各検索ユニット１０２にそれぞれ出力する。
【００４８】
各検索ユニット１０２は、複数の検索ブロック２００を有する。
検索ユニット１０２−０は、検索ブロック２００−０〜２００−３（総称して検索ブロック２００とも称する）と、セレクタ２０３−０と、中段プライオリティエンコーダ（ＭＰＥ）３００−０と、セレクタＳＬ０〜ＳＬ３（総称してセレクタＳＬとも称する）とを含む。
【００４９】
セレクタＳＬ０〜ＳＬ３は、検索ブロック２００−０〜２００−３にそれぞれ対応して設けられる。
【００５０】
セレクタ２０３−０は、複数の入力サーチデータKey０〜Key３の入力を受けて、選択信号ＳＥＬＱ０，ＳＥＬＱ１の入力に従って２つの入力サーチデータKeyを各セレクタＳＬに出力する。
【００５１】
セレクタＳＬ０〜ＳＬ３は、２つの入力サーチデータKeyの入力を受けて、選択信号ＳＥＬＰ０〜ＳＥＬＰ３の入力に従って２つの入力サーチデータKeyのいずれか一方を対応する検索ブロック２００に出力する。
【００５２】
対応する検索ブロック２００は、セレクタＳＬから入力された入力サーチデータKeyに対してサーチ動作を実行する。
【００５３】
対応する検索ブロック２００は、一致したマッチ線に対応するアドレス情報（Hit-Index）を中段プライオリティエンコーダ（ＭＰＥ）３００−０に出力する。
【００５４】
中段プライオリティエンコーダ３００−０は、各検索ブロック２００−０〜２００−３から出力されるアドレス情報（Hit-Index）を受けて、優先度の高いアドレス情報をグローバルプライオリティエンコーダ（ＧＰＥ）３０１に出力する。
【００５５】
検索ユニット１０２−１は、検索ブロック２００−４〜２００−７と、セレクタ２０３−１と、中段プライオリティエンコーダ（ＭＰＥ）３００−１と、セレクタＳＬ４〜ＳＬ７とを含む。
【００５６】
セレクタＳＬ４〜ＳＬ７は、検索ブロック２００−４〜２００−７にそれぞれ対応して設けられる。
【００５７】
セレクタ２０３−１は、複数の入力サーチデータKey０〜Key３の入力を受けて、選択信号ＳＥＬＱ２，ＳＥＬＱ３の入力に従って２つの入力サーチデータKeyを各セレクタＳＬに出力する。
【００５８】
セレクタＳＬ４〜ＳＬ７は、２つの入力サーチデータKeyの入力を受けて、選択信号ＳＥＬＰ４〜ＳＥＬＰ７の入力に従って２つの入力サーチデータKeyのいずれか一方を対応する検索ブロック２００に出力する。
【００５９】
対応する検索ブロック２００は、セレクタＳＬから入力された入力サーチデータKeyに対してサーチ動作を実行する。
【００６０】
対応する検索ブロック２００は、一致したマッチ線に対応するアドレス情報（Hit-Index）を中段プライオリティエンコーダ（ＭＰＥ）３００−１に出力する。
【００６１】
中段プライオリティエンコーダ３００−１は、各検索ブロック２００−４〜２００−７から出力されるアドレス情報（Hit-Index）を受けて、優先度の高いアドレス情報をグローバルプライオリティエンコーダ（ＧＰＥ）３０１に出力する。
【００６２】
検索ユニット１０２−２は、検索ブロック２００−８〜２００−１１と、セレクタ２０３−２と、中段プライオリティエンコーダ（ＭＰＥ）３００−２と、セレクタＳＬ８〜ＳＬ１１とを含む。
【００６３】
セレクタＳＬ８〜ＳＬ１１は、検索ブロック２００−８〜２００−１１にそれぞれ対応して設けられる。
【００６４】
セレクタ２０３−２は、複数の入力サーチデータKey０〜Key３の入力を受けて、選択信号ＳＥＬＱ４，ＳＥＬＱ５の入力に従って２つの入力サーチデータKeyを各セレクタＳＬに出力する。
【００６５】
セレクタＳＬ８〜ＳＬ１１は、２つの入力サーチデータKeyの入力を受けて、選択信号ＳＥＬＰ８〜ＳＥＬＰ１１の入力に従って２つの入力サーチデータKeyのいずれか一方を対応する検索ブロック２００に出力する。
【００６６】
対応する検索ブロック２００は、セレクタＳＬから入力された入力サーチデータKeyに対してサーチ動作を実行する。
【００６７】
対応する検索ブロック２００は、一致したマッチ線に対応するアドレス情報（Hit-Index）を中段プライオリティエンコーダ（ＭＰＥ）３００−２に出力する。
【００６８】
中段プライオリティエンコーダ３００−２は、各検索ブロック２００−８〜２００−１１から出力されるアドレス情報（Hit-Index）を受けて、優先度の高いアドレス情報をグローバルプライオリティエンコーダ（ＧＰＥ）３０１に出力する。
【００６９】
検索ユニット１０２−３は、検索ブロック２００−１２〜２００−１５と、セレクタ２０３−３と、中段プライオリティエンコーダ（ＭＰＥ）３００−３と、セレクタＳＬ１２〜ＳＬ１５とを含む。
【００７０】
セレクタＳＬ１２〜ＳＬ１５は、検索ブロック２００−１２〜２００−１５にそれぞれ対応して設けられる。
【００７１】
セレクタ２０３−３は、複数の入力サーチデータKey０〜Key３の入力を受けて、選択信号ＳＥＬＱ６，ＳＥＬＱ７の入力に従って２つの入力サーチデータKeyを各セレクタＳＬに出力する。
【００７２】
セレクタＳＬ１２〜ＳＬ１５は、２つの入力サーチデータKeyの入力を受けて、選択信号ＳＥＬＰ１２〜ＳＥＬＰ１５の入力に従って２つの入力サーチデータKeyのいずれか一方を対応する検索ブロック２００に出力する。
【００７３】
対応する検索ブロック２００は、セレクタＳＬから入力された入力サーチデータKeyに対してサーチ動作を実行する。
【００７４】
対応する検索ブロック２００は、一致したマッチ線に対応するアドレス情報（Hit-Index）を中段プライオリティエンコーダ（ＭＰＥ）３００−３に出力する。
【００７５】
中段プライオリティエンコーダ３００−３は、各検索ブロック２００−１２〜２００−１５から出力されるアドレス情報（Hit-Index）を受けて、優先度の高いアドレス情報をグローバルプライオリティエンコーダ（ＧＰＥ）３０１に出力する。
【００７６】
グローバルプライオリティエンコーダ（ＧＰＥ）３０１は、複数の中段プライオリティエンコーダ３００−０〜３００−３の出力を受けて優先度の高いアドレス情報を最終的に出力する。本例においては、複数の入力サーチデータKey０〜Key３に対して複数のアドレス情報（Hit-Index０〜Hit-Index３）をそれぞれ出力する。
【００７７】
図６は、実施形態１に基づくセレクタ２０３−０の構成について説明する図である。
図６（Ａ）を参照して、セレクタ２０３−０は、選択回路２０３Ａ,２０３Ｂを含む。
【００７８】
選択回路２０３Ａは、複数の入力サーチデータKey０〜Key３の入力を受けて、選択信号ＳＥＬＱ０の入力に従って、複数の入力サーチデータKey０〜Key３の１つを選択して出力信号Ｘとして出力する。
【００７９】
選択回路２０３Ｂは、複数の入力サーチデータKey０〜Key３の入力を受けて、選択信号ＳＥＬＱ１の入力に従って、複数の入力サーチデータKey０〜Key３の１つを選択して出力信号Ｙとして出力する。
【００８０】
選択信号ＳＥＬＱ０,ＳＥＬＱ１は、それぞれ２ビットの制御信号である。
図６（Ｂ）には、選択信号ＳＥＬＱと、選択される出力信号との関係が示されている。
【００８１】
選択信号ＳＥＬＱ０，ＳＥＬＱ１がそれぞれ「００」の場合には、入力サーチデータKey０が選択される。
【００８２】
選択信号ＳＥＬＱ０，ＳＥＬＱ１がそれぞれ「０１」の場合には、入力サーチデータKey１が選択される。
【００８３】
選択信号ＳＥＬＱ０，ＳＥＬＱ１がそれぞれ「１０」の場合には、入力サーチデータKey２が選択される。
【００８４】
選択信号ＳＥＬＱ０，ＳＥＬＱ１がそれぞれ「１１」の場合には、入力サーチデータKey３が選択される。
【００８５】
他のセレクタ２０３−１〜２０３−３の構成についても同様であるのでその詳細な説明については繰り返さない。
【００８６】
図７は、実施形態１に基づくセレクタＳＬ０の構成について説明する図である。
図７（Ａ）を参照して、セレクタＳＬ０は、出力信号Ｘ，Ｙの入力を受けて、選択信号ＳＥＬＰ０の入力に従って、出力信号Ｘ，Ｙの１つを選択して検索ブロック２００−０に出力する。
【００８７】
選択信号ＳＥＬＰ０は、１ビットの制御信号である。
図７（Ｂ）には、選択信号ＳＥＬＰ０と、選択される出力信号との関係が示されている。
【００８８】
選択信号ＳＥＬＰ０が「０」の場合には、信号Ｘが選択されて出力される。
選択信号ＳＥＬＰ０が「１」の場合には、信号Ｙが選択されて出力される。
【００８９】
他のセレクタＳＬ１〜ＳＬ１５の構成についても同様であるのでその詳細な説明については繰り返さない。
【００９０】
図８は、実施形態１に基づく中段プライオリティエンコーダ３００−０の構成について説明する図である。
【００９１】
図８（Ａ）を参照して、中段プライオリティエンコーダ３００−０は、スイッチ回路ＳＷ０〜ＳＷ３と、プライオリティエンコーダ３００Ａ，３００Ｂとを含む。
【００９２】
スイッチ回路ＳＷ０〜ＳＷ３は、選択信号ＳＥＬＰ０〜ＳＥＬＰ３に従って入力される２つのアドレス情報（Hit-Index）を切り替えてプライオリティエンコーダ３００Ａ，３００Ｂのいずれか一方に出力する。
【００９３】
図８（Ｂ）を参照して、選択信号ＳＥＬＰ０と、アドレス情報（Hit-Index）が出力されるプライオリティエンコーダとの関係が示されている。
【００９４】
選択信号ＳＥＬＰ０が「０」の場合には、プライオリティエンコーダ３００Ａにアドレス情報（Hit-Index）が出力される。
【００９５】
選択信号ＳＥＬＰ０が「１」の場合には、プライオリティエンコーダ３００Ｂにアドレス情報（Hit-Index）が出力される。
【００９６】
各プライオリティエンコーダ３００Ａ，３００Ｂは、入力される複数のアドレス情報（Hit-Index）について優先度の高いアドレス情報を選択して出力する。
【００９７】
本例においては、一例として、プライオリティエンコーダ３００Ａからアドレス情報（Hit-IndexＸ）が出力される場合が示されている。プライオリティエンコーダ３００Ｂからアドレス情報（Hit-IndexＹ）が出力される場合が示されている。
【００９８】
図９は、実施形態１に基づくプライオリティエンコーダ３０１の構成について説明する図である。
【００９９】
図９（Ａ）を参照して、プライオリティエンコーダ３０１は、スイッチ回路ＳＷ４〜ＳＷ１１と、プライオリティエンコーダ３０１Ａ〜３０１Ｄとを含む。
【０１００】
スイッチ回路ＳＷ４〜ＳＷ１１は、選択信号ＳＥＬＱ０〜ＳＥＬＱ７の入力に従って、入力されるアドレス情報（Hit-Index）をプライオリティエンコーダ３０１Ａ〜３０１Ｄのいずれか一つに出力する。
【０１０１】
スイッチ回路ＳＷ４は、入力されるアドレス情報（Hit-IndexＸ）を選択信号ＳＥＬＱ０に従ってプライオリティエンコーダ３０１Ａ〜３０１Ｄのいずれか一つに出力する。
【０１０２】
スイッチ回路ＳＷ５は、入力されるアドレス情報（Hit-IndexＹ）を選択信号ＳＥＬＱ１に従ってプライオリティエンコーダ３０１Ａ〜３０１Ｄのいずれか一つに出力する。
【０１０３】
スイッチ回路ＳＷ６は、入力されるアドレス情報（Hit-IndexＸ）を選択信号ＳＥＬＱ２に従ってプライオリティエンコーダ３０１Ａ〜３０１Ｄのいずれか一つに出力する。
【０１０４】
スイッチ回路ＳＷ７は、入力されるアドレス情報（Hit-IndexＹ）を選択信号ＳＥＬＱ３に従ってプライオリティエンコーダ３０１Ａ〜３０１Ｄのいずれか一つに出力する。
【０１０５】
スイッチ回路ＳＷ８は、入力されるアドレス情報（Hit-IndexＸ）を選択信号ＳＥＬＱ４に従ってプライオリティエンコーダ３０１Ａ〜３０１Ｄのいずれか一つに出力する。
【０１０６】
スイッチ回路ＳＷ９は、入力されるアドレス情報（Hit-IndexＹ）を選択信号ＳＥＬＱ５に従ってプライオリティエンコーダ３０１Ａ〜３０１Ｄのいずれか一つに出力する。
【０１０７】
スイッチ回路ＳＷ１０は、入力されるアドレス情報（Hit-IndexＸ）を選択信号ＳＥＬＱ６に従ってプライオリティエンコーダ３０１Ａ〜３０１Ｄのいずれか一つに出力する。
【０１０８】
スイッチ回路ＳＷ１１は、入力されるアドレス情報（Hit-IndexＹ）を選択信号ＳＥＬＱ７に従ってプライオリティエンコーダ３０１Ａ〜３０１Ｄのいずれか一つに出力する。
【０１０９】
プライオリティエンコーダ３０１Ａ〜３０１Ｄは、入力されたアドレス情報について、優先度の高いアドレス情報を最終的に出力する。本例においては、プライオリティエンコーダ３０１Ａ〜３０１Ｄは、複数のアドレス情報（Hit-Index０〜Hit-Index３）をそれぞれ出力する。
【０１１０】
図９（Ｂ）を参照して、選択信号ＳＥＬＱと、出力されるプライオリティエンコーダ（ＰＥ）との関係が示されている。
【０１１１】
選択信号ＳＥＬＱ０〜ＳＥＬＱ７は、それぞれ２ビットの制御信号である。
例えば、スイッチ回路ＳＷ４〜ＳＷ１１は、選択信号ＳＥＬＱ０〜ＳＥＬＱ７が「００」の場合には、入力されるアドレス情報（Hit-Index）をプライオリティエンコーダ３０１Ａに出力する。スイッチ回路ＳＷ４〜ＳＷ１１は、選択信号ＳＥＬＱ０〜ＳＥＬＱ７が「０１」の場合には、入力されるアドレス情報（Hit-Index）をプライオリティエンコーダ３０１Ｂに出力する。スイッチ回路ＳＷ４〜ＳＷ１１は、選択信号ＳＥＬＱ０〜ＳＥＬＱ７が「１０」の場合には、入力されるアドレス情報（Hit-Index）をプライオリティエンコーダ３０１Ｃに出力する。
【０１１２】
スイッチ回路ＳＷ４〜ＳＷ１１は、選択信号ＳＥＬＱ０〜ＳＥＬＱ７が「１１」の場合には、入力されるアドレス情報（Hit-Index）をプライオリティエンコーダ３０１Ｄに出力する。
【０１１３】
次に、検索ブロック２００とエントリデータとの割り当てについて説明する。
図１０は、検索ブロック２００とエントリデータとの割り当てについて説明する図である。
【０１１４】
図１０（Ａ）を参照して、入力サーチデータKey０〜Key３に対してサーチ動作を実行するエントリデータを割り当てる検索ブロック２００の個数が示されている。
【０１１５】
具体的には、入力サーチデータKey０に対するエントリデータを格納する検索ブロック２００の個数４個、入力サーチデータKey１に対するエントリデータを格納する検索ブロック２００の個数４個を割り当てる場合が示されている。さらに、入力サーチデータKey２に対するエントリデータを格納する検索ブロック２００の個数４個、入力サーチデータKey３に対するエントリデータを格納する検索ブロック２００の個数４個を割り当てる場合が示されている。
【０１１６】
この場合、検索ユニット１０２−０に対して、入力サーチデータKey０に対するエントリデータを格納する検索ブロック２００−０〜２００−３をそれぞれ割り当てる。検索ユニット１０２−１に対して、入力サーチデータKey１に対するエントリデータを格納する検索ブロック２００−４〜２００−７をそれぞれ割り当てる。検索ユニット１０２−２に対して、入力サーチデータKey２に対するエントリデータを格納する検索ブロック２００−８〜２００−１１をそれぞれ割り当てる。検索ユニット１０２−３に対して、入力サーチデータKey３に対するエントリデータを格納する検索ブロック２００−１２〜２００−１５をそれぞれ割り当てる。
【０１１７】
図１０（Ｂ）を参照して、入力サーチデータKey０〜Key３に対してサーチ動作を実行するエントリデータに割り当てる検索ブロック２００の個数が示されている。
【０１１８】
具体的には、入力サーチデータKey０に対するエントリデータを格納する検索ブロック２００の個数６個、入力サーチデータKey１に対するエントリデータを格納する検索ブロック２００の個数５個を割り当てる場合が示されている。さらに、入力サーチデータKey２に対するエントリデータを格納する検索ブロック２００の個数３個、入力サーチデータKey３に対するエントリデータを格納する検索ブロック２００の個数２個を割り当てる場合が示されている。
【０１１９】
この場合、検索ユニット１０２−０に対して、入力サーチデータKey０に対するエントリデータを格納する検索ブロック２００−０〜２００−３（４個）をそれぞれ割り当てる。
【０１２０】
検索ユニット１０２−１に対して、入力サーチデータKey０に対するエントリデータを格納する検索ブロック２００−４，２００−５（２個）と、入力サーチデータkey１に対するエントリデータを格納する検索ブロック２００−６，２００−７（２個）とをそれぞれ割り当てる。
【０１２１】
検索ユニット１０２−２に対して、入力サーチデータKey１に対するエントリデータを格納する検索ブロック２００−８，２００−９，２００−１０（３個）と、入力サーチデータKey２に対するエントリデータを格納する検索ブロック２００−１１（１個）とをそれぞれ割り当てる。
【０１２２】
検索ユニット１０２−３に対して、入力サーチデータKey２に対するエントリデータを格納する検索ブロック２００−１２，２００−１３（２個）と、入力サーチデータKey３に対するエントリデータを格納する検索ブロック２００−１４，２００−１５（２個）とをそれぞれ割り当てる。
【０１２３】
図１１は、実施形態１に基づく入力サーチデータKeyに対応するエントリデータを格納した検索ブロック２００の概念図である。
【０１２４】
図１１（Ａ）を参照して、図１０（Ａ）の割り当てに従って入力サーチデータKeyに対応するエントリデータが各検索ブロック２００に格納されている。
【０１２５】
本例の場合には、それぞれの検索ユニット１０２に対して、１種類の入力サーチデータKeyに対するエントリデータが格納される場合が示されている。
【０１２６】
図１１（Ｂ）を参照して、図１０（Ｂ）の割り当てに従って、入力サーチデータKeyに対応するエントリデータが各検索ブロック２００に格納されている。
【０１２７】
本例の場合には、一部の検索ユニット１０２に対して、２種類の入力サーチデータKeyに対するエントリデータが格納される場合が示されている。
【０１２８】
具体的には、検索ユニット１０２−１には、入力サーチデータKey０に対するエントリデータを格納する検索ブロック２００（２個）と、入力サーチデータkey１に対するエントリデータを格納する検索ブロック２００（２個）とがそれぞれ割り当てられている。
【０１２９】
検索ユニット１０２−２には、入力サーチデータKey１に対するエントリデータを格納する検索ブロック２００（３個）と、入力サーチデータKey２に対するエントリデータを格納する検索ブロック２００（１個）とがそれぞれ割り当てられている。
【０１３０】
検索ユニット１０２−３には、入力サーチデータKey２に対するエントリデータを格納する検索ブロック２００（２個）と、入力サーチデータKey３に対するエントリデータを格納する検索ブロック２００（２個）とがそれぞれ割り当てられている。
【０１３１】
当該方式で割り当てることにより、１つの検索ユニット１０２において２種類のエントリデータをそれぞれ格納することが可能となる。
【０１３２】
したがって、４種類の入力サーチデータKeyをそれぞれの検索ブロック２００に入力する必要はないためデータバス幅を削減することが可能となる。また、データバス幅を削減することにより、消費電力も低減することが可能である。
【０１３３】
図１２は、実施形態１に基づく検索ブロック２００の割当の方式について説明するフロー図である。
【０１３４】
当該フローは、１つの検索ユニット１０２において２種類のエントリデータを格納することが可能な方式である。ここで、１つの検索ユニット１０２がＰ個の検索ブロックを有するものとする。
【０１３５】
図１２を参照して、割当に際して、入力サーチデータKey０〜Key３に対応するエントリデータをそれぞれ格納するための検索ブロック２００の個数が小さい順に配列する（ステップＳ０）。具体的には、割り当てる個数について小さい個数の順番に配列する。
【０１３６】
次に、１番目に小さい個数の入力サーチデータに対応するエントリデータを格納するための検索ブロック２００の割当の個数はＰ個以上であるか否かを判断する（ステップＳ１）。たとえば、Ｐ＝４個とする。１番目の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の割当の個数は４個以上であるか否かを判断する。
【０１３７】
ステップＳ１において、１番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の割当の個数はＰ個以上であると判断した場合（ステップＳ１においてＹＥＳ）には、１番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の組を、一つの検索ユニット内の検索ブロックに割り当てる（ステップＳ２）。
【０１３８】
次に、１番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロックの割り当ての個数がＰ個を超えるか否かを判断する。すなわち、Ｐ個を超えた残りの１番目に小さい個数の入力サーチデータKeyに対応するエントリデータを格納するための検索ブロック２００が有るか否かを判断する（ステップＳ３）。
【０１３９】
ステップＳ３において、Ｐ個を超えた残りの１番目に小さい個数の入力サーチデータKeyに対応するエントリデータを格納すべき検索ブロック２００が有ると判断した場合（ステップＳ３においてＹＥＳ）について説明する。当該場合は、残りの１番目に小さい個数の入力サーチデータKeyに対応するエントリデータKeyと２番目に小さい個数の入力サーチデータKeyに対応するエントリデータを格納する検索ブロック２００の組を、次の検索ユニット内の検索ブロック２００の検索ブロック２００に割り当てる（ステップＳ４）。
【０１４０】
次に、残りの２番目に小さい個数の入力サーチデータKeyに対応するエントリデータを格納すべき検索ブロック２００が有るか否かを判断する（ステップＳ５）。
【０１４１】
ステップＳ５において、残りの２番目に小さい個数の入力サーチデータKeyに対応するエントリデータを格納する検索ブロック２００が有ると判断した場合（ステップＳ５においてＹＥＳ）について説明する。当該場合は、２番目と３番目に小さい個数の入力サーチデータKeyに対応するエントリデータを格納する検索ブロック２００の組を、さらに次の検索ユニット内の検索ブロック２００の検索ブロックに割り当てる（ステップＳ６）。
【０１４２】
次に、残りの４番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の組を割り当てる（ステップＳ７）。
【０１４３】
そして、終了する（エンド）。
一方で、ステップＳ３において、残りの１番目に小さい個数の入力サーチデータKeyに対応するエントリデータを格納する検索ブロック２００が無いと判断した場合、すなわち、１番目に小さい個数の入力サーチデータＫｅｙに対応するエントリデータを格納する検索ブロックがＰ個を超えない場合（ステップＳ３においてＮＯ）について説明する。当該場合は、２番目に小さい個数の入力サーチデータKeyに対応するエントリデータを格納する検索ブロック２００の組を、次の検索ユニットの検索ブロックに割り当てる（ステップＳ８）。
【０１４４】
そして、ステップＳ５に進む。
一方で、ステップＳ５において、残りの２番目に小さい個数の入力サーチデータKeyに対応するエントリデータを格納する検索ブロック２００が無いと判断した場合（ステップＳ５においてＮＯ）について説明する。当該場合は、３番目に小さい個数の入力サーチデータKeyに対応するエントリデータを格納する検索ブロック２００の組を、ほかの検索ユニットの検索ブロックに割り当てる（ステップＳ９）。
【０１４５】
そして、ステップＳ７に進む。
そして、処理を終了する（エンド）。
【０１４６】
たとえば、１番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の割当の個数が４個であり、２番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の割当の個数が４個である場合について説明する。さらに、３番目に小さい個数の入力サーチデータに対応するエントリデータを格納する割当の個数が４個であり、４番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の割当の個数が４個である場合について説明する。
【０１４７】
この場合、ステップＳ２において、１番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の個数４個の組が割り当てられる。また、ステップＳ８において、２番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の個数４個の組が割り当てられる。また、ステップＳ９において、３番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の個数４個の組が割り当てられる。また、ステップＳ７において、４番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の個数４個の組が割り当てられる。
【０１４８】
次に、１番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の割当の個数はＰ個以上で無いと判断した場合（ステップＳ１においてＮＯ）について説明する。当該場合には、１番目と２番目に小さい個数の入力サーチデータKeyに対応するエントリデータを格納する検索ブロック２００の合計の個数がＰ個以上であるか否かを判断する（ステップＳ１０）。たとえば、Ｐ＝４個とする。１番目と２番目に小さい個数の入力サーチデータKeyに対応するエントリデータを格納する検索ブロック２００の割当の合計の個数が４個以上であるか否かを判断する。
【０１４９】
ステップＳ１０において、１番目と２番目に小さい個数の入力サーチデータKeyに対応するエントリデータを格納する検索ブロック２００の合計の個数がＰ個以上であると判断した場合（ステップＳ１０においてＹＥＳ）について説明する。当該場合は、１番目と２番目に小さい個数の入力サーチデータKeyに対応するエントリデータを格納する検索ブロック２００の組を一つの検索ユニット内の検索ブロックに割り当てる（ステップＳ１１）。
【０１５０】
次に、残りの２番目に小さい個数の入力サーチデータKeyに対応するエントリデータを格納する検索ブロック２００が有るか否かを判断する（ステップＳ１２）。
【０１５１】
ステップＳ１２において、残りの２番目に小さい個数の入力サーチデータKeyに対応するエントリデータを格納する検索ブロック２００が有ると判断した場合（ステップＳ１２においてＹＥＳ）について説明する。当該場合は、２番目と３番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の組を、次の検索ユニット内の検索ブロックに割り当てる（ステップＳ１４）。
【０１５２】
次に、残りの３番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００が有るか否かを判断する（ステップＳ１６）。
【０１５３】
ステップＳ１６において、残りの３番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００が有ると判断した場合（ステップＳ１６においてＹＥＳ）について説明する。当該場合は、３番目と４番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の組を、さらに次の検索ユニット内の検索ブロックに割り当てる（ステップＳ１８）。
【０１５４】
次に、残りの４番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の組を割り当てる（ステップＳ２０）。
【０１５５】
そして、終了する（エンド）。
たとえば、１番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の割当の個数が２個であり、２番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の割当の個数が３個である場合について説明する。さらに、３番目に小さい個数の入力サーチデータに対応するエントリデータを格納する割当の個数が５個であり、４番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の割当の個数が６個である場合について説明する。
【０１５６】
この場合、ステップＳ１１において、１番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の個数２個と、２番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の個数２個の組が一つの検索ユニット内の検索ブロックに割り当てられる。次に、ステップＳ１４において、２番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の個数１個と、３番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の個数３個の組が次の検索ユニット内の検索ブロックに割り当てられる。次に、ステップＳ１８において、３番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の個数２個と、４番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の個数２個の組がさらにその次の検索ユニット内の検索ブロックに割り当てられる。そして、ステップＳ２０において、残りの４番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の個数４個の組が割り当てられる。
【０１５７】
一方、１番目と２番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の合計の個数がＰ個以上で無いと判断した場合（ステップＳ１０においてＮＯ）について説明する。当該場合は、１番目と３番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の合計の個数がＰ個以上であるか否かを判断する（ステップＳ２８）。
【０１５８】
ステップＳ２８において、１番目と３番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の合計の個数がＰ個以上であると判断した場合（ステップＳ２８においてＹＥＳ）について説明する。当該場合は、１番目と３番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の組を割り当てる（ステップＳ３０）。
【０１５９】
次に、ステップＳ３４において、２番目と３番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の合計の個数がＰ個以上であるか否かを判断する（ステップＳ３４）。
【０１６０】
ステップＳ３４において、２番目と３番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の合計の個数がＰ個以上であると判断した場合（ステップＳ３４においてＹＥＳ）には、２番目と３番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の組を割り当てる（ステップＳ３６）。
【０１６１】
そして、ステップＳ１６に進む。
たとえば、１番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の割当の個数が１個であり、２番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の割当の個数が１個でありる場合について説明する。さらに、３番目に小さい個数の入力サーチデータに対応するエントリデータを格納する割当の個数が６個であり、４番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の割当の個数が８個である場合について説明する。
【０１６２】
この場合、ステップＳ３０において、１番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の個数１個と、３番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の個数３個の組が割り当てられる。次に、ステップＳ３６において、２番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の個数１個と、３番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の個数３個の組が割り当てられる。
【０１６３】
一方、ステップＳ２８において、１番目と３番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の合計の個数がＰ個以上でないと判断した場合（ステップＳ２８においてＮＯ）には、１番目と４番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の組を割り当てる（ステップＳ３２）。
【０１６４】
次に、ステップＳ３４において、２番目と３番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の合計の個数がＰ個以上でないと判断した場合（ステップＳ３４においてＮＯ）には、２番目と４番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の組を割り当てる（ステップＳ３８）。
【０１６５】
次に、残りの３番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００が有るか否かを判断する（ステップＳ４０）。
【０１６６】
ステップＳ４０において、残りの３番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００が有ると判断した場合（ステップＳ４０においてＹＥＳ）には、３番目と４番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の組を割り当てる（ステップＳ４１）。
【０１６７】
たとえば、１番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の割当の個数が１個であり、２番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の割当の個数が２個である場合について説明する。さらに、３番目に小さい個数の入力サーチデータに対応するエントリデータを格納する割当の個数が４個であり、４番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の割当の個数が９個である場合について説明する。
【０１６８】
この場合、ステップＳ３２において、１番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の個数１個と、３番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の個数３個との組を割り当てる。次に、ステップＳ３８において、２番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の割当の個数が２個と、４番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の割当の個数が２個との組を割り当てる。次に、３番目に近い個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の残りの個数１個と、４番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の個数３個との組を割り当てる。
【０１６９】
そして、ステップＳ２０に進む。
一方で、ステップＳ４０において、残りの３番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００が無いと判断した場合（ステップＳ４０においてＮＯ）には、ステップＳ２０に進む。
【０１７０】
たとえば、１番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の割当の個数が１個であり、２番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の割当の個数が１個である場合について説明する。さらに、３番目に小さい個数の入力サーチデータに対応するエントリデータを格納する割当の個数が３個であり、４番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の割当の個数が１１個である場合について説明する。
【０１７１】
この場合、ステップＳ３０において、１番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の個数１個と、３番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の個数３個との組を割り当てる。次に、ステップＳ３８において、２番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の割当の個数が１個と、４番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の割当の個数が３個との組を割り当てる。そして、ステップＳ２０に進む。
【０１７２】
一方、ステップＳ１２において、残りの２番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００が無いと判断した場合（ステップＳ１２においてＮＯ）には、３番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の個数がＰ個以上であるか否かを判断する（ステップＳ２４）。
【０１７３】
ステップＳ２４において、３番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の個数がＰ個以上であると判断した場合（ステップＳ２４においてＹＥＳ）には、３番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の個数であるＰ個の組を割り当てる（ステップＳ２６）。
【０１７４】
次に、ステップＳ１６に進む。
たとえば、１番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の割当の個数が２個であり、２番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の割当の個数が２個である場合について説明する。さらに、３番目に小さい個数の入力サーチデータに対応するエントリデータを格納する割当の個数が４個であり、４番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の割当の個数が８個である場合について説明する。
【０１７５】
この場合、ステップＳ１１において、１番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の個数２個と、２番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の個数２個との組を割り当てる。次に、ステップＳ２６において、３番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の割当の個数が４個の組を割り当てる。そして、ステップＳ１６に進む。
【０１７６】
一方で、ステップＳ２４において、３番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の個数がＰ個以上で無いと判断した場合（ステップＳ２４においてＮＯ）には、ステップＳ４０に進む。
【０１７７】
たとえば、１番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の割当の個数が１個であり、２番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の割当の個数が３個である場合について説明する。さらに、３番目に小さい個数の入力サーチデータに対応するエントリデータを格納する割当の個数が３個であり、４番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の割当の個数が９個である場合について説明する。
【０１７８】
この場合、ステップＳ１１において、１番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の個数１個と、２番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の個数３個との組を割り当てる。そして、ステップＳ４０に進む。
【０１７９】
一方で、ステップＳ１６において、残りの３番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の個数がＰ個以上で無いと判断した場合（ステップＳ１６においてＮＯ）には、ステップＳ２０に進む。
【０１８０】
たとえば、１番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の割当の個数が２個であり、２番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の割当の個数が３個である場合について説明する。さらに、３番目に小さい個数の入力サーチデータに対応するエントリデータを格納する割当の個数が３個であり、４番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の割当の個数が８個である場合について説明する。
【０１８１】
この場合、ステップＳ１１において、１番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の個数２個と、２番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の個数２個との組を割り当てる。次に、ステップＳ１４において、２番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の個数１個と、３番目に小さい個数の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の割当の個数が３個の組を割り当てる。そして、ステップＳ２０に進む。
【０１８２】
図１０（Ｂ）で入力サーチデータKey０〜Key３に対応するエントリデータを格納する検索ブロック２００の個数がそれぞれ６個、５個、３個、２個の場合について説明する。
【０１８３】
図１２のフロー図において、ステップＳ０において、入力サーチデータKey０〜Key３に対応するエントリデータをそれぞれ格納する検索ブロック２００の割当に際して小さい順に配列する。
【０１８４】
具体的には、２個（Key３）、３個（Key２）、５個（Key１）、６個（Key０）の順番に配列する。
【０１８５】
そして、ステップＳ２において、１番目に小さい個数の入力サーチデータKey３の入力サーチデータに対応するエントリデータを格納する検索ブロック２００の個数がＰ個（Ｐ＝４）個で無いと判断する。
【０１８６】
次に、ステップＳ６において、１番目に小さい個数の入力サーチデータKey３と２番目に小さい個数の入力サーチデータKey２に対応するエントリデータを格納する検索ブロック２００の合計の個数が４個以上であると判断する。
【０１８７】
これにより、ステップＳ８において、１番目に小さい個数の入力サーチデータKey３と２番目に小さい個数の入力サーチデータKey２に対応するエントリデータを格納する検索ブロック２００の組を割り当てる。具体的には、１番目に小さい個数の入力サーチデータKey３に対応するエントリデータを格納する検索ブロック２００の割当の個数が２個であり、２番目に小さい個数の入力サーチデータKey２に対応するエントリデータを格納する検索ブロック２００の割当の個数が２個の組を割り当てる。
【０１８８】
次に、ステップＳ１０において、残りの２番目に小さい個数の入力サーチデータKey２に対応するエントリデータを格納する検索ブロック２００が有ると判断する。
【０１８９】
そして、ステップＳ１２において、２番目に小さい個数の入力サーチデータKey２と３番目に小さい個数の入力サーチデータKey１に対応するエントリデータを格納する検索ブロック２００の合計の個数が４個以上であると判断する。
【０１９０】
これにより、ステップＳ１２において、２番目に小さい個数の入力サーチデータKey２と３番目に小さい個数の入力サーチデータKey１に対応するエントリデータを格納する検索ブロック２００の組を割り当てる。具体的には、２番目に小さい個数の入力サーチデータKey２に対応するエントリデータを格納する検索ブロック２００の割当の個数が１個であり、３番目に小さい個数の入力サーチデータKey１に対応するエントリデータを格納する検索ブロック２００の割当の個数が３個の組を割り当てる。
【０１９１】
そして、ステップＳ１６において、残りの３番目に小さい個数の入力サーチデータKey１に対応するエントリデータを格納する検索ブロック２００が有ると判断する。
【０１９２】
次に、ステップＳ１８において、３番目に小さい個数の入力サーチデータKey１と４番目に小さい個数の入力サーチデータKey０に対応するエントリデータを格納する検索ブロック２００の組を割り当てる。具体的には、３番目に小さい個数の入力サーチデータKey１に対応するエントリデータを格納する検索ブロック２００の割当の個数が２個であり、４番目に小さい個数の入力サーチデータKey０に対応するエントリデータを格納する検索ブロック２００の割当の個数が２個の組を割り当てる。
【０１９３】
次に、ステップＳ２０において、残りの４番目に小さい個数の入力サーチデータKeyに対応するエントリデータを格納する検索ブロック２００の組を割り当てる。具体的には、４番目に小さい個数の残りの入力サーチデータKey０に対応するエントリデータを格納する検索ブロック２００の４個の組を割り当てる。
【０１９４】
そして、本例においては割り当てた組毎にそれぞれの検索ユニット１０２の検索ブロック２００に格納する。一例として、入力サーチデータKey０の４個の検索ブロック２００の組を検索ユニット１０２−０に割り当てる。入力サーチデータKey０の２個の検索ブロック２００と入力サーチデータKey１の２個の検索ブロック２００の組を検索ユニット１０２−１に割り当てる。入力サーチデータKey１の３個の検索ブロック２００と入力サーチデータKey２の１個の検索ブロック２００の組を検索ユニット１０２−２に割り当てる。入力サーチデータKey２の２個の検索ブロック２００と入力サーチデータKey３の２個の検索ブロック２００の組を検索ユニット１０２−３に割り当てる。
【０１９５】
図１３は、図１０（Ｂ）の検索ユニットに割り当てられた場合の選択信号を説明する図である。
【０１９６】
図１３を参照して、検索ユニット１０２−０について選択信号ＳＥＬＱ０およびＳＥＬＱ１は、ともに「００」に設定する。選択信号ＳＥＬＰ０〜ＳＥＬＰ３は、「０」に設定する。
【０１９７】
選択信号ＳＥＬＱ０は、「００」であるためセレクタ２０３−０は、入力サーチデータKey０を出力信号Ｘとして出力する。また、選択信号ＳＥＬＱ１は、「００」であるためセレクタ２０３−０は、入力サーチデータKey０を出力信号Ｙとして出力する。
【０１９８】
セレクタＳＬ０〜ＳＬ３は、選択信号ＳＥＬＰ０〜ＳＥＬＰ３（「０」）に従って出力信号Ｘである入力サーチデータKey０を選択して検索ブロック２００−０〜２００−３にそれぞれ出力する。
【０１９９】
検索ユニット１０２−１について選択信号ＳＥＬＱ２およびＳＥＬＱ３は、「００」および「０１」に設定する。選択信号ＳＥＬＰ４，ＳＥＬＰ５は「０」に設定する。選択信号ＳＥＬＰ６，ＳＥＬＰ７は、「１」に設定する。
【０２００】
選択信号ＳＥＬＱ２は、「００」であるためセレクタ２０３−１は、入力サーチデータKey０を出力信号Ｘとして出力する。また、選択信号ＳＥＬＱ３は、「０１」であるためセレクタ２０３−１は、入力サーチデータKey１を出力信号Ｙとして出力する。
【０２０１】
セレクタＳＬ４，ＳＬ５は、選択信号ＳＥＬＰ４，ＳＥＬＰ５（「０」）に従って出力信号Ｘである入力サーチデータKey０を選択して検索ブロック２００−４，２００−５に出力する。
【０２０２】
セレクタＳＬ６，ＳＬ７は、選択信号ＳＥＬＰ６，ＳＥＬＰ７（「１」）に従って出力信号Ｙである入力サーチデータKey１を選択して検索ブロック２００−６，２００−７に出力する。
【０２０３】
検索ユニット１０２−２について選択信号ＳＥＬＱ４およびＳＥＬＱ５は、「０１」および「１０」に設定する。選択信号ＳＥＬＰ８，ＳＥＬＰ９，ＳＥＬＰ１０は「０」に設定する。選択信号ＳＥＬＰ１１は、「１」に設定する。
【０２０４】
選択信号ＳＥＬＱ４は、「０１」であるためセレクタ２０３−２は、入力サーチデータKey１を出力信号Ｘとして出力する。また、選択信号ＳＥＬＱ５は、「１０」であるためセレクタ２０３−２は、入力サーチデータKey２を出力信号Ｙとして出力する。
【０２０５】
セレクタＳＬ８，ＳＬ９，ＳＬ１０は、選択信号ＳＥＬＰ８，ＳＥＬＰ９，ＳＥＬ１０（「０」）に従って出力信号Ｘである入力サーチデータKey１を選択して検索ブロック２００−８，２００−９，２００−１０に出力する。
【０２０６】
セレクタＳＬ１１は、選択信号ＳＥＬＰ１１（「１」）に従って出力信号Ｙである入力サーチデータKey２を選択して検索ブロック２００−１１に出力する。
【０２０７】
検索ユニット１０２−３について選択信号ＳＥＬＱ６およびＳＥＬＱ７は、「１０」および「１１」に設定する。選択信号ＳＥＬＰ１２，ＳＥＬＰ１３は「０」に設定する。選択信号ＳＥＬＰ１４，ＳＥＬＰ１５は、「１」に設定する。
【０２０８】
選択信号ＳＥＬＱ６は、「１０」であるためセレクタ２０３−３は、入力サーチデータKey２を出力信号Ｘとして出力する。また、選択信号ＳＥＬＱ７は、「１１」であるためセレクタ２０３−３は、入力サーチデータKey３を出力信号Ｙとして出力する。
【０２０９】
セレクタＳＬ１２，ＳＬ１３は、選択信号ＳＥＬＰ１２，ＳＥＬＰ１３（「０」）に従って入力サーチデータKey２を出力信号Ｘとして選択して検索ブロック２００−１２，２００−１３に出力する。
【０２１０】
セレクタＳＬ１４，ＳＬ１５は、選択信号ＳＥＬＰ１４，ＳＥＬＰ１５（「１」）に従って入力サーチデータKey３を出力信号Ｙとして選択して検索ブロック２００−１４，２００−１５に出力する。
【０２１１】
検索ユニット１０２−０の中段プライオリティエンコーダ３００−０は、検索ブロック２００−０〜２００−３のそれぞれからのアドレス情報の入力を受ける。具体的には、選択信号ＳＥＬＰ０〜ＳＥＬＰ３の入力に従ってプライオリティエンコーダ３００Ａにそれぞれのアドレス情報が入力される。そして、優先度の高いアドレス情報が出力される。
【０２１２】
検索ユニット１０２−１の中段プライオリティエンコーダ３００−１は、検索ブロック２００−４〜２００−７のそれぞれからのアドレス情報の入力を受ける。具体的には、選択信号ＳＥＬＰ４〜ＳＥＬＰ７の入力に従ってプライオリティエンコーダ３００Ａ，３００Ｂにそれぞれのアドレス情報が入力される。検索ブロック２００−４，２００−５のアドレス情報は、選択信号ＳＥＬＰ４，ＳＥＬＰ５（「０」）の入力に従ってプライオリティエンコーダ３００Ａに入力される。検索ブロック２００−６，２００−７のアドレス情報は、選択信号ＳＥＬＰ６，ＳＥＬＰ７（「１」）の入力に従ってプライオリティエンコーダ３００Ｂに入力される。
【０２１３】
検索ユニット１０２−２の中段プライオリティエンコーダ３００−２は、検索ブロック２００−８〜２００−１１のそれぞれからのアドレス情報の入力を受ける。具体的には、選択信号ＳＥＬＰ８〜ＳＥＬＰ１１の入力に従ってプライオリティエンコーダ３００Ａ，３００Ｂにそれぞれのアドレス情報が入力される。検索ブロック２００−８，２００−９，２００−１０のアドレス情報は、選択信号ＳＥＬＰ８，ＳＥＬＰ９，ＳＥＬＰ１０（「０」）の入力に従ってプライオリティエンコーダ３００Ａに入力される。検索ブロック２００−１１のアドレス情報は、選択信号ＳＥＬＰ１１（「１」）の入力に従ってプライオリティエンコーダ３００Ｂに入力される。
【０２１４】
検索ユニット１０２−３の中段プライオリティエンコーダ３００−３は、検索ブロック２００−１２〜２００−１５のそれぞれからのアドレス情報の入力を受ける。具体的には、選択信号ＳＥＬＰ１２〜ＳＥＬＰ１５の入力に従ってプライオリティエンコーダ３００Ａ，３００Ｂにそれぞれのアドレス情報が入力される。検索ブロック２００−１２，２００−１３のアドレス情報は、選択信号ＳＥＬＰ１２，ＳＥＬＰ１３（「０」）の入力に従ってプライオリティエンコーダ３００Ａに入力される。検索ブロック２００−１４，２００−１５のアドレス情報は、選択信号ＳＥＬＰ１４，ＳＥＬＰ１５（「１」）の入力に従ってプライオリティエンコーダ３００Ｂに入力される。
【０２１５】
検索ユニット３０１は、中段プライオリティエンコーダ３００−０〜３００−３のそれぞれからのアドレス情報の入力を受ける。
【０２１６】
具体的には、選択信号ＳＥＬＱ０〜ＳＥＬＱ７の入力に従ってプライオリティエンコーダ３０１Ａ〜３０１Ｄにそれぞれのアドレス情報が入力される。
【０２１７】
検索ユニット１０２−０からのアドレス情報は、選択信号ＳＥＬＱ０，選択信号ＳＥＬＱ１が「００」に設定されるに従って、プライオリティエンコーダ３０１Ａに入力される。
【０２１８】
検索ユニット１０２−１からのアドレス情報は、選択信号ＳＥＬＱ２が「００」に設定されるに従ってプライオリティエンコーダ３０１Ａに入力される。また、検索ユニット１０２−１からのアドレス情報は、選択信号ＳＥＬＱ３が「０１」に設定されるに従って、プライオリティエンコーダ３０１Ｂに入力される。
【０２１９】
検索ユニット１０２−２からのアドレス情報は、選択信号ＳＥＬＱ４が「０１」に設定されるに従ってプライオリティエンコーダ３０１Ｂに入力される。また、検索ユニット１０２−２からのアドレス情報は、選択信号ＳＥＬＱ５が「１０」に設定されるに従って、プライオリティエンコーダ３０１Ｃに入力される。
【０２２０】
検索ユニット１０２−３からのアドレス情報は、選択信号ＳＥＬＱ６が「１０」に設定されるに従ってプライオリティエンコーダ３０１Ｃに入力される。また、検索ユニット１０２−３からのアドレス情報は、選択信号ＳＥＬＱ７が「１１」に設定されるに従って、プライオリティエンコーダ３０１Ｄに入力される。
【０２２１】
プライオリティエンコーダ３０１Ａ〜３０１Ｄは、入力されるアドレス情報に従って優先度の高いアドレス情報を出力する。
【０２２２】
プライオリティエンコーダ３０１Ａには、入力サーチデータKey０に対応するアドレス情報が入力される。また、プライオリティエンコーダ３０１Ｂには、入力サーチデータKey１に対応するアドレス情報が入力される。プライオリティエンコーダ３０１Ｃには、入力サーチデータKey２に対応するアドレス情報が入力される。プライオリティエンコーダ３０１Ｄには、入力サーチデータKey３に対応するアドレス情報が入力される。
【０２２３】
当該方式により、複数の入力サーチデータKey０〜Key３が入力される検索メモリに対して入力サーチデータKey０〜Key３にそれぞれ対応するエントリデータを検索ブロック２００に対して自由に割り当てることが可能である。
【０２２４】
これによりデータバス幅を低減させて、消費電力も低減することが可能である。
４つの入力サーチデータに対して各々任意の検索ユニットに配分して検索する場合、従来の方式では、全ての検索ブロック２００に４つのサーチ入力データを入力し、検索処理を実行していた。
【０２２５】
そのため並列検索数がＫ個の検索キーを、検索ユニットに分配する場合には、データバス幅は、入力サーチデータのバス幅は、Ｋ倍のバス幅になる。
【０２２６】
しかし、本実施形態１では入力サーチデータ毎に、対象となる検索ユニットを特定のグループに集約するように特定のルールにもとづいて割り当てることでグループごとに必要になる入力サーチデータは２個まで削減可能としている。
【０２２７】
そのためＫ個の入力サーチデータからグループごとに２個の入力サーチデータを選択し、その後検索ユニットごとに選択した２個の入力サーチデータの中から最終的な入力サーチデータを選択するような階層構造のデータバスとする。
【０２２８】
当該構成により、検索ユニット内のデータバス幅を入力サーチデータの２倍のデータバス幅まで削減可能となり、チップ面積と消費電流の削減が可能となる。
【０２２９】
（実施形態２）
上記の実施形態１においては、所定の割当ルールに基づいて各入力サーチデータ毎の検索ユニットの検索ブロック数に従って、いずれの検索ユニットで各入力サーチデータの検索を実行するかが決定される。
【０２３０】
検索メモリに対して書き込みされるデータは、追加や削除などによって時間の経過とともに更新されるためブロック数も変化する。
【０２３１】
図１４は、検索メモリのデータ更新について説明する図である。
図１４を参照して、ここでは、入力サーチデータKey０に対応するエントリデータが格納された検索ブロック２００−３のデータが更新により削除された場合が示されている。
【０２３２】
そして、新たに入力サーチデータKey１のエントリデータを格納する場合について説明する。
【０２３３】
この場合、空きの検索ブロック２００−３に入力サーチデータKey１のエントリデータを格納することが考えられる。
【０２３４】
しかしながら、各検索ブロック２００は、プライオリティエンコーダ（ＰＥ）で出力する際のアドレス情報（Hit-Index）を選択するときの判断基準となる優先順位をもっている。
【０２３５】
一般的に、通常アドレスの小さいエントリデータが優先度が高くなるように設計されている。
【０２３６】
したがって、各検索ブロック２００の１６個の優先度は、検索ブロック２００を識別するために使用されるブロックアドレスの上位４ビットの小さい順に優先度が高くなるように設計されている。
【０２３７】
検索ブロック２００−１→２００−２→２００−３→２００−４、・・・２００−１５の優先度に設計されている。
【０２３８】
したがって、追加する入力サーチデータKey１のエントリデータが空きの検索ブロック２００−３に格納された場合には、優先度が高くなる。しかしながら、当該追加する入力サーチデータKey１のエントリデータの優先度が低い場合には、検索ブロック２００ごとの優先順位を守るために、図１４に示すように検索ブロック２００に格納されているエントリデータを移動させる必要が発生する。
【０２３９】
そうすると、エントリデータの移動によりデータ更新に時間がかかるという可能性がある。
【０２４０】
図１５は、実施形態２に基づく検索メモリ８＃の構成について説明する図である。
図１５を参照して、検索メモリ８＃は、複数の検索ユニット７００−０〜７００−３（以下総称して検索ユニット７００とも称する）と、制御部６０１と、グローバルプライオリティエンコーダ（ＧＰＥ）３０１とが設けられる。
【０２４１】
制御部６０１は、複数の入力サーチデータKey０〜Key３（以下、総称して入力サーチデータKeyとも称する）の入力をそれぞれ並列に受ける。
【０２４２】
制御部６０１は、複数の入力サーチデータKey0〜Key３をそれぞれ各検索ユニット７００にそれぞれ出力する。
【０２４３】
制御部６０１は、選択信号ＳＥＬＰおよびＳＥＬＱを各検索ユニット７００にそれぞれ出力する。
【０２４４】
制御部６０１は、書込制御部８００を含む。
図１６は、実施形態２に基づく検索ユニット７００−０の構成について説明する図である。
【０２４５】
図１６を参照して、各検索ユニット７００は、複数の検索ブロック２００を有する。
本例では、代表的に検索ユニット７００−０について説明する。
【０２４６】
書込制御部８００は、検索ブロック２００およびレジスタ７０４にデータを書き込むための制御を実行する。
【０２４７】
検索ユニット７００−０は、４つのサブ検索ユニット７０１−０〜７０１−３（総称してサブ検索ユニット７０１とも称する）と、中段プライオリティエンコーダ３００−０とを含む。各サブ検索ユニット７０１の構成については基本的に同じ構成であるので主にサブ検索ユニット７０１−０，７０１−２の構成について説明する。
【０２４８】
サブ検索ユニット７０１−０は、検索ブロック２００−０と、セレクタＳＬ０と、レジスタ７０４−０（総称してレジスタ７０４とも称する）と、合成回路７０３−０（総称して合成回路７０３とも称する）とを含む。
【０２４９】
サブ検索ユニット７０１−２は、検索ブロック２００−２と、セレクタＳＬ２と、レジスタ７０４−２と、合成回路７０３−２とを含む。
【０２５０】
サブ検索ユニット７０１は、実施形態１で説明した検索ユニット１０２と比較して、レジスタ７０４と合成回路７０３とをさらに設けた点で異なる。その他の構成については同様であるのでその詳細な説明については繰り返さない。
【０２５１】
レジスタ７０４は、対応する検索ブロック２００のブロックアドレスを格納する。
合成回路７０３は、レジスタ７０４に格納されているブロックアドレスを上位ビットとし、検索ブロック２００−０から出力されるアドレス情報（Hit-Index）を下位ビットとして合成して出力する。
【０２５２】
中段プライオリティエンコーダ３００−０の構成について説明する。
中段プライオリティエンコーダ３００−０は、スイッチＳＷ０〜ＳＷ３と、プライオリティエンコーダ３００Ａ，３００Ｂとを含む。
【０２５３】
スイッチＳＷ０〜ＳＷ３は、サブ検索ユニット７０１−０〜７０１−３にそれぞれ対応して設けられる。
【０２５４】
スイッチＳＷ０〜ＳＷ３は、サブ検索ユニット７０１−０〜７０１−３のそれぞれから出力されるアドレス情報（Hit-Index）を選択信号ＳＥＬＰ０〜ＳＥＬＰ３に従ってプライオリティエンコーダ３００Ａ，３００Ｂのいずれか一方に出力する。
【０２５５】
プライオリティエンコーダ３００Ａは、判定回路７０２−０，７０２−１，７０７とを含む。
【０２５６】
判定回路７０２−０は、セレクタ７０５と、優先決定回路７０６とを含む。
優先決定回路７０６は、サブ検索ユニット７０１−０，７０１−２からそれぞれ入力されるアドレス情報（Hit-Index）に従って優先度の高い方を決定する。
【０２５７】
セレクタ７０５は、優先決定回路７０６の決定結果に基づいて優先度の高いアドレス情報（Hit-Index）を出力する。
【０２５８】
判定回路７０２−１も判定回路７０２−０と同様の構成である。
具体的には、サブ検索ユニット７０１−１，７０１−３からそれぞれ入力されるアドレス情報（Hit-Index）に従って優先度の高い方を決定し、優先度の高いアドレス情報（Hit-Index）を出力する。
【０２５９】
判定回路７０７も同様の構成であり、判定回路７０２−０と判定回路７０２−１とから入力されるアドレス情報（Hit-Index）を比較して、優先度の高いアドレス情報（Hit-Index）を出力する。
【０２６０】
プライオリティエンコーダ３００Ｂの構成についてもプライオリティエンコーダ３００Ａと同様の構成である。
【０２６１】
実施形態２においては、レジスタ７０４に変更可能な論理ブロックアドレスを格納する。
【０２６２】
図１７は、実施形態２に基づく物理ブロックアドレスと論理ブロックアドレスとの関係について説明する図である。
【０２６３】
図１７を参照して、入力サーチデータKey０に対応するエントリデータに関して４個の検索ブロック２００に割り当てる。また、入力サーチデータKey１に対応するエントリデータに関して４個の検索ブロック２００に割り当てる。また、入力サーチデータKey２に対応するエントリデータに関して４個の検索ブロック２００に割り当てる。また、入力サーチデータKey３に対応するエントリデータに関して４個の検索ブロック２００に割り当てる。
【０２６４】
実施形態２においては、各検索ブロック２００に割り当てる際に論理ブロックアドレスを割り当てる。
【０２６５】
本例の場合には、入力サーチデータKey０に対応するエントリデータとして割り当てる４個の検索ブロック２００に対して論理ブロックアドレス「００００」、「０００１」、「００１０」、「００１１」を割り当てる場合が示されている。
【０２６６】
入力サーチデータKey１に対応するエントリデータとして割り当てる４個の検索ブロック２００に対して論理ブロックアドレス「０１００」、「０１０１」、「０１１０」、「０１１１」を割り当てる場合が示されている。
【０２６７】
入力サーチデータKey２に対応するエントリデータとして割り当てる４個の検索ブロック２００に対して論理ブロックアドレス「１０００」、「１００１」、「１０１０」、「１０１１」を割り当てる場合が示されている。
【０２６８】
入力サーチデータKey３に対応するエントリデータとして割り当てる４個の検索ブロック２００に対して論理ブロックアドレス「１１００」、「１１０１」、「１１１０」、「１１１１」を割り当てる場合が示されている。
【０２６９】
この場合、論理ブロックアドレスと物理ブロックアドレスとが一致している場合が示されている。
【０２７０】
図１８は、実施形態２に基づく物理ブロックアドレスと論理ブロックアドレスとの関係について説明する別の図である。
【０２７１】
図１８を参照して、ここでは、入力サーチデータKey０に対応するエントリデータを格納する検索ブロック２００−３のデータが削除された場合が示されている。
【０２７２】
具体的には、論理ブロックアドレス「００１１」（物理ブロックアドレス「００１１」）に対応する検索ブロック２００−３のエントリデータが削除された場合が示されている。
【０２７３】
そして、新たに入力サーチデータKey１に対応するエントリデータを割り当てる場合が示されている。
【０２７４】
本例においては、入力サーチデータKey１に対応するエントリデータを格納している複数の検索ブロック２００にそれぞれ対応する複数のレジスタ７０４の値を変更する。
【０２７５】
具体的には、優先度の高い検索ブロック２００に対応するレジスタ７０４について、優先度の高い論理ブロックアドレスを割り当てる。
【０２７６】
一例として、物理ブロックアドレス「０１００」の検索ブロック２００のエントリデータの優先度が最も高く、その次に、物理ブロックアドレス「０１０１」の検索ブロック２００のエントリデータの優先度が高い。さらに、その次に、物理ブロックアドレス「０１１０」の検索ブロック２００のエントリデータの優先度が高く、その次に、物理ブロックアドレス「０１１１」の検索ブロック２００のエントリデータの優先度が高いものとする。
【０２７７】
そして、新たな入力サーチデータKey１に対応するエントリデータの優先度が最も低いものとする。
【０２７８】
本例においては、最も優先度の高い検索ブロック２００のレジスタ７０４に対して、優先度の高い論理ブロックアドレスを割り当てる。
【０２７９】
物理ブロックアドレス「０１００」に対応する検索ブロック２００のレジスタ７０４に論理ブロックアドレス「００１１」を格納する。
【０２８０】
物理ブロックアドレス「０１０１」に対応する検索ブロック２００のレジスタ７０４に論理ブロックアドレス「０１００」を格納する。
【０２８１】
物理ブロックアドレス「０１１０」に対応する検索ブロック２００のレジスタ７０４に論理ブロックアドレス「０１０１」を格納する。
【０２８２】
物理ブロックアドレス「０１１１」に対応する検索ブロック２００のレジスタ７０４に論理ブロックアドレス「０１１０」を格納する。
【０２８３】
そして、物理ブロックアドレス「００１１」に対応する検索ブロック２００のレジスタ７０４に論理ブロックアドレス「０１１１」を格納する。
【０２８４】
上記で説明したようにレジスタ７０４に格納されている情報が出力されるアドレス情報のうちの上位ビットとして合成回路７０３で合成される。
【０２８５】
したがって、アドレス情報（Hit-Index）の優先度としては、物理ブロックアドレス「０１００」の検索ブロック２００のエントリデータの優先度が最も高く、その次に、物理ブロックアドレス「０１０１」の検索ブロック２００のエントリデータの優先度が高い。さらに、その次に、物理ブロックアドレス「０１１０」の検索ブロック２００のエントリデータの優先度が高く、その次に、物理ブロックアドレス「０１１１」の検索ブロック２００のエントリデータの優先度が高くなる。そして、新たな入力サーチデータKey１に対応するエントリデータの優先度が最も低くなる。
【０２８６】
図１９は、実施形態２に基づく検索メモリのデータ更新について説明する図である。
図１９を参照して、ここでは、入力サーチデータKey０に対応するエントリデータが格納された検索ブロック２００−３のデータが更新により削除され、そして、新たに入力サーチデータKey１のエントリデータを検索ブロック２００−３に格納した場合が示されている。
【０２８７】
そして、上記で説明したように、検索ブロック２００−３，２００−４，２００−５，２００−６，２００−７に対応するレジスタ７０４の値がそれぞれ更新されている。
【０２８８】
上記の論理ブロックアドレスの更新に従って、検索ブロック２００−４、２００−５、２００−６、２００−７、２００−３の順番に格納されるエントリデータの優先度が設定される。
【０２８９】
したがって、各検索ブロック２００−４、２００−５、２００−６、２００−７に格納されているエントリデータを実際に移動させる必要はなく、レジスタ７０４に格納されている論理ブロックアドレスのみ変更すれば良い。すなわち、データ更新処理を短時間で実行することが可能である。
【０２９０】
図２０は、実施形態２に基づく制御部６０１に含まれている書込制御部８００を説明する図である。
【０２９１】
図２０を参照して、書込制御部８００は、外部からのコマンドＣｏｍ、アドレスＡｄｄｒおよびデータＤａｔａの入力を受けて、検索ブロック２００に対する書込コマンドＣＡＭ−Ｗおよび書込データＣＡＭ−Ｄを出力する。また、レジスタ７０４に対する書込コマンドＲＥＧ-Ｗおよび書込データＲＥＧ-Ｄを出力する。
【０２９２】
また、書込制御部８００は、論理ブロックアドレスを物理ブロックアドレスに変換するアドレス変換テーブルを有している。
【０２９３】
書込制御部８００は、外部からのコマンドＣｏｍ、アドレスＡｄｄｒおよびデータＤａｔａの入力を受けてアドレス変換テーブルを用いてアドレス変換処理を実行する。
【０２９４】
書込制御部８００は、当該変換テーブルを用いて例えば、外部から入力されるアドレス情報について、上位ビットの論理ブロックアドレスを物理ブロックアドレスに変換して対象の検索ブロック２００に対するアクセスを実行する。
【０２９５】
書込制御部８００は、アドレスＡｄｄｒにより指定された検索ブロック２００に対して書込コマンドＣＡＭ−Ｗに従ってエントリデータの書込処理を実行する。あるいは、指定された検索ブロック２００のレジスタ７０４に対して書込コマンドＲＥＧ−Ｗに従って論理ブロックアドレスの書込処理を実行する。
【０２９６】
（変形例）
実施形態１および２においては、上記で説明した特定の割当ルールに従って検索ブロック２００の割り当てを決定する処理を上位のシステムで実行することが可能である。
【０２９７】
具体的には、図１で説明したＣＰＵ２で実行するようにしても良い。ＣＰＵ２は、隣接する通信回路から転送制御回路４を介してエントリデータのグループの情報を収集し、これら情報に基づいて上記で説明した特定の割当ルールに従って検索ブロックの割り当てを決定する。
【０２９８】
一方で、検索メモリ内で当該処理を実行するようにしても良い。
図２１は、実施形態２の変形例に基づく書込制御部８０１の構成について説明する図である。
【０２９９】
図２１を参照して、書込制御部８０１は、ＣＰＵ８０２を含む。
ＣＰＵ８０２は、入力される入力サーチデータKey０〜Key３に対応するエントリデータが格納される検索ブロック２００のそれぞれの個数に基づいて、上記の特定の割当ルールに従って検索ブロック２００の割り当てを決定する処理を実行する。
【０３００】
ＣＰＵ８０２は、当該決定処理に基づいて入力サーチデータKey０〜Key３に対応するエントリデータが格納される検索ブロック２００をそれぞれ割り当てるとともに、論理ブロックアドレスを設定する。そして、ＣＰＵ８０２は、Key０〜Key３に対応するエントリデータが格納される検索ブロック２００と論理ブロックアドレスとの対応関係を規定するアドレス設定テーブル８２０を作成する。
【０３０１】
ＣＰＵ８０２は、アドレス設定テーブル８２０に基づいて、設定した論理ブロックアドレスと物理ブロックアドレスとの対応関係を規定したアドレス変換テーブル８１０を作成する。
【０３０２】
ＣＰＵ８０２は、アドレス設定テーブル８２０で設定した論理ブロックアドレスを入力サーチデータKey０〜Key３に対応するエントリデータが格納される検索ブロック２００のレジスタに格納する。
【０３０３】
具体的には、書込制御部８０１のＣＰＵ８０２は、外部からのコマンドＣｏｍ、アドレスＡｄｄｒおよびデータＤａｔａの入力を受けて、検索ブロック２００に対する書込コマンドＣＡＭ−Ｗおよび書込データＣＡＭ−Ｄを出力する。また、レジスタ７０４に対する書込コマンドＲＥＧ-Ｗおよび書込データＲＥＧ-Ｄを出力する。
【０３０４】
また、書込制御部８０１のＣＰＵ８０２は、アドレス変換テーブル８１０を用いて例えば、外部から入力されるアドレス情報について、上位ビットの論理ブロックアドレスを物理ブロックアドレスに変換して対象の検索ブロック２００に対するアクセスを実行する。
【０３０５】
書込制御部８０１のＣＰＵ８０２は、アドレスＡｄｄｒにより指定された検索ブロック２００に対して書込コマンドＣＡＭ−Ｗに従ってエントリデータの書込処理を実行する。あるいは、指定された検索ブロック２００のレジスタ７０４に対して書込コマンドＲＥＧ−Ｗに従って論理ブロックアドレスの書込処理を実行する。
【０３０６】
当該処理により、任意の検索ブロック２００にエントリデータを格納するとともに検索ブロック２００に対応して設けられるレジスタ７０４に格納される論理ブロックアドレスを任意の値に変更することにより検索ブロック２００の優先度を調整することが可能である。
【０３０７】
以上、本開示を実施形態に基づき具体的に説明したが、本開示は、実施形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。
【符号の説明】
【０３０８】
１  通信機器、４  転送制御回路、６  汎用メモリ、８  検索メモリ、２０  セルアレイ、２１  書込ドライバ、２２  サーチ線ドライバ、２３  マッチアンプ部、２４  制御論理回路、２５  読出回路、１０１，６０１  制御部、１０２，３０１，７００  検索ユニット、２００  検索ブロック、３００  中段プライオリティエンコーダ、７０１  サブ検索ユニット、７０２，７０７  判定回路、７０３  合成回路、７０４  レジスタ、７０６  優先決定回路、８００，８０１  書込制御部。
【図１】
2019117677.tif 000003
【図２】
2019117677.tif 000004
【図３】
2019117677.tif 000005
【図４】
2019117677.tif 000006
【図５】
2019117677.tif 000007
【図６】
2019117677.tif 000008
【図７】
2019117677.tif 000009
【図８】
2019117677.tif 000010
【図９】
2019117677.tif 000011
【図１０】
2019117677.tif 000012
【図１１】
2019117677.tif 000013
【図１２】
2019117677.tif 000014
【図１３】
2019117677.tif 000015
【図１４】
2019117677.tif 000016
【図１５】
2019117677.tif 000017
【図１６】
2019117677.tif 000018
【図１７】
2019117677.tif 000019
【図１８】
2019117677.tif 000020
【図１９】
2019117677.tif 000021
【図２０】
2019117677.tif 000022
【図２１】
2019117677.tif 000023