(57)【特許請求の範囲】
【請求項１】
キー値とリザルト値とを対応付けて複数記憶したメモリに対し、入力キー値と一致する前記キー値を二分岐検索により特定し、対応する前記リザルト値を出力する検索回路であって、
前記メモリに対する次に読むべき候補となる第１〜第４の読み出しアドレスを先に生成する手段と、
前記第１もしくは第３の読み出しアドレスの一方を選択して前記メモリに与える手段と、
前記第２もしくは第４の読み出しアドレスの一方を選択して前記メモリに与える手段と、
前記第１もしくは第３の読み出しアドレスによる前記メモリからの読み出しデータと前記入力キー値とを比較する手段と、
前記第２もしくは第４の読み出しアドレスによる前記メモリからの読み出しデータと前記入力キー値とを比較する手段と、
前記入力キー値との比較結果に応じ、前記読み出しアドレスの選択を制御する手段と
を備えたことを特徴とする検索回路。
【請求項２】
前記メモリは、前記第１もしくは第３の読み出しアドレスが与えられる第１のメモリと、前記第２もしくは第４の読み出しアドレスが与えられる第２のメモリとを含む
ことを特徴とする請求項１に記載の検索回路。
【請求項３】
前記メモリは、前記第１もしくは第３の読み出しアドレスならびに前記第２もしくは第４の読み出しアドレスが並行して与えられるデュアルポートメモリを含む
ことを特徴とする請求項１に記載の検索回路。
【請求項４】
前記メモリは、１つのアドレスに前記キー値と前記リザルト値とを１組ずつ格納する
ことを特徴とする請求項１乃至３のいずれか一項に記載の検索回路。
【請求項５】
前記メモリは、１つのアドレスに前記キー値と前記リザルト値とを複数組ずつ格納する
ことを特徴とする請求項１乃至３のいずれか一項に記載の検索回路。
【請求項６】
キー値とリザルト値とを対応付けて複数記憶したメモリに対し、入力キー値と一致する前記キー値を二分岐検索により特定し、対応する前記リザルト値を出力する検索方法であって、
前記メモリに対する次に読むべき候補となる第１〜第４の読み出しアドレスを先に生成する工程と、
前記第１もしくは第３の読み出しアドレスの一方を選択して前記メモリに与える工程と、
前記第２もしくは第４の読み出しアドレスの一方を選択して前記メモリに与える工程と、
前記第１もしくは第３の読み出しアドレスによる前記メモリからの読み出しデータと前記入力キー値とを比較する工程と、
前記第２もしくは第４の読み出しアドレスによる前記メモリからの読み出しデータと前記入力キー値とを比較する工程と、
前記入力キー値との比較結果に応じ、前記読み出しアドレスの選択を制御する工程と
を備えたことを特徴とする検索方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、Ｅｔｈｅｒｎｅｔ（登録商標）網等の可変長パケットを扱うネットワークに配置されるパケット処理装置等において、パケットの転送先アドレス等を検索するために用いられる検索回路に関する。
【背景技術】
【０００２】
Ｅｔｈｅｒｎｅｔ（登録商標）網のパケット転送において、受信したパケットの転送先ＭＡＣ（Media Access Control）アドレス等を検索する場合、従来のパケット処理装置では、ボード上に配置されたＣＡＭ（Contents Addressable Memory）用のＩＣ（Integrated
Circuit）チップの機能により検索処理を行うことで対応している。図１（ａ）はＣＡＭのＩＣチップがボード上に配置された状態を示している。
【０００３】
しかし、ボード実装上の問題により部品点数削減の必要がある場合、ＣＡＭによる検索処理部の機能をＦＰＧＡ（Field Programmable Gate Array）等による開発チップ内部に取り込み、ＣＡＭのＩＣチップを削減することが必要になる場合がある。図１（ｂ）はＣＡＭのＩＣチップの機能を開発チップに取り込み、ＣＡＭのＩＣチップを削減した状態を示している。
【０００４】
ＣＡＭによる検索処理部の機能を開発チップ内部に取り込むことで、検索処理部の基本設計から開発を行う必要があるとともに、高密度化されたＦＰＧＡにおいて十分な処理性能を維持するために考慮しなければならない点は多い。
【０００５】
チップ内部での検索処理において、入力されるパケットのヘッダ情報から、検索アルゴリズム等を用いて高速に出力ヘッダを求める方法がある。しかし、パケットデータは可変長であるため、その検索に多くの時間（サイクル）を必要とすると、短いパケットデータが連続で到着した場合など、検索処理中に次パケットが到着して前パケットを上書きしてしまう可能性がある。図２（ａ）はパケットが適度な間隔をもって到着するために、ヘッダ情報に基づいて出力ヘッダを求めるための処理が問題なく行われている状態を示している。これに対し、図２（ｂ）では、短いパケットが連続して到着したことにより、処理の重複が生じ、処理が破綻してしまった状態を示している。
【０００６】
このような状況にならないための救済方法として、一般的に、パケットデータをバッファ等に溜めておき、必要なときに読み出して処理を行うという方法がある。しかし、同様に短パケットが延々と続いた場合には、バッファ内にパケットデータが溜まり続ける恐れがあり、バッファが溢れて処理が破綻しかねない。これに対しては、バッファの増加や読み出し側のクロック速度の向上で幾分救済可能となるが、実現性を考えるとバッファの増加・クロック速度の向上ともに、次第に物理設計の負担につながっていく。
【０００７】
これらを考慮すると、次のパケットデータが入力されるまでに、いかに早く検索処理を終了するかが重要となってくる。
【特許文献１】特開平１１−２８２８５２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
検索処理をチップ内部で高速に行うためのアルゴリズムとして、一般的に『二分岐検索』がよく用いられる（特許文献１等を参照。）。通常の『二分岐検索』の場合、ＲＡＭ（Random Access Memory）等のメモリに記憶されたデータ群を中央のアドレスから読み出し、入力キー値（入力ヘッダ情報）と読み出したデータのキー部分との一致比較を行い、一致すればそこで処理を終了し、不一致であれば大小比較を行い、その結果に応じて次のメモリアドレスを生成し、比較データを再度メモリから読み出す。以降、入力キー値と一致するまでこれを繰り返す。一致したら、そのキー値に対するリザルト値をメモリデータから抽出し、最終的に求める値とする。
【０００９】
二分岐検索の簡単な例を図３に示す。ＲＡＭには、図の様なキー値（Key）とリザルト値（Result）が格納されているものとし、二分岐検索を使用する条件としてキー値は昇順で格納されているものとする。ここでは、例として、入力キー値「１０００」に対するリザルト値を求める場合について示している。
【００１０】
先ず、検索１回目はアドレス「０」〜「７」の中央のアドレス「４」からデータを読み出し、キー値を比較する。ここでは入力キー値「１０００」に対して読み出したキー値は「５００」となり、１０００＞５００となるため、比較結果は「大」となる。
【００１１】
検索２回目はアドレス「０」〜「３」の中央のアドレス「２」もしくはアドレス「５」〜「７」の中央のアドレス「６」にアクセスするが、前回（検索１回目）の比較結果が「大」であるため、アドレス「５」〜「７」の中央のアドレス「６」の方を選択してデータを読み出し、キー値を比較する。ここでは入力キー値「１０００」に対して読み出したキー値は「２０００」となり、１０００＜２０００となるため、比較結果は「小」となる。
【００１２】
検索３回目は残りのアドレス「５」もしくはアドレス「７」にアクセスするが、前回（検索２回目）の比較結果が「小」であるため、アドレス「５」の方を選択してデータを読み出し、キー値を比較する。ここでは入力キー値「１０００」に対して読み出したキー値は「１０００」となり、１０００＝１０００で比較結果が一致するため、検索は終了となり、キー値「１０００」に対するリザルト値「ＹＹＹＺ」を抽出する。
【００１３】
図４は二分岐検索を実行する検索回路の構成例を示す図である。図４において、検索回路１は、候補となる２つのアドレスを出力するレジスタ１０１、１０２と、このレジスタ１０１、１０２の出力を選択してＲＡＭ１０４に与えるセレクタ１０３と、セレクタ１０３の出力を一端に入力し、出力をレジスタ１０１に入力する減算器１０５と、セレクタ１０３の出力を一端に入力し、出力をレジスタ１０２に入力する加算器１０６と、減算器１０５および加算器１０６の他の入力に出力を与えるレジスタ１０７と、このレジスタ１０７の出力を２で割ってレジスタ１０７に入力する割算器１０８とを有している。また、検索回路１は、入力キー値とＲＡＭ１０４の読み出しデータとの一致および大小を比較し、その出力をセレクタ１０３の選択信号として与える比較器１０９と、比較器１０９の出力が一致を示す場合にＲＡＭ１０４の読み出しデータからリザルト値を抽出するリザルト抽出部１１０と、検索回数ｋを保持する検索回数カウンタ１１１とを有している。
【００１４】
動作に際し、検索１回目はレジスタ１０１、１０２、１０７には固定の初期値を与えることとする。検索１回目はこの初期値でＲＡＭ１０４からデータを読み出し、読み出したデータ中のキー値と入力キー値との大小・一致比較を比較器１０９で行う。ここで比較結果が一致すれば検索は終了し、不一致（「大」もしくは「小」）であれば検索２回目に移る。
【００１５】
検索２回目は、レジスタ１０１の方は「前回ＲＡＭアドレス−（レジスタ１０７の初期値／２）」、レジスタ１０２の方は「前回ＲＡＭアドレス＋（レジスタ１０７の初期値／２）」となる。どちらを選択するかは前回の比較器１０９の大小比較結果により、「小」であればレジスタ１０１の方を、「大」であればレジスタ１０２の方をセレクタ１０３で選択し、そのアドレスによりＲＡＭ１０４からデータを読み出し、読み出したデータ中のキー値と入力キー値との大小・一致比較を比較器１０９で行う。比較結果が一致すれば検索は終了し、不一致であれば検索３回目に移る。
【００１６】
検索３回目は、レジスタ１０１の方は「前回ＲＡＭアドレス−（前回のレジスタ１０７の出力値／２）」、レジスタ１０２の方は「前回ＲＡＭアドレス＋（前回のレジスタ１０７の出力値／２）」となり、前回の大小比較結果が「小」であればレジスタ１０１の方を、「大」であればレジスタ１０２の方をセレクタ１０３で選択し、そのアドレスによりＲＡＭ１０４からデータを読み出し、読み出したデータ中のキー値と入力キー値との大小・一致比較を比較器１０９で行う。
【００１７】
以降、比較結果が一致するまでこれらを繰り返し、一致したキー値に対するリザルト値をリザルト抽出部１１０にて抽出する。なお、検索回数カウンタ１１１で管理される検索回数ｋは、アドレスの上限値で決まる所定の値を超えることで、検索エラーを検出するために用いられる。
【００１８】
図５は二分岐検索のフローチャート（アドレス＝０〜１０２３の場合）である。図５において、処理を開始すると、先ず検索回数ｋの初期値を「１」とする（ステップＳ１）。次いで、レジスタ１０１の出力を内部アドレス１、レジスタ１０２の出力を内部アドレス２として、検索１回目の内部アドレス１、２は「５１２」の固定値とし（ステップＳ２）、「５１２」をＲＡＭアドレスとしてＲＡＭ１０４からデータ（Ｄ５１２）を読み出し（ステップＳ３）、読み出したデータ中のキー値と入力キー値との大小・一致比較を行う（ステップＳ４）。一致の場合はそこで検索完了とし（ステップＳ１４）、不一致の場合はＲＡＭデータ「Ｄ５１２」に対する「大」もしくは「小」の判定を行い（ステップＳ４）、次の検索処理に移る。
【００１９】
次の検索処理に移る際、検索回数ｋをカウントアップし（ステップＳ５、Ｓ９）、検索回数ｋが「１１」になったか否か判断し（ステップＳ６、Ｓ１０）、ｋ＝１１となった時点で検索エラー（Miss Hit）として検索処理を中止する（ステップＳ１５）。ＲＡＭアドレスが「０」〜「１０２３」の場合、正常な処理では検索回数ｋが１０回を超えることはないためである。
【００２０】
検索２回目の内部アドレス１は「前回（検索１回目）ＲＡＭアドレス−５１２÷２ｋ−１」、内部アドレス２は「前回ＲＡＭアドレス＋５１２÷２ｋ−１」となり（ステップＳ７、Ｓ１１）、前回の比較結果が「小」であれば内部アドレス１をＲＡＭアドレスとしてＲＡＭ１０４からデータを読み出し（ステップＳ８）、「大」であれば内部アドレス２をＲＡＭアドレスとしてＲＡＭ１０４からデータを読み出し（ステップＳ１２）、読み出したデータ中のキー値と入力キー値との大小・一致比較を行う（ステップＳ１３）。一致の場合はそこで検索完了とし（ステップＳ１４）、不一致の場合は次の検索処理（ステップＳ５、Ｓ９の手前）に移る。以降、比較結果が一致するまでこれらの処理を繰り返す。
【００２１】
次に、より具体的な例として、ＲＡＭアドレスが「０」〜「１０２３」で、入力キー値「Ｄ５１１」を検索する場合のタイムチャートを図６に示す。
【００２２】
先ず、「０」〜「１０２３」の中央のアドレス「５１２」を初期値として、アドレス「５１２」に対するデータ「Ｄ５１２」をＲＡＭ１０４から読み出し、入力キー値「Ｄ５１１」との大小・一致比較を行う。二分岐検索を使用する場合、比較するデータ（ＲＡＭデータ）は昇順が原則であるため、入力キー値「Ｄ５１１」とＲＡＭ１０４から読み出した「Ｄ５１２」との比較結果は「小」となり、次の検索処理に移る。
【００２３】
次にＲＡＭ１０４にアクセスするアドレスは、「０」〜「５１１」もしくは「５１３」〜「１０２３」の中央のアドレスとなるが、前回の比較結果が「小」であるため、「０」〜「５１１」の方の中央のアドレス「２５６」にアクセスする。大小・一致比較結果は、入力キー値「Ｄ５１１」とＲＡＭ１０４から読み出した「Ｄ２５６」との比較なので「大」となり、次の検索処理に移る。
【００２４】
次にＲＡＭ１０４にアクセスするアドレスは、「０」〜「２５５」もしくは「２５７」〜「５１１」の中央のアドレスとなるが、前回の比較結果が「大」であるため、「２５７」〜「５１１」の方の中央のアドレス「３８４」にアクセスする。大小・一致比較結果は、入力キー値「Ｄ５１１」とＲＡＭ１０４から読み出した「Ｄ３８４」との比較なので「大」となり、次の検索処理に移る。
【００２５】
以降、比較結果が一致するまでこれを繰り返し、入力キー値「Ｄ５１１」を検索する場合は、検索開始から比較結果が一致するまで１０サイクルとなる。
【００２６】
図４に示した検索回路１は上述したように動作するものであるが、クロック（ＣＬＫ）が高速になって来ると、ＲＡＭデータ読み出しでの遅延や大小・一致比較の演算回路による遅延などにより、セットアップ（ＳｅｔＵｐ）マージン不足が懸念され、その安定化のために途中にレジスタを１段設ける必要性が出てくる。
【００２７】
図７は二分岐検索で比較回路通過後にレジスタを設けた場合の構成例を示す図であり、比較器１０９の後段にレジスタ１１２を設けるとともに、レジスタ１０７の後段にサイクル幅拡張部１１３を設けた点が図４と異なる。この構成によれば、比較器１０９の後段にレジスタ１１２を設けることでセットアップマージン不足は解消方向に向かうが、今度は検索サイクル数が増大し、検索処理に時間がかかってしまうという問題が新たに発生する。
【００２８】
具体的な例として、レジスタ１１２を設ける前と同様、ＲＡＭアドレスが「０」〜「１０２３」で、入力キー値「Ｄ５１１」を検索する場合のタイムチャートを図８に示す。
【００２９】
先ず、「０」〜「１０２３」の中央のアドレス「５１２」を初期値として、アドレス「５１２」に対するデータ「Ｄ５１２」をＲＡＭ１０４から読み出し、入力キー値「Ｄ５１１」との大小・一致比較を行う。ここまでは同じだが、比較器１０９の後段にレジスタ１１２を設けているため、比較結果が出るまでに２サイクルかかる。つまり、比較器１０９の後段にレジスタ１１２を１段設けた場合は、検索１回につき２サイクルかかってしまうため、検索開始から比較結果が一致するまで１０サイクルの倍の２０サイクルかかってしまうことになる。
【００３０】
そこで、検索サイクル数を削減するためにＲＡＭ１０４を２分割した場合の構成を図９に示す。すなわち、ＲＡＭ１０４をＲＡＭ１０４Ａ（ＲＡＭ１）とＲＡＭ１０４Ｂ（ＲＡＭ２）とに分割し、それぞれにアドレスを生成する回路部とキー値を比較する回路部とを設けている。
【００３１】
また、この構成でＲＡＭアドレスが「０」〜「１０２３」で、入力キー値「Ｄ５１１」を検索する場合のタイムチャートを図１０に示す。なお、ＲＡＭ１０４Ａの方はアドレス「０」〜「５１１」に対して「Ｄ０−Ｋｅｙ，Ｒｅｓｕｌｔ」〜「Ｄ５１１−Ｋｅｙ，Ｒｅｓｕｌｔ」のデータが、ＲＡＭ１０４Ｂの方はアドレス「０」〜「５１１」に対して「Ｄ５１２−Ｋｅｙ，Ｒｅｓｕｌｔ」〜「Ｄ１０２３−Ｋｅｙ，Ｒｅｓｕｌｔ」のデータが格納されていることとする。
【００３２】
先ず、「０」〜「５１１」の中央のアドレス「２５６」を初期値として、アドレス「２５６」に対するデータをＲＡＭ１０４Ａからは「Ｄ２５６」、ＲＡＭ１０４Ｂからは「Ｄ７６８」をそれぞれ読み出し、入力キー値「Ｄ５１１」との大小・一致比較を行う。比較結果は、ＲＡＭ１０４Ａの方は入力キー値「Ｄ５１１」＞「Ｄ２５６」なので「大」、ＲＡＭ１０４Ｂの方は入力キー値「Ｄ５１１」＜「Ｄ７６８」なので「小」となる。
【００３３】
検索２回目は、ＲＡＭ１０４Ａの方はアドレス「１２８」（レジスタ１０１Ａ）もしくは「３８４」（レジスタ１０２Ａ）にアクセスするが、前回の比較結果が「大」なので、アドレス「３８４」に対するデータ「Ｄ３８４」を読み出す。ＲＡＭ１０４Ｂの方もアドレス「１２８」（レジスタ１０１Ｂ）もしくは「３８４」（レジスタ１０２Ｂ）にアクセスするが、前回の比較結果が「小」なので、アドレス「１２８」に対するデータ「Ｄ６４０」を読み出す。入力キー値「Ｄ５１１」との大小・一致比較結果は、ＲＡＭ１０４Ａの方は入力キー値「Ｄ５１１」＞「Ｄ３８４」なので「大」、ＲＡＭ１０４Ｂの方は入力キー値「Ｄ５１１」＜「Ｄ６４０」なので「小」となる。
【００３４】
以降、比較結果が一致するまでこれを繰り返す。比較結果が一致するのは、ＲＡＭ１０４Ａ側のアドレス「５１１」に対するデータ「Ｄ５１１」を読み出した時となり、リザルト抽出部１１０にて「Ｄ５１１」に対するリザルト値を抽出する。
【００３５】
検索サイクル数については、タイムチャートに示したとおり１８サイクルとなり、２０サイクルと比べると２サイクル削減されるが、図６に示した１０サイクルからは程遠い。また、さらにＲＡＭ１０４を分割していけば検索サイクル数の削減が見込まれるが、ＲＡＭのアドレス数が増えるに従って、ＲＡＭ周辺の大小一致比較演算回路やＲＡＭアドレス生成回路、リザルト抽出部などの回路規模が増大してしまう。
【００３６】
上記の従来の問題点に鑑み、二分岐検索を行うに際し、セットアップマージン確保のために比較器の後段にレジスタを１段設けた場合でも、回路規模をあまり増やさず、かつ検索サイクル数に影響を与えない検索回路を提供することを目的とする。
【課題を解決するための手段】
【００３７】
この検索回路の一実施態様では、キー値とリザルト値とを対応付けて複数記憶したメモリに対し、入力キー値と一致する前記キー値を二分岐検索により特定し、対応する前記リザルト値を出力する検索回路であって、前記メモリに対する次に読むべき候補となる第１〜第４の読み出しアドレスを先に生成する手段と、前記第１もしくは第３の読み出しアドレスの一方を選択して前記メモリに与える手段と、前記第２もしくは第４の読み出しアドレスの一方を選択して前記メモリに与える手段と、前記第１もしくは第３の読み出しアドレスによる前記メモリからの読み出しデータと前記入力キー値とを比較する手段と、前記第２もしくは第４の読み出しアドレスによる前記メモリからの読み出しデータと前記入力キー値とを比較する手段と、前記入力キー値との比較結果に応じ、前記読み出しアドレスの選択を制御する手段とを備える。
【００３８】
好ましくは、前記メモリは、前記第１もしくは第３の読み出しアドレスが与えられる第１のメモリと、前記第２もしくは第４の読み出しアドレスが与えられる第２のメモリとを含む。
【００３９】
好ましくは、前記メモリは、前記第１もしくは第３の読み出しアドレスならびに前記第２もしくは第４の読み出しアドレスが並行して与えられるデュアルポートメモリを含む。
【００４０】
好ましくは、前記メモリは、１つのアドレスに前記キー値と前記リザルト値とを１組ずつ格納する。
【００４１】
好ましくは、前記メモリは、１つのアドレスに前記キー値と前記リザルト値とを複数組ずつ格納する。
【発明の効果】
【００４２】
開示の検索回路にあっては、二分岐検索を行うに際し、セットアップマージン確保のために比較器の後段にレジスタを１段設けた場合でも、データの先読みを行うことにより、回路規模をあまり増やさず、かつ検索サイクル数に影響を与えないようにすることができる。
【発明を実施するための最良の形態】
【００４３】
以下、本発明の好適な実施形態につき説明する。
【００４４】
図１１は本発明の一実施形態にかかる検索回路１００の第１の構成パターンを示す図である。図１１において、検索回路１００は、ＲＡＭ１０４Ａ（ＲＡＭ１）およびＲＡＭ１０４Ｂ（ＲＡＭ２）に対して候補となる４つのアドレスを出力するレジスタ１０１Ａ、１０２Ａ、１０１Ｂ、１０２Ｂと、レジスタ１０１Ａ、１０１Ｂの出力を選択してＲＡＭ１０４Ａに与えるセレクタ１０３Ａと、レジスタ１０２Ａ、１０２Ｂの出力を選択してＲＡＭ１０４Ｂに与えるセレクタ１０３Ｂとを備えている。ＲＡＭ１０４Ａ、１０４Ｂには、キー値とリザルト値とを対応付けた同じデータを格納しておく。
【００４５】
また、セレクタ１０３Ａの出力を一端に入力し、出力をレジスタ１０１Ａに入力する減算器１０５Ａと、セレクタ１０３Ａの出力を一端に入力し、出力をレジスタ１０２Ａに入力する加算器１０６Ａと、セレクタ１０３Ｂの出力を一端に入力し、出力をレジスタ１０１Ｂに入力する減算器１０５Ｂと、セレクタ１０３Ｂの出力を一端に入力し、出力をレジスタ１０２Ｂに入力する加算器１０６Ｂと、減算器１０５Ａ、１０５Ｂおよび加算器１０６Ａ、１０６Ｂの他の入力に出力を与えるレジスタ１０７と、このレジスタ１０７の出力を２で割ってレジスタ１０７に入力する割算器１０８とを備えている。
【００４６】
更に、検索回路１００は、入力キー値とＲＡＭ１０４Ａの読み出しデータとの一致および大小を比較する比較器１０９Ａと、その後段で比較結果を保持するレジスタ１１２Ａと、入力キー値とＲＡＭ１０４Ｂの読み出しデータとの一致および大小を比較する比較器１０９Ｂと、その後段で比較結果を保持するレジスタ１１２Ｂと、レジスタ１１２Ａ、１１２Ｂの出力を選択し、セレクタ１０３Ａ、１０３Ｂに選択信号を与えるセレクタ１１４と、セレクタ１１４の出力を入力してセレクタ１１４に選択信号を与えるレジスタ１１５と、セレクタ１１４の出力が一致を示す場合にＲＡＭ１０４Ａ、１０４Ｂの読み出しデータからリザルト値を抽出するリザルト抽出部１１０と、検索回数ｋを保持する検索回数カウンタ１１１とを有している。
【００４７】
動作にあたり、先ず、レジスタ１０１Ａ、１０２Ａ、１０１Ｂ、１０２Ｂにより、ＲＡＭアドレスを生成する。検索１回目は、このレジスタ１０１Ａ、１０２Ａ、１０１Ｂ、１０２Ｂに初期値を与え、ＲＡＭ１０４Ａ、１０４Ｂからデータを読み出し、読み出したデータ中のキー値と入力キー値との大小・一致比較を比較器１０９Ａ、１０９Ｂで行う。初期値を与える際は、レジスタ１０７にも与えることとする。最終的な比較結果として、セレクタ１１４にて、初回のみＲＡＭ１０４Ｂ側の比較結果（レジスタ１１２Ｂ）を選択し、一致であれば検索処理は終了し、不一致（「大」ｏｒ「小」）であれば次の処理に移る。
【００４８】
検索２回目もレジスタ１０１Ａ、１０２Ａ、１０１Ｂ、１０２Ｂに初期値を与えることとし、ＲＡＭ１０４Ａ、１０４Ｂからデータを読み出し、読み出したデータ中のキー値と入力キー値との大小・一致比較を比較器１０９Ａ、１０９Ｂで行う。最終的な比較結果は、前回の比較結果が「小」であればＲＡＭ１０４Ａ側の比較結果（レジスタ１１２Ａ）、「大」であればＲＡＭ１０４Ｂ側の比較結果（レジスタ１１２Ｂ）を選択する。
【００４９】
検索３回目は、レジスタ１０１Ａは「前回ＲＡＭ１アドレス−（レジスタ１０７初期値／２）」、レジスタ１０２Ａは「前回ＲＡＭ１アドレス＋（レジスタ１０７初期値／２）」、レジスタ１０１Ｂは「前回ＲＡＭ２アドレス−（レジスタ１０７初期値／２）」、レジスタ１０２Ｂは「前回ＲＡＭ２アドレス＋（レジスタ１０７初期値／２）」となり、どちらを選択するかは、前々回の比較結果が「小」であればレジスタ１０１Ａ、１０２Ａを選択し、「大」であればレジスタ１０１Ｂ、１０２Ｂを選択する。次に、選択されたアドレスにより、ＲＡＭ１０４Ａ、１０４Ｂからデータを読み出し、読み出したデータ中のキー値と入力キー値との大小・一致比較を比較器１０９Ａ、１０９Ｂで行う。最終的な比較結果は、前回の比較結果が「小」であればＲＡＭ１０４Ａ側の比較結果（レジスタ１１２Ａ）、「大」であればＲＡＭ１０４Ｂ側の比較結果（レジスタ１１２Ｂ）を選択する。
【００５０】
検索４回目以降は、レジスタ１０１Ａは「前回ＲＡＭ１アドレス−（前回レジスタ１０７値／２）」、レジスタ１０２Ａは「前回ＲＡＭ１アドレス＋（前回レジスタ１０７値／２）」、レジスタ１０１Ｂは「前回ＲＡＭ２アドレス−（前回レジスタ１０７値／２）」、レジスタ１０２Ｂは「前回ＲＡＭ２アドレス＋（前回レジスタ１０７値／２）」となり、どちらを選択するかは、前々回の比較結果が「小」であればレジスタ１０１Ａ、１０２Ａを選択し、「大」であればレジスタ１０１Ｂ、１０２Ｂを選択する。次に、選択されたアドレスにより、ＲＡＭ１０４Ａ、１０４Ｂからデータを読み出し、読み出したデータ中のキー値と入力キー値との大小・一致比較を比較器１０９Ａ、１０９Ｂで行う。最終的な比較結果は、前回の比較結果が「小」であればＲＡＭ１０４Ａ側の比較結果（レジスタ１１２Ａ）、「大」であればＲＡＭ１０４Ｂ側の比較結果（レジスタ１１２Ｂ）を選択する。比較結果が一致すれば、一致したキー値に対するリザルト値をリザルト抽出部１１０にて抽出する。
【００５１】
図１２は本発明の一実施形態にかかる検索回路１００の第２の構成パターンを示す図であり、比較器１０９Ａとセレクタ１１４の間にあったレジスタ１１２Ａと、比較器１０９Ｂとセレクタ１１４の間にあったレジスタ１１２Ｂとを除去し、レジスタ１１５からセレクタ１０３Ａ、１０３ＢにＲＡＭアドレスの選択信号を与えるようにして、同じ機能を実現するようにしたものである。セットアップマージン不足に関しても、レジスタ１１５があるため緩和される。
【００５２】
図１３は本発明の一実施形態にかかる検索回路１００の第３の構成パターンを示す図であり、図１１におけるＲＡＭ１０４Ａ、１０４Ｂをデュアルポート（Ｄｕａｌ−Ｐｏｒｔ）のＲＡＭ１０４で構成するようにしたものである。もともとＲＡＭ１０４Ａ、１０４Ｂは同じデータが格納されるものであるため、デュアルポートのＲＡＭ１０４とすることでＲＡＭ１０４ＡもしくはＲＡＭ１０４Ｂの１個分のデータ量で済む利点がある。
【００５３】
図１４は本発明の一実施形態にかかる検索回路１００の第４の構成パターンを示す図であり、図１２におけるＲＡＭ１０４Ａ、１０４ＢをデュアルポートのＲＡＭ１０４で構成するようにしたものである。
【００５４】
次に、図１１〜図１４の実施形態において、ＲＡＭアドレスを「０」〜「１０２３」とした場合のフローチャートを図１５Ａおよび図１５Ｂに示す。
【００５５】
図１５Ａおよび図１５Ｂにおいて、処理を開始すると、先ず検索回数ｋの初期値を「１」とする（ステップＳ１０１）。次いで、レジスタ１０１Ａの出力を内部アドレス１、レジスタ１０２Ａの出力を内部アドレス２、レジスタ１０１Ｂの出力を内部アドレス３、レジスタ１０２Ｂの出力を内部アドレス４として、検索１回目の内部アドレス１、３は「０」、内部アドレス２、４は「５１２」（ＲＡＭアドレス「０」〜「１０２３」の中央のアドレス）のそれぞれ固定値とし（ステップＳ１０２）、これらをＲＡＭアドレスとしてＲＡＭ１０４Ａ、１０４Ｂ（ＲＡＭ１０４のポートＡ、Ｂ）からそれぞれデータを読み出し（ステップＳ１０３）、読み出したデータ中のキー値と入力キー値との大小・一致比較を行う（ステップＳ１０４）。一致の場合はそこで検索完了とし（ステップＳ１３４）、不一致の場合はＲＡＭデータ「Ｄ５１２」に対する「大」もしくは「小」の判定を行い（ステップＳ１０５）、次の検索処理に移る。次の検索処理に移る際、検索回数ｋをカウントアップする（ステップＳ１０６、Ｓ１２０）。
【００５６】
検索２回目の内部アドレス１、３は「２５６」、内部アドレス２、４は「７６８」のそれぞれ固定値とし（ステップＳ１０７、Ｓ１２１）、これらをＲＡＭアドレスとしてＲＡＭ１０４Ａ、１０４Ｂ（ＲＡＭ１０４のポートＡ、Ｂ）からそれぞれデータを読み出し（ステップＳ１０８、Ｓ１２２）、読み出したデータ中のキー値と入力キー値との大小・一致比較を行う（ステップＳ１０９、Ｓ１２３）。一致の場合はそこで検索完了とし（ステップＳ１３４）、不一致の場合は、前回（検索１回目）の比較結果が「小」であればＲＡＭデータ「Ｄ２５６」に対する「大」もしくは「小」の判定結果を最終的な比較結果とし、前回の比較結果が「大」であればＲＡＭデータ「Ｄ７６８」に対する「大」もしくは「小」の判定結果を最終的な比較結果として次の検索処理に移る。
【００５７】
次の検索処理に移る際、検索回数ｋをカウントアップし（ステップＳ１１０、Ｓ１１５、Ｓ１２４、Ｓ１２９）、検索回数ｋが「１１」になったか否か判断し（ステップＳ１１１、Ｓ１１６、Ｓ１２５、Ｓ１３０）、ｋ＝１１となった時点で検索エラー（Miss Hit）として検索処理を中止する（ステップＳ１３５）。ＲＡＭアドレスが「０」〜「１０２３」の場合、正常な処理では検索回数ｋが１０回を超えることはないためである。
【００５８】
検索３回目の内部アドレス１は「前回（検索２回目）ＲＡＭ１アドレス−５１２÷２ｋ−１」、内部アドレス２は「前回ＲＡＭ１アドレス＋５１２÷２ｋ−１」、内部アドレス３は「前回ＲＡＭ２アドレス−５１２÷２ｋ−１」、内部アドレス４は「前回ＲＡＭ２アドレス＋５１２÷２ｋ−１」となり（ステップＳ１１２、Ｓ１１７、Ｓ１２６、Ｓ１３１）、前々回（検索１回目）の比較結果が「小」であれば内部アドレス１と内部アドレス２をＲＡＭアドレスとしてＲＡＭ１０４Ａ、１０４Ｂ（ＲＡＭ１０４のポートＡ、Ｂ）からデータを読み出し（ステップＳ１１３、Ｓ１１８）、「大」であれば内部アドレス３と内部アドレス４をＲＡＭアドレスとしてＲＡＭ１０４Ａ、１０４Ｂ（ＲＡＭ１０４のポートＡ、Ｂ）からデータを読み出し（ステップＳ１２７、Ｓ１３２）、読み出したデータ中のキー値と入力キー値との大小・一致比較を行う（ステップＳ１１４、Ｓ１１９、Ｓ１２８、Ｓ１３３）。一致の場合はそこで検索完了とし（ステップＳ１３４）、不一致の場合は、前回（検索２回目）の比較結果が「小」であればＲＡＭ１０４Ａ側のＲＡＭデータに対する「大」もしくは「小」の判定結果を最終的な比較結果とし、前回の比較結果が「大」であればＲＡＭ１０４Ｂ側のＲＡＭデータに対する「大」もしくは「小」の判定結果を最終的な比較結果として、次の検索処理（Ｐ１、Ｐ２、Ｐ３、Ｐ４）に移る。以降、比較結果が一致するまでこれらを繰り返す。
【００５９】
次に、より具体的な例として、ＲＡＭアドレスが「０」〜「１０２３」で、入力キー値「Ｄ５１１」を検索する場合のタイムチャートを図１６に示す。
【００６０】
先ず、アドレス「０」と、「０」〜「１０２３」の中央のアドレス「５１２」を初期値として、アドレス「０」に対するデータ「Ｄ０」をＲＡＭ１から、アドレス「５１２」に対するデータ「Ｄ５１２」をＲＡＭ２から読み出し、入力キー値「Ｄ５１１」との大小・一致比較を行う。この場合、ＲＡＭ１の方の比較結果（Ｖ５）はＤ５１１＞Ｄ０なので「大」となり、ＲＡＭ２の方の比較結果（Ｖ６）はＤ５１１＜Ｄ５１２なので「小」となる。最終的な比較結果としては、一致した場合を除き、初回のみＲＡＭ２側を選択することとするため「小」となり、次の検索処理に移る。
【００６１】
検索２回目にＲＡＭにアクセスするアドレスは、「０」〜「５１１」の中央のアドレス「２５６」と、「５１３」〜「１０２３」の中央のアドレス「７６８」として、アドレス「２５６」に対するデータ「Ｄ２５６」をＲＡＭ１から、アドレス「７６８」に対するデータ「Ｄ７６８」をＲＡＭ２から読み出し、入力キー値「Ｄ５１１」との大小・一致比較を行う。この場合、ＲＡＭ１の方の比較結果はＤ５１１＞Ｄ２５６なので「大」となり、ＲＡＭ２の方の比較結果はＤ５１１＜Ｄ７６８なので「小」となる。最終的な比較結果は、前回の比較結果が「小」なのでＲＡＭ１側が選択されるため、「大」となり、次の検索処理に移る。
【００６２】
検索３回目にＲＡＭにアクセスするアドレスは、前回アドレス「２５６」、「７６８」に対して「±１２８」した「１２８」と「３８４」もしくは「６４０」と「８９６」とするが、前々回（検索１回目）の比較結果が「小」なので「１２８」と「３８４」が選択されるため、アドレス「１２８」に対するデータ「Ｄ１２８」をＲＡＭ１から、アドレス「３８４」に対するデータ「Ｄ３８４」をＲＡＭ２から読み出し、入力キー値「Ｄ５１１」との大小・一致比較を行う。この場合、ＲＡＭ１の方の比較結果はＤ５１１＞Ｄ１２８なので「大」となり、ＲＡＭ２の方の比較結果もＤ５１１＞Ｄ３８４なので「大」となる。最終的な比較結果は、前回の比較結果が「大」なのでＲＡＭ２側が選択されるため、「大」となり、次の検索処理に移る。
【００６３】
検索４回目にＲＡＭにアクセスするアドレスは、前回アドレス「１２８」、「３８４」に対して「±６４」した「６４」と「１９２」もしくは「３２０」と「４４８」とするが、前々回（検索２回目）の比較結果が「大」なので「３２０」と「４４８」が選択されるため、アドレス「３２０」に対するデータ「Ｄ３２０」をＲＡＭ１から、アドレス「４４８」に対するデータをＲＡＭ２から読み出し、入力キー値「Ｄ５１１」との大小・一致比較を行う。この場合、ＲＡＭ１の方の比較結果はＤ５１１＞Ｄ３２０なので「大」となり、ＲＡＭ２の方の比較結果もＤ５１１＞Ｄ４４８なので「大」となる。最終的な比較結果は、前回の比較結果が「大」なのでＲＡＭ２側が選択されるため、「大」となり、次の検索処理に移る。
【００６４】
以降、比較結果が一致するまでこれらを繰り返し、入力キー値「Ｄ５１１」を検索する場合は、検索開始から比較結果が一致するまで１１サイクルとなる。
【００６５】
更に検索を高速化する手法として、ＲＡＭに格納するデータを、１アドレス毎にキー値とリザルト値を複数組にすることができる。格納するデータを１アドレス毎に２組にした場合のタイムチャートを図１７に示す。比較し易い様、ＲＡＭアドレスが「０」〜「１０２３」で、入力キー値「Ｄ５１１」を検索する場合について示した。ＲＡＭは１アドレス毎に２データ分のキー値とリザルト値を格納することとし、同じデータを格納したＲＡＭ１、ＲＡＭ２の２個のＲＡＭを持つ。この場合、「Ｄ０」〜「Ｄ１０２３」を格納するのに必要なアドレスは、「０」〜「１０２３」の半分の「０」〜「５１１」となる。なお、デュアルポートのＲＡＭを１個としてもよい。
【００６６】
検索処理においては、検索１回目のアドレスを「０」と「２５６」、検索２回目のアドレスを「１２８」と「３８４」にする以外は図１６と同様であり、入力キー値「Ｄ５１１」を検索する場合は、検索開始から比較結果が一致するまで１０サイクルとなる。
【００６７】
以上の結果から、ＲＡＭに格納するデータを１アドレス毎に４組にした場合は、更に１サイクル少ない９サイクルとなることが予想される。同様の考えで、１アドレス毎に８データ分や１６データ分を格納した場合は更なる検索の高速化が見込まれるが、今度は大小・一致比較の演算回路の論理が深くなってしまい、再びセットアップマージン確保が困難となってしまうため、クロック速度などに応じて、１〜４データ分ぐらいまでを格納するのが理想的であると考える。
【００６８】
以上の結果を踏まえ、従来技術（レジスタ１段有り／無し）と実施形態（１データ分構成／２データ分構成／４データ分構成）の検索サイクル数の比較を図１８に示す。（ａ）はＲＡＭアドレスが「０」〜「１０２３」の場合、（ｂ）はＲＡＭアドレスが「０」〜「２０４７」の場合、（ｃ）はＲＡＭアドレスが「０」〜「４０９５」の場合をそれぞれ示している。
【００６９】
以上、本発明の好適な実施の形態により本発明を説明した。ここでは特定の具体例を示して本発明を説明したが、特許請求の範囲に定義された本発明の広範な趣旨および範囲から逸脱することなく、これら具体例に様々な修正および変更を加えることができることは明らかである。すなわち、具体例の詳細および添付の図面により本発明が限定されるものと解釈してはならない。
（付記１）
キー値とリザルト値とを対応付けて複数記憶したメモリに対し、入力キー値と一致する前記キー値を二分岐検索により特定し、対応する前記リザルト値を出力する検索回路であって、
前記メモリに対する次に読むべき候補となる第１〜第４の読み出しアドレスを先に生成する手段と、
前記第１もしくは第３の読み出しアドレスの一方を選択して前記メモリに与える手段と、
前記第２もしくは第４の読み出しアドレスの一方を選択して前記メモリに与える手段と、
前記第１もしくは第３の読み出しアドレスによる前記メモリからの読み出しデータと前記入力キー値とを比較する手段と、
前記第２もしくは第４の読み出しアドレスによる前記メモリからの読み出しデータと前記入力キー値とを比較する手段と、
前記入力キー値との比較結果に応じ、前記読み出しアドレスの選択を制御する手段と
を備えたことを特徴とする検索回路。
（付記２）
前記メモリは、前記第１もしくは第３の読み出しアドレスが与えられる第１のメモリと、前記第２もしくは第４の読み出しアドレスが与えられる第２のメモリとを含む
ことを特徴とする付記１に記載の検索回路。
（付記３）
前記メモリは、前記第１もしくは第３の読み出しアドレスならびに前記第２もしくは第４の読み出しアドレスが並行して与えられるデュアルポートメモリを含む
ことを特徴とする付記１に記載の検索回路。
（付記４）
前記メモリは、１つのアドレスに前記キー値と前記リザルト値とを１組ずつ格納する
ことを特徴とする付記１乃至３のいずれか一項に記載の検索回路。
（付記５）
前記メモリは、１つのアドレスに前記キー値と前記リザルト値とを複数組ずつ格納する
ことを特徴とする付記１乃至３のいずれか一項に記載の検索回路。
（付記６）
前記メモリからの読み出しデータと前記入力キー値との比較の後に、セットアップマージン確保のためのレジスタおよびセレクタを順次に介し、当該セレクタの出力で前記読み出しアドレスの選択を制御する
ことを特徴とする付記１乃至５のいずれか一項に記載の検索回路。
（付記７）
前記メモリからの読み出しデータと前記入力キー値との比較の後に、セレクタおよびレジスタを順次に介し、当該レジスタの出力で前記読み出しアドレスの選択を制御する
ことを特徴とする付記１乃至５のいずれか一項に記載の検索回路。
（付記８）
キー値とリザルト値とを対応付けて複数記憶したメモリに対し、入力キー値と一致する前記キー値を二分岐検索により特定し、対応する前記リザルト値を出力する検索方法であって、
前記メモリに対する次に読むべき候補となる第１〜第４の読み出しアドレスを先に生成する工程と、
前記第１もしくは第３の読み出しアドレスの一方を選択して前記メモリに与える工程と、
前記第２もしくは第４の読み出しアドレスの一方を選択して前記メモリに与える工程と、
前記第１もしくは第３の読み出しアドレスによる前記メモリからの読み出しデータと前記入力キー値とを比較する工程と、
前記第２もしくは第４の読み出しアドレスによる前記メモリからの読み出しデータと前記入力キー値とを比較する工程と、
前記入力キー値との比較結果に応じ、前記読み出しアドレスの選択を制御する工程と
を備えたことを特徴とする検索方法。
（付記９）
前記メモリは、前記第１もしくは第３の読み出しアドレスが与えられる第１のメモリと、前記第２もしくは第４の読み出しアドレスが与えられる第２のメモリとを含む
ことを特徴とする付記８に記載の検索方法。
（付記１０）
前記メモリは、前記第１もしくは第３の読み出しアドレスならびに前記第２もしくは第４の読み出しアドレスが並行して与えられるデュアルポートメモリを含む
ことを特徴とする付記８に記載の検索方法。
（付記１１）
前記メモリは、１つのアドレスに前記キー値と前記リザルト値とを１組ずつ格納する
ことを特徴とする付記８乃至１０のいずれか一項に記載の検索方法。
（付記１２）
前記メモリは、１つのアドレスに前記キー値と前記リザルト値とを複数組ずつ格納する
ことを特徴とする付記８乃至１０のいずれか一項に記載の検索方法。
（付記１３）
前記メモリからの読み出しデータと前記入力キー値との比較の後に、セットアップマージン確保のためのレジスタおよびセレクタを順次に介し、当該セレクタの出力で前記読み出しアドレスの選択を制御する
ことを特徴とする付記８乃至１２のいずれか一項に記載の検索方法。
（付記１４）
前記メモリからの読み出しデータと前記入力キー値との比較の後に、セレクタおよびレジスタを順次に介し、当該レジスタの出力で前記読み出しアドレスの選択を制御する
ことを特徴とする付記８乃至１２のいずれか一項に記載の検索方法。
【図面の簡単な説明】
【００７０】
【図１】ＣＡＭ等の機能を開発チップ内に持たせる場合の概要を示す図である。
【図２】検索処理中に次のパケットが到着して前パケットを上書きしてしまう場合の動作例を示す図である。
【図３】二分岐検索の例を示す図である。
【図４】二分岐検索を実行する検索回路の構成例を示す図である。
【図５】二分岐検索のフローチャートである。
【図６】二分岐検索のタイムチャートである。
【図７】二分岐検索で比較回路通過後にレジスタを設けた場合の構成例を示す図である。
【図８】二分岐検索で比較回路通過後にレジスタを設けた場合のタイムチャートである。
【図９】メモリを２分割した場合の構成例を示す図である。
【図１０】メモリを２分割した場合のタイムチャートである。
【図１１】本発明の一実施形態にかかる検索回路の第１の構成パターンを示す図である。
【図１２】本発明の一実施形態にかかる検索回路の第２の構成パターンを示す図である。
【図１３】本発明の一実施形態にかかる検索回路の第３の構成パターンを示す図である。
【図１４】本発明の一実施形態にかかる検索回路の第４の構成パターンを示す図である。
【図１５Ａ】実施形態の動作例を示すフローチャート（その１）である。
【図１５Ｂ】実施形態の動作例を示すフローチャート（その２）である。
【図１６】実施形態の動作例を示すタイムチャートである。
【図１７】メモリに格納するキー値およびリザルト値のデータを２組とした場合の動作例を示すタイムチャートである。
【図１８】各条件における検索サイクル数を示す図である。
【符号の説明】
【００７１】
１００                                      検索回路
１０１Ａ、１０１Ｂ、１０２Ａ、１０２Ｂ      レジスタ
１０３Ａ、１０３Ｂ                          セレクタ
１０４、１０４Ａ、１０４Ｂ                  ＲＡＭ
１０５Ａ、１０５Ｂ                          減算器
１０６Ａ、１０６Ｂ                          加算器
１０７                                      レジスタ
１０８                                      割算器
１０９Ａ、１０９Ｂ                          比較器
１１０                                      リザルト抽出部
１１１                                      検索回数カウンタ
１１２Ａ、１１２Ｂ                          レジスタ
１１４                                      セレクタ
１１５                                      レジスタ
【図１】
0004992824.tif 000002
【図２】
0004992824.tif 000003
【図３】
0004992824.tif 000004
【図４】
0004992824.tif 000005
【図５】
0004992824.tif 000006
【図６】
0004992824.tif 000007
【図７】
0004992824.tif 000008
【図８】
0004992824.tif 000009
【図９】
0004992824.tif 000010
【図１０】
0004992824.tif 000011
【図１１】
0004992824.tif 000012
【図１２】
0004992824.tif 000013
【図１３】
0004992824.tif 000014
【図１４】
0004992824.tif 000015
【図１５Ａ】
0004992824.tif 000016
【図１５Ｂ】
0004992824.tif 000017
【図１６】
0004992824.tif 000018
【図１７】
0004992824.tif 000019
【図１８】
0004992824.tif 000020