JP4076497B2 - 内容アドレス・メモリ内の異なるテーブルの同時サーチ - Google Patents

内容アドレス・メモリ内の異なるテーブルの同時サーチ Download PDF

Info

Publication number
JP4076497B2
JP4076497B2 JP2003522942A JP2003522942A JP4076497B2 JP 4076497 B2 JP4076497 B2 JP 4076497B2 JP 2003522942 A JP2003522942 A JP 2003522942A JP 2003522942 A JP2003522942 A JP 2003522942A JP 4076497 B2 JP4076497 B2 JP 4076497B2
Authority
JP
Japan
Prior art keywords
coupled
filter
crossbar switch
circuit
data
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2003522942A
Other languages
English (en)
Other versions
JP2005501448A (ja
JP2005501448A5 (ja
Inventor
スリニヴァサン,ヴァラダラジャン
カンナ,サンディープ
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Netlogic I LLC
Original Assignee
Netlogic Microsystems Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Netlogic Microsystems Inc filed Critical Netlogic Microsystems Inc
Publication of JP2005501448A publication Critical patent/JP2005501448A/ja
Publication of JP2005501448A5 publication Critical patent/JP2005501448A5/ja
Application granted granted Critical
Publication of JP4076497B2 publication Critical patent/JP4076497B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C15/00Digital stores in which information comprising one or more characteristic parts is written into the store and in which information is read-out by searching for one or more of these characteristic parts, i.e. associative or content-addressed stores
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/903Querying
    • G06F16/90335Query processing
    • G06F16/90339Query processing by using parallel associative memories or content-addressable memories

Landscapes

  • Engineering & Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Description

本発明は、メモリ・デバイスの分野、特に内容アドレス・メモリ(連想記憶装置)に関する。
ネットワークは、伝送回線により相互接続され、相互にデータの転送を行うことができるコンピューティング・システム(例えば、クライアントおよびサーバ)の集まりを含む。ネットワークは、通常、発信元から宛先へデータを転送するため伝送回線間でデータの切り換えおよび/または経路選択を行うことができる複数のアクセス・ポイント(例えば、ルータおよびサーバ)を備える。データは、通常、より小さなデータ・セルで構成されるパケットとして送信される。パケットとは、パケット交換ネットワーク上の発信元と宛先との間で経路選択が行われる1単位のデータのことである。ネットワーク上の一方の場所から他方の場所へファイル(例えば、電子メール、グラフィックスなど)を送信する場合、効率よく送信できる小さなパケットにファイルを分割する。データとデータの経路選択に関連する伝送情報の両方を各パケットに含めることで、所定のファイルの個々のパケットはそれぞれネットワーク全体の異なる経路をたどることができる。したがって、パケットは、データを含むペイロードと経路選択情報(例えば、宛先アドレス)を含む1つまたは複数のヘッダとを備えていると言うことができる。
すべてのパケットが宛先に到着すると、それらのパケットは受信側でオリジナル・ファイルに再構築される。このようなパケット交換方式は、コネクションレス・ネットワークでの伝送を取り扱ううえで効率のよい方法である。これは、接続(例えば、音声接続)の持続期間中、その接続に特定の経路を専用経路として割り当てる必要がある回線交換方式とは対照的である。
ルータとは、その宛先に向けてパケットが転送される次のネットワーク・セグメントを決定するデバイス(例えば、ハードウェア、ファームウェア、ソフトウェア)のことである。ルータは、ネットワーク内の複数のポイントに、または、あるネットワークが別のネットワークと出会う場所(ゲートウェイと呼ばれる)に配置することができる。ルータは、利用可能な経路とその条件を記述したテーブルを作成し、維持し、このテーブルを他の情報とあわせて使用し、与えられたパケットの最適な経路を決定することができる。通常、パケットは、宛先にたどり着くまでに、ルータを備えるいくつものネットワーク・ポイントを通過する。
図1に示されているように、データ・パケットがルータの入力のところに到着すると、何回かルックアップを実行し、パケットのそれ以降の処理を決定する。例えば、ルックアップは、パケットの次の送信先(Next Hop)、サービス品質要件(QoS)、Ethernet(登録商標)ポート・アドレスなどを含む。例えば、ルータAに到着したパケットを考える。ルータAは、パケットがルータAに直接接続されているローカル・サーバを宛先としているかどうか、またはパケットを宛先への経路(ルータB)上の次のルータに送るべきかを決定する必要がある。さらに、ルータAは、パケットの宛先アドレス(DA)および発信元アドレス(SA)に基づいて優先度を割り当てることができる。
まず、パケット・ヘッダを解析または処理して、異なるフィールド(例えば、SA、DA、プロトコルの種類、QoSなど)の値を取得し、さまざまなルックアップを実行する。例えば、SA、DA、およびパケット・ヘッダ内の他の関連するフィールドを使用してパケット分類ルックアップを実行する。例えば、「次のホップ」ルックアップを実行して、パケットの宛先をローカル・サーバにするか、またはルータBにするかを決定する。パケットの宛先がルータBの場合、パケットはルータBのキューの中に置かれる。パケットの宛先がローカル・サーバ(例えば、サーバ1またはサーバ2)の場合、メディア・アクセス制御(MAC)ルックアップを実行して、パケットを適切なサーバに送信する。前の例では、途中でパケットを送信するのに3つのルックアップ、「パケット分類」、「次のホップ」、「MAC」が必要であった。しかし、パケット・ヘッダに対して他のルックアップが実行されることが多いので、ルックアップの個数は5つまたはそれ以上になることもある。
ルータでは、プロセッサおよび内容アドレス・メモリ(CAM)デバイスを使用して、パケットに対してさまざまなルックアップを実行することができる。特定のメモリ・ロケーション・アドレスを指定して情報をアクセスするランダム・アクセス・メモリ(RAM)デバイスとは対照的に、CAMに格納されているデータは、データの内容によりアクセスされる。より具体的には、CAMでは、アドレスを使用して特定のメモリ・ロケーションにアクセスするのではなく、メモリ・デバイス内の特定のメモリ・セルの所望の内容の一部を含むキーを使用する。図2に示されているように、プロセッサはCAMに、コンパランド(被比較数)データ(例えば、パケットのヘッダ・データ)とも呼ばれるキーを連想メモリ・アレイに格納されているデータと比較することを命令する。CAMは同時にそのエントリのすべてを調べ、キーと一致する格納済みのデータを選択する。
CAMデバイス全体、またはそのいくつかのブロックが、キー・コンパランド・データと格納されているデータとの一致について同時にサーチされると、CAMデバイスは、一致フラグを立てて一致が存在することを示す。また、複数一致フラグを立てて複数の一致があることを示す。CAMデバイスは、通常、一致したロケーションを一致アドレスまたはCAMインデックスに変換する優先エンコーダを含み、このアドレスをステータス・レジスタに出力し、一致したデータにアクセスすることができるようにする。優先エンコーダはさらに、複数の一致するエントリが存在する場合に、最高優先度で一致するメモリ・ロケーションを選別することができる。
2進数(ビット)ストリングの形式でデータを表すことができ、ビットはロー論理状態(「0」)とハイ論理状態(「1」)のいずれかをとる。異なる種類のCAMを異なるデータ形式で使用することができる。2値CAMは、「0」状態と「1」状態で動作するように設計されているが、3値CAMは「0」状態、「1」状態、「ドントケア」状態で動作するように設計されている。ビットは、ワード(例えば、64または72ビット幅)などのグループにまとめ、CAMの異なるセグメントに格納することができる。異なるデータ・フィールドに使用されるキーは、異なるワード・サイズとすることができ、例えば、「分類」ルックアップのキーは128バイト幅であり、「次のホップ」ルックアップのキーは32ビット幅である。
異なるルックアップを実行するために、ルータは、それぞれが異なるテーブルを持つ複数のCAMを備えるか、あるいは、異なるテーブルのそれぞれについて複数のブロックを備える単一のCAMを備える。例えば、ルータは32ビット幅の「次のホップ」CAM、128ビット幅の「分類」CAM、および48ビットの「MAC」CAMを備える。ルータが複数のCAMを備える場合、複数のCAMのそれぞれは、通常、各CAMデバイスとさまざまなキーおよび他の入力および出力データを通信するために使用される共通バスに接続される。同様に、ルータが単一のCAMを備え、ブロックが複数ある場合、共通バスを使用して各ブロックにアクセスする。したがって、ルックアップは、通常、パケットの処理(例えば、次の宛先または分類済みロケーションへ経路選択される)前に逐次的に実行される。バスがすべてのCAMまたはCAMブロックの多くの入力および出力機能と共有されているため、バス上にデータを多重化して出力するために多数のクロック・サイクルを必要とする。このため、一般に、従来のCAMデバイスではサーチ速度および全体的なスループットが制限を受ける。従来のCAMデバイスおよびアーキテクチャでは、ルータによってサポートされているポート、セグメント、またはデバイスの個数およびルックアップの回数が増えるとともに、システムの全体的なスループットが制限される可能性があり望ましくない。
本発明は、内容アドレス・メモリ・アレイ内の異なるテーブルを同時サーチするための方法と装置に関する。
一実施態様では、装置は、それぞれが対応するフィルタ回路に結合されている複数の内容アドレス・メモリ・ブロックを備える。フィルタ回路はそれぞれ、共通入力ストリングを受け取り、フィルタ処理されたコンパランド・ストリングをコンパランド情報としてその内容アドレス・メモリ・ブロックに送信するように構成されている。フィルタ・コンパランド・ストリングを圧縮することができる。
本発明の他の特徴および利点は、付属の図面と以下で述べる詳細な説明から明らかになる。
本発明は、例を用いて説明されているが、付属の図面の図の制限を受けることを意図していない。
図1はルータによるパケット処理を概念的に示す図である。
図2はCAMデバイスの一実施形態の図である。
図3は同時ルックアップを実行するように構成されているCAMデバイスを備えるルータのライン・カードまたはブレードの一実施形態の図である。
図4Aは入力ストリング・フィルタ処理回路を備える複数ブロックCAMデバイスの一実施形態の図である。
図4Bは複数ブロックCAMデバイスのフィルタ処理回路の一実施形態の図である。
図5Aは入力ストリングの一実施形態の図である。
図5Bは図5Aの入力ストリングからの特定のパケット・ヘッダ・セグメントを使用するCAMデバイスのオペレーションを概念的に示す図である。
図6は入力ストリングのフィルタ処理および圧縮の一実施形態を概念的に示す図である。
図7は入力ストリングのフィルタ処理および圧縮のビット操作の一実施形態を概念的に示す図である。
図8は入力ストリングをフィルタ処理し、圧縮されるようにフィルタ回路をプログラムする一方法を示す図である。
図9はクロスバ・スイッチの一実施形態の図である。
図10は図9のクロスバ・スイッチのメモリ記憶素子の一実施形態の図である。
図11はフィルタ回路の一実施形態の図である。
図12は図11のアドレス・ジェネレータの一実施形態の図である。
図13は図11のアドレス・ジェネレータの他の実施形態の図である。
図14はフィルタ回路の他の実施形態の図である。
図15はブロック・フィルタ・レジスタに結合されているデータ・ジェネレータの一実施形態の図である。
図16は図15の実施形態の使用例を示す図である。
図17はブロック・フィルタ・レジスタ内のビット・パターン例に基づくクロスバ・スイッチの10個のマトリックス接続を示す図である。
図18はブロック・フィルタ・レジスタに結合されているデータ・ジェネレータの他の実施形態の図である。
図19はセンス・アンプに結合されているブロック・フィルタ・レジスタの一実施形態の図である。
図20はクロスバ・スイッチの一実施形態の図である。
図21はフィルタ回路の他の実施形態の図である。
図22はOR論理回路およびブロック・フィルタ・レジスタに結合されている図21のデータ・ジェネレータの一実施形態の図である。
図23はクロスバ・スイッチの他の実施形態の図である。
以下の説明では、本発明を完全に理解できるように、特定のコンポーネント、回路、プロセスの例など具体的詳細事項を多数述べている。しかし、当業者にとっては、本発明を実施するうえでこれらの具体的詳細事項を使用する必要がないことは明白であろう。また他の場合については、本発明を不必要にわかりにくくすることを避けるため、よく知られているコンポーネントまたは方法について詳述していない。
本発明の実施形態は、後述のさまざまな方法ステップを含む。これらのステップは、ハードウェア・コンポーネントによって実行することも、また機械実行可能な命令で実現することもでき、これらの命令を使用することにより、これらのステップを実行する命令をハードウェア・コンポーネント(例えば、プロセッサ、プログラミング回路)にプログラムすることができる。別法として、これらのステップは、ハードウェアとソフトウェアの併用により実行することもできる。
本発明の実施形態は、命令が格納される機械読取可能媒体を備えるコンピュータ・プログラム製品、つまりソフトウェアとして提供することができる。機械読取可能媒体を使用し、本発明の実施形態を製造するために使用される物品(例えば、ウェハ・マスク)を生成するようにコンピュータ・システム(またはその他の電子デバイス)をプログラムすることができる。機械読取可能媒体としては、限定しないが、フロッピー(登録商標)・ディスク、光ディスク、CD−ROM、および光磁気ディスク、ROM、RAM、EPROM、EEPROM、磁気または光カード、フラッシュ・メモリ、または電子命令を格納するのに好適なその他の種類の媒体/機械読取可能媒体などがある。
機械読取可能媒体は、本発明の実施形態を含む集積回路のデザイン・レイアウトを表すデータを格納することができる。集積回路のダイスのデザイン・レイアウトは、さまざまな手段、例えば、回路図、テキスト・ファイル、ゲート・レベル・ネットリスト、ハードウェア記述言語、レイアウト・ファイルなどを使用して生成することができる。1つまたは複数の集積回路ダイスを含むウェハの加工のため、デザイン・レイアウトをマスク層に変換する。その後、集積回路ダイスをパッケージ化されたコンポーネントに組み立てる。デザイン・レイアウト、マスク層生成、および集積回路ダイスの加工およびパッケージングが当業で知られており、したがって、詳細な説明は行わない。
本明細書で説明する方法および装置は、1つまたは複数のフィルタ処理されたコンパランド・ストリングを生成する共通入力ストリングのフィルタ処理に対応している。一実施形態では、共通入力ストリングのフィルタ処理を行うことで、異なるCAMテーブル内の同時ルックアップを異なるCAMデバイス(またはCAMデバイスの異なるブロック)によりフィルタ処理された複数のコンパランドに対し実行し、フィルタ処理されたコンパランド・ストリング内のデータと連想メモリに格納されているデータとの比較を行うことができる。複数のルックアップを逐次実行する代わりに並行実行すると、パケット・スループット(例えば、ルータの)を著しく向上させることができる。
複数のコンパランドまたはサーチ・キー情報を含む共通入力ストリングは、ネットワーク・プロセッサまたは中央処理ユニットなどのコントローラ・ユニットにより形成することができる。一実施形態では、共通入力ストリングは、1つまたは複数のパケット・ヘッダまたはその一部分を含んでいる。入力ストリングは、パケットのその後の処理、例えば、「分類」、「次のホップ」および「MAC」を決定するために使用できる入力ストリングのフィールド・セグメント内のさまざまな経路選択データを含んでいる。同じ入力ストリングを異なるフィルタ回路に通す。フィルタ回路は、共通入力ストリングの1つまたは複数のセグメントをフィルタ処理されたコンパランド・データとして1つまたは複数のCAMテーブルに選択的に渡せるように事前にプログラムしておくことができる。
一実施形態では、ビット毎にフィルタ処理を実行することができ、その場合、特定の予め決められているビットが、フィルタ処理されたストリング・セグメントを生成するように共通入力ストリングから選択される。フィルタ処理されたストリング・セグメントは、さらに、適切なビット位置へシフトされるため、フィルタ処理されたストリング・セグメントは圧縮され、フィルタ処理されたコンパランド・ストリングに圧縮される。入力ストリングに対し実行される異なる圧縮および/またはフィルタ処理オペレーションは、逐次実行ではなく、並列実行することができるため、フィルタ処理オペレーションは他のフィルタ処理オペレーションが完了する前に開始することができる。その後、フィルタ処理されたコンパランド・ストリングはそれぞれ、CAMデバイス・ブロックに供給することができる。こうして、CAMデバイス・ブロックのすべてが同時ルックアップを実行することができる。別法として、フィルタ処理および/または圧縮を逐次実行し、後のルックアップの前に完了させるか、または後のルックアップと同時に実行することもできる。
一実施形態では、フィルタ処理と圧縮オペレーションは、それぞれ対応するプログラミング回路の制御の下にある複数のクロスバ・スイッチにより実行することができる。入力ストリングは、クロスバ・スイッチのすべてに並行して送信される。各クロスバ・スイッチは、その対応するプログラミング回路により事前にプログラムすることで、入力ストリングの異なるセグメントをフィルタ処理し圧縮して、圧縮されフィルタ処理された複数のコンパランド・ストリングを生成することができる。その後、複数のフィルタ処理されたコンパランド・ストリングを使用して、異なるテーブルを使い異なるルックアップを実行することができる。圧縮されフィルタ処理されたコンパランド・ストリングは、ビット間にギャップができないように連続して埋めることができる。一実施例では、プログラミング回路はアドレス・ジェネレータ、ブロック・フィルタ・レジスタ、およびデータ・ジェネレータを含んでいる。一実施形態では、クロスバ・スイッチおよび/またはブロック・フィルタ・レジスタは、ランダム・アクセス・メモリ(RAM)デバイスで実装することができる。
図3は、同時ルックアップを実行するように構成されているCAMデバイスを備えるルータのライン・カードすなわちライン・ブレードの一実施形態の図である。ライン・カード300は、プロセッサ310、入口インターフェース回路330、出口インターフェース回路340、CAMデバイス320、関連するデータ記憶ユニット370、トラフィック・マネージャ360、およびペイロード記憶ユニット350を備える。
プロセッサ310は、ライン・カード300の他のコンポーネントと連携して、ライン・カード300の動作全体を制御する機能を備える。例えば、本明細書で説明しているように、プロセッサ310は、ネットワーク媒体から入口インターフェース回路330を通じてパケットを受信し、パケットのペイロードをペイロード記憶ユニット350に格納し、パケット・ヘッダ情報を処理して、CAMデバイス320内の必要なルックアップおよびそれ以降のパケットの処理を決定する。例えば、入口回路は、PHYおよびMACデバイスを備える。プロセッサ310は、CAMデバイス320によって実行されるルックアップに基づき出口インターフェース回路340を通してネットワーク媒体上にパケットを送り出す。出口インターフェース回路340はスイッチ・ファブリックに接続されるか、または直接1つまたは複数の他のルータまたはスイッチに接続される。プロセッサ310は、1つまたは複数のネットワーク・プロセッサ・ユニット(NPU)、マイクロプロセッサ、またはデジタル・シグナル・プロセッサ(DSP)などの1つまたは複数の専用プロセッサとすることができる。他の実施形態では、プロセッサ310は、他の種類のコントローラ、例えば、フィールド・プログラマブル・ゲート・アレイまたは汎用プロセッサとすることができる。ルータのプロセッサ310、入口インターフェース回路330、および出口インターフェース回路340の各コンポーネントは、当業では知られており、したがって詳細を説明しない。
パケット・ヘッダ内の情報への応答として、特定のパケットに関して、プロセッサ310は、1つまたは複数のCAMデバイス320により実行されるルックアップの回数および種類を決定し、それらのルックアップに対応するサーチ・キーを形成する。サーチまたはルックアップは、例えば、「分類」ルックアップ、転送ルックアップ(例えば、「次のホップ」または最長プレフィックス一致(LPM)ルックアップ、MACルックアップ、MPLSルックアップなど)を含んでいる。サーチを何回も実行する必要がある場合、プロセッサ310は、ルックアップに対するさまざまなサーチ・キーのうち少なくとも2つ、およびすべてを含んでいる複合サーチ・キーを形成する。複合サーチ・キーは、CAMデバイス320に共通入力ストリングとして供給される。CAMデバイス320は、共通入力ストリングから個々のサーチ・キーを選択して識別し、抽出して、それらの個々のサーチ・キーを関連するCAMブロックに供給して、ルックアップを実行する。ルックアップがCAMデバイス320のCAMブロック内で並行してまたは同時に実行することができ、そのため、サーチが逐次処理される従来のシステムに比べて総合的なスループットが向上するという効果が得られる。
CAMデバイス320を、図4A、4Bに関して後述のように、1つの複数ブロックCAMデバイスとし、各ブロックにコンパランド・ルックアップ用の異なるテーブルを格納するようにすることができる。別法として、CAMデバイス320を単一ブロックCAMデバイスの多数の集まりとし(例えば、それぞれの単一ブロックCAMデバイスは異なる集積回路基板上に形成されている)、各CAMデバイスをコンパランド・ルックアップ用の異なるテーブルを格納するために使用するようにしてもよい。CAMデバイス320でルックアップを複数回実行した後、一致するエントリの関連する情報(例えば、追加経路選択情報および/またはパケット情報)を関連するデータ・ユニット370から取り出すことができる。プロセッサ310は、次に、トラフィック・マネージャ360と交信し、出口インターフェース回路340を通じてライン・カード300からのパケットの終了をスケジュールする。
図4Aは、入力ストリング・フィルタ回路を備える複数ブロックCAMデバイスの一実施形態の図である。CAMデバイス400は図3のCAMデバイス320である。図3のCAM320に関して上で述べたように、ブロックはアレイ全体またはそれよりも大きなアレイの一部とすることができる。一実施形態では、CAMデバイス400は、それぞれのブロックが異なるルックアップ・テーブルまたは1つまたは複数の共通ルックアップ・テーブルの一部を格納する複数のブロック・メモリ・アレイ(N個のブロック)を含んでいる(たとえば、ブロック0およびブロック1は、ある1つのルックアップ・テーブルを格納し、ブロックN−3からN−1は異なるルックアップ・テーブルを格納するようにできる)。説明を簡単にするため5個のブロック410〜414が示されているが、CAMデバイス400が含んでいるブロックの個数はそれよりも多くても少なくてもよい。ブロック410〜414のそれぞれは各フィルタ回路420〜424に結合されている。フィルタ回路420〜424はそれぞれ、共通入力ストリング405を受け取り、入力ストリング405に対して、ルックアップを実行するために使用される1つまたは複数のセグメントをフィルタ処理し、抽出し、または除去する処理を行うように構成されている。他の実施形態では、CAMデバイス400は、図4A、4Bに示されているように、単一の複数ブロックCAMデバイスではなく、複数の単一ブロックCAMデバイスを備えることができる。各フィルタ回路は、さらに、抽出されたサーチ情報を圧縮して、対応するCAMブロックに格納されているデータとの比較操作に加わる連続するビットを形成することができる。
フィルタ回路420〜424はそれぞれ、専用のフィルタ機能を備えてもよく、また、各フィルタ回路は入力ストリング405の1つまたは複数のセグメントまたはビットを動的に選択するようにプログラム可能なものでもよい。
図4Bに示されている一実施形態では、フィルタ回路420〜424はそれぞれ、クロスバ・スイッチ(XBAR)およびプログラミング回路(PGM)を備える。例えば、フィルタ回路420はクロスバ・スイッチ430とプログラミング回路440を備える。プログラミング回路440を使用してクロスバ・スイッチ430を事前にプログラミングすることにより、入力ストリング405の特定のフィールド・セグメントをフィルタ処理し、フィールド・セグメントのビット位置をシフトさせて、フィルタ処理されたストリング・セグメントを圧縮し、フィルタ処理されたコンパランド・ストリングに圧縮することができる。1つまたは複数のフィルタ回路420〜424はプログラミング回路を備えていなくてもよいことに留意されたい。例えば、1つまたは複数のクロスバ・スイッチは、外部デバイス・アクセスおよび直接プログラミングを行うように構成することができる(例えば、図3のプロセッサ310により)。CAMデバイス400のプログラミング回路は、ユーザーにとって便利なように追加搭載することができる。
プログラミング回路440は、データ線491を介してフィルタ・データ(FDATA)を受信するように構成されており、このデータを使用して、クロスバ・スイッチ430を直接的にまたは間接的にプログラムし、共通入力ストリング405から特定のフィルタ処理されたコンパランド・ストリングを生成する。以下で詳しく説明するが、プログラミング回路440は、さらに、制御線492を介して1つまたは複数の制御信号を受信し、クロック・ジェネレータ(図に示されていない)から線493を介して1つまたは複数のクロック信号を受信して、プログラミング回路の動作を制御することができる。
フィルタ回路421〜424はフィルタ回路420について説明したのと同様に動作することに留意されたい。各フィルタ回路420〜424は、各ブロックに異なるテーブルが格納される共通入力ストリング405の異なるセグメント、またはセグメントの組み合わせを選択することができる。別法として、1つまたは複数のフィルタ回路は、例えば、対応するCAMブロックに同じルックアップ・テーブルの一部が格納される場合に、共通入力ストリング405の同じセグメント、またはセグメントの同じ組み合わせを選択することができる。したがって、各クロスバ・スイッチ430〜434を対応するプログラミング回路440〜444でそれぞれ事前にプログラムすることにより、入力ストリングの適切なフィールド・セグメントをフィルタ処理することができる。すると、その結果得られたすべてのフィルタ処理されたコンパランド・ストリングを同時に、対応するCAMブロック内に格納されているそれぞれのルックアップ・テーブルと比較することができる。例えば、フィルタ回路420により生成されたフィルタ処理済みコンパランド・ストリングをブロック410に格納されているルックアップ・テーブルと比較し、フィルタ回路421により生成されたフィルタ処理済みコンパランド・ストリングをブロック411に格納されているルックアップ・テーブルと比較する。
他の実施形態では、フィルタ処理されたコンパランド・ストリングまたはサーチ・キーを生成するための、共通入力ストリング405のフィルタ処理を逐次実行することができる。ブロック内のルックアップも、同時実行または逐次実行することができる。
図5Aは、入力ストリングの一実施形態の図である。一実施形態では、入力ストリング405は、1つまたは複数のパケット・ヘッダ510、520から解析すなわち処理されたフィールド・セグメントを含んでいる。データ処理システム(例えば、ルータ、クライアント、サーバ)がネットワーク越しにデータ交換を行う場合、手順として、これらのシステムが互いに通信する方法に関して一致するプロトコルを使用する必要がある。設計の複雑さを軽減するために、ネットワークを一連の層として編成することができる。層の数や各層の機能は、ネットワーク毎に異なる。
例えば、伝送制御プロトコル(TCP)/インターネット・プロトコル(IP)を使用する場合、これは、ネットワーク・アクセス層とインターネット層を含んでいる複数の層に分けられる。ネットワーク・アクセス層では、終端システムとネットワークの間でデータの交換を行うのにTCPを使用している。インターネット層ではデータが複数の相互接続されたネットワークを横断できるようにIPを使用している。これらのプロトコルはそれぞれ、上述のように、経路選択情報を含んでいるパケット・ヘッダを使用する。例えば、TCPパケット・ヘッダ510は、発信元アドレス(SA)ポート・セグメント552と宛先アドレス(DA)ポート・セグメント553を含み、IPパケット・ヘッダ520は、SAセグメント554、DAセグメント555、サービス・タイプ(ToS)セグメント551、およびプロトコル・タイプ・セグメント556を含んでいる。
一実施形態では、例えば、図3のプロセッサ310は、パケット・ヘッダ510、520からいくつかのセグメントを解析し、入力ストリング405を生成し、入力ストリングをCAMデバイス320に送信する。例えば、入力ストリング405は、MACセグメント557、TOSセグメント551、SAポート・セグメント551、DAポート・セグメント552、SAセグメント554,およびDAセグメント555を含んでいる。別法として、入力ストリング405が含んでいるセグメントの数は、示されているセグメントよりも多くても少なくてもよい。各フィルタ回路(図4A、4Bに示されている)は、入力ストリング405の異なるフィールド・セグメントのビット値をフィルタ処理し、それぞれ異なるフィルタ処理済みコンパランド・ストリングを生成して、CAMブロック内で異なるルックアップを同時に実行することができる。他の実施形態では、プロセッサ310は、解析されていない受信されたときのままのヘッダ・セグメントをCAMデバイス320に送信することができる。
図5Bは、図5Aに示されている入力ストリング405のパケット・ヘッダ・セグメントを使用するCAMデバイス400の動作を概念的に示す図である。例えば、CAMデバイス400は、3つのCAMブロック410、411、412を含んでいるとする。各ブロック410、411、412はそれぞれ、対応するフィルタ回路420、421、422にそれぞれ結合されている。フィルタ回路420〜422はそれぞれ、入力ストリング405を受け取り、受け取った入力ストリング405を処理するように構成されている。
一実施形態では、フィルタ回路420〜422を事前にプログラムすることにより、入力ストリング405の特定のフィールド・セグメントをフィルタ処理し、ブロック410〜412に格納されているさまざまなテーブルに対し同時ルックアップを実行するようにできる。例えば、MACセグメント557をフィルタ処理してフィルタ処理されたコンパランド・ストリング580が得られるようにフィルタ回路420を事前にプログラムする、DAセグメント555をフィルタ処理してフィルタ処理されたコンパランド・ストリング581が得られるようにフィルタ回路421を事前にプログラムする、SAセグメント554と、DAフィールド・セグメント555と、TOSセグメント551をフィルタ処理してフィルタ処理されたコンパランド・ストリング582が得られるようにフィルタ回路422を事前にプログラムするといったことができる。共通入力ストリング405から異なるフィールド・セグメントをフィルタ処理することにより、並行して、フィルタ処理されたコンパランド・ストリング580〜581のそれぞれを使用して、さまざまなルックアップを同時実行することができる。例えば、フィルタ処理されたコンパランド・ストリング580を使用してCAMブロック410内でMACルックアップを実行する、フィルタ処理されたコンパランド・ストリング581を使用してCAMブロック411内で「次のホップ」(例えば、LPM)ルックアップを実行する、フィルタ処理されたコンパランド・ストリング582を使用してCAMブロック412内で「分類」ルックアップを実行するといったことができる。したがって、それぞれのルックアップが実行のためにXクロック・サイクルを個々に必要とする場合、ルックアップは同時実行されるため、3つ全部のルックアップを実行するのに全部でXクロック・サイクルあればよい。このようにして、ルータでのパケット・スループットは、従来のCAMアーキテクチャを利用したルータに比べて著しく向上する。
図6は、入力ストリングのフィルタ処理および圧縮の一実施形態を概念的に示す図である。すでに述べたように、入力ストリング405は、パケットのヘッダの一部である。または全部であってもよい。すなわち、入力ストリング405はパケットの他の部分からのフィールド・セグメントまたは他の処理済み情報を含んでいる。入力ストリング405は、入力ストリング405の望ましくないフィールド・セグメントをマスク・アウト、つまりブロックするフィルタ620に通される。フィルタ620の出力は、1つまたは複数のフィルタ処理されたストリング・セグメント629である。例えば、4つのストリング・セグメントX1、X2、X3、X4をフィルタ620に通してフィルタ処理する。ストリング・セグメントX1、X2、X3、X4は、例えば、DA、SA、サービス・タイプ(ToS)、プロトコル・タイプに対応する。入力ストリング405のフィルタ処理は、フィルタ回路420〜424のうち1つまたは複数により実行することができる。しかし、各フィルタ回路420〜424は、入力ストリング405の異なるフィールド・セグメントまたは同じフィールド・セグメントのうちの1つまたは複数をフィルタ処理するようにプログラムされている。入力ストリング405のフィルタ処理は、ビット毎に実行することができる。別法として、入力ストリング405のフィルタ処理は、他のサイズ、例えば、バイト・サイズに基づいて実行することができる。さらに、フィルタ回路420〜424をそれぞれ事前にプログラムすることにより、前のプログラムされた状態から入力ストリング405の異なるフィールド・セグメントをフィルタ処理することができる。
図6に示されているように、フィルタ処理されたストリング・セグメント(X1、X2、X3、X4)629は互いに隣接していなくてもよい。このような隣接していないフィルタ処理済みストリング・セグメントをシフトし、圧縮されたフィルタ処理済みのストリング639を生成することができる。例えば、フィルタ処理をビット毎に実行する場合、フィルタ回路(例えば、フィルタ回路420)はフィルタ処理されたストリング・セグメント629のビットを移動させ、フィルタ処理されたコンパランド・ストリング639を生成する。一実施形態では、例えば、フィルタ処理されたストリング・セグメント629のビットのすべてを最下位位置側にシフトさせる。別法として、フィルタ処理されたストリング・セグメント629のビットを、他の方法で、例えば、最上位側にシフトさせることもできる。
図7は、クロスバ・スイッチ720(例えば、クロスバ・スイッチ430)を使用して入力ストリングのフィルタ処理および圧縮に対するビット操作の一実施形態を概念的に示す図である。クロスバ・スイッチ720は、交差点からなるn×n行列を含んでいるが、ただし、nは入力ストリング405のビット幅であり、また出力ストリングのビット幅でもある。各菱形(例えば、菱形721)は、フィルタ処理されたコンパランド・ストリングの入力ビットIN(0)〜IN(n−1)および出力ビットY(0)〜Y(n−1)に対する交差点および可能な接続を表す。1つまたは複数の交差点がアドレスで選択され、クロスバ・スイッチ720は、入力ストリング405から所定のビットを選択して圧縮されフィルタ処理されたコンパランド・ストリングの出力ビット位置に移動すなわち圧縮させるように、プログラム・データ(PDATA)によりプログラムされる。アドレスおよび/またはPDATAは、プログラム回路(例えば、図4Bのプログラム回路440)により生成するか、または外部で(例えば、図3のプロセッサ310により)生成することができる。
フィルタ回路の対角線上の線722は、入力ストリング405と出力フィルタ処理済みコンパランド・ストリング639のビット位置の間の1対1の接続相関関係を表す。選択された、またはプログラムされたビット、丸に+の記号(例えば、図7の接続723)は入力ビット位置と出力ビット位置との接続を行うためのプログラムされたビットを表す。各接続は、交差点のところで1つまたは複数の回路要素をプログラムすることにより確立される。交差点のプログラミングでは、メモリ・セルの状態の書き込み、ヒューズまたはその他の接続の切断、接続をそのままにすることなどさまざまな手段を使用することができる。例えば、メモリ素子を使用して交差点での接続を確立する場合、第1の論理状態(例えば、論理「1」)をメモリ素子に書き込むと接続が確立され、第2の論理状態(例えば、論理「0」)をメモリ素子に書き込むと接続は確立されない。
結果としてフィルタ回路720により出力されるフィルタ処理済みコンパランド・ストリング639のビット・ギャップを避けるようにクロスバ・スイッチ720をプログラムする。図の例では、入力ストリング405の選択されたビットすべてが最下位ビット位置側にシフトされる。したがって、その結果のフィルタ処理されたコンパランド・ストリング639のビット位置の数は入力ストリング405よりもかなり少なくなる。例えば、入力ストリング405は、288ビット幅(n=288)とすると、フィルタ処理されたコンパランド・ストリング639は72または144ビット幅のみである。クロスバ・スイッチの交差点の数を出力ビットの個数に合わせて減らすことができる。CAMブロック410〜414のそれぞれのルックアップ・エントリは、入力ストリング405のサイズよりもかなり小さいことのが望ましい。すなわち、幅の狭いCAMアレイ(つまり、共通入力ストリングの全長よりも行当たりビット数が少ない)を使用することができる。また、CAMアレイの未使用列はグローバル・マスク回路(図には示されていない)により全体的にマスクされ、サーチ動作では使用されるすなわち消費される電力が最小または実質的に少ないため、圧縮されフィルタ処理されたストリングは望ましい省電力機能を備えることができる。そのためのグローバル・マスクは当業では知られており、したがって、本明細書では詳細を説明しない。
図7では、入力データを出力データ・ストリング内の上位ビット位置から下位ビット位置側に圧縮するすなわち移動させるプログラムされたクロスバ・スイッチが説明されている。他のフィルタも、入力データを出力ストリング内の下位ビット位置から上位ビット位置側に圧縮する、すなわち移動させることができる。さらに、フィルタ処理されたストリングは圧縮する必要はなく、ギャップのあるフィルタ処理されたストリングは、もしあれば、ルックアップのためCAMブロックまたはテーブルに与えることができる。CAMブロックに供給されるサーチ・キーの中の未使用ビットは、グローバル・マスク・レジスタにより全体的にマスクすることができる。
クロスバ・スイッチ720により生成されたフィルタ処理されたコンパランド・ストリングのサイズは、入力ストリング405の選択されたビットが連続していたとしても入力ストリング405よりも小さい場合があることに留意されたい。例えば、選択する入力ストリング405のビットが行0から行2に対応する場合、選択された行は連続しているため、出力ビットをシフトする必要はない。したがって、入力ストリング405の目的のビットが連続しているとしても、その結果得られるフィルタ処理されたコンパランド・ストリング639のサイズもまた、全体として入力ストリング405のサイズよりも小さい場合がある。
図8は、入力ストリングをフィルタ処理し、圧縮されるようにフィルタ回路をプログラムする一方法を示す図である。この方法は、例えば、図4Bのプログラミング回路または図3のプロセッサ310により実行することができる。この方法は、リセットに基づいてCAMデバイスに供給される明示的なプログラム命令または制御信号への応答として、または他の刺激に対する応答として開始する。一実施形態では、その結果得られる出力ストリング639のギャップを回避するために、入力ビットを連続して順次供給し、入力ビットが特定の出力ビットとして与えられるかどうかを判別する。
プログラミングはステップ802から開始する。ステップ804で、特定の入力ビットを特定の出力ビット位置に供給すべきかどうかを判定する(例えば、図4Bのプログラム回路440に供給されるFDATAにより判定する)。もし供給すべきであれば、ステップ806で、クロスバ・スイッチにおいて適切な接続が確立されるか、またはプログラムされる。ステップ808で、これが最後の入力ビットでなければ、この方法は次の入力ビット(ステップ810)に進み、ステップ804を繰り返す。すべての入力ビットが処理されると、プロセスは完了する(ステップ812)。
図4のクロスバ・スイッチ430には、任意の種類のクロスバ・スイッチを使用することができる。図9は、クロスバ・スイッチ430の一実施形態であるクロスバ・スイッチ1000の図である。クロスバ・スイッチ1000は、トランジスタ1020のゲートに結合されているメモリ記憶素子1010の行と列からなるアレイを含んでいる。各メモリ記憶素子/トランジスタのペアは、行と列の交差点に配置され、これを使用して、入力信号IN(0)〜IN(n−1)と出力信号Y(0)〜Y(n−1)との間の接続を確立する(または確立しない)。入力信号INは、入力ストリング・データ(例えば、図4Aの入力ストリング405)を表し、出力信号Yは、CAMブロックまたはテーブルに供給されるフィルタ処理された出力ストリングを表す。
各メモリ記憶セル1010は、スイッチ1000内の特定の行および列の交差点で接続が確立されているかどうかを示す状態を格納する。メモリ記憶セルは、ランダム・アクセス・メモリ(RAM)セル(スタティックRAMとダイナミックRAM)、読み取り専用(ROM)セル、およびその他の揮発性または不揮発性メモリ記憶セルなどどのような種類のメモリでもよい。メモリ記憶セルは、メモリ記憶セルのタイプに適した書き込み回路を使用してプログラムまたは書き込みを行うことができる。メモリ記憶セルは論理「1」状態を格納している場合、関連するトランジスタ1020を有効にし、入力信号INを信号線1030(0)〜1030(n−1)のいずれか1つに出し、出力Yのうちの1つを信号線1040(0)〜1040(n−1)のいずれか1つに出す。出力信号線1040は、さらに、プリチャージ回路1050により所定の状態またはデフォルトの状態までプリチャージすることもできる。プリチャージ回路1050は、よく知られているどの回路でもよい。
クロスバ・スイッチ1000は完全なクロスバ・スイッチであり、これにより任意の入力を出力Yに接続できる。他の実施形態については、入力ストリングが圧縮される場合などにクロスバ・スイッチ1000の一部のみを必要とすることがある。例えば、出力ストリング内の上位ビット位置から下位ビット位置へ入力ストリングを圧縮する場合、下位ビット位置から上位ビット位置へ移動させるためのクロスバ・スイッチの対応する回路を完全なクロスバ・スイッチから取り除くことができる。同様に、出力ストリング内の下位ビット位置から上位有効ビット位置へ入力ストリングを圧縮する場合、上位ビット位置から下位有効ビット位置へ移動させるためのクロスバ・スイッチの対応する回路を完全なクロスバ・スイッチから取り除くことができる。以下では修正されたクロスバ・スイッチの実施例について説明する。
図10は、メモリ記憶セル1010の一実施形態であるメモリ記憶セル1100の図である。セル1100は、ノード1180、1190でデータを格納するための双安定ラッチを形成するクロス・カップルド・インバータ1130、1140を備えている。パス・ゲート1150、1160では、信号線1110であるワード線の信号がアクティブになると、プログラム・データ(および読み取りデータ)を記憶装置ノードに伝達することができる。ノード1180はトランジスタ1020のゲートに結合されている。またリセット・トランジスタ1170を含めることで、信号線1120上のリセット信号RESETがアクティブになったときに、ノード1180を予め定められている論理「0」状態にすることができる。リセット・トランジスタ1170は、ゲートが信号線1120に結合され、ドレインがノード1180に結合され、ソースがグランドに結合されている。
図11は、図4Aのフィルタ回路420〜424の1つの一実施形態であるフィルタ回路1200の図である。この実施形態では、フィルタ回路1200はクロスバ・マトリックス・スイッチ430とプログラミング回路1204を備える。一実施形態では、完全なクロスバ・スイッチ(例えば、図9のクロスバ・スイッチ1000)をクロスバ・スイッチ430に使用する。他の実施形態では、完全なクロスバ・スイッチを、必要な接続機能のみを持つように修正することにより、クロスバ・スイッチのサイズを縮小することができる。
この実施形態では、プログラミング回路1240はプログラム・データ・ジェネレータ1208とアドレス・ジェネレータ1206を備える。プログラム・データ・ジェネレータ1208は、クロスバ・スイッチの交差点のうち1つまたは複数をプログラムするためのプログラミング・データPDATAを生成する。PDATAはフィルタ・データFDATAへの応答として生成される。フィルタ・データFDATAは、出力ストリングに入力ビットを入れるかどうか、および入力ビットを出力ストリングに圧縮するかすなわち移動させるかどうか、およびどのようにして圧縮すべきかを示す。例えば、図3のプロセッサ310によってFDATAを与えることができる。アドレス・ジェネレータ1206は、クロスバ・スイッチ430に結合される。他の実施形態では、アドレス・ジェネレータ1206をさらに、プログラム・データ・ジェネレータ1208に結合することもできる。アドレス・ジェネレータ1206は、プログラミングのためクロスバ・スイッチ430の1つまたは複数の交差点にアクセスするオペレーションを実行する。アドレス・ジェネレータ1206は、例えば、1つまたは複数の行および/または列デコーダを備え、プログラミングのためクロスバ・スイッチ内の交差点の1つまたは複数の行または列を選択したり、またはプログラミングのため単一の交差点または交差点の他のグループを選択する。
一実施形態では、アドレス・ジェネレータ1206は、図12に示されているように、アドレス・カウンタ1302によって制御されるデコーダ1304を備える。アドレス・カウンタ1302は、クロスバ・スイッチ430に結合されている信号線1306(0)〜1306(n−1)の信号をアクティブにすることにより、クロスバ・スイッチ430の行または列を通じてデコーダ1304を順次実行させるように構成される。カウンタ1302は、クロック信号CLKおよびプログラムする場合にアクティブにされるイネーブル信号ENABLEに対する応答として、カウントを増分または減分し、新しい行または列を選択する。ENABLE信号は、プログラム・データ・ジェネレータ1208によって制御するか(例えば、FDATAへの応答として)、または外部から(例えば、図3のプロセッサ310により)制御することができる。別法として、アドレス・ジェネレータ1206は、他のコンポーネント、例えば、図13に示されているように、クロスバ・スイッチ430の行および/または列を順次辿るためのシフト・レジスタ1402を備えることもある。アドレス・ジェネレータ、アドレス・デコーダ、レジスタ、およびカウンタは当業では知られており、したがって、詳細を説明しない。
図14は、図11のプログラム・データ・ジェネレータ1208の一実施形態であるプログラム・データ・ジェネレータ1502の図である。プログラム・データ・ジェネレータ1502は、バッファ書き込み回路1504、データ・ジェネレータ1506、ブロック・フィルタ・レジスタ(BFR)1508を備える。データ・ジェネレータ1506、BFR 1508とアドレス・ジェネレータ1206は、任意選択により、図14において破線で示されているように、1つまたは複数のクロック信号CLKを受信する。
ブロック・フィルタ・レジスタ1508は、目的のフィルタ処理されたコンパランド・ストリングを取得するため入力ストリング405のフィルタ処理に使用される特定のフィルタ・データFDATAを格納する。ブロック・フィルタ・レジスタ1508は、入力ストリング405の所望のフィルタ処理に基づいて特定の「1」および「0」ビット・パターンでプログラムすることができる(例えば、図3のプロセッサ310により)。したがって、フィルタ回路420〜424内のブロック・フィルタはそれぞれ、異なるビット・パターンを格納することができ、それにより、すべてのフィルタ回路420〜424に適用される共通入力ストリング405と異なるビットをフィルタ処理することができる。別法として、ブロック・フィルタ・レジスタは、他のブロック・フィルタ・レジスタと同じビット・パターンを格納することができる。他の実施形態では、複数のブロック・フィルタ・レジスタを単一のプログラム・ジェネレータ1502で使用したり、(例えば、図3のプロセッサ310、または他の素子により)選択することができ、適切なFDATAを供給することができる。
ブロック・フィルタ・レジスタ1508は、データ・ジェネレータ1506に結合されている。データ・ジェネレータ1506はPDATAビット・パターンを生成し、これをバッファ書き込み回路1504にロードし、クロスバ・スイッチ430内の交差点を選択してプログラムする。バッファ書き込み回路1504は、クロスバ・スイッチ430にプログラムされるデータをバッファリングする。一実施形態では、バッファ書き込み回路1504は、データ・ジェネレータ1506の一部でもよい。バッファ書き込み回路は当業では知られており、したがって、詳細を説明しない。
一実施形態では、入力データ・ストリング内にあるビットと同じ数だけFDATAのビットがBFR 1508にロードされる。FDATAの特定のビットにより、入力ストリング内の対応するビット位置が出力ストリング内に存在するかどうかが示される。このようにして、BFR 1508内のFDATAはマスクとして動作し、それにより、出力ストリング上でいくつかの入力ビットがフィルタ処理されCAMブロックへ供給されない。FDATAにより実行されるマスキングでは、データ・ジェネレータ1506はクロスバ・スイッチ430に適切なPDATAを生成することができ、スイッチ430は適宜、入力ストリングをフィルタ処理して圧縮する。
プログラム回路1204の作用を説明する例では、アドレス・ジェネレータ1206は、クロスバ・スイッチ430の第1の行を最初に選択するように構成されている。データ・ジェネレータ1506は、ブロック・フィルタ・レジスタ1508に格納されている対応するFDATAビットにおいてその行/列位置に対応するビット位置に「1」が格納されている場合、選択された行および特定の列に対する相互接続をプログラムする。ブロック・フィルタ・レジスタ1508に格納されているFDATAビットにおいて「0」がその後の行/列位置に対応するビット位置に格納される場合には、その入力行に対して接続が確立されないように、データ・ジェネレータ1506は、行および列相互接続に「0」をプログラムする。その後、アドレス・ジェネレータ1206は、行の残りとブロック・フィルタ・レジスタ内の追加FDATAビットとを順次巡り、さらに、接続が確立されているかどうかを判定する。一実施形態では、アドレス・ジェネレータ1206は、FDATAによる決定に従い、行の残りを順次巡り、条件付きで列を順次巡る。他の実施形態では、アドレス・ジェネレータ1206は、FDATAによる決定に従い、条件付きで新しい行に順次進み、連続して列を順次巡る。
図15は、それぞれデータ・ジェネレータ1506およびBFR 1508の実施形態であるデータ・ジェネレータ1606とBFR 1608の図である。データ・ジェネレータ1606は、シフト・レジスタ1610、論理回路1620、論理ゲート1605を備える。シフト・レジスタ1610は、データのn+1個のビットを格納しており、第1のnビットは最初すべて論理「0」であり、n+1ビットは論理「1」に設定される。シフト・レジスタ1610は、ループ・シフト・レジスタであり、n+1ビット位置に事前にロードされた「1」は、ANDゲート1605の出力に基づきシフト・レジスタ1610の他のビット位置を通してシフトされる。したがって、所定の時刻に、シフト・レジスタ1610内の1ビット位置のみ論理「1」が入り、他のビット位置には論理「0」が入る。
BFR 1608は、シフト・レジスタでもあり、FDATAのn個のビットを格納する。BFR 1608に格納されているFDATAの各ビットは、信号線1695上のCLKによりクロックに同期してANDゲート1605の1つの入力に出力される。ANDゲート1605は、さらに、CLKも受信し、FDATA入力とCLKの両方の論理「1」への応答として、シフト・レジスタ1610の内容を1ビットだけ左にシフトさせることができる。したがって、BFR 1608に格納されているFDATAにより、シフト・レジスタ1610がその内容をシフトするかどうかが判別される。シフト・レジスタ1610とBFR 1608が異なるクロック信号を受信するように構成できることに留意されたい。さらに、シフト・レジスタ1610と論理回路1620に信号を送る前に、ANDゲート1605の出力をラッチするか、またはレジスタに格納することもできる。
シフト・レジスタ1610内の各ビットが、論理回路1620のANDゲート1601(0)〜1601(n−1)の1つの入力に結合されている。ANDゲート1601(0)〜1601(n−1)の他の入力は一緒にされてANDゲート1605の出力を受け取る。CLKが低(つまり、「0」論理状態)の場合、ANDゲート1601は論理「0」を出力する。CLKが高(つまり、「1」論理状態)の場合、ANDゲート1601はシフト・レジスタ1610から受け取ったビット内容を出力する。このような構成では、論理回路1620は、すべて「0」か、またはシフト・レジスタ1610のビット内容のいずれかを出力する。ANDゲート1601(0)〜1601(n−1)から出力される信号は、それぞれ信号線1603(0)〜1603(n−1)に出力され、図14のバッファ書き込み回路1504に結合される。次に、バッファ書き込み回路1504は、このデータをPDATAとしてクロスバ・スイッチに供給し、その行および列接続を確立する。
上述のように、論理回路1620は、すべて論理「0」またはシフト・レジスタ1610の内容のいずれかをPDATAとして出力し、クロスバ・スイッチ430の接続をプログラムする。クロスバ・スイッチ430の行がアドレス・ジェネレータ1206により選択された場合、出力ビット位置への入力ビットが確立されないように行はすべて論理「0」でプログラムされるか、または接続が確立されるように行の単一ビットがプログラムされる。アドレス・ジェネレータ1206は、その後、次の行へ順次進む。その後、論理回路1620により出力されたPDATAは、BFR 1608のFDATAにより示されているように更新される。次のFDATAビットが論理「0」状態であれば、次の行に対し接続は行われないが、次のFDATAビットが論理「1」状態であれば、接続がプログラムされる。このようにして、データ・ジェネレータ1606とBFR 1608では、入力ストリングをフィルタ処理し、さらにそのストリングを圧縮するように、クロスバ・スイッチ430をプログラムすることができる。具体的な例が図16に示されている。
図16で、シフト・レジスタ1610は、11個のビット位置(n=10)を持ち、BFR 1608は10個のビット位置を持つ。BFR 1608は、クロスバ・スイッチ430でいくつかの接続を確立し、入力ストリング405のビットをフィルタ処理し圧縮するために使用されるビット・パターン例とともに示されている。この例では、BFR 1608は、ビット位置1681、1682、1685、1686、1689、1690が「1」であるFDATAを格納する。入力ストリング405からのビットをマスクするために、ビット位置1683、1684、1687、1688に「0」を格納する。
最初に、図14のアドレス・ジェネレータ1206は、クロスバ・スイッチ430の交差点の行(または列)を選択し、第1の入力ビット位置IN(0)が対応する第1の出力ビット位置Y(0)に結合されるかどうかを判別する。CLKの第1のクロック・サイクルで、BFR 1608のビット位置1681の「1」がANDゲート1605に供給される。ビット位置1681は「1」が設定されているので、次のクロック・サイクルで、ビット位置1650にある「1」はシフト・レジスタ1610のビット位置1640にシフトされる。その後、ANDゲート1601(9)〜1601(0)はそれぞれ、PDATAとして、クロスバ・スイッチ430に(バッファ書き込み1504を介して)0000000001を出力し、スイッチ・マトリックスの列0および行0の交差点のIN(0)とY(0)との間の接続を確立するが、これは、図17の交差点の行0および列0で丸に「+」の記号により示されている。ANDゲート1601(1)〜1601(9)は行0およびその他の列の他の可能な相互接続に「0」を出力するため、それらの交差点については接続は確立されない。
その後、アドレス・ジェネレータ1206は、クロスバ・スイッチ430の第2の行(行1)を選択し、第2の入力ビット位置IN(1)が第1または第2の出力ビット位置Y(1)およびY(0)のいずれかに結合されるかどうかを判別する。BFR 1608のビット位置1682が「1」を格納しているため、CLKのその後クロック・サイクルで、シフト・レジスタ1610と論理回路1620により他のシフトとプログラムのオペレーションが実行される。ANDゲート1605に「1」が供給され、ビット位置1640の「1」がシフト・レジスタ1610のビット位置1641にシフトされ、「0」がビット位置1640にシフトされる。ANDゲート1601(9)〜1601(0)はそれぞれ、PDATAとして、クロスバ・スイッチ430に(バッファ書き込み1504を介して)0000000010を出力し、スイッチ・マトリックスの列1、行1の交差点のIN(1)とY(1)との間の接続を確立するが、これは、図17の交差点の行1と列1で丸に「+」の記号により示されている。ANDゲート1601(0)、1601(2)〜1601(9)は行1およびその他の列の他の可能な相互接続に「0」を出力するため、それらの交差点については接続は確立されない。
その後、アドレス・ジェネレータ1206は、クロスバ・スイッチ430の第3の行(行2)を選択し、第3の入力ビット位置IN(2)が第1、第2、または第3の出力ビット位置Y(0)、Y(1)、またはY(2)のいずれかに結合されるかどうかを判別する。次のクロック・サイクルでは、シフト・レジスタ1610は、BFR 1608のビット位置1683に「0」が格納されているため、シフトしない。したがって、行2についてスイッチ430の列または出力と接続が確立されない。つまり、IN(2)はフィルタ出力ストリング内の対応する出力ビット位置に結合されず、図17に示されているように効果的にマスクされる。
その後、アドレス・ジェネレータ1206は、クロスバ・スイッチ430の第4の行(行3)を選択し、第4の入力ビット位置IN(3)が第1、第2、第3、または第4の出力ビット位置Y(0)、Y(1)、Y(2)、またはY(3)のいずれかに結合されるかどうかを判別する。次のクロック・サイクルでは、シフト・レジスタ1610は、BFR 1608のビット位置1684に「0」が格納されているため、シフトしない。したがって、行3についてスイッチ430の列または出力と接続が確立されない。つまり、入力ビット4はフィルタ出力ストリング内の対応する出力ビット位置に結合されず、図17に示されているように効果的にマスクされる。
その後、アドレス・ジェネレータ1206は、クロスバ・スイッチ430の第5の行(行4)を選択し、第5の入力ビット位置IN(4)が第1、第2、第3、第4、または第5の出力ビット位置Y(0)、Y(1)、Y(2)、Y(3)、またはY(4)のいずれかに結合されるかどうかを判別する。その後のクロック・サイクルで、「1」がビット位置1685に格納されているので、ビット位置1641にある「1」はシフト・レジスタ1610のビット位置1642にシフトされる。ANDゲート1601(9)〜1601(0)はそれぞれ、PDATAとして、クロスバ・スイッチ430に(バッファ書き込み1504を介して)0000000100を出力し、スイッチ・マトリックスの列2および行4の交差点での接続を確立するが、これは、図17の交差点の行4および列2で丸に「+」の記号により示されている。そこで、IN(4)とY(2)との接続が確立される。ANDゲート1601(0)〜1601(1)および1601(3)〜1601(9)は行1およびその他の列の他の可能な相互接続に「0」を出力するため、それらの交差点については接続は確立されない。図16のBFR 1608に格納されているFDATAへの応答としてプログラムされたクロスバ・スイッチ430の完了したフィルタ処理および圧縮が図17に示されている。
図18は、図15のデータ・ジェネレータ1506とBFR 1508の他の実施形態であるデータ・ジェネレータ1906とBFR 1908の図である。データ・ジェネレータ1906は、図15に関してすでに述べているように、シフト・レジスタ1610、論理回路1620、ANDゲート1605を備え、さらにワイヤードOR回路1913とシフト・レジスタ1916を備える。ワイヤードOR回路1913は、BFR 1908の異なるFDATAビットおよびシフト・レジスタ1916からの対応するビットを受け取るように結合されているANDゲート1930とプルダウン・トランジスタ1931とのペアを備える。BFR 1908は、並行してビット位置データすべてをワイヤードOR回路1913に出力する。ワイヤードOR回路1913は、順に、シフト・レジスタ1610のシフト動作を制御する。ワイヤードOR回路1913の出力は、信号線1935に結合されており、この信号線は、プリチャージ(PC)回路1918とインバータ1919の入力に結合されている。インバータ1919の出力は、ANDゲート1905の入力に結合されている。他の実施形態では、BFR 1608に格納されているFDATAを補完し、インバータ1919を省いてもかまわない。
シフト・レジスタ1916は、CLKのクロック毎に、「1」をそのビット位置にシフトさせる。ANDゲート1930の出力は、プルダウン・トランジスタ1931のゲートに結合されており、信号線1935は低レベルにプルダウンされ、BFR 1908のそれぞれの対応するビット位置およびシフト・レジスタ1916が「1」の場合にシフト・レジスタ1610はイネーブルされシフトできる。このようにして、シフト・レジスタ1916とBFR 1908に格納されているFDATAにより、ワイヤードOR回路1913に入力されるデータのうちどれが、所与のどのクロック・サイクルでシフト・レジスタ1610をクロックするかを判別する。
図19は、BFR 1508を、フィルタ・マスク・ビット・パターンFDATAを格納する行が複数ある単一列ランダム・アクセス・メモリ(RAM)2002としても実装できることを示している。SRAM内の目的のビット位置にアクセスするには、復号化された行アドレスを入力する(例えば、図14のアドレス・ジェネレータ1206から)。センス・アンプ(S/A)2004は、RAMの行に結合されており、アクセスされたビット位置に格納されているデータ値を出力する。例えば、センス・アンプ2004の出力は、例えば、ANDゲート1605の入力に結合させることができる。RAM 2002は当業では知られており、したがって、本明細書では詳細を説明しない。図12に関して説明したカウンタ1302やデコーダ1304などのカウンタやデコーダを使用して、または例えば、図13のシフト・レジスタ1402を使用する他の手段により、RAM 2002の行のそれぞれを順次処理することができる。
上述のように、クロスバ・スイッチ430は、完全なクロスバ・スイッチ(例えば、図9に示されているように)でもよいし、あるいは接続を確立するために必要な相互接続のみを使用するように修正することもできる。出力ストリングの上位ビット位置から下位ビット位置へ入力データをフィルタ処理し圧縮するようにクロスバ・スイッチ430をプログラムする図11〜19に示されているデータ・プログラム回路1204の実施形態については、図20に示されているように、図9のクロスバ・スイッチ1000の一部だけあればよい。図20は、修正されたクロスバ・スイッチの4つの行と4つの列しか示していないが、行と列はいくつでも使用できる。さらに、図20は、メモリ記憶素子1010の各行はワード線(WL)に結合されており、それらの素子によりD(0)〜D(3)として表されている1つまたは複数のビット線上でデータを伝送することができることを示している。ビット線のそれぞれが、プログラム・データPDATAの1ビットを伝送する。
図21は、図11のプログラミング回路440の他の実施形態であるプログラミング回路2004の図である。この実施形態では、プログラミング回路2004は、図14のアドレス・ジェネレータ2110とプログラム・データ・ジェネレータ1502を備える。アドレス・ジェネレータ2110は、カウンタ2112、デコーダ2114、OR論理回路2116を備える。プログラム時に、アドレス・ジェネレータ2110は、条件付きで、クロスバ・スイッチ430の行を順次巡り、BFR 1508に格納されているFDATAに基づいて接続をプログラムする。例えば、特定のFDATAビットが、クロスバ・スイッチ430内の選択された行について接続を確立することを示している場合、データ・ジェネレータ1506は、少なくとも1つの信号をバッファ書き込み回路と論理「1」状態であるOR論理回路2116に出力する。それに対する応答として、OR論理回路2116は、インクリメント信号INCを適切な論理状態にアサートし、カウンタ2112はクロック信号CLKへの応答としてカウントを更新する。カウンタの出力は、クロスバ・スイッチ430内の新しい行を選択するように、デコーダ2114により復号化される。他の実施形態では、インクリメント信号はカウンタ2112を減分するデクリメント信号であってもよい。他の実施形態では、カウンタ2112とデコーダ2114は、INCが適切な論理状態にアサートされ、CLKがトグルされたときに行を1つ選択するように更新されるシフト・レジスタで置き換えることもできる。
図22は、図21のデータ・ジェネレータ1506の一実施形態であるデータ・ジェネレータ2202の図である。データ・ジェネレータ2202は、シフト・レジスタ2204とANDゲート2206(0)〜2206(n−1)を備える。各ANDゲート2206(0)〜2206(n−1)は、シフト・レジスタ2204とBFR 1508から対応するビットを受け取り、信号線2208(0)〜2208(n−1)上に複数のPDATA信号を生成するように結合されている。PDATA信号は、バッファ書き込み回路1504とOR論理回路2116に供給される。
この実施形態では、論理「1」状態は、シフト・レジスタ2204のビット位置の端から端までシフトされ、ANDゲート2206(0)〜2206(n−1)によりBFR 1508内の対応するFDATAビットとの論理ANDがとられる。FDATAビットが論理「1」状態で、シフト・レジスタ2204内の対応するビットも論理「1」状態の場合、対応するANDゲート2206はPDATA信号を生成し、クロスバ・スイッチ430内の対応する行と列の相互接続を選択し、プログラムする。選択された行の他のすべての列はプログラムされないか、または接続を確立しないように論理「0」状態にプログラムされる。さらに、ANDゲート2206の1つが論理「1」状態のPDATA信号を出力した場合、OR論理回路2116により、次のクロック・サイクルで次の行が選択され、プログラミングのための新しい行に順次進む。
上述のように、クロスバ・スイッチ430は、完全なクロスバ・スイッチ(例えば、図9に示されているように)でもよいし、あるいは接続を確立するために必要な相互接続のみを使用するように修正することもできる。出力ストリングの上位ビット位置から下位ビット位置へ入力データをフィルタ処理し圧縮するようにクロスバ・スイッチ430をプログラムする図21と22に示されているデータ・プログラム回路1504の実施形態については、図23に示されているように、図9のクロスバ・スイッチ1000の一部だけあればよい。図23は、修正されたクロスバ・スイッチの4つの行と4つの列しか示していないが、行と列はいくつでも使用できる。さらに、図2230は、メモリ記憶素子1010の各行はワード線(WL)に結合されており、それらの素子によりD(0)〜D(3)として表されている1つまたは複数のビット線上でデータを伝送することができることを示している。ビット線のそれぞれが、プログラム・データPDATAの1ビットを伝送する。
本明細書の本発明は特定の実施例を参照しながら説明されている。しかし、付属の請求項で定められているように、本発明の広い精神と範囲を逸脱することなく本発明にさまざまな修正と変更を加えられることは明白であろう。したがって、明細書と図面は、制限ではなく、説明することを目的としているものとみなすべきである。
ルータによるパケット処理を概念的に示す図である。 CAMデバイスの一実施形態の図である。 同時ルックアップを実行するように構成されているCAMデバイスを備えるルータのライン・カードまたはブレードの一実施形態の図である。 入力ストリング・フィルタ処理回路を備える複数ブロックCAMデバイスの一実施形態の図である。 複数ブロックCAMデバイスのフィルタ処理回路の一実施形態の図である。 入力ストリングの一実施形態の図である。 図5Aの入力ストリングからの特定のパケット・ヘッダ・セグメントを使用するCAMデバイスのオペレーションを概念的に示す図である。 入力ストリングのフィルタ処理と圧縮の一実施形態を概念的に示す図である。 入力ストリングのフィルタ処理と圧縮のビット操作の一実施形態を概念的に示す図である。 入力ストリングをフィルタ処理し、圧縮されるようにフィルタ回路をプログラムする一方法を示す図である。 クロスバ・スイッチの一実施形態の図である。 図9のクロスバ・スイッチのメモリ記憶素子の一実施形態の図である。 フィルタ回路の一実施形態の図である。 図11のアドレス・ジェネレータの一実施形態の図である。 図11のアドレス・ジェネレータの他の実施形態の図である。 フィルタ回路の他の実施形態の図である。 ブロック・フィルタ・レジスタに結合されているデータ・ジェネレータの一実施形態の図である。 図15の実施形態の使用例を示す図である。 ブロック・フィルタ・レジスタ内のビット・パターン例に基づくクロスバ・スイッチの10個のマトリックス接続を示す図である。 ブロック・フィルタ・レジスタに結合されているデータ・ジェネレータの他の実施形態の図である。 センス・アンプに結合されているブロック・フィルタ・レジスタの一実施形態の図である。 クロスバ・スイッチの一実施形態の図である。 フィルタ回路の他の実施形態の図である。 OR論理回路とブロック・フィルタ・レジスタに結合されている図21のデータ・ジェネレータの一実施形態の図である。 クロスバ・スイッチの他の実施形態の図である。

Claims (14)

  1. 複数の内容アドレス・メモリ・ブロックと、
    複数のフィルタ回路とを備え、複数のフィルタ回路はそれぞれ、複数の内容アドレス・メモリ・ブロックのうちの対応する1つに結合され、複数のフィルタ回路はそれぞれ、共通入力ストリングを受信し、フィルタ処理されたコンパランド・ストリングを複数の内容アドレス・メモリ・ブロックのうちの対応する1つに送信するように構成されており、その複数のフィルタ回路はそれぞれ、共通入力ストリングを受信するように構成されているクロスバ・スイッチを備え、さらに、複数のフィルタ回路はそれぞれクロスバ・スイッチに結合されたプログラミング回路を備え、プログラミング回路は、フィルタ・データを受信して、共通入力ストリングからフィルタ処理されたコンパランド・ストリングを生成するようにクロスバ・スイッチをプログラムする構成とされている装置。
  2. 複数の内容アドレス・メモリ・ブロックは、同時ルックアップを実行するように構成されている請求項1に記載の装置。
  3. プログラミング回路は、
    クロスバ・スイッチに結合されたデータ・ジェネレータと、
    データ・ジェネレータに結合され、フィルタ・データを格納するブロック・フィルタ・レジスタと、
    クロスバ・スイッチに結合されたアドレス・ジェネレータとを備える請求項1に記載の装置。
  4. データ・ジェネレータは、
    ブロック・フィルタ・レジスタに結合されたシフト・レジスタと、
    シフト・レジスタに結合された論理回路とを備える請求項3に記載の装置。
  5. シフト・レジスタは複数のビット位置を持ち、シフト・レジスタは、フィルタとクロック信号に基づき複数のビット位置を通じて所定のビット値をシフトするように構成されている請求項4に記載の装置。
  6. 論理回路は、シフト・レジスタの複数のビット位置からビット値を受け取り、クロック信号に基づきビット値を出力するように構成されている請求項に記載の装置。
  7. データ・ジェネレータは、
    第1のシフト・レジスタと、
    複数のビット位置を持つ第2のシフト・レジスタと、
    第1のシフト・レジスタに結合され、フィルタ・データを受け取るためブロック・フィルタ・レジスタに結合され、第2のシフト・レジスタを通じて所定のビット値のシフト動作を制御するため第2のシフト・レジスタに結合され、その第2のシフト・レジスタがフィルタ・データとクロック信号に基づき複数のビット位置を通じて所定のビット値をシフトするように構成されているワイヤード論理ゲートと、
    第2のシフト・レジスタの出力を受け取り、その出力をバッファ書き込み回路に送るように結合されている論理回路とを備える請求項3に記載の装置。
  8. ブロック・フィルタ・レジスタは、複数行、単一列のランダム・アクセス・メモリである請求項3に記載の装置。
  9. アドレス・ジェネレータが、
    制御入力とカウンタ出力を備えるカウンタと、
    カウンタの出力とクロスバ・スイッチに結合されたデコーダとを備える請求項3に記載の装置。
  10. さらに、出力がカウンタの制御入力に結合され、複数の入力がデータ・ジェネレータに結合されているOR回路を備える請求項9に記載の装置。
  11. アドレス・ジェネレータはシフト・レジスタを備える請求項3に記載の装置。
  12. さらに、アドレス・ジェネレータは、出力がシフト・レジスタに結合され、複数の入力がデータ・ジェネレータに結合されているOR回路を備える請求項11に記載の装置。
  13. 複数の内容アドレス・メモリ・ブロックと、
    複数のフィルタ回路とを備え、複数のフィルタ回路はそれぞれ、複数の内容アドレス・メモリ・ブロックのうちの対応する1つに結合され、複数のフィルタ回路はそれぞれ、共通入力ストリングを受信し、フィルタ処理されたコンパランド・ストリングを複数の内容アドレス・メモリ・ブロックのうちの対応する1つに送信するように構成されており、複数のフィルタ回路はそれぞれ、
    共通入力ストリングを受け取るように構成されているクロスバ・スイッチと、
    クロスバ・スイッチに結合されたプログラミング回路とを備え、そのプログラミング回路は、フィルタ・データを受け取って、共通入力ストリングからフィルタ処理されたコンパランド・ストリングを生成するようにクロスバ・スイッチをプログラムする構成であり、プログラミング回路は、
    クロスバ・スイッチに結合されたバッファ書き込み回路と、
    バッファ書き込み回路に結合されたデータ・ジェネレータと、
    データ・ジェネレータに結合され、クロスバ・スイッチ内の接続を確立するためにビット・データ・パターンを格納するブロック・フィルタ・レジスタと、
    クロスバ・スイッチに結合されたアドレス・ジェネレータとを備え、アドレス・ジェネレータは、
    制御入力とカウンタ出力を備えるカウンタと、
    カウンタの出力とクロスバ・スイッチに結合されたデコーダと、
    出力がカウンタの制御入力に結合され、複数の入力がデータ・ジェネレータに結合されているOR回路とを備える装置。
  14. 複数のフィルタ回路がプログラム可能である請求項13に記載の装置。
JP2003522942A 2001-08-22 2002-08-21 内容アドレス・メモリ内の異なるテーブルの同時サーチ Expired - Fee Related JP4076497B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US09/935,997 US6744652B2 (en) 2001-08-22 2001-08-22 Concurrent searching of different tables within a content addressable memory
PCT/US2002/026636 WO2003019571A1 (en) 2001-08-22 2002-08-21 Concurrent searching of different tables within a content addressable memory

Publications (3)

Publication Number Publication Date
JP2005501448A JP2005501448A (ja) 2005-01-13
JP2005501448A5 JP2005501448A5 (ja) 2005-11-17
JP4076497B2 true JP4076497B2 (ja) 2008-04-16

Family

ID=25468029

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2003522942A Expired - Fee Related JP4076497B2 (ja) 2001-08-22 2002-08-21 内容アドレス・メモリ内の異なるテーブルの同時サーチ

Country Status (5)

Country Link
US (2) US6744652B2 (ja)
EP (1) EP1425755B1 (ja)
JP (1) JP4076497B2 (ja)
DE (1) DE60216938T2 (ja)
WO (1) WO2003019571A1 (ja)

Families Citing this family (38)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6744652B2 (en) * 2001-08-22 2004-06-01 Netlogic Microsystems, Inc. Concurrent searching of different tables within a content addressable memory
JP3979486B2 (ja) * 2001-09-12 2007-09-19 株式会社ルネサステクノロジ 不揮発性記憶装置およびデータ格納方法
US7065083B1 (en) * 2001-10-04 2006-06-20 Cisco Technology, Inc. Method and apparatus for dynamically generating lookup words for content-addressable memories
US7210003B2 (en) * 2001-10-31 2007-04-24 Netlogic Microsystems, Inc. Comparand generation in a content addressable memory
US6993622B2 (en) * 2001-10-31 2006-01-31 Netlogic Microsystems, Inc. Bit level programming interface in a content addressable memory
CN100557595C (zh) * 2001-11-01 2009-11-04 弗里塞恩公司 用于验证远程数据库的方法和系统
US7813346B1 (en) * 2001-11-21 2010-10-12 Juniper Networks, Inc. Filter-based forwarding in a network
US7117300B1 (en) 2001-12-27 2006-10-03 James David V Method and apparatus for restricted search operation in content addressable memory (CAM) devices
US7401180B1 (en) * 2001-12-27 2008-07-15 Netlogic Microsystems, Inc. Content addressable memory (CAM) device having selectable access and method therefor
US7301961B1 (en) 2001-12-27 2007-11-27 Cypress Semiconductor Corportion Method and apparatus for configuring signal lines according to idle codes
US7237058B2 (en) * 2002-01-14 2007-06-26 Netlogic Microsystems, Inc. Input data selection for content addressable memory
US7219187B1 (en) * 2002-08-30 2007-05-15 Netlogic Microsystems, Inc. Search parameter table in a content addressable memory
US7680769B2 (en) * 2003-01-14 2010-03-16 International Business Machines Corporation Method of creating a database and search keys and for searching the database
US20060018142A1 (en) * 2003-08-11 2006-01-26 Varadarajan Srinivasan Concurrent searching of different tables within a content addressable memory
US7698118B2 (en) * 2004-04-15 2010-04-13 Mentor Graphics Corporation Logic design modeling and interconnection
GB0408870D0 (en) * 2004-04-21 2004-05-26 Level 5 Networks Ltd Processsing packet headers
GB0408868D0 (en) 2004-04-21 2004-05-26 Level 5 Networks Ltd Checking data integrity
US7739445B1 (en) * 2004-06-11 2010-06-15 Srinivasan Venkatachary Circuit, apparatus, and method for extracting multiple matching entries from a content addressable memory (CAM) device
EP1861778B1 (en) 2005-03-10 2017-06-21 Solarflare Communications Inc Data processing system
GB0505300D0 (en) 2005-03-15 2005-04-20 Level 5 Networks Ltd Transmitting data
GB0506403D0 (en) 2005-03-30 2005-05-04 Level 5 Networks Ltd Routing tables
US8230167B1 (en) 2005-06-29 2012-07-24 Netlogic Microsystems, Inc. Block mapping circuit and method for memory device
US7853578B1 (en) * 2005-12-09 2010-12-14 Marvell International Ltd. High-performance pattern matching
GB0600417D0 (en) 2006-01-10 2006-02-15 Level 5 Networks Inc Virtualisation support
US8006114B2 (en) * 2007-03-09 2011-08-23 Analog Devices, Inc. Software programmable timing architecture
US8085568B1 (en) 2007-06-29 2011-12-27 Netlogic Microsystems, Inc. Methods and circuits for placing unused content addressable memory (CAM) cells into low current states
US7814267B1 (en) 2008-02-04 2010-10-12 Netlogic Microsystems, Inc. Processor with compare operations based on any of multiple compare data segments
US7782645B1 (en) 2008-02-04 2010-08-24 Netlogic Microsystems, Inc. Selective encoding of data values for memory cell blocks
US8214305B1 (en) 2008-11-24 2012-07-03 Netlogic Microsystems, Inc. Pattern matching system and method for data streams, including deep packet inspection
US7907432B2 (en) * 2009-06-30 2011-03-15 Netlogic Microsystems, Inc. Content addressable memory device for simultaneously searching multiple flows
US9305115B1 (en) 2010-10-04 2016-04-05 Broadcom Corporation Method and apparatus for reducing power consumption during rule searches in a content search system
CN102122270B (zh) * 2011-02-23 2013-08-07 华为技术有限公司 在存储器中查找数据的方法和装置以及存储器
US8467213B1 (en) 2011-03-22 2013-06-18 Netlogic Microsystems, Inc. Power limiting in a content search system
US8861241B1 (en) 2011-09-01 2014-10-14 Netlogic Microsystems, Inc. Content search system having embedded power control units
US8639875B1 (en) 2011-09-06 2014-01-28 Netlogic Microsystems, Inc. Content search system having multiple pipelines
US9043448B1 (en) * 2012-05-08 2015-05-26 Gigamon Inc. Systems and methods for configuring a network component that involves TCAM
JP6170718B2 (ja) * 2012-11-21 2017-07-26 ルネサスエレクトロニクス株式会社 検索システム
ES2549188B1 (es) * 2014-04-23 2016-05-19 Univ Del Pais Vasco - Euskal Herriko Unibertsitatea (Upv/Ehu) Sistema y método de lectura y escritura de una memoria digital

Family Cites Families (40)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3648254A (en) 1969-12-31 1972-03-07 Ibm High-speed associative memory
US5046046A (en) * 1978-03-10 1991-09-03 Intel Corporation Redundancy CAM using word line from memory
DE3801380A1 (de) 1987-01-20 1988-07-28 Nec Corp Zeichenfolge-erkennungsvorrichtung mit einem speicher, dessen speicherbereiche selektiv zugreifbar sind
US4845668A (en) 1987-12-10 1989-07-04 Raytheon Company Variable field content addressable memory
US4996666A (en) 1988-08-12 1991-02-26 Duluk Jr Jerome F Content-addressable memory system capable of fully parallel magnitude comparisons
US5088066A (en) * 1989-02-10 1992-02-11 Intel Corporation Redundancy decoding circuit using n-channel transistors
US5319762A (en) 1990-09-07 1994-06-07 The Mitre Corporation Associative memory capable of matching a variable indicator in one string of characters with a portion of another string
JP2966638B2 (ja) * 1992-04-17 1999-10-25 三菱電機株式会社 ダイナミック型連想メモリ装置
DE69324204T2 (de) 1992-10-22 1999-12-23 Cabletron Systems Inc Aufsuchen von Adressen bei Paketübertragung mittels Hashing und eines inhaltsadressierten Speichers
US5444649A (en) 1993-06-10 1995-08-22 Apple Computer, Inc. Associative memory system having configurable means for comparing fields in an array of stored data words with corresponding one or more fields in a supplied argument word
US5860085A (en) 1994-08-01 1999-01-12 Cypress Semiconductor Corporation Instruction set for a content addressable memory array with read/write circuits and an interface register logic block
JP3125884B2 (ja) 1995-04-18 2001-01-22 インターナシヨナル・ビジネス・マシーンズ・コーポレーシヨン 内容アドレス記憶装置
US5642322A (en) 1995-05-24 1997-06-24 Kawasaki Steel Corporation Layout of semiconductor memory and content-addressable memory
US6041389A (en) 1995-11-16 2000-03-21 E Cirrus Logic, Inc. Memory architecture using content addressable memory, and systems and methods using the same
US5978885A (en) 1996-06-17 1999-11-02 Hewlett Packard Co. Method and apparatus for self-timing associative data memory
US6069573A (en) 1996-06-17 2000-05-30 Hewlett-Packard Company Match and match address signal prioritization in a content addressable memory encoder
US5956336A (en) 1996-09-27 1999-09-21 Motorola, Inc. Apparatus and method for concurrent search content addressable memory circuit
JP3036467B2 (ja) * 1997-06-19 2000-04-24 日本電気株式会社 最長一致検出装置
US6226710B1 (en) 1997-11-14 2001-05-01 Utmc Microelectronic Systems Inc. Content addressable memory (CAM) engine
US6161144A (en) 1998-01-23 2000-12-12 Alcatel Internetworking (Pe), Inc. Network switching device with concurrent key lookups
JP3196720B2 (ja) 1998-03-20 2001-08-06 日本電気株式会社 連想メモリ制御回路及び制御方法
US6424659B2 (en) * 1998-07-17 2002-07-23 Network Equipment Technologies, Inc. Multi-layer switching apparatus and method
US6289414B1 (en) * 1998-10-08 2001-09-11 Music Semiconductors, Inc. Partially ordered cams used in ternary hierarchical address searching/sorting
US6081440A (en) 1998-11-05 2000-06-27 Lara Technology, Inc. Ternary content addressable memory (CAM) having fast insertion and deletion of data values
US6275406B1 (en) * 1999-09-10 2001-08-14 Sibercore Technologies, Inc. Content address memory circuit with redundant array and method for implementing the same
US6324087B1 (en) * 2000-06-08 2001-11-27 Netlogic Microsystems, Inc. Method and apparatus for partitioning a content addressable memory device
US6249467B1 (en) * 1999-10-18 2001-06-19 Netlogic Microsystems, Inc Row redundancy in a content addressable memory
US6374326B1 (en) 1999-10-25 2002-04-16 Cisco Technology, Inc. Multiple bank CAM architecture and method for performing concurrent lookup operations
US6633953B2 (en) * 2000-02-08 2003-10-14 Hywire Ltd. Range content-addressable memory
US6243281B1 (en) * 2000-06-14 2001-06-05 Netlogic Microsystems, Inc. Method and apparatus for accessing a segment of CAM cells in an intra-row configurable CAM system
CA2313275C (en) * 2000-06-30 2006-10-17 Mosaid Technologies Incorporated Searchline control circuit and power reduction method
US6629099B2 (en) * 2000-12-07 2003-09-30 Integrated Silicon Solution, Inc. Paralleled content addressable memory search engine
US20020126672A1 (en) * 2001-01-10 2002-09-12 Nelson Chow Method and apparatus for a flexible and reconfigurable packet classifier using content addressable memory
US6373758B1 (en) * 2001-02-23 2002-04-16 Hewlett-Packard Company System and method of operating a programmable column fail counter for redundancy allocation
US6691252B2 (en) * 2001-02-23 2004-02-10 Hewlett-Packard Development Company, L.P. Cache test sequence for single-ported row repair CAM
US6525987B2 (en) * 2001-05-23 2003-02-25 Tachyon Semiconductor Corporation Dynamically configured storage array utilizing a split-decoder
US6744652B2 (en) * 2001-08-22 2004-06-01 Netlogic Microsystems, Inc. Concurrent searching of different tables within a content addressable memory
US6993622B2 (en) * 2001-10-31 2006-01-31 Netlogic Microsystems, Inc. Bit level programming interface in a content addressable memory
US7210003B2 (en) * 2001-10-31 2007-04-24 Netlogic Microsystems, Inc. Comparand generation in a content addressable memory
US7237058B2 (en) * 2002-01-14 2007-06-26 Netlogic Microsystems, Inc. Input data selection for content addressable memory

Also Published As

Publication number Publication date
DE60216938T2 (de) 2007-10-04
EP1425755A1 (en) 2004-06-09
US20030039135A1 (en) 2003-02-27
JP2005501448A (ja) 2005-01-13
US6744652B2 (en) 2004-06-01
US6967855B2 (en) 2005-11-22
EP1425755B1 (en) 2006-12-20
DE60216938D1 (de) 2007-02-01
WO2003019571A9 (en) 2003-08-14
US20040032775A1 (en) 2004-02-19
EP1425755A4 (en) 2005-11-09
WO2003019571A1 (en) 2003-03-06

Similar Documents

Publication Publication Date Title
JP4076497B2 (ja) 内容アドレス・メモリ内の異なるテーブルの同時サーチ
US7412561B2 (en) Transposing of bits in input data to form a comparand within a content addressable memory
US7210003B2 (en) Comparand generation in a content addressable memory
EP2517420B1 (en) Systolic array architecture for fast ip lookup
US7313667B1 (en) Methods and apparatus for mapping fields of entries into new values and combining these mapped values into mapped entries for use in lookup operations such as for packet processing
Eatherton et al. Tree bitmap: hardware/software IP lookups with incremental updates
US7441074B1 (en) Methods and apparatus for distributing entries among lookup units and selectively enabling less than all of the lookup units when performing a lookup operation
US7437354B2 (en) Architecture for network search engines with fixed latency, high capacity, and high throughput
US6721202B1 (en) Bit encoded ternary content addressable memory cell
US20050259672A1 (en) Method to improve forwarding information base lookup performance
US7694068B1 (en) Re-entrant processing in a content addressable memory
US7219187B1 (en) Search parameter table in a content addressable memory
Kaxiras et al. IPStash: a set-associative memory approach for efficient IP-lookup
US6993622B2 (en) Bit level programming interface in a content addressable memory
US20060018142A1 (en) Concurrent searching of different tables within a content addressable memory
US8477780B2 (en) Processing packet information using an array of processing elements
US7065083B1 (en) Method and apparatus for dynamically generating lookup words for content-addressable memories
Mahoney et al. Parallel hashing memories: An alternative to content addressable memories
US7114026B1 (en) CAM device having multiple index generators
Chiu et al. The design and implementation of a latency-aware packet classification for OpenFlow protocol based on FPGA
Ray et al. SRAM based longest prefix matching approach for multigigabit IP processing
US20040155695A1 (en) Multiplexer
Ng et al. Eliminating sorting in ip lookup devices using partitioned table
Teuchert et al. A Pipelined IP Address Lookup Module for 100 Gbps Line Rates and beyond
Burns et al. An FPGA based memory efficient shared buffer implementation

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20050727

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20070521

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20070529

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20070829

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20070905

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20071001

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20071004

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20071009

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20080122

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20080129

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110208

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120208

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130208

Year of fee payment: 5

LAPS Cancellation because of no payment of annual fees