以下,図面を用いて本発明を実施するための形態について説明する。本発明は,以下に説明する形態に限定されるものではなく,以下の形態から当業者が自明な範囲で適宜修正したものも含む。
図1は,情報処理システム1の概要を示したブロック図である。図1に示されるように,情報処理システム1は,複数の半導体装置10と,各半導体装置10の入力側に接続されたマスクコントローラ20と,各半導体装置10の出力側に接続されたプライオリタイザ30と,を含む。本願明細書では,まず,半導体装置10の構成について詳しく説明する。その後,複数の半導体装置10を含んで構成された情報処理システム1の構成について説明を行う。
図1は,半導体装置10の内部構成の概要を示している。また,図2は,半導体装置10の主たる機能構成を示した機能ブロック図である。また,図3は,半導体装置10による処理の流れを示したフロー図である。さらに,図4〜図6は,半導体装置10によるエントリアドレスの書込処理の例を示しており,図7〜図9は,半導体装置10によるエントリアドレスの読出処理(検索処理)の例を示している。
図1及び図2に示されるように,半導体装置10は,基本的に,検索メモリマット100と制御回路200とを備える。また半導体装置10は,さらに,バックアップメモリ300,確認用メモリ400,マスクレジスタ500,及び符号化回路600を備えることが好ましい。制御回路200は,検索メモリマット100,バックアップメモリ300,及び確認用メモリ400に接続されており,各メモリ100,300,400に対して所定のデータ(情報)を書き込んだり読み出したりする情報処理を総合的に制御する機能を担っている。特に,制御回路200は,検索メモリマット100に対するデータの書込処理及び読出処理が主たる機能となる。また,制御回路200には,マスクレジスタ500及び符号化回路600を介してデータが入力される。このため,制御回路200は,マスクレジスタ500及び符号化回路600を経由したデータに基づいて,各メモリ100,300,400に対して,データの書込処理及び読出処理を行う。
検索メモリマット100は,メモリアドレス(MA)によって特定されるメモリ空間(D)に,キーデータ(KD)に対応するエントリアドレス(EA)が書き込まれる記憶装置(メモリ)である。検索メモリマット100は,エントリアドレス(EA)を書き込むためのメモリ空間(D)が,メモリアドレス(MA)を保持したまま,複数の分割メモリ110a,110b…に区分された構成となっている。例えば,検索メモリマット100及び複数の分割メモリ110a,110b…の例は,図4などに示されている。
まず,図4を参照して,簡単に,検索メモリマット100と,それに記憶されるエントリアドレス(EA)及びキーデータ(KD)の関係について説明する。図4に示されるように,検索メモリマット100は,y軸方向に沿って複数のメモリアドレス(MA)が順番に割り当てられており,このメモリアドレス(MA)によってメモリ空間(D)のアドレス(番地)が特定されている。メモリ空間(D)は,x軸方向に沿ってデータを記憶する領域を有している。この検索メモリマット100は,複数の分割メモリ110a,110b…に区分されている。複数の分割メモリ110a,11b…は,メモリアドレス(MA)と,それによって特定されるメモリ空間(D)を保持している。また,複数の分割メモリ110a,110b…のメモリアドレス(MA)は,それぞれ共通している。つまり,分割メモリ110a,110b…のそれぞれは,メモリアドレス(MA)とそれによって特定されるメモリ空間(D)とが一対一で対応付けられた構成となっている。このように,検索メモリマット100は,複数の分割メモリ110a,110b…に区分されたものと考えることができる。言い換えると,複数の分割メモリ110a,110b…の集合によって,検索メモリマット100が構築されている。
本発明の半導体装置10は,CAM(連想メモリ)として利用することができる。つまり,半導体装置10は,検索メモリマット100に,キーデータ(KD)に対応するエントリアドレス(EA)を書き込む。その後又はこれと同時に,半導体装置10は,エントリアドレス(EA)と対応付けてキーデータ(KD)を確認用メモリ400又はバックアップメモリ300に書き込む。他方,半導体装置10に対して,検索対象としてのキーデータ(KD)を入力すると,半導体装置10は,このキーデータ(KD)に対応するエントリアドレス(EA)を読み出して出力する。つまり,「キーデータ」とは,半導体装置10に記憶される所望のデータを意味する。また,「エントリアドレス」とは,キーデータ(KD)が記憶されているメモリ(具体的には確認用メモリ400又はバックアップメモリ300)の場所(アドレス)を示すメタデータを意味している。
図4に示された例において,エントリアドレス(EA)は,16進法2桁で表される8bitのデータとして定義されている。8bitのエントリアドレス(EA)は,00〜FFの値をとる。半導体装置10は,1つのエントリアドレス(EA)に対応付けて,1つのキーデータ(KD)を記憶するものである。つまり,1つのキーデータ(KD)に対し,1つのエントリアドレス(EA)が割り当てられる。このため,エントリアドレス(EA)が8bitの情報である場合,半導体装置10には256のキーデータ(KD)を記憶することが可能となる。従って,エントリアドレスが8bitに設定されている半導体装置は,総エントリ数が256となる。なお,本発明において,エントリアドレス(EA)は,2bit以上のデータであれば問題ない。例えば,エントリアドレス(EA)は,3bit,4bit,6bit,又は8bit以上とすることもできる。また,エントリアドレス(EA)のbit数は,検索メモリマット100のメモリアドレス(MA)のbit数と一致していることが好ましい。図4に示した例では,エントリアドレス(EA)とメモリアドレス(MA)は,共に,8bitに設定されている。
また,図4に示された例において,半導体装置10に入力されたキーデータ(KD)は,144bitのデータに設定されている。144bitのキーデータ(KD)を,エントリアドレス(EA)のbit数に対応するように8bitごとに分割すると,18個のデータ(分割データ)に分割できる(つまり,144bit÷8bit=18)。ここで,本発明の半導体装置10において,検索メモリマット100を構成する分割メモリ110a,110b…の数は,少なくともキーデータの分割数(18)以上必要とされる。なお,キーデータ(KD)のbit数は,144bitに限定されるものではなく,必要に応じて適宜調整可能である。また,キーデータ(KD)を複数の分割データに分割するにあたり,キーデータ(KD)のbit数を割る数は,エントリアドレス(EA)のbit数であることが好ましい。つまり,(分割メモリの数)≧(KDのbit数)÷(EAのbit数)となることが好ましい。
また,図4に示された例において,各分割メモリ110a,110b…のメモリアドレス(MA)は,それぞれ,8bitで定義されたデータ(情報)である。つまり,図4に示された例では,キーデータ(KD)から分割された分割データと,メモリアドレス(MA)とは,それぞれ8bitに設定されている点で共通している。このように,分割データとメモリアドレス(MA)のbit数は一致していることが好ましい。なお,上述のとおり,メモリアドレス(MA)のbit数は,エントリアドレス(EA)のbit数とも一致する。
このように,本発明の半導体装置10において,検索メモリマット100は,エントリアドレス(EA)を書き込むためのメモリ空間(D)が,メモリアドレス(MA)を保持したまま,複数の分割メモリ110a,110b…に区分された構成となっている。各分割メモリは,例えば,SRAM(Static Random Access Memory)などの記憶装置を用いて構成することができる。この意味において,本発明は,複数のSRAMを利用して実現したCAMであるということができる。本発明のように,複数のSRAMを用いて実現したCAMを,SRAM−CAMと称することもできる。
また,図4に示された例のように,半導体装置10に記憶可能なキーデータ(KD)の数(総エントリ数)を256エントリと定めた場合,この256エントリを識別するために必要なエントリアドレス(EA)のbitサイズは,8bitになる。また,半導体装置10に入力されるキーデータのbitサイズが144bitであるとした場合,これをエントリアドレス(EA)のbit数8で割ると18となる。このような条件を想定すると,分割メモリ110a,110b…の数は,少なくとも18以上必要となる。
本発明の半導体装置10において,最低限必要となる分割メモリ110a,110b…の数N(検索メモリマット100の分割数N)は,以下の式により求めることができる。
(式)N=L/log2・M
L:キーデータ長(bit数)
M:総エントリ数
N:分割メモリの最小個数(検索メモリマットの分割数)
続いて,図2〜図9を参照して,半導体装置10による書込処理及び読出処理について説明する。なお,図2及び図3に示されたマスクレジスタ500によるマスク処理と,符号化回路600による符号化処理については,後ほど詳しく後述する。まずは,マスク処理と符号化処理を除き,半導体装置10による基本的な書込処理について説明を行う。
図2に示されるように,制御回路200は,基本的に,入力部210,分割部220,書込部230,読出部240,確認部250,及び出力部260を有している。これらの要素210〜260は,制御回路200の機能を概念的に分類して示したものである。すなわち,制御回路200は,これらの機能的要素210〜260を利用して,検索メモリマット100に対しエントリアドレス(EA)を書き込んだり,検索メモリマット100に記憶されているエントリアドレス(EA)を読み出したりする処理を行う。また,図3には,制御回路200による情報処理のフローが示されている。
まず,制御回路200により行われるエントリアドレス(EA)の書込処理を説明する。基本的な書込処理の具体例は,図4〜図6に示されている。ここでの書込処理とは,新しいキーデータ(KD)を記憶するにあたり,その新しいキーデータ(KD)に対応したエントリアドレス(EA)を検索メモリマット100に書き込む処理である。
図2に示されるように,書込処理においては,まず,書込対象となるキーデータが,半導体装置10に入力される。ここで,書込対象のキーデータは,図2に示されるように,制御回路200の入力部210に直接入力されることとしてもよい。また,書込対象となるキーデータは,マスクレジスタ500と符号化回路600とを経由して,制御回路200の入力部210に入力されてもよい。マスクレジスタ500と符号化回路600による処理については,詳しくは後述する。
書込対象のキーデータが制御回路200の入力部210に入力されると,この入力部210は,キーデータを分割部220へと送出する。つまり,入力部210は,制御回路200における入力インターフェースとして機能する。
続いて,分割部220は,書込対象のキーデータを,複数の分割データへと分割する。例えば,分割部220は,検索メモリマット100を構築する分割メモリ110a,110b…の数と等しい数にキーデータを分割することが好ましい。つまり,分割部220がキーデータを分割する分割数nは,検索メモリマット100を構築する分割メモリ110a,110b…の数Nと等しいことが好ましい。これにより,分割部220によって複数に分割したキーデータ(分割データ)の全てを,それぞれ順番に,複数の分割メモリ110a,110b…に対して割り当てていくことができる。例えば,図3に示した例において,半導体装置10には,144bitのキーデータが入力されることが想定されている。また,各キーデータに割り当てられるエントリアドレスのbit数は,8bitであり,分割メモリの数は18となっている。このような条件において,分割部220は,144bitのキーデータを,8bit毎に18個の分割データへと分割することが好ましい。分割部220によって,144bitのキーデータは,8bitずつ,18個の分割データに変換される。なお,分割部220による分割条件は,分割メモリの数や,エントリアドレスのbit数,キーデータのbit数などに応じて,適宜変更することが可能である。分割部220によって生成された複数の分割データは,書込部230へと送出される。
さらに詳しく説明すると,分割部220により分割された分割データのビット数(α)は,検索メモリマット100のメモリアドレス(MA)のビット数(β)と等しいことが好ましい(α=β)。例えば,図4などに示されるように,検索メモリマット100のメモリアドレス(MA)が8bitで表される場合には,分割部220は,キーデータ(KD)を8bitの分割データに分割することが好ましい。また例えば,検索メモリマット100のメモリアドレス(MA)が,2bitで表される場合には,分割部220は,キーデータ(KD)を2bitの分割データに分割することが好ましい。これにより,後の処理において,分割部220が分割した分割データのそれぞれを,当該分割データをアドレスとして,検索メモリマット100を構築する分割メモリに適切に割り当てることができる。
書込部230は,検索メモリマット100を構築する複数の分割メモリ110a,110b…や,確認用メモリ400,バックアップメモリ300に対して,所定のデータを書き込む機能を有する。
図2及び図3に示されるように,半導体装置10に対して書込対象のキーデータ(KD)が入力されると,まず,書込部230は,このキーデータ(KD)に対して固有のエントリアドレス(EA)を割り当てる。このエントリアドレス(EA)は,一つのキーデータ(KD)について一つ割り当てられるものである。
また,書込部230は,キーデータ(KD)に対して固有のエントリアドレス(EA)を割り当てた後,又は割り当てると同時に,検索メモリマット100を構成する複数の分割メモリ110a,110b…に対して,キーデータ(KD)に対応するエントリアドレス(EA)を書き込んでいく。図3に示されるように,書込部230は,複数の分割データをアドレスとして,これらの分割データのそれぞれに対応するエントリアドレス(EA)を,分割メモリ110a,110b…に対して書き込む。
具体的に説明すると,図3に示されるように,キーデータ(KD)の分割数と検索メモリマット100の区分数は等しくなっている。図3に示した例では,キーデータ(KD)は,18個の分割データに分割されており,検索メモリマット100は,18個の分割メモリに区分されている。まず,書込部230は,複数の分割データを,それぞれ1つずつ,分割メモリに割り当てる。つまり,1番目の分割データは1番目の分割メモリに割り当てられ,2番目の分割データは2番目の分割メモリに割り当てられ,同じようにして,k番目の分割データはk番目の分割メモリに割り当てられる。ここで,各分割メモリは,メモリアドレス(MA)が付与されており,このメモリアドレス(MA)によってメモリ空間が特定されている。書込部230は,分割データを分割メモリに割り当てた後,この分割データと分割メモリのメモリアドレス(MA)とを照合して,この分割データと一致するメモリアドレス(MA)を指定する。例えば,分割データが“00”という値である場合,書込部230は,分割メモリの中から,“00”という値を有するメモリアドレス(MA)を指定する。そして,書込部230は,分割データに一致するメモリアドレス(MA)によって特定されるメモリ空間にアクセスし,このメモリ空間に分割データに対応するエントリアドレス(EA)を書き込んでいく。例えば,分割データ“00”に対応するエントリアドレスが“01”である場合,メモリアドレス“00”によって特定されるメモリ空間に,エントリアドレス“01”を書き込む。このように,書込部230は,分割データをアドレスとして,メモリアドレス(MA)によって特定されるメモリ空間にアクセスし,アクセスしたメモリ空間に,分割データに対応するエントリアドレス(EA)を書き込む。書込部230は,このようなエントリアドレス(EA)の書込処理を,分割データが割り当てられた全ての分割メモリに対して行っていく。このような処理が,基本的な書込処理となる。
また,書込部230は,入力部210に入力されたキーデータ(KD)(分割前の状態のキーデータ)と,これに割り当てたエントリアドレス(EA)とを対応付けて,確認用メモリ400に書き込む処理を行う。すなわち,新しい書込対象のキーデータが半導体装置10に入力された際,書込部230は,この新しいキーデータに対して一つのエントリアドレスを割り当てて,新しいキーデータとエントリアドレスの対応関係を,確認用メモリ400に記憶しておく。これにより,確認用メモリ400には,エントリアドレス(EA)とキーデータ(KD)とが一対一で対応して記憶される。このように,確認用メモリ400は,キーデータとエントリアドレスの対応関係を記憶しておくためのデータベースとしても機能する。また,確認用メモリ400は,後述するように,読出処理を行う際に,制御回路が読み出したエントリアドレスが正しいものであるか否かの最終確認を行う際にも利用される。なお,確認用メモリ400は,SRAM等の公知の記憶装置によって構成すればよい。
また,例えば図3や図4に示されるように,確認用メモリ400は,予めエントリアドレス(EA)がすべて登録されている構成であってもよい。つまり,確認用メモリ400は,予め登録されているエントリアドレス(EA)によって空のメモリ空間が特定されており,この空のメモリ空間に対してキーデータ(KD)を書き込むことができるようになっている。例えば,書込部230は,キーデータ(KD)に対して割り当てられたエントリアドレス(EA)を参照して,確認用メモリ400にアクセスする。そして,確認用メモリ400内のエントリアドレス(EA)によって特定されるメモリ空間に,キーデータ(KD)を書き込む。このような処理によっても,結果的には,一つのエントリアドレス(EA)と一つのキーデータ(KD)とが対応付けて確認用メモリ400に記憶されることとなる。
次に,図4〜図6を参照して,書込部230による書込処理について,具体例を挙げて説明する。
まず,図4は,基本的な書込処理の例を示している。図4に示した例では,“00_01_02_03_04_05_06_07_08_09_0A_0B_0C_0D_0E_0F_10_11”という値のキーデータ(KD)が,半導体装置10に入力される。なお,アンダーラインは便宜的に付されたものであり,本来的には存在しない。キーデータ(KD)は,16進法で表された144bitの値である。書込部230は,まずこのキーデータ(KD)に対して,“00”の値を持つエントリアドレス(EA)を割り当てる。エントリアドレス(EA)は,16進法2桁で表された8bitの値である。
またキーデータ(KD)が半導体装置10に入力されると,分割部220が,このキーデータ(KD)を複数の分割データに分割する。図4に示された例において,検索メモリマット100のメモリアドレス(MA)及びエントリアドレス(EA)は8bitの値である。また,検索メモリマット100は,18個の分割メモリ110a,110b,…110mに区分されている。そこで,分割部220は,144bitのキーデータ(KD)を,8bitずつ,18個の分割データへと分割する。このため,各分割データは,8bitの値となる。図4に示した例において,キーデータ(KD)は,“00”“01”“02”“03”“04”“05”“06”“07”“08”“09”“0A”“0B”“0C”“0D”“0E”“0F”“10”“11”という18個の分割データに分割される。
その後,書込部230は,分割部220によって生成された分割データを,分割メモリ110a〜110mに割り当てて,エントリアドレス(EA)を書き込んでいく。図4に示されるように,まず,書込部230は,1番目の分割データ“00”を1番目の分割メモリ110aに割り当てる。1番目の分割メモリ110aは,“00”〜“FF”の値を持つ8bitのメモリアドレス(MA)を有している。ここで,書込部230は,1番目の分割データ“00”を参照して1番目の分割メモリ110aのメモリアドレス(MA)“00”を指定し,このメモリアドレス“00”によって特定されるメモリ空間(D)にアクセスする。そして,書込部230は,メモリアドレス“00”によって特定されるメモリ空間(D)に対し,1番目の分割データ“00”に対応するエントリアドレス(EA)“00”を書き込む。このような書込処理を,書込部230は,2番目〜18番目の分割データについても同様にして行う。例えば,書込部230は,2番目の分割データ“01”を2番目の分割メモリ110bに割り当てて,2番目の分割データ“01”を参照して2番目の分割メモリ110bのメモリアドレス(MA)“01”を指定し,このメモリアドレス“01”によって特定されるメモリ空間(D)に対し,2番目の分割データ“01”に対応するエントリアドレス(EA)“00”を書き込む。また,例えば,書込部230は,18番目の分割データ“11”を18番目の分割メモリ110mに割り当てて,18番目の分割データ“11”を参照して18番目の分割メモリ110mのメモリアドレス(MA)“11”を指定し,このメモリアドレス“11”によって特定されるメモリ空間(D)に対し,18番目の分割データ“11”に対応するエントリアドレス(EA)“00”を書き込む。このようにして,書込部230は,キーデータ(KD)を複数の分割データに分割した上で,検索メモリマット100を構成する複数の分割メモリ110a,110b…に対して,キーデータ(KD)に対応するエントリアドレス(EA)を書き込んでいく。
また,図4に示されるように,書込部230は,検索メモリマット100に対する書込処理を終えると,書込対象としてのキーデータ(KD)(分割前の状態のキーデータ)と固有のエントリアドレス(EA)とを対応付けて,これらの値を確認用メモリ400に書き込む。これにより,確認用メモリ400には,エントリアドレス(EA)とキーデータ(KD)とが一対一で対応付けられて記憶されることとなる。
続いて,図5を参照して,書込処理において,エントリアドレス(EA)の「衝突」が生じる場合の例を説明する。本発明の半導体装置では,書込部230が,分割データをアドレスとして,その分割データに対応するエントリアドレス(EA)を,分割メモリ110a…に書き込む。このため,同じ分割メモリの同じメモリ空間に複数のエントリアドレス(EA)が書き込まれる可能性がある。このように,同じメモリ空間に複数のエントリアドレスが書き込まれる現象を,本願明細書では「衝突」と表現している。ここで,本発明の半導体装置は,エントリアドレス(EA)の書込処理を行うにあたり「衝突」が生じた場合に,「衝突」が発生したメモリ空間に,衝突情報(ドントケア値)を登録し,そのまま書込処理を続行する。これにより,エントリアドレスの書込処理を高速化できる。つまり,本発明は,エントリアドレス(EA)の衝突を避けるのではなく,エントリアドレスの衝突を気にせずに書込処理を行う。これにより,本発明は,書込処理/読出処理におけるアルゴリズムを簡素化し,さらには,データ検索の高速性と低消費電力性の両立を実現している。
図5は,衝突が発生する場合の書込処理の例を示している。図5に示した例では,図4に示したキーデータ(KD)に続いて,“00_02_02_03_04_05_06_07_08_09_0A_0B_0C_0D_0E_0F_10_FF”という値のキーデータ(KD)が,半導体装置10に入力される。書込部230は,まずこのキーデータ(KD)に対して,“01”の値を持つエントリアドレス(EA)を割り当てる。
また,キーデータ(KD)が半導体装置10に入力されると,分割部220が,このキーデータ(KD)を複数の分割データに分割する。分割部220は,144bitのキーデータ(KD)を,8bitずつ,18個の分割データへと分割する。図5に示した例において,キーデータ(KD)は,“00”“02”“02”“03”“04”“05”“06”“07”“08”“09”“0A”“0B”“0C”“0D”“0E”“0F”“10”“FF”という18個の分割データに分割される。
その後,書込部230は,分割部220によって生成された分割データを,分割メモリ110a〜110mに割り当てて,エントリアドレス(EA)を書き込んでいく。図5に示されるように,まず,書込部230は,1番目の分割データ“00”を1番目の分割メモリ110aに割り当てて,1番目の分割データ“00”を参照して1番目の分割メモリ110aのメモリアドレス(MA)“00”を指定し,このメモリアドレス“00”によって特定されるメモリ空間(D)にアクセスする。そして,書込部230は,このメモリ空間(D)に,1番目の分割データ“00”に対応するエントリアドレス(EA)“01”を書き込もうとする。しかしながら,このメモリアドレス“00”によって特定されるメモリ空間(D)には,すでに,他のエントリアドレス(EA)“00”が書き込まれている(図4参照)。このため,書込部230は,このメモリ空間(D)に,新しいエントリアドレス(EA)“01”を書き込むことができない。このように,一つのメモリ空間に複数のエントリアドレス(EA)が書き込まれる現象が,「衝突」である。このような「衝突」が生じている場合,書込部230は,衝突が生じているメモリ空間(D)に,エントリアドレスの衝突を表す衝突情報(ドントケア値)を登録する。このように,書込部230は,1番目の分割データ“00”については,対応するメモリ空間に衝突情報を登録して,その書込処理を終える。
このような書込処理を,書込部230は,2番目〜18番目の分割データについても同様にして行う。例えば,書込部230は,2番目の分割データ“02”を2番目の分割メモリ110bに割り当てて,2番目の分割データ“02”を参照して2番目の分割メモリ110bのメモリアドレス(MA)“02”を指定し,このメモリアドレス“02”によって特定されるメモリ空間(D)に対し,2番目の分割データ“02”に対応するエントリアドレス(EA)“01”を書き込む。2番目の分割データ“02”に関しては,衝突が生じていないため,分割メモリに書き込むことができる。他方,例えば,書込部230は,3番目の分割データ“02”を3番目の分割メモリ110cに割り当てて,3番目の分割データ“02”を参照して3番目の分割メモリ110cのメモリアドレス(MA)“02”を指定し,このメモリアドレス“02”によって特定されるメモリ空間(D)に対し,3番目の分割データ“02”に対応するエントリアドレス(EA)“01”を書き込もうとする。しかしながら,メモリアドレス“02”によって特定されるメモリ空間(D)には,すでに,他のエントリアドレス“00”が書き込まれている。そこで,書込部230は,このメモリ空間に,衝突情報(ドントケア値)を登録して,3番目の分割データ“02”に関する書込処理を終える。このように,書込部230は,衝突が生じる部分については衝突情報を登録して,分割データのすべてについて書込処理を行う。このように,衝突が発生したメモリ空間については衝突情報を登録してそのまま書込処理を続行することで,エントリアドレスの書込処理を高速化することができる。
その後,書込部230は,図5に示されるように,書込対象としてのキーデータ(KD)(分割前の状態のキーデータ)と固有のエントリアドレス(EA)とを対応付けて,これらの値を確認用メモリ400に書き込む。これにより,確認用メモリ400には,エントリアドレス(EA)とキーデータ(KD)とが一対一で対応付けられて記憶されることとなる。
続いて,図6を参照して,書込処理において,エントリアドレス(EA)の「全衝突」が生じる場合の例を説明する。本発明の半導体装置10は,上記のように,エントリアドレスが衝突したメモリ空間には,衝突情報を登録していく。しかし,一つのキーデータ(KD)から生成された複数の分割データの全てについて,衝突が生じる可能性も存在する。このような全衝突が生じる可能性は極めて低いものであるが,理論的には発生し得る。そこで,図6では,全衝突が発生した場合の対策を示している。
図6は,全衝突が発生する場合の書込処理の例を示している。図6に示した例では,図4及び図5に示したキーデータ(KD)に続いて,“00_01_02_03_04_05_06_07_08_09_0A_0B_0C_0D_0E_0F_10_FF”という値のキーデータ(KD)が,半導体装置10に入力される。書込部230は,まずこのキーデータ(KD)に対して,“02”の値を持つエントリアドレス(EA)を割り当てる。
また,キーデータ(KD)が半導体装置10に入力されると,分割部220が,このキーデータ(KD)を複数の分割データに分割する。分割部220は,144bitのキーデータ(KD)を,8bitずつ,18個の分割データへと分割する。図6に示した例において,キーデータ(KD)は,“00”“01”“02”“03”“04”“05”“06”“07”“08”“09”“0A”“0B”“0C”“0D”“0E”“0F”“10”“FF”という18個の分割データに分割される。
その後,書込部230は,分割部220によって生成された分割データを,分割メモリ110a〜110mに割り当てて,エントリアドレス(EA)を書き込んでいく。図6に示されるように,まず,書込部230は,1番目の分割データ“00”を1番目の分割メモリ110aに割り当てて,1番目の分割データ“00”を参照して1番目の分割メモリ110aのメモリアドレス(MA)“00”を指定し,このメモリアドレス“00”によって特定されるメモリ空間(D)にアクセスして,1番目の分割データ“00”に対応するエントリアドレス(EA)“02”を書き込もうとする。しかしながら,このメモリアドレス“00”によって特定されるメモリ空間(D)には,すでに別のエントリアドレスが書き込まれており,衝突が発生している。同様に,書込部230は,2番目〜18番目の分割データについても,これらの分割データをアドレスとして,2番目〜18番目の分割メモリ110b〜110mのメモリ空間にアクセスする。しかし,2番目〜18番目の分割メモリ110b〜110mにおいても,衝突が発生している。その結果,1番目〜18番目の分割メモリ110a〜110mの全てについて,衝突が発生していることとなる。
図6に示されるように,このような全衝突が生じた場合,書込部230は,全衝突が生じたキーデータ(KD)を,固有のエントリアドレス(EA)と対応付けて,バックアップメモリ300に書き込む。バックアップメモリ300は,例えば図3に示されるように,キーデータ(KD)とエントリアドレス(EA)と一対一で対応付けて記憶することのできるメモリである。バックアップメモリ300は,例えばSRAMなどの公知のメモリによって構成することができる。このように,書込部230は,検索メモリマット100に書き込むと全衝突が生じるキーデータ(KD)については,この全衝突を回避するために,検索メモリマット100には書き込まずに,バックアップメモリ300に書き込んでおくことが好ましい。このように,検索メモリマット100とは別に,バックアップメモリ300を設けておくことで,全衝突が生じたキーデータ(KD)の書込処理が簡易になるととともに,全衝突が生じたキーデータ(KD)の検索処理(読出処理)を効率的に行うことができるようになる。なお,図6に示されるように,バックアップメモリ300に書き込まれるキーデータ(KD)は,分割部220によって分割される前の状態のものであることが好ましい。
図4及び図5を参照して説明したとおり,通常であれば,書込部230は,検索メモリマット100に対する書込処理の後,キーデータ(KD)とエントリアドレス(EA)を対応付けて確認用メモリ400に書き込む処理を行う。ただし,図6に示されるように,全衝突が生じているキーデータ(KD)は,バックアップメモリ300に書き込まれる。この場合,バックアップメモリ300に書き込まれたキーデータ(KD)を,改めて確認用メモリ400に書き込む必要はない。このように,バックアップメモリ300と確認用メモリ400のいずれか一方にのみキーデータ(KD)が書き込まれるようにすることで,そのキーデータ(KD)を読み出す際には,そのキーデータ(KD)が書き込まれている方のメモリのみを参照すれば済むため,検索処理を高速化させることができる。
また,図6に示されるように,全衝突が生じた場合,確認用メモリ400にはキーデータ(KD)が書き込まれず,本来であればキーデータ(KD)が書き込まれるべきであったメモリ空間は空(ブランク)のまま保持される。例えば,確認用メモリ400には,エントリアドレス(EA)“02”が登録されているものの,このエントリアドレス(EA)“02”によって特定されるメモリ空間は,空(ブランク)の状態となっている。このため,確認用メモリ400にアクセスして,空(ブランク)のメモリ空間を参照すれば,どのエントリアドレス(EA)に対応するキーデータ(KD)に全衝突が生じて,バックアップメモリ300に記憶されているのかを把握することができる。つまり,確認用メモリ400を見れば,エントリアドレス(EA)“02”に対応するキーデータ(KD)に全衝突が生じていることを容易に把握できる。
続いて,図2,図3,及び図7〜図9を参照して,半導体装置10による基本的な読出処理(検索処理)について説明を行う。ここでの読出処理とは,検索対象となるキーデータ(KD)が半導体装置10に入力されたときに,この半導体装置10が,検索メモリマット100を検索して,検索対象となるキーデータ(KD)に対応するエントリアドレス(EA)を読み出す処理である。なお,マスク処理と符号化処理を含む読出処理については後ほど説明することとし,ここでは,マスク処理と符号化処理を除いた読出処理について説明を行う。
図2に示されるように,書込処理においては,まず,書込対象となるキーデータが,半導体装置10に入力される。ここで,書込対象のキーデータは,図2に示されるように,制御回路200の入力部210に直接入力されることとしてもよい。また,書込対象となるキーデータは,マスクレジスタ500と符号化回路600とを経由して,制御回路200の入力部210に入力されてもよい。マスクレジスタ500と符号化回路600により処理については,詳しくは後述する。
図2及び図3に示されるように,検索対象のキーデータ(KD)が制御回路200の入力部210に入力されると,この入力部210は,キーデータ(KD)を分割部220へと送出する。続いて,分割部220は,検索対象のキーデータ(KD)を,複数の分割データへと分割する。ここで,分割部220が検索対象のキーデータ(KD)を分割するときの条件(アルゴリズム)は,上述した書込対象のキーデータ(KD)を分割するときの条件(アルゴリズム)と同じである。分割部220によって得られた複数の分割データは,読出部240へと送出される。
読出部240は,複数の分割データそれぞれについて,この分割データをアドレスとして検索メモリマット100の各分割メモリ110a,110b…にアクセスし,分割メモリ110a,110b…に記憶されているエントリアドレス(EA)を読み出す。ここで,読出部240が,分割データをアドレスとして分割メモリにアクセスする方法(アルゴリズム)は,上述した書込部230が分割データをアドレスとして分割メモリにアクセスする方法と同じである。つまり,まず,読出部240は,複数の分割データを,それぞれ1つずつ,分割メモリに割り当てる。つまり,1番目の分割データは1番目の分割メモリに割り当てられ,2番目の分割データは2番目の分割メモリに割り当てられ,同じようにして,k番目の分割データはk番目の分割メモリに割り当てられる。ここで,各分割メモリは,メモリアドレス(MA)が付与されており,このメモリアドレス(MA)によってメモリ空間が特定されている。読出部240は,分割データを分割メモリに割り当てた後,この分割データと分割メモリのメモリアドレス(MA)とを照合して,この分割データと一致するメモリアドレス(MA)を指定する。例えば,分割データが“00”という値である場合,読出部240は,分割メモリの中から,“00”という値を有するメモリアドレス(MA)を指定する。また,読出部240は,分割データに一致するメモリアドレス(MA)によって特定されるメモリ空間にアクセスする。そして,読出部240は,アクセスしたメモリ空間に記憶されているエントリアドレス(EA)を読み出していく。このように,読出部240は,分割データをアドレスとして,メモリアドレス(MA)によって特定されるメモリ空間にアクセスし,アクセスしたメモリ空間に記憶されているエントリアドレス(EA)を読みだす。このように,読出部240は,基本的に書込部230と同じ手順でメモリ空間にアクセスして,そこに記憶されているエントリアドレス(EA)を読み出すものである。
次に,図7〜図9を参照して,読出部240による読出処理について,具体例を挙げて説明する。
まず,図7は,基本的な読出処理の例を示している。図7に示した例では,“00_02_02_03_04_05_06_07_08_09_0A_0B_0C_0D_0E_0F_10_FF”という値のキーデータ(KD)が,検索対象として,半導体装置10に入力される。検索対象のキーデータ(KD)が半導体装置10に入力されると,分割部220が,このキーデータ(KD)を複数の分割データに分割する。図7に示された例において,分割部220は,144bitのキーデータ(KD)を,8bitずつ,18個の分割データへと分割する。このため,各分割データは,8bitの値となる。図7に示した例において,キーデータ(KD)は,“00”“02”“02”“03”“04”“05”“06”“07”“08”“09”“0A”“0B”“0C”“0D”“0E”“0F”“10”“FF”という18個の分割データに分割される。
その後,読出部240は,分割部220によって生成された分割データをアドレスとして分割メモリ110a〜110mにアクセスし,エントリアドレス(EA)を読み出していく。図7に示されるように,まず,読出部240は,1番目の分割データ“00”を1番目の分割メモリ110aに割り当てて,1番目の分割データ“00”を参照して1番目の分割メモリ110aのメモリアドレス(MA)“00”を指定し,このメモリアドレス(MA)“00”によって特定されるメモリ空間(D)にアクセスする。しかしながら,1番目の分割メモリ110aにおいて,メモリアドレス(MA)“00”によって特定されるメモリ空間(D)には,衝突情報(ドントケア値)が登録されている。このような場合に,読出部240は,1番目の分割メモリ110aからはエントリアドレス(EA)を読み出さずに,ドントケア(配慮しないもの)として処理する。
次に,読出部240は,2番目の分割データ“02”を2番目の分割メモリ110bに割り当てて,2番目の分割データ“02”を参照して2番目の分割メモリ110bのメモリアドレス(MA)“02”を指定し,このメモリアドレス(MA)“02”によって特定されるメモリ空間(D)にアクセスする。このアクセスしたメモリ空間(D)には,衝突情報は登録されておらず,エントリアドレス“01”のみが記憶されている。そこで,読出部240は,このメモリ空間(D)からエントリアドレス“01”を読み出す。このような書込処理を,書込部230は,3番目〜18番目の分割データについても同様にして行う。例えば,読出部240は,3番目の分割データ“02”をアドレスとして,3番目の分割メモリ110cのメモリ空間にアクセスするが,このメモリ空間には衝突情報が登録されているため,ドントケアとして処理する。また,読出部240は,18番目の分割データ“FF”をアドレスとして,18番目の分割メモリ110mのメモリ空間にアクセスすると,このメモリ空間からエントリアドレス“01”を読み出すことができる。
読出部240は,1つのキーデータ(KD)から分割された複数の分割データのそれぞれについて,上記した読出処理を行う。ここで,1つキーデータ(KD)に基づいて読み出されたエントリアドレス(EA)の値が一致する場合,読出部240は,その読み出したエントリアドレス(EA)を有効なものと判断する。他方,1つキーデータ(KD)に基づいて読み出されたエントリアドレス(EA)の値に不一致がある場合,読出部240は,その読み出したエントリアドレス(EA)を無効なものと判断する。つまり,読出部240は,1つのキーデータ(KD)に関する読出処理において,1種類のエントリアドレス(EA)のみが読み出された場合を有効とし,2種類以上のエントリアドレス(EA)が読み出された場合を無効とする。図7に示された例においては,検索対象のキーデータ(KD)を分割して読出処理を行ったところ,ドンドケアとして処理されたものを除き,各分割メモリから“01”という共通の値のエントリアドレス(EA)が読み出されている。このように,読み出されたエントリアドレス(EA)の値は同じ“01”であり,すべて一致している。このため,図7の例において,読出部240は,エントリアドレス(EA)“01”を有効な値であると判断することができる。
また,読出部240が有効な値としてのエントリアドレス(EA)を読み出した場合,そのエントリアドレス(EA)は,確認部250へと送出される(図2参照)。例えば,図7の例において,エントリアドレス(EA)“01”を有効な値であると判断できるため,このエントリアドレス(EA)“01”が,確認部250へと送出される。確認部250は,読出部240によって有効と判断されたエントリアドレス(EA)に基づいて,確認用メモリ400にアクセスする。確認用メモリ400には,上述したとおり,エントリアドレス(EA)に対応づけてキーデータ(KD)が記憶されている。ここで,確認部250は,エントリアドレス(EA)と対応付けられているキーデータ(KD)を確認用メモリ400から読み出す。図7に示された例において,確認用メモリ400からは,エントリアドレス(EA)“01”に対応付けられた“00_02_02_03_04_05_06_07_08_09_0A_0B_0C_0D_0E_0F_10_FF”という値のキーデータ(KD)が読み出される。ここで,確認部250は,確認用メモリ400から読み出されたキーデータ(KD)と半導体装置10に入力されたキーデータ(KD)とを比較する。そして,確認部250は,その比較結果を出力する。比較結果に関する情報としては,例えば,比較対象とされた2つのキーデータ(KD)が一致又は不一致であるという情報となる。図7に示された例において,確認部250(比較器)において比較されたキーデータ(KD)は,互いに同じ値である。従って,確認部250は,キーデータ(KD)が一致する旨の情報(一致情報)を出力することができる。
図2及び図3に示されるように,読出部240によって有効であると判断されたエントリアドレス(EA)と,確認部250による確認情報(一致又は不一致の情報)は,出力部260へと送出される(図2参照)。出力部260は,外部回路に接続されている。このため,出力部260を介して,エントリアドレス(EA)と確認情報が外部回路へと出力される。このように,出力部260は,半導体装置10の出力インターフェースとして機能する。
次に,図8は,読出部240によって読み出されたエントリアドレス(EA)の値が不一致であった場合の例を示している。図8に示した例において,読出部240は,2番目の分割データ“01”をアドレスとして,2番目の分割メモリ110bのメモリ空間にアクセスしたところ,このメモリ空間からエントリアドレス“00”を読み出すことができた。他方,読出部240は,18番目の分割データ“FF”をアドレスとして,18番目の分割メモリ110mのメモリ空間にアクセスしたところ,このメモリ空間からエントリアドレス“01”を読み出すことができた。しかしながら,読出部240が2番目の分割メモリ110bから読み出したエントリアドレス“00”と,18番目の分割メモリ110mから読み出したエントリアドレス“01”の値との間には,不一致が発生している。このため,読出部240は,入力されたキーデータ(KD)に対応するエントリアドレス(EA)を一意に特定することができない。このように,読み出したエントリアドレス(EA)に不一致が発生している場合,検索メモリマット100には,入力されたキーデータ(KD)に対応するエントリアドレス(EA)が書き込まれていないものと判断できる。従って,読出部240は,これらの読み出したエントリアドレス(EA)を無効と判断する。
一方,図6を参照して説明したとおり,本発明の半導体装置10では,キーデータ(KD)の書込処理時において,エントリアドレス(EA)の全衝突が生じている場合には,検索メモリマット100には書き込まずに,キーデータ(KD)をバックアップメモリ300に書き込むこととしている。このため,図8に示されるように,読出部240によって読み出されたエントリアドレス(EA)に不一致が生じており,エントリアドレス(EA)が検索メモリマット100に書き込まれていないと判断できる場合であっても,キーデータ(KD)がバックアップメモリ300に記憶されている可能性がある。そこで,図8に示されるように,読出部240は,検索対象として入力されたキーデータ(KD)に基づいて,バックアップメモリ300に記憶されている情報を検索する。バックアップメモリ300には,上述したとおり,キーデータ(KD)とエントリアドレス(EA)が対応付けて記憶されている。このため,読出部240は,バックアップメモリ300内を検索して,検索対象のキーデータ(KD)と同じキーデータ(KD)を発見したときには,そのキーデータ(KD)に対応付けられているエントリアドレス(EA)を読み出して出力する。他方,読出部240は,バックアップメモリ300内を検索しても,検索対象のキーデータ(KD)と同じキーデータ(KD)を発見できなかったときには,例えば“検索情報なし(一致情報なし)”との情報を出力して,検索処理を終了する。図8に示した例では,検索対象のキーデータ(KD)に基づいてバックアップメモリ300を検索したところ,一致するキーデータ(KD)が記憶されていたため,これに対応するエントリアドレス(EA)“02”が出力されている。
続いて,図9は,読出部240による読出処理がすべてドントケアとして処理された場合の例を示している。図9に示されるように,半導体装置10に検索対象としてのキーデータ(KD)が入力されると,分割部220は,このキーデータ(KD)を複数の分割データへと分割する。また,読出部240は,各分割データをアドレスとして,各分割メモリ110a…110mにアクセスし,各分割メモリのメモリ空間からエントリアドレス(EA)を読み出そうとする。しかし,図9に示した例では,読出部240がアクセスしたメモリ空間の全てに衝突情報が登録されている。このため,読出部240は,すべての分割データについて,ドントケアとして処理している。その結果,読出部240は,検索メモリマット100から全くエントリアドレス(EA)を読み出すことができず,検索結果を得ることができない。
このような場合に,例えば,衝突している複数のエントリアドレス(EA)を候補として,これらの複数の候補の中から,検索対象のキーデータに対応するかどうかを一つ一つ照合する処理(いわゆる総ざらい処理)を行うことも考えられる。しかし,このような総ざらい処理が発生すると,データ検索処理の遅延を招いたり,データ検索の精度が低下するという問題があると考えられていた。
このため,本発明の半導体装置10では,図6を参照して説明したとおり,エントリアドレス(EA)の全衝突が生じる場合には,キーデータ(KD)をバックアップメモリ300に退避させて書き込むこととしている。このため,図9に示されるように,読出部240は,アクセスしたメモリ空間の全てに衝突情報が登録されている場合には,バックアップメモリ300を検索する処理を行う。つまり,読出部240は,全衝突によりエントリアドレス(EA)を検索できない場合には,検索対象として入力されたキーデータ(KD)に基づいて,バックアップメモリ300に記憶されている情報を検索する。読出部240は,バックアップメモリ300内を検索して,検索対象のキーデータ(KD)と同じキーデータ(KD)を発見したときには,そのキーデータ(KD)に対応付けられているエントリアドレス(EA)を読み出して出力する。他方,読出部240は,バックアップメモリ300内を検索しても,検索対象のキーデータ(KD)と同じキーデータ(KD)を発見できなかったときには,例えば“検索情報なし(一致情報なし)”との情報を出力して,検索処理を終了する。図9に示した例では,検索対象のキーデータ(KD)に基づいてバックアップメモリ300を検索したところ,一致するキーデータ(KD)が記憶されていたため,これに対応するエントリアドレス(EA)“02”が出力されている。
このように,本発明の半導体装置は,全衝突対策として,バックアップメモリ300を備えている。本発明の半導体装置は,バックアップメモリ300を設けておくことで,全衝突が生じるキーデータとそのエントリアドレスとを,回避させて記憶しておくことができる。全衝突が生じたキーデータを読み出すための処理は非常に煩雑なものであったが,バックアップメモリ300に記憶しておくことで,読出処理(検索処理)を迅速かつ効率的に行うことができる。
次に,図1〜3及び図10〜図13を参照して,半導体装置にワイルドカード機能を実装するためのマスク処理について説明する。
図1に示されるように,複数の半導体装置10によって情報処理システム1が構築されている。情報処理システム1は,マスクコントローラ20と,複数の半導体装置10と,プライオリタイザ30とを備えている。また,複数の半導体装置10は,それぞれ,マスクレジスタ500を備えている。
マスクコントローラ20は,各半導体装置10のマスクレジスタ500に接続されている。例えば,半導体装置10には,複数のキーデータ(KD)から構成されるテーブルデータを入力することができる。テーブルデータを入力することにより,半導体装置10に対して複数のキーデータ(KD)を一括して書き込むことが可能となる。このような場合に,マスクコントローラ20は,複数のキーデータ(KD)から構成されるテーブルデータを解析し,このテーブルデータから複数のマスクパターンを抽出して,各マスクパターンを半導体装置10のマスクレジスタ500に登録する機能を有する。また,マスクレジスタ500は,登録されているマスクパターンに応じて,書込対象/検索対象となるキーデータ(KD)に対してマスクを付与する機能を持つ。また,プライオリタイザ30は,各半導体装置10の制御回路200の出力端に接続されている。プライオリタイザ30は,各制御回路200から出力されたエントリアドレス(EA)が入力される。プライオリタイザ30は,同時に複数の制御回路200からエントリアドレス(EA)が入力されたときに,各エントリアドレス(EA)の優先度(プライオリティ)を決定し,優先度の高い順に一又は複数のエントリアドレス(EA)を選択して出力する機能を持つ。
まず,半導体装置10のマスクレジスタ500にマスクパターンを登録する初期登録処理について説明する。
図10には,半導体装置10を含む情報処理システム1に入力可能なテーブルデータの一例が示されている。例えば,本発明の情報処理システム1は,インターネットスイッチやルータを構成するCAMとして利用することができる。図10に示されるように,テーブルデータは,例えば,スイッチルータ用のCAMに書き込むべき複数のキーデータ(KD)によって構成されている。例えば,各キーデータ(KD)は,「Src−IP」(送信元のIPアドレス),「Dst−IP」(送信先のIPアドレス),「Protocol」(通信に使用されるプロトコル),「Src−Port」(送信元端末のポート番号),及び「Dst−Port」(送信先端末のポート番号)などに関する情報が含まれる。また,図10において,「*」は特定されていない情報(マスク部位)を示している。また,「Src−IP」は,IPv4に準拠した32ビットのIPアドレスを示すものであるが,「/24」や「/28」といった表記は,上位24ビット(又は28ビット)がネットワークアドレスとなり,下位8ビット(又は4ビット)がホストアドレスとなることを示している。スイッチルータ用のCAMにおいては,一般的に,IPアドレスのうちのホストアドレスとなる下位ビットを無視(ドントケア)として検索される。このため,例えば「/28」といったIPアドレスにおいては,下位4ビットをマスク部位として扱うことが一般的である。
図10に示されるように,テーブルデータを構成する複数のキーデータ(KD)は,異なる部分にマスク部位を有している。ただし,各キーデータ(KD)のマスク部位は,全てのデータにおいて異なるというわけでなく,共通するマスク部位を有するキーデータ(KD)も存在している。例えば,図10に示した例では,テーブルデータは8つのキーデータ(KD)によって構成されているが,マスク部位の共通性によってグループ分けすると,5つのグループに分類することができる。同じグループに属するキーデータ(KD)は,共通するマスク部位を有していることとなる。
そこで,このようなテーブルデータをマスクコントローラ20に入力すると,マスクコントローラ20がテーブルデータを解析して,マスクパターンを自動的に生成し,各半導体装置10のマスクレジスタ500に登録する。つまり,図10に示されるように,マスクコントローラ20は,テーブルデータ入力部21と,マスクパターン生成部22と,マスクパターン登録部23を備えている。これらの要素は,マスクコントローラ20の機能的ブロックである。
テーブルデータ入力部21には,半導体装置10に書き込むことを希望する所望のテーブルデータが入力される。テーブルデータ入力部21は,入力インターフェースとして機能する。テーブルデータ入力部21は,入力されたテーブルデータをマスクパターン生成部22に送出する。
マスクパターン生成部22は,入力されたテーブルデータに含まれるキーデータ(KD)のマスク部位を解析し,このマスク部位のパターンに基づいて,一又は複数のマスクパターンを生成する。まず,マスクパターン生成部22は,テーブルデータに含まれる複数のキーデータ(KD)の中から,共通する部分にマスク部位を有するキーデータ(KD)を抽出する。このように,マスクパターン生成部22は,マスク部位の共通性に基づいて,キーデータ(KD)を複数のグループに分類する。つまり,同じグループに属するキーデータ(KD)は,共通するマスク部位を有している。その後,各グループのマスク部位の共通性に基づいて,マスクパターンを生成する。例えば,図10に示した例において,マスクパターンは,“FFFFFFF000000000FFFFFF0000”のように表される。“F”は,16進法における0〜Fまでの任意の数値が存在する部位(非マスク部位)であり,“0”は検索において無視される部位(マスク部位)を示している。このようにして,マスクパターン生成部22は,キーデータ(KD)が属する各グループについて,マスクパターンを生成する。図10に示された例にいて,マスクパターン1〜5までの5つのマスクパターンが生成されている。
マスクパターン登録部23は,マスクパターン生成部22によって生成された複数のマスクパターンを,それぞれ,異なる半導体装置10のマスクレジスタ500に振り分けて登録する。例えば,マスクパターン生成部22によって5つのマスクパターンが生成された場合,マスクパターン登録部23は,5つのマスクパターンをそれぞれ異なるマスクレジスタ500に登録する。例えば,図10に示されるように,マスクレジスタ500は,5つ用意される。第1のマスクレジスタ500には,パターン1のマスクパターンが登録され,第2のマスクレジスタ500には,パターン2のマスクパターンが登録され,第3〜第5のマスクレジスタ500も同様に処理される。このように,複数のマスクレジスタ500には,それぞれ異なるマスクパターンが登録されることとなる。これにより,複数の半導体装置10のマスクレジスタ500に対するマスクパターンの初期登録処理が完了する。
続いて,マスクパターン登録済みのマスクレジスタ500を有する半導体装置10によって,エントリアドレス(EA)を書き込む処理,及びエントリアドレス(EA)を検索する処理について説明する。
図12は,マスクレジスタ500を利用した書込処理の一例を示している。図12は,1つの半導体装置10による書込処理を示しているが,情報処理システム1に含まれる他の半導体装置10についても同様の書込処理が行われる(図11参照)。図12に示した例では,“00_01_02_03_04_05_06_07_08_09_0A_0B_0C_0D_0E_0F_10_11”という値のキーデータ(KD)が,書込対象として,半導体装置10に入力される。書込部230は,このキーデータ(KD)に対して,“00”の値を持つエントリアドレス(EA)を割り当てる。
図12に示されるように,書込対象のキーデータ(KD)は,所定のマスクパターンが登録されているマスクレジスタ500に入力される。例えば,図12に示した例において,マスクレジスタ500には,“FF_FF_FF_FF_00_00_00_00_FF_FF_FF_FF_F0_FF_FF_FF_FF_F0”というマスクパターンが登録されている。マスクレジスタ500は,このマスクパターンに応じて,書込対象のキーデータ(KD)に対してマスクを付与する。例えば,“F”は,16進法における0〜Fまでの任意の数値が存在する部位(非マスク部位)である。このため,マスクレジスタ500は,“F”の部位については,キーデータ(KD)の値を変換しない。他方,“0”は検索において無視される部位(マスク部位)である。このため,マスクレジスタ500は,“0”の部位については,キーデータ(KD)の値を全て“0”に変換する。このため,マスクレジスタ500によって,書込対象のキーデータ(KD)の値は,“00_01_02_03_04_05_06_07_08_09_0A_0B_0C_0D_0E_0F_10_11”から,“00_01_02_03_00_00_00_00_08_09_0A_0B_00_0D_0E_0F_10_10”に変換される。これにより,書込処理のキーデータ(KD)にマスクが付与されたこととなる。
その後,書込部230は,通常どおり,マスク付与後のキーデータ(KD)について,検索メモリマット100を構成する複数の分割メモリ110a,110b…に対して,エントリアドレス(EA)の書込処理を行う。書込処理は,図4を参照して説明したものと同じであるため詳しい説明は省略する。このように,例えば,書込対象のキーデータ(KD)を,マスクレジスタ500に入力し,マスクレジスタ500によって所定のマスク部位の値を全て“0”に変換する。そして,書込対象のキーデータ(KD)について,検索において無視される部位(マスク部位)を全て“0”という値に変換した上で,検索メモリマット100に対する書込処理を行う。これにより,同じマスクレジスタ500を通過したキーデータ(KD)は,全て同じ部位が“0”という値となる。このため,マスクが付与されたキーデータ(KD)が書き込まれると,マスク部位に対応するメモリ空間には必ず衝突情報が登録されることとなり,その読出処理においてドントケア(検索無視)として処理される。このため,マスク部位については検索対象としない,いわゆるワイルドカード検索機能を実現することができる。
なお,図12に示した例において,マスクレジスタ500は,キーデータ(KD)のマスク部位を,全て“0”という値に変換している。ただし,マスク部位の値の変換値は“0”に限られない。“0”以外の値であっても,書込処理時に衝突が生じるように,キーデータ(KD)のマスク部位を共通した値に変換するようにすればよい。
また,図12に示されるように,書込部230は,マスク付与後のキーデータ(KD)の値を,エントリアドレス(EA)と対応付けて,確認用メモリ400に書き込む。つまり,ここでは,マスクが付与される前のキーデータ(KD)ではなく,マスク付与後のキーデータ(KD)の値が,確認用メモリ400に書き込まれる。
続いて,図13は,マスクレジスタ500を利用した読出処理(検索処理)の一例を示している。図13は,1つの半導体装置10による読出処理を示しているが,情報処理システム1に含まれる他の半導体装置10についても同様の読出処理が行われる(図11参照)。図13に示した例では,“00_01_02_03_DE_AD_BE_EF_08_09_0A_0B_01_0D_0E_0F_10_1F”という値のキーデータ(KD)が,検索対象として,半導体装置10に入力される。その後,検索対象のキーデータ(KD)は,所定のマスクパターンが登録されているマスクレジスタ500に入力される。例えば,図12に示した例において,マスクレジスタ500には,“FF_FF_FF_FF_00_00_00_00_FF_FF_FF_FF_F0_FF_FF_FF_FF_F0”というマスクパターンが登録されている。マスクレジスタ500は,このマスクパターンに応じて,検索対象のキーデータ(KD)に対してマスクを付与する。例えば,マスクレジスタ500は,“F”の部位については,キーデータ(KD)の値を変換せず,“0”の部位については,キーデータ(KD)の値を全て“0”に変換する。このため,マスクレジスタ500によって,検索対象のキーデータ(KD)の値は,“00_01_02_03_DE_AD_BE_EF_08_09_0A_0B_01_0D_0E_0F_10_1F”から,“00_01_02_03_00_00_00_00_08_09_0A_0B_00_0D_0E_0F_10_10”に変換される。これにより,検索処理のキーデータ(KD)にマスクが付与されたこととなる。
その後,読出部240は,通常どおり,マスク付与後のキーデータ(KD)について,検索メモリマット100を構成する複数の分割メモリ110a,110b…にアクセスし,エントリアドレス(EA)の読出処理を行う。読出処理(検索処理)は,図7を参照して説明したものと同じであるため詳しい説明は省略する。このように,例えば,検索対象のキーデータ(KD)を,マスクレジスタ500に入力し,マスクレジスタ500によって所定のマスク部位の値を全て“0”に変換する。そして,検索対象のキーデータ(KD)について,検索において無視される部位(マスク部位)を全て“0”という値に変換した上で,検索メモリマット100に対する検索処理を行う。これにより,マスク部位については検索条件として考慮することなく,検索処理を行うことができる。例えば,図12に示された書込対象のキーデータ(KD)(マスク付与前)と,図13に示された検索対象のキーデータ(KD)(マスク付与前)は,値が異なっている。しかし,図12に示されたマスク付与後のキーデータ(KD)(マスク付与前)と,図13に示されたマスク付与後のキーデータ(KD)(マスク付与前)とは,値が同じである。このため,マスクが付与された部分を検索条件として無視することで,図13に示されたマスク付与後のキーデータ(KD)に基づいて検索メモリマット100を検索すれば,図12に示された書込対象のキーデータ(KD)に対応するエントリアドレス(EA)を読みだすことができる。このため,マスク部位については検索対象としない,いわゆるワイルドカード検索機能を実現することができる。
その後,図13に示されるように,確認部250は,読出部240が読み出したエントリアドレス(EA)に基づいて確認用メモリ400を参照し,確認用メモリ400から,エントリアドレス(EA)に対応づけて記憶されているキーデータ(KD)を読み出す。そして,確認部250は,確認用メモリ400から読み出したキーデータ(KD)と,マスク付与後の検索対象のキーデータ(KD)とを比較し,一致するか否かの情報を出力する。上述したとおり,確認用メモリ400には,書込処理(図12参照)において,マスク付与後の書込対象のキーデータ(KD)が記憶されている。このため,マスク付与後のキーデータ同士を比較することで,確認部250は,検索処理が正しく行われたか否かを確認することができる。図13に示した例では,確認部250(比較器)から一致情報が出力されている。
図12及び図13で説明した書込処理/読出処理は,複数の半導体装置10において同時に行われる。つまり,図11に示されるように,情報処理システム1では,同じ書込対象又は検索対象のキーデータ(KD)が,同時に,複数の半導体装置10に対して入力される。複数の半導体装置10は,それぞれ異なるマスクパターンが登録されたマスクレジスタ500を有している。検索対象のキーデータ(KD)を複数の半導体装置10に入力した場合,各半導体装置10から得られる検索結果(エントリアドレス及び確認情報)は異なるものとなる。例えば,1つの半導体装置10のみから検索結果が出力される場合もあるし,複数の半導体装置10から検索結果が出力される場合もある。複数の半導体装置10からの検索結果は,すべてプライオリタイザ30へと入力される。
図11に示されるように,プライオリタイザ30は,複数の半導体装置10から検索結果が入力された場合に,その複数の検索結果の優先度を比較して,一又は複数の検索結果を選択して出力する。例えば,図11に示した例では,第2の半導体装置10と第4の半導体装置10からの検索結果が,プライオリタイザ30に入力されている。この場合,例えば,プライオリタイザ30は,第2の半導体装置10からの検索結果を優先して外部へと出力し,第4の半導体装置10からの検索結果を破棄している。このため,第2の半導体装置10の検索結果が優先されたものといえる。このように,プライオリタイザ30は,複数の半導体装置10に検索結果に優劣をつけるためのアルゴリズムがプログラムされており,このアルゴリズムに従って,検索結果の出力の可否を決定する。優劣のためのアルゴリズムは,任意に設定することができる。
このように,ワイルドカード検索を行った場合,複数の半導体装置10から異なる検索結果が得られる事態も想定される。この場合に,半導体装置10の出力先にプライオリタイザ30を設定しておくことで,例えば,1つの検索結果のみを選択し,残りの検索結果を破棄することができる。これにより,情報処理システム1から出力される検索結果(エントリアドレス)を1つのみに絞ることができ,その検索結果を受け取る外部回路において誤作動や混乱が生じることを防止できる。
なお,詳しい図示は省略するが,書込対象のキーデータ(KD)に対してマスクを付与して検索メモリマット100に書き込む際に,「全衝突」(図6参照)が生じる可能性もある。この場合,図3に示されるように,マスク付与後のキーデータ(KD)が,エントリアドレス(EA)と対応付けて,バックアップメモリ300に書き込まれる。また,検索対象のキーデータ(KD)に対してマスクを付与して検索処理を行う際に,検索メモリマット100から読み出されたエントリアドレス(EA)に「不一致」(図8参照)が生じたり,「全衝突」(図9参照)が生じる可能性もある。この場合,図3に示されるように,マスク付与後のキーデータ(KD)に基づいて,バックアップメモリ300を検索する。これにより,マスク処理とバックアップメモリ300を利用した全衝突対策処理とを併用することができる。
次に,図1〜図3,図14,及び図15を参照して,キーデータ(KD)の符号化処理について説明する。
上述したとおり,本発明の半導体装置10は,エントリアドレス(EA)の書込処理において衝突が発生したときには,メモリ空間に衝突情報を登録することとしている。ここで,書込対象のキーデータ(KD)に偏りがあると,データの衝突頻度が高くなり,検索不能データ列が多くなるという問題が発生する。例えば,ID番号やIPアドレスを降順で連続的に書き込む場合のように,ほとんど同じデータが連続して同じ検索メモリマット100に書き込まれると,データの偏りが発生する。これにより,検索メモリマット100内において,エントリアドレスの衝突が発生する確率が高くなる。例えば,“00_01_02_03”というキーデータ(KD)に続けて,“00_01_02_04”というキーデータ(KD)が入力されたことを考えると,2つのキーデータ(KD)の値には最後の1bitしか違いがない。このため,後者のキーデータ(KD)の書込処理を行う際には,ほとんどの値について衝突情報を登録する必要がある。このようなデータの偏りは,防ぐことが好ましい。
そこで,本発明の半導体装置10は,キーデータ(KD)を符号化するための符号化回路600(図1〜図3等参照)を備える。図1〜図3に示されるように,書込対象/検索対象のキーデータ(KD)が半導体装置10の制御回路200に入力される前に,符号化回路600によって,キーデータ(KD)を符号化する。ここにいう符号化には,キーデータの値を所定のアルゴリズムで拡散(分散)させることや,キーデータの値の順番を並び替えるような処理が含まれる。このように,ほとんど同じキーデータが続けて入力された場合であっても,これらのキーデータを符号化することにより,検索メモリマット100に書き込まれるデータの偏りを解消することが可能となる。データの偏りが解消すれば,検索メモリマット100内で衝突が発生する可能性を低下させることができる。その結果,正確にデータ検索を行うことのできる可能性が高まる。なお,符号化回路600は,書込対象のキーデータ(KD)についても検索対象のキーデータ(KD)についても全く同じアルゴリズムで符号化する。これにより,書込対象のキーデータ(KD)と検索対象のキーデータ(KD)を整合させることができる。
図14は,符号化回路600によって実行される符号化処理の一例を概念的に示している。図14に示されるように,符号化回路600は,書込対象/検索対象のキーデータ(144bit)を,複数の分割データ(1〜18)に分割する。このときの分割処理は,上述した分割部220による処理と同じようにすればよい。その後,符号化回路600は,複数の分割データ(1〜18)の位置を並べ替える。このときの並べ替え処理は,一定のアルゴリズムに基づいて行われる。その後,符号化回路600は,並べ替えられた複数の分割データの値を拡散(分散)させる。分割データの値の拡散処理は,公知の符号化アルゴリズム(暗号化アルゴリズム)に基づいて行うことができる。例えば,拡散処理を行うことで,最初に入力されたキーデータ(KD)は,bit数を維持したまま,異なる値に変換されることが好ましい。図14に示された例において,最初のキーデータ(KD)と拡散処理後のデータ(拡散化データ)は,共に144bitのデータであるとされている。
上記のように,例えば並べ替え処理と拡散処理との組み合わせによって,符号化回路600はキーデータ(KD)を符号化することができる。符号化されたキーデータ(拡散化データ)は,上述した制御回路200に入力される(図1〜図3参照)。その後,図14に示されるように,制御回路200は,通常どおり,拡散化データを分割して,複数の分割データを生成し,各分割データをアドレスとして,検索メモリマット100を構成する分割メモリにアクセスする。そして,制御回路200は,アクセスした分割メモリに対してエントリアドレス(EA)を書き込む処理,又はアクセスした分割メモリからエントリアドレス(EA)を読み出す処理を行う。
図15は,符号化回路600によって実行される符号化処理の他の例を概念的に示している。図15に示されるように,符号化回路600は,書込対象/検索対象のキーデータ(144bit)を複製する。例えば,図15に示されているように,分割メモリが18個存在する場合には,符号化回路600は,この分割メモリの数に併せて,キーデータ(KD)を18個複製する。複製された複数のキーデータ(KD)は同じ値を持つものである。その後,符号化回路600は,同じ値を持つ複数のキーデータ(KD)に対して,それぞれ異なる拡散アルゴリズムに基づいた拡散処理を行う。例えば,キーデータ(KD)は18個に複製されているため,拡散アルゴリズムも18種類用意されている。これにより,異なる値を持つ拡散化データが得られる。このように,符号化回路600は,1つのキーデータ(KD)から,複数(分割メモリに対応した数)の拡散化データを生成することとしてもよい。
上記のように,例えば複製処理と拡散処理との組み合わせによって,符号化回路600はキーデータ(KD)を符号化することができる。複数の拡散化データは,上述した制御回路200に入力される(図1〜図3参照)。その後,図15に示されるように,制御回路200は,複数の拡散化データをそれぞれ分割して,各拡散化データから複数の分割データを生成する。また,制御回路200は,各分割データをアドレスとして,検索メモリマット100を構成する分割メモリにアクセスする。そして,制御回路200は,アクセスした分割メモリに対してエントリアドレス(EA)を書き込む処理,又はアクセスした分割メモリからエントリアドレス(EA)を読み出す処理を行う。
このように,符号化回路600を設けて,キーデータ(KD)を符号化することにより,検索メモリマット100に書き込まれるデータの偏りを解消することができる。データの偏りが解消すれば,検索メモリマット100内で衝突が発生する可能性を低下させることができる。その結果,正確にデータ検索を行うことのできる可能性が高まる。
なお,図1〜図3に示されるように,マスク処理と符号化処理を併用する場合,マスクレジスタ500の後段に,符号化回路600を設けることが好ましい。つまり,符号化回路600は,マスクレジスタ500によってマスクが付与されたキーデータ(KD)を符号化する。また,図1〜図3に示されるように,バックアップメモリ300,マスクレジスタ500,及び符号化回路600を併用することも当然に可能である。
続いて,図16〜図24を参照して,ワイルドカード検索機能を実現するための方式の他の例について説明する。
図16(a)は,ワイルドカード検索機能の方式例1を概念的に示している。図16(a)に示された方式例1は,図1〜図15を参照して説明した方式と同じである。図16(b)は,方式例1とは異なる方式例2を概念的に示したものである。以下では,図17〜図24を参照して,この図16(b)に示された方式例2について説明する。
図17(a)は,検索メモリに書き込むキーデータの構成の例を示している。例えば,TCAM(半導体装置)に入力するキーデータの構成が,図17(a)のような構成を有している場合について考える。図17(a)に示されるように,キーデータの構成は,以下のように構成されている。
・入力キーデータ長:32bit
・入力キーデータの中のW/C(ワイルドカード:don’t care bit)となる部分:下位4bit(/28)又は8bit(/24)
・エントリ数:4k
W/C部分を,/24又は/28に限定して考えた場合(/32は含まれない),少なくとも下位の4bitは検索対象外となるため,上位28bitのみが検索の対象となる。ここで,W/C影響を受けない部分を「固定部分」と定義し,W/Cになる可能性のある部分を「W/C部分」と定義する。この定義に従うと,「W/C部分」は4bit,「固定部分」は24bitになる。この例ではエントリ数が4kであるため,検索メモリを構成する各分割メモリのワード長(フラグは除く)は,12bitになる。つまり,「固定部分」(24bit)を分割メモリ(12bit)に割り当てると,分割メモリ2個分になる。分割メモリの数が2個というのは衝突理論から考えると少なすぎるため,衝突が多発するという問題が発生する。この問題を解決するためには,固定部分のキーデータを拡張する必要がある。このため,固定部分のキーデータを,図17(b)に示すように拡張して,
分割メモリ6個分に相当するように,少なくても6個(72bit)程度に拡張する必要がある。
図17(b)は,固定部分のキーデータを拡張した例を示している。図17(b)において,拡張された固定部分(72bit)は,(1)〜(6)で示されている。また,W/C部分(/28と/24の差分データ+マスク情報)は,(7)で示されている。つまり,マスク部分を除いた/24及び/28のデータは,下記のようになる。
・/24のキーデータは固定部分の24bitのみ(W/C部分はマスクされる)
・/28のキーデータは固定部分の24bit+4bit(W/C部分)
また,マスクデータは,/24か/28かを指定する部分である。(7)で示されたW/C部分のマスク状態を,マスクデータによって下記のように指定する。
・/24:11(2bit)
・/28:01(2bit)
・登録無し:00(2bit)
なお,「登録なし:00」は,/28のみの登録時に誤って,/24と判断することを防止するのに必要とされる。
図18(a)は,/24及び/28対応のTCAMの構成例を示している。TCAMの実現に必要なメモリ構成は,図18(a)に示されるようになり,キーデータを4k×144bitのブロックに収容可能である。マスク情報は,その前の4bitをマスクするかどうかが識別でき,且つ,その前の4bitにマスクしたデータが登録されていることが識別できればよい。このため,マスク情報は,2bitあれば十分である。
また,図18(b)は,/16及び/18対応のTCAM(20bit)の構成例を示している。ここで,図18(a)に示した/24及び/28(ビット長32bit)対応TCAMの基本動作を説明するには規模が大きすぎるため,基本的な考え方は変えずに,規模を小さくした/16及び/18(ビット長20bit)対応のTCAMを用いて基本動作と,そのTCAMの構成方法について説明する。なお,フラグを除くデータビットを24bitから72bitへと拡散する操作以外は,/24及び/28対応のものと,/16及び/18対応のものとで,同じ操作とすることができる。
図19(a)は,/16及び/18対応のTCAM(20bit)が備える確認用メモリへの登録例を示している。確認用メモリは,検索データの最終検査用のメモリである。基本的に,確認用メモリは,W/Cの仕様とW/Cの処理後のデータを登録する場所である。確認用メモリでは,W/Cの処理に無関係な部分と,W/Cの処理に関係する部分とに分けられる。W/Cの処理に無関係な部分を,ここでは「固定部分」と呼ぶ。また,W/Cの処理に関係する部分を,「マスク部分」と呼ぶ。/16及び/18の場合は,図19(a)示すように,(1)〜(5)が固定部分となり,(5)及び(6)がマスク部分となる。/16の場合には,(1)〜(4)がW/C処理されない固定部分となり,/18の場合には,(1)〜(5)がW/C処理されない固定部分となる。(5)を,固定部分に含めるか否かは,(6)のマスクデータ((5)をマスクするかしないかを定義した情報)で決まる。/16及び/18対応TCAMにはビット長が20bitであるが,/16又は/18の何れの場合であって,下位2bitのデータはマスクされることになる。このため,検索に係わるビットは,上位から16bit又は上位から18bitということになる。なお,(1)〜(4)の固定データ部分については,この例では拡散によるビット数の拡張が不要な場合であるが,ビット数の拡張が必要な場合であっても,ビット数拡張前のデータを確認用メモリに登録することとなる。
ここで,/16及び/18対応TCAMが備える検索メモリマットへの登録方法について説明する。固定データ部分のビット数が少ない場合,衝突防止の点から,必要に応じて拡散によるビット拡張操作が必要となる。すなわち,例えば,エントリ数が4kであるのに対して固定データ部分のビット数が24bitの場合,ビット拡張を行わずに分割メモリに登録しようとすると,分割メモリの数が2となり,登録データがランダムであっても1/14.3の確率で衝突が起き,衝突が使用上の大きな問題となる。従って,この問題を解決するには,登録データのランダム化と分割メモリ数の増大による衝突確率の大幅低減を図るために,拡散操作によるビット数の拡張が必須になる。なお,/16及び/18対応TCAMでは,拡散によるビット拡張は不要としているので,原則的には(1)〜(4)のデータをそのまま検索メモリマットに登録することになる。ただし,マスク部分にW/Cが含まれるため,(1)〜(4)が必ずしもユニークになるとは限らない。つまり,(1)〜(4)部分において連続的に同じデータが登録される可能性も考えられる。このように,(1)〜(4)部分において同じデータが複数個存在すると,(1)〜(4)に全列衝突が発生し,1サイクルで検索することが出来なくなるという問題も発生する。
従って,このような全列衝突を防ぐための対策が必要となる。そこで,説明する方式例では,このW/Cによる全列衝突を防ぐために,最初のデータのみ検索メモリマットに登録し,2回目以降のデータは検索メモリマットに登録しないという概念を導入する。このような概念を,ここでは「グループ登録」と称している。「グループ登録」を行う場合,グループを代表する番号が必要になる。このグループを代表する番号を,ここでは「代表番号」と称する。さらに,この代表番号には,登録した最初のキーデータのエントリアドレスを用いるものとする。このようにすれば,(1)〜(4)の同じデータを1つのグループとし,そのグループを代表番号により区別することができるようになる。
図19(b)は,グループ登録の制約事項を説明するための図である。(1)〜(4)における同じ1つのグループには,登録上の制約がある。まず,基本的な制約事項として,CAMには同じデータは登録できないという制約がある。この制約によると,(1)〜(4)が同じデータの場合,本例では,(5)か(6)の何れかに違いがなければ登録できないことになる。この制約から登録できる範囲を考えると,以下のことがいえる。
・マスク1とマスク3の混在が可能。
・ただし,マスク1は(5)が0の場合のみ,マスク3は(5)が0〜3まで登録可能。
・マスク1とマスク3が混在する場合はマスク1の登録エントリ番号が小さくなければならない。
・(マスク1とマスク3が混在する場合の代表番号は必ずマスク1の番号になる)
この制約事項から,同じグループに属する登録データの数は,マスク1も含めると最大で5ということになる。ただし,マスク3が優先的に検索されるので,マスク3に登録されている(5)のデータは,マスク1の登録があったとしても,マスク1として検索されることはない。
その他,「グループ登録」の導入により,検索データの中に登録しない領域が生じるため,グループ登録の数が増えるに従って衝突確率が低下するという利点がある。また,「グループ登録」は,登録時の基本的な制約事項の確認を行うため,登録前に必ず読出し確認を行うための特別な制約事項が発生しないという利点もある。なお,基本的な制約事項を確認するには,固定データ部分の検索メモリを確認するだけでよく,確認用メモリによる最終確認までは必要としない。
続いて,マスクデータ部分の登録について説明する。図20(a)は,マスクデータ部分の構成例を示している。図20に示されるように,マスクデータ部分は,確認用メモリの(5)と(6)に相当する部分の登録処理を行う部分である。/16及び/18対応TCAM(20bit)の例に示したように,マスクデータ部分は,確認代表番号変換メモリとコード検索メモリ(16w×2bit SRAM)の2個からなる。
代表番号変換メモリとコード変換メモリについて説明する。まず,(5)のビット数は4bitであるが,W/Cが存在するため,/16(マスク1)では(5)全ビットが検索対象外となり,/18(マスク3)では最下位から2bitが検索対象外になる。そこで,両者に共通する最下位からの2bitを除いた残りの2bitの部分を,(5)のデータとする。このように考えると,(5)の登録データは,/16ではマスク処理後のデータである0となり,/18では最下位からの2bitを除いた上位2bitのデータである0〜3となる。W/Cがある場合,(5)の違いにより。(1)〜(4)の全列衝突が発生する。この全列衝突避けるためには,「グループ登録」を導入する必要がある。また,グループ間の衝突を避けるため,0〜15のエントリ内に/18の0〜3の登録範囲に合わせて,登録領域を確保し,各グループに割り付ける。この領域の割り付けを行うためのメモリが,「代表番号変換メモリ」であり,各領域内に(5)の値を登録したメモリが,「コード変換メモリ」である。
図20(b)は,代表番号変換メモリの登録方法の例を示している。図20(b)に示されるように,16個あるエントリを4で割ると,4個の0〜3を登録できる領域を確保できる。この0〜3を登録できる4個の領域の0のエントリアドレスを,マスク3の代表番号のシフト番号とすると,エントリアドレスの0,4,8,12が0〜3を登録できる領域を代表するシフト番号になる。このシフト番号を導入することで,どの領域に0〜3を登録するか簡単に定めることができる。例えば,図20(b)に示されるように,代表番号1にシフト番号4を登録し,シフト番号4で検索メモリのエントリアドレス4〜7に,0〜3を登録する領域に指定する。このように,0〜3を登録する領域の割り付けを行うのが,代表番号変換メモリの役目である。
図21(a)は,コード検索メモリの登録方法の例を示している。図21(a)の図は,コード3の(5)が,0〜3の何れかの値であることを示している。前述の例(図20(b)参照)で示したように,代表番号変換メモリの代表番号が1でシフト番号4が指定されたとすると,(5)の0〜3は,図21(a)に示されるように,エントリアドレス4〜7に割り付けられる。例えば,(5)が0であり,このデータのエントリアドレスが5だとすると,図21(a)の切り出し部分に示されるように,4ワードメモリの0番地に,エントリアドレス5が登録される。同様に,(5)が1,2であり,それらのデータのアドレスがそれぞれ4,12であるとすると,1番地にエントリアドレス4が登録され,2番地にエントリ番号12が登録される。このように切り出し部分で見ると,分割メモリに登録する基本的手法と全く同じになる。ただし,この切り出し部分は,エントリ数が0〜15の一部である。このため,エントリ数が0〜15の中にこの切り出し部分をあてはめる必要がある。このあてはめ操作にシフト番号を用いることになる。この例では,切り出し部分をエントリアドレスの4〜7にあてはめるため,シフト番号の4を(5)の値に加算する。この様な操作を行うことで,コード検索メモリへのデータ登録を行うことができる。
続いて,このような方式例のTCAMを用いた検索動作について説明する。図21(b)は,検索動作における動作1を示している。動作1は,「検索データの前処理」である。つまり,検索データの前処理では,入力された20bitの検索データを18bit化するとともに,(1)〜(5)の割り付けを行う。検索時に入力される検索データは20bitである。この入力データにはW/Cが含まれており,検索の対象となるデータは/16又は/18である。このため,20bitの入力データのうち,検索の対象となるのは18bit又は16bitであり,最下位から2bitのデータは検索に無関係なデータとなる。このCAMは,エントリが16ワードである。このため,20bitの入力データを4bit単位で区切り,最上位からこの4bit単位で区切ったデータに,それぞれ(1)〜(5)の番号を割り当てると,(1)〜(4)は4bitずつ合計16bitとなり,(5)は下位2bitの構成になる。(1)〜(4)は固定部分である。他方,(5)は,/16のときには,(5)の2bitが全ビットマスクされて0になり,/18のときには,そのまま2bitのデータとして取り扱われることとなる。しかし,検索データが入力された段階では,(5)のデータが/16であるか,それとも/18であるかは不明である。そこで,20bitの入力データの最下位から2bitを除いて,この入力データを(1)〜(5)に割り当てる操作が必要になる。この操作が,「検索データの前処理」である。
図22(a)は,検索動作における動作2を示している。動作2では,(1)〜(4)の固定データによるグループ(代表番号)の検索を行う。入力データの(1)〜(4)を用いて,固定部分の検索メモリを検索する。ここでの検索動作が,図22(a)に示されている。
図22(b)は,検索動作における動作3を示している。動作3では,(5)のマスクデータによる検索を行う。まず,入力データの(5)と読み出した代表番号とを用いて,マスク3のデータが登録されているか否かを検索する。登録データはマスク1かマスク3のどちらかであるため,マスク3であると仮定して検索を行い,マスク3に登録されていなければマスク1のデータであるという前提の検索方法を用いている。この検索方法が成立するためには,マスク1とマスク3が混在する場合には,マスク1をマスク3の前のエントリに登録する必要がある。なお,図23(b)において,代表番号変換で空白となっているところは,マスク3ではない(つまりマスク1のデータである)ということを示している。また,検索結果で空白となったところもマスク1のデータとなる。
図23(a)は,検索動作における動作4を示している。動作4では,動作3の検索結果を用いて確認用メモリを検索し検索入力との比較を行う。一致すればマッチ状態となり,不一致ならアンマッチとなる。図23(a)において,検索順序の1と4は,検索入力データで見ると同じになる。また,マスク3(コード3)を優先して検索することから,コード3の登録データを見ると,該当番号が登録されており,検索結果はエントリ番号4と判断される。検索順序の1と4は同じグループに属しており,コード3を優先して検索するため,コード3に登録しているエントリ番号はコード1のデータとしては検索されなくなる(ロンゲストマッチになる)。
図23(b)は,コード検索メモリの登録領域拡張法の一例を示している。/16及び/18対応TCAMの場合,例では,エントリ数16の中のうち,マスク3(コード3)の登録領域としては4種類しか取れない。これよりも登録領域を増やす必要が生じる場合もある。その場合の対策方法を検討すると,次の対策が考えられる。まず,対策方法1としては,マスク3(コード3)を,別々なTCAMブロックに登録することが考えられる。また,対策方法2としては,コード3のコード検索メモリの数を増やし,識別番号を付加することが考えられる。代表番号変換メモリの数を増やすことはせずに,未使用のフラグ(3bit)を活用して,増やしたコード検索メモリの識別を行う。例えば,000は1個目,001は2個目のようにし,代表番号変換メモリの変換時に,変換データが0で,フラグの001が読み出されたら,2個目の0〜3の該当番地を検索するようにすればよい。
図24は,パイプライン動作の場合における検索動作のフローを示している。図24は,上記した検索動作をまとめたものである。図24に示されるように,検索動作は,第1サイクルから第4サイクルによって実行することができる。
以上,本願明細書では,本発明の内容を表現するために,図面を参照しながら本発明の実施形態の説明を行った。ただし,本発明は,上記実施形態に限定されるものではなく,本願明細書に記載された事項に基づいて当業者が自明な変更形態や改良形態を包含するものである。