以下,図面を用いて本発明を実施するための形態について説明する。本発明は,以下に説明する形態に限定されるものではなく,以下の形態から当業者が自明な範囲で適宜修正したものも含む。
図1は,半導体装置10の主たる機能構成を示した機能ブロック図である。また,図2は,半導体装置10による処理の流れを示した流れ図である。さらに,図3〜図7は,半導体装置10によるエントリアドレスの書込処理の例を示しており,図8〜図11は,半導体装置10によるエントリアドレスの読出処理(検索処理)の例を示している。
図1に示されるように,半導体装置10は,基本的に,検索メモリマット100と制御回路200と,確認用メモリ300を備える。加えて,半導体装置10は,バックアップメモリ400及び符号化回路500を備えることが好ましい。制御回路200は,検索メモリマット100,確認用メモリ300,及びバックアップメモリ400に接続されており,各メモリ100,300,400に対して所定のデータ(情報)を書き込んだり読み出したりする情報処理を総合的に制御する機能を担っている。特に,制御回路200は,検索メモリマット100に対するデータの書込処理及び読出処理が主たる機能となる。また,制御回路200には,符号化回路500が組み込まれていてもよい。この場合,制御回路200は,符号化回路500を経由したデータに基づいて,各メモリ100,300,400に対して,データの書込処理及び読出処理を行う。
検索メモリマット100は,メモリアドレス(MA)によって特定されるメモリ空間(D)に,キーデータ(KD)に対応するエントリアドレス(EA)が書き込まれる記憶装置(メモリ)である。検索メモリマット100は,エントリアドレス(EA)を書き込むためのメモリ空間(D)が,メモリアドレス(MA)を保持したまま,複数の分割メモリ110a,110b…に区分された構成となっている。例えば,検索メモリマット100及び複数の分割メモリ110a,110b…の例は,図5〜図7,図10,及び図11などに示されている。
まず,図5を参照して,簡単に,検索メモリマット100と,それに記憶されるエントリアドレス(EA)及びキーデータ(KD)の関係について説明する。図5に示されるように,検索メモリマット100は,y軸方向に沿って複数のメモリアドレス(MA)が順番に割り当てられており,このメモリアドレス(MA)によってメモリ空間(D)のアドレス(番地)が特定されている。メモリ空間(D)は,x軸方向に沿ってデータを記憶する領域を有している。この検索メモリマット100は,複数の分割メモリ110a,110b…に区分されている。複数の分割メモリ110a,110b…は,メモリアドレス(MA)と,それによって特定されるメモリ空間(D)を保持している。また,複数の分割メモリ110a,110b…のメモリアドレス(MA)は,それぞれ共通している。つまり,分割メモリ110a,110b…のそれぞれは,メモリアドレス(MA)とそれによって特定されるメモリ空間(D)とが一対一で対応付けられた構成となっている。このように,検索メモリマット100は,複数の分割メモリ110a,110b…に区分されたものと考えることができる。言い換えると,複数の分割メモリ110a,110b…の集合によって,検索メモリマット100が構築されている。
本発明の半導体装置10は,連想メモリ(CAM:Content Addressable Memory)として利用することができる。つまり,半導体装置10は,検索メモリマット100に,キーデータ(KD)に対応するエントリアドレス(EA)を書き込む。その後又はこれと同時に,半導体装置10は,エントリアドレス(EA)と対応付けてキーデータ(KD)を確認用メモリ300に書き込む。他方,半導体装置10に対して,検索対象としてのキーデータ(KD)を入力すると,半導体装置10は,このキーデータ(KD)に対応するエントリアドレス(EA)を読み出して出力する。つまり,「キーデータ」とは,半導体装置10に記憶される所望のデータを意味する。また,「エントリアドレス」とは,キーデータ(KD)が記憶されているメモリ(具体的には確認用メモリ30)の場所(アドレス)を示すメタデータを意味している。
図5に示された例において,エントリアドレス(EA)は,16進法2桁で表される8bitのデータとして定義されている。8bitのエントリアドレス(EA)は,00〜FFの値をとる。半導体装置10は,1つのエントリアドレス(EA)に対応付けて,1つのキーデータ(KD)を記憶するものである。つまり,1つのキーデータ(KD)に対し,1つのエントリアドレス(EA)が割り当てられる。このため,エントリアドレス(EA)が8bitの情報である場合,半導体装置10には256のキーデータ(KD)を記憶することが可能となる。従って,エントリアドレスが8bitに設定されている半導体装置10は,総エントリ数が256エントリとなる。なお,本発明において,エントリアドレス(EA)は,2bit以上のデータであれば問題ない。例えば,エントリアドレス(EA)は,3bit,4bit,6bit,又は8bit以上とすることもできる。また,エントリアドレス(EA)のbit数は,検索メモリマット100のメモリアドレス(MA)のbit数と一致していることが好ましい。図5に示した例では,エントリアドレス(EA)とメモリアドレス(MA)は,共に,8bitに設定されている。
また,図5に示された例において,半導体装置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数)となることが好ましい。
また,図5に示された例において,各分割メモリ110a,110b…のメモリアドレス(MA)は,それぞれ,8bitで定義されたデータ(情報)である。つまり,図5に示された例では,キーデータ(KD)から分割された分割データと,メモリアドレス(MA)とは,それぞれ8bitに設定されている点で共通している。このように,分割データとメモリアドレス(MA)のbit数は一致していることが好ましい。なお,上述のとおり,メモリアドレス(MA)のbit数は,エントリアドレス(EA)のbit数とも一致する。
このように,本発明の半導体装置10において,検索メモリマット100は,エントリアドレス(EA)を書き込むためのメモリ空間(D)が,メモリアドレス(MA)を保持したまま,複数の分割メモリ110a,110b…に区分された構成となっている。各分割メモリは,例えば,SRAM(Static Random Access Memory)などの記憶装置を用いて構成することができる。つまり,検索メモリマット100は,分割メモリ110a,110b…として機能する複数のSRAMによって構築することができる。この意味において,本発明は,複数のSRAMを利用して実現したCAMであるということができる。本発明のように,複数のSRAMを用いて実現したCAMを,SRAM−CAMと称することもできる。
また,図5に示された例のように,半導体装置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:分割メモリの最小個数(検索メモリマットの分割数)
続いて,図1〜図7を参照して,半導体装置10による書込処理及び読出処理について説明する。なお,図1及び図2に示された符号化回路500による符号化処理については,後ほど詳しく後述する。まずは,この符号化処理を除き,半導体装置10による基本的な書込処理について説明を行う。
図1に示されるように,本実施形態に係る制御回路200は,入力部210,分割部220,書込部230,読出部240,確認部250,出力部260,及び絞込部270を有している。これらの要素210〜270は,制御回路200の機能を概念的に分類して示したものである。すなわち,制御回路200は,これらの機能的要素210〜270を利用して,検索メモリマット100に対しエントリアドレス(EA)を書き込んだり,検索メモリマット100に記憶されているエントリアドレス(EA)を読み出したりする処理を行う。また,図2には,制御回路200の各要素による情報処理のフローが一覧的に示されている。
まず,制御回路200により行われるエントリアドレス(EA)の書込処理を説明する。基本的な書込処理のメインフローは,図3に示されている。また,図3に示したメインフローのうち,検索メモリマット100にエントリアドレス(EA)を書き込む処理(ステップS5)の具体的なフローが,図4に示されている。さらに,書込処理の具体例が,図5〜図7に示されている。ここでの書込処理とは,新しいキーデータ(KD)を半導体装置10に記憶する処理である。この半導体装置10では,新しい書込対象のキーデータ(KD)に対応したエントリアドレス(EA)を検索メモリマット100に書き込む処理が行われる。
図3に示されるように,書込処理においては,まず,書込対象のキーデータが,半導体装置10に入力される(ステップS1)。ここで,図2に示されるように,書込対象のキーデータは,制御回路200の入力部210に入力されることとなる。書込対象のキーデータが制御回路200の入力部210に入力されると,この入力部210は,キーデータを分割部220及び書込部230へと送出する。また,入力部210は,入力されたキーデータを,符号化回路500を経由して,分割部220へと送出することとしてもよい。なお,符号化回路500による処理(ステップS2)については,詳しくは後述する。このように,入力部210は,制御回路200における入力インターフェースとして機能する。
続いて,分割部220は,書込対象のキーデータを,複数の分割データへと分割する(ステップS3)。例えば,分割部220は,検索メモリマット100を構築する分割メモリ110a,110b…の数と等しい数にキーデータを分割することが好ましい。つまり,分割部220がキーデータを分割する分割数nは,検索メモリマット100を構築する分割メモリ110a,110b…の数Nと等しいことが好ましい。これにより,分割部220によって複数に分割したキーデータ(分割データ)の全てを,それぞれ順番に,複数の分割メモリ110a,110b…に対して割り当てていくことができる。例えば,図5に示した例において,半導体装置10には,144bitのキーデータが入力されることが想定されている。また,各キーデータに割り当てられるエントリアドレスのbit数は,8bitであり,分割メモリの数は18となっている。このような条件において,分割部220は,144bitのキーデータを,8bit毎に18個の分割データへと分割することが好ましい。分割部220によって,144bitのキーデータは,8bitずつ,18個の分割データに変換される。なお,分割部220による分割条件は,分割メモリの数や,エントリアドレスのbit数,キーデータのbit数などに応じて,適宜変更することが可能である。分割部220によって生成された複数の分割データは,書込部230へと送出される。
さらに詳しく説明すると,分割部220により分割された分割データのビット数(α)は,検索メモリマット100のメモリアドレス(MA)のビット数(β)と等しいことが好ましい(α=β)。例えば,図5などに示されるように,検索メモリマット100のメモリアドレス(MA)が8bitで表される場合には,分割部220は,キーデータ(KD)を8bitの分割データに分割することが好ましい。また例えば,検索メモリマット100のメモリアドレス(MA)が,2bitで表される場合には,分割部220は,キーデータ(KD)を2bitの分割データに分割することが好ましい。これにより,後の処理において,分割部220が分割した分割データのそれぞれを,当該分割データをアドレスとして,検索メモリマット100を構築する分割メモリに適切に割り当てることができる。
図1に示されるように,書込部230は,検索メモリマット100を構築する複数の分割メモリ110a,110b…や,確認用メモリ300,バックアップメモリ400に対して,所定のデータを書き込む機能を有する。
図1及び図2に示されるように,半導体装置10に対して書込対象のキーデータ(KD)が入力されると,まず,書込部230は,このキーデータ(KD)に対して固有のエントリアドレス(EA)を割り当てる。このエントリアドレス(EA)は,一つのキーデータ(KD)について一つ割り当てられるものである。
また,図1に示されるように,書込部230は,入力部210に入力された書込対象のキーデータ(KD)(分割前の状態のキーデータ)を受け取る。そして,書込部230は,キーデータ(KD)に一つのエントリアドレス(EA)を割り当てて,これらのキーデータ(KD)とエントリアドレス(EA)とを関連付けて,確認用メモリ300に書き込む(ステップS4)。すなわち,新しい書込対象のキーデータが半導体装置10に入力された際,書込部230は,この新しいキーデータに対して一つのエントリアドレスを割り当てて,新しいキーデータとエントリアドレスの対応関係を,確認用メモリ300に記憶しておく。これにより,確認用メモリ300には,エントリアドレス(EA)とキーデータ(KD)とが一対一で対応して記憶される。このように,確認用メモリ300は,キーデータとエントリアドレスの対応関係を記憶しておくためのデータベースとしても機能する。また,確認用メモリ300は,後述するように,読出処理を行う際に,制御回路200が読み出したエントリアドレスが正しいものであるか否かの確認を行う際にも利用される。確認用メモリ300は,SRAM等の公知の記憶装置によって構成することができる。
なお,確認用メモリ300は,予めエントリアドレス(EA)がすべて登録されている構成であってもよい。つまり,確認用メモリ300は,予め登録されているエントリアドレス(EA)によって空のメモリ空間が特定されており,この空のメモリ空間に対してキーデータ(KD)を書き込むことができるようになっている。例えば,書込部230は,キーデータ(KD)に対して割り当てられたエントリアドレス(EA)を参照して,確認用メモリ300にアクセスする。そして,確認用メモリ300内のエントリアドレス(EA)によって特定されるメモリ空間に,キーデータ(KD)を書き込む。このような処理によっても,結果的には,一つのエントリアドレス(EA)と一つのキーデータ(KD)とが対応付けて確認用メモリ300に記憶されることとなる。
続いて,書込部230は,キーデータ(KD)に対して固有のエントリアドレス(EA)を割り当てた後,又は割り当てると同時に,検索メモリマット100を構成する複数の分割メモリ110a,110b…に対して,キーデータ(KD)に対応するエントリアドレス(EA)を書き込む処理を行う(ステップS5)。具体的には,書込部230は,複数の分割データのそれぞれを分割メモリ110a,110b…に割り当て,各分割データをアドレスとして各分割メモリ110a,110b…のメモリ空間にアクセスし,このアクセスしたメモリ空間に,分割データに対応するエントリアドレスを順次書き込んでいく。このステップS5において行われる処理は,図4においてより詳しく説明されている。
図4のフロー図は,キーデータ(KD)をn個の分割データに分割し,この分割データの順序をk番目と定義した場合を示している。図4に示されるように,まず,“k”に“1”が代入されて,n個の分割データのうち1番目(最初)の分割データの処理が開始される(ステップS5A)。
次に,書込部230は,1番目(k番目)の分割データに対して固有のエントリアドレス(EA)を割り付けるとともに,この1番目の分割データをアドレスとして,分割メモリのメモリ空間にアクセスする(ステップS5B)。具体的には,書込部230は,まず,1番目(k番目)の分割データを1番目(k番目)の分割メモリ110aに送出する。また,書込部230は,1番目の分割メモリ110aのy軸に割り当てられた複数のメモリアドレス(MA)の中から,1番目の分割データと同じ値のメモリアドレス(MA)を探し出す。そして,書込部230は,1番目の分割メモリ110aのメモリ空間のうち,1番目の分割データと同じ値を持つメモリアドレス(MA)によって特定されるメモリ空間にアクセスする。
続いて,書込部230は,1番目(k番目)の分割データに基づいてアクセスしたメモリ空間に,他の分割データに対応するエントリアドレスが既に書き込まれており,エントリアドレス同士の衝突が発生するか否かを判断する(ステップS5C)。例えば,現在書込処理をしているキーデータの前に,別のキーデータの書込処理を行っている場合には,エントリアドレス同士の衝突が発生し得る。
ステップS5Cにおいて,エントリアドレスの衝突が発生していないと判断した場合,書込部230は,1番目(k番目)の分割データに対応するエントリアドレスを,この分割データに基づいてアクセスした1番目の分割メモリ110aのメモリ空間に書き込む(ステップS5D)。これにより,1番目(k番目)の分割データに対応するエントリアドレスの書込処理が終了する。
ここで,本発明においては,図4に示されるように,あるキーデータ(KD)から得られた複数の分割データのうち,1つの分割データについてエントリアドレス(EA)の書き込みに成功した場合は,それ以降の分割データについては,エントリアドレス(EA)の書込処理を停止させる。このため,ステップS5Dの後には,メインフロー(図3)へと戻り,エントリアドレスの書込処理全体が終了する。このように,本発明では,1つのキーデータ(KD)について,1つのエントリアドレス(EA)のみを検索メモリマット100内に書き込むこととしている。これにより,書込容量(検索容量)を拡大させると同時に,書込処理の高速化を図ることができる。また,書込容量の拡大により,半導体装置全体の小型化を実現できる。
他方,ステップS5Cにおいて,1番目(k番目)の分割データに基づいてアクセスした1番目の分割メモリ110aのメモリ空間に,既に他の分割データに対応するエントリアドレス(EA)が書き込まれていると判断した場合は,書込部230は,その1番目の分割データに対応するエントリアドレスの書込処理は行わない(ステップS5E)。このため,メモリ空間内には,既に書込処理を終えた他の分割データに対応するエントリアドレスのみが残ることとなる。このように,本発明では,1つのメモリ空間に1つのエントリアドレスのみを記録すれば済む。この点からも本発明では,書込処理の効率化を図ることができる。
ステップS5Eのように,エントリアドレスの書き込みに失敗した場合,書込部230は,次の分割データの書込処理を行う。つまり,上記ステップS5Eの後,書込部230は,“k”に“1”を加えて,この“k+1”の値を“k”に代入する(ステップS5F)。そして,書込部230は,ステップS5Fを経て得られた“k”の値が“n(キーデータの分割数)”と等しくなったか否かを確認する(ステップS5G)。kがn未満(k<n)である場合,書込部230は,ステップS5Bに戻る。例えば,1番目(k番目)の分割データの処理が完了した後には,2番目(k+1番目)の分割データの処理を続けて行う。このように,書込部230は,エントリアドレスの書き込みに成功するまで,複数の分割データを順番に処理していく。なお,図4に示した例では,説明を簡単にするために,ステップS5Fにおいて“k”に“1”を加えることとしているが,例えば“k”に“−1”を加えるなど,複数の分割データを1つずつ処理できるその他のアルゴリズムを採用することも可能である。
続いて,ステップS5Gにおいて,“k=n”であると判断された場合,1つのキーデータ(KD)を分割して得られた複数の分割データのすべてについて,衝突が発生しているといえる(ステップS5H)。このように,エントリアドレス(EA)の書込処理で全衝突が発生している場合,書込部230は,検索メモリマット100にキーデータ(KD)に対応するエントリアドレス(EA)を書き込むことができない。その場合,書込部230は,入力部210に入力された書込対象のキーデータ(KD)とこれに対応するエントリアドレス(EA)とを互いに関連付けて,バックアップメモリ400に書き込む処理を行う(ステップS5I)。バックアップメモリ400は,例えば図2に示されるように,キーデータ(KD)とエントリアドレス(EA)と一対一で対応付けて記憶することのできるメモリである。バックアップメモリ400は,例えばSRAMなどの公知のメモリによって構成することができる。このように,書込部230は,全衝突が生じているキーデータ(KD)については,この全衝突を回避するために,検索メモリマット100には書き込まずに,バックアップメモリ400に書き込んでおくことが好ましい。検索メモリマット100とは別に,バックアップメモリ400を設けておくことで,全衝突が生じたキーデータ(KD)の書込処理が簡易になるととともに,全衝突が生じたキーデータ(KD)の検索処理(読出処理)を効率的に行うことができるようになる。なお,書込処理において全衝突が発生しバックアップメモリ400にキーデータを書き込む場合,上記の確認用メモリ300にキーデータを書き込む処理(ステップS4)を省略することもできる。つまり,バックアップメモリ400にキーデータを書き込む場合,確認用メモリ300にキーデータを書き込まなくてもよいし,書き込んでもよい。
上記のように,書込部230は,ステップS5A〜S5Iに従い,書込対象のキーデータ(KD)に対応するエントリアドレス(EA)を,検索メモリマット100若しくはバックアップメモリ400に書込処理を行う。その後,書込部230は,書込処理を終了させて,図3に示したメインフローへと戻る。
次に,図5〜図7を参照して,書込部230による書込処理について,具体例を挙げて説明する。
まず,図5は,基本的な書込処理の例を示している。図5に示した例では,“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の値である。なお,エントリアドレス(EA)は,数値の小さいものから順に割り当てればよい。ただし,エントリアドレス(EA)は,例えば,ランダムに割り当てることとしてもよいし,空いているものを適宜順番に割り当てるようにしてもよい。
また,図4に示されるように,書込部230は,書込対象としてのキーデータ(KD)と固有のエントリアドレス(EA)とを対応付けて,これらの値を確認用メモリ300に書き込む。これにより,確認用メモリ300には,エントリアドレス(EA)とキーデータ(KD)とが一対一で対応付けられて記憶されることとなる。
また,キーデータ(KD)が半導体装置10に入力されると,分割部220が,このキーデータ(KD)を複数の分割データに分割する。図5に示された例において,検索メモリマット100のメモリアドレス(MA)及びエントリアドレス(EA)は8bitの値である。また,検索メモリマット100は,18個の分割メモリ110a,110b,…110mに区分されている。そこで,分割部220は,144bitのキーデータ(KD)を,8bitずつ,18個の分割データへと分割する。このため,各分割データは,8bitの値となる。図5に示した例において,キーデータ(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)を書き込んでいく。図5に示されるように,まず,書込部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”を書き込む。図5に示した例では,1番目の分割データ“00”について,エントリアドレス(EA)“00”の書込処理に成功している。このため,2番目以降の分割データ“01”“02”・・・については,エントリアドレス(EA)の書込処理は行わない。従って,図5のキーデータ(KD)については,1番目の分割データ“00”のみについて,エントリアドレス(EA)の書込処理を行えばよい。
続いて,図6を参照して,書込処理において,エントリアドレス(EA)の「衝突」が生じる場合の例を説明する。本発明の半導体装置では,書込部230が,分割データをアドレスとして,その分割データに対応するエントリアドレス(EA)を,分割メモリ110a…に書き込む。このため,同じ分割メモリの同じメモリ空間に複数のエントリアドレス(EA)が書き込まれる可能性がある。このように,同じメモリ空間に複数のエントリアドレスが書き込まれようとする現象を,本願明細書では「衝突」と表現している。ここで,本発明の半導体装置は,エントリアドレス(EA)の書込処理を行うにあたり「衝突」が生じた場合に,「衝突」が発生したメモリ空間にはエントリアドレス(EA)を重ねて書き込むことはしない。書込処理において衝突が発生した場合,書込部230は,衝突が発生している分割データについてはエントリアドレスの書込処理をせず,次の分割データについてエントリアドレスの書込処理を開始する。
図6に示した例では,図5に示したキーデータ(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)を割り当てる。そして,書込部230は,キーデータ(KD)とエントリアドレス(EA)とを対応付けて,確認用メモリ300に登録する。
また,キーデータ(KD)が半導体装置10に入力されると,分割部220が,このキーデータ(KD)を複数の分割データに分割する。分割部220は,144bitのキーデータ(KD)を,8bitずつ,18個の分割データへと分割する。図6に示した例において,キーデータ(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)を書き込んでいく。図6に示されるように,まず,書込部230は,1番目の分割データ“00”を1番目の分割メモリ110aに割り当てて,1番目の分割データ“00”を参照して1番目の分割メモリ110aのメモリアドレス(MA)“00”を指定し,このメモリアドレス“00”によって特定されるメモリ空間(D)にアクセスする。そして,書込部230は,このメモリ空間(D)に,1番目の分割データ“00”に対応するエントリアドレス(EA)“01”を書き込もうとする。しかしながら,このメモリアドレス“00”によって特定されるメモリ空間(D)には,すでに,他のエントリアドレス(EA)“00”が書き込まれている(図5参照)。このため,書込部230は,このメモリ空間(D)に,新しいエントリアドレス(EA)“01”を書き込むことができない。このように,一つのメモリ空間に複数のエントリアドレス(EA)が書き込まれる現象が,「衝突」である。このような「衝突」が生じている場合,書込部230は,1番目の分割データ“00”について,エントリアドレス(EA)“01”を書き込まずに処理を終える。
次に,書込部230は,2番目の分割データ“02”についてエントリアドレス(EA)“01”を書き込む処理を開始する。つまり,書込部230は,2番目の分割データ“02”を2番目の分割メモリ110bに割り当てて,2番目の分割データ“02”を参照して2番目の分割メモリ110bのメモリアドレス(MA)“02”を指定し,このメモリアドレス“02”によって特定されるメモリ空間(D)に対し,2番目の分割データ“02”に対応するエントリアドレス(EA)“01”を書き込む。2番目の分割データ“02”に関しては,衝突が生じていないため,2番目の分割メモリ110bに書き込むことができる。そこで,書込部230は,メモリアドレス“02”によって特定されるメモリ空間(D)に対し,2番目の分割データ“02”に対応するエントリアドレス(EA)“01”を書き込む。このように,図6に示した例では,2番目の分割データ“02”について,エントリアドレス(EA)“01”の書込処理に成功している。このため,3番目以降の分割データ“02”“03”・・・については,エントリアドレス(EA)の書込処理は行わない。従って,図6のキーデータ(KD)については,2番目の分割データ“02”のみについて,エントリアドレス(EA)の書込処理を行えばよいこととなる。
このように,書込部230は,衝突が発生している分割データについてはエントリアドレスの書込処理を行わない。また,書込部230は,エントリアドレスの書き込みに成功するまで,複数の分割データについて書込処理を行っていく。そして,エントリアドレスの書き込みに成功した場合には書込処理を終了させ,それ以降の分割データについて書込処理行わない。これにより,検索メモリマットの書込容量を拡大させるとともに,書込処理の高速化を図ることができる。
続いて,図7を参照して,書込処理において,エントリアドレス(EA)の「全衝突」が生じる場合の例を説明する。本発明の半導体装置10は,上記のように,検索メモリマット100のメモリ空間に,エントリアドレス(EA)を順次登録していく。しかし,一つのキーデータ(KD)から生成された複数の分割データの全てについて,衝突が生じる可能性も存在する。このような全衝突が生じる可能性は極めて低いものであるが,理論的には発生し得る。そこで,図7では,全衝突が発生した場合の対策を示している。
図7は,全衝突が発生する場合の書込処理の例を示している。図7に示した例では,ある程度複数のキーデータ(KD)の書込処理を終えた段階で,“00_02_02_03_04_05_05_07_08_09_01_0B_0C_0D_0E_0F_10_FF”という値のキーデータ(KD)が,半導体装置10に入力される。書込部230は,まずこのキーデータ(KD)に対して,“FF”の値を持つエントリアドレス(EA)を割り当てる。
続いて,キーデータ(KD)が半導体装置10に入力されると,分割部220が,このキーデータ(KD)を複数の分割データに分割する。分割部220は,144bitのキーデータ(KD)を,8bitずつ,18個の分割データへと分割する。図7に示した例において,キーデータ(KD)は,“00”“02”“02”“03”“04”“05”“05”“07”“08”“09”“01”“0B”“0C”“0D”“0E”“0F”“10”“FF”という18個の分割データに分割される。
その後,書込部230は,分割部220によって生成された分割データを,分割メモリ110a〜110mに割り当てて,エントリアドレス(EA)を書き込んでいく。しかしながら,1番目〜18番目の分割メモリ110a〜110mのすべてにおいて,分割データに対応するメモリ空間(D)に既に他のエントリアドレス(EA)が書き込まれている。このため,書込部230は,分割データに対応するエントリアドレス(EA)を検索メモリマット100内に書き込むことができない。
そこで,このような全衝突が発生した場合に,書込部230は,全衝突が生じたキーデータ(KD)を,固有のエントリアドレス(EA)と対応付けて,バックアップメモリ400に書き込む。バックアップメモリ400は,例えば図2に示されるように,キーデータ(KD)とエントリアドレス(EA)と一対一で対応付けて記憶することのできるメモリである。バックアップメモリ400は,例えばSRAMなどの公知のメモリによって構成することができる。このように,書込部230は,検索メモリマット100に書き込むと全衝突が生じるキーデータ(KD)については,バックアップメモリ400に書き込んでおくことが好ましい。検索メモリマット100とは別に,バックアップメモリ400を設けておくことで,全衝突が生じたキーデータ(KD)の書込処理が簡易になるととともに,全衝突が生じたキーデータ(KD)の検索処理(読出処理)を効率的に行うことができるようになる。なお,書込部230は,上記のように全衝突が発生しキーデータ(KD)をバックアップメモリ400に書き込む場合には,これと同じキーデータ(KD)を確認用メモリ300に書き込むこととしてもよいし,書き込まないこととしてもよい。確認用メモリ300に全衝突が生じているキーデータを書き込むか否かは,任意に設計することができる。
続いて,図1,図2,及び図8〜図11を参照して,半導体装置10による基本的な読出処理(検索処理)について説明を行う。ここでの読出処理とは,検索対象のキーデータ(KD)が半導体装置10に入力されたときに,この半導体装置10が,検索メモリマット100を検索して,検索対象のキーデータ(KD)に対応するエントリアドレス(EA)を読み出して出力する処理である。なお,符号化処理を含む読出処理については後ほど説明する。
基本的な書込処理のメインフローは,図8に示されている。また,図8に示したメインフローのうち,検索メモリマットからエントリアドレス(EA)を読み出す処理(ステップS9)の具体的なフローが,図9に示されている。さらに,読出処理の具体例が,図10及び図11に示されている。この半導体装置10では,検索対象のキーデータ(KD)に対応したエントリアドレス(EA)を検索メモリマット100から読み出す処理が行われる。
図8に示されるように,読出処理においては,まず,検索対象のキーデータが,半導体装置10に入力される(ステップS6)。ここで,図2に示されるように,検索対象のキーデータは,制御回路200の入力部210に入力されることとなる。検索対象のキーデータが制御回路200の入力部210に入力されると,この入力部210は,キーデータを分割部220及び確認部250へと送出する。また,入力部210は,入力されたキーデータを,符号化回路500を経由して,分割部220へと送出することとしてもよい。なお,符号化回路500による処理(ステップS7)については,詳しくは後述する。
図8に示されるように,分割部220は,検索対象のキーデータ(KD)を,複数の分割データへと分割する(ステップS8)。ここで,分割部220が検索対象のキーデータ(KD)を分割するときの条件(アルゴリズム)は,上述した書込対象のキーデータ(KD)を分割するときの条件(アルゴリズム)と同じである。分割部220によって得られた複数の分割データは,読出部240へと送出される。
続いて,読出部240は,検索メモリマット100から,検索対象のキーデータ(KD)に対応するエントリアドレス(EA)を読み出す処理を行う(ステップS9)。具体的には,読出部240は,複数の分割データのそれぞれを分割メモリ110a,110b…に割り当て,各分割データをアドレスとして各分割メモリ110a,110b…のメモリ空間にアクセスし,このアクセスしたメモリ空間に記憶されているエントリアドレス(EA)を順次読み出していく。このステップS9において行われる処理は,図9においてより詳しく説明されている。
図9では,キーデータ(KD)の分割数をnで定義し,この分割データの順序をkで定義している。図9に示されるように,まず,“k”に“1”が代入されて,n個の分割データのうち1番目(最初)の分割データの処理が開始される(ステップS9A)。
次に,読出部240は,1番目の分割データをアドレスとして,分割メモリのメモリ空間にアクセスする(ステップS9B)。このステップS9Bの処理は,図4に示したステップS5Bの処理と同じである。つまり,読出部240は,まず,1番目(k番目)の分割データを1番目(k番目)の分割メモリ110aに送出する。また,読出部240は,1番目の分割メモリ110aのy軸に割り当てられた複数のメモリアドレス(MA)の中から,1番目の分割データと同じ値のメモリアドレス(MA)を探し出す。そして,読出部240は,1番目の分割メモリ110aのメモリ空間のうち,1番目の分割データと同じ値を持つメモリアドレス(MA)によって特定されるメモリ空間にアクセスする。
その後,読出部240は,ステップS9Bでアクセスしたメモリ空間からエントリアドレス(EA)を読み出す(ステップS9C)。なお,アクセスしたメモリ空間にエントリアドレス(EA)が記憶されていない場合には,読出部240は何も読み出さない。若しくは,読出部240は“検索結果なし”という信号を生成してもよい。
読出部240は,このような読出処理を,分割メモリ110a,110b…のすべてについて行う。つまり,上記ステップS9Cの後,読出部240は,“k”に“1”を加えて,この“k+1”の値を“k”に代入する(ステップS9D)。そして,読出部240は,ステップS9Dを経て得られた“k”の値が“n(キーデータの分割数)”と等しくなったか否かを確認する(ステップS9E)。kがn未満(k<n)である場合,読出部240は,ステップS9Bに戻る。例えば,1番目(k番目)の分割データについて読出処理が完了した後には,2番目(k+1番目)の分割データについての読出処理を続けて行う。このように,読出部240は,すべての分割メモリ110a,110b…の読出処理を終えるまで,複数の分割データに基づいて読出処理を行う。なお,図9に示した例では,説明を簡単にするために,ステップS5Fにおいて“k”に“1”を加えることとしているが,その他のアルゴリズムを採用することも可能である。
読出部240は,ステップS9Fにおいて,全ての分割データについて読出処理を終えたと判断した場合,つまりk=nに達したと判断した場合,次のステップS9Fへと移行する。ステップS9Fにおいて,まず,読出部240は,ステップS9B〜ステップS9Eの処理を繰り返し行うことで読み出した一又は複数のエントリアドレス(EA)を,確認部250へと送出する。確認部250は,読出部240から一又は複数のエントリアドレス(EA)を受け取ると,これらのエントリアドレスをキーとして,確認用メモリ300にアクセスする。そして,確認部250は,確認用メモリ300から,これらの一又は複数のエントリアドレス(EA)と対応付けて記憶されているキーデータ(KD)を読み出す。すなわち,上述したとおり,図3に示したステップS4において,書込処理時に,確認用メモリ300には,書込対象のキーデータ(KD)とエントリアドレス(EA)が対応付けて記憶されている。このため,読出処理時において,確認部250は,エントリアドレス(EA)をキーとしてこの確認用メモリ300を検索すれば,このエントリアドレス(EA)に対応したキーデータ(KD)を読み出すことができる。
続いて,確認部250は,入力部210から検索対象のキーデータ(KD)を受け取り,ステップS9Fで確認用メモリ300から読み出したキーデータ(KD)が,この検索対象のキーデータ(KD)と一致するかどうかを判断する(ステップS9G)。つまり,本発明の読出処理では,読出部240が検索メモリマット100から複数のエントリアドレス(EA)の候補を読み出すことが想定される。このようにエントリアドレス(EA)の候補が複数存在すると,検索対象のキーデータ(KD)に対応するエントリアドレス(EA)を一意に定めることができない。そこで,複数のエントリアドレス(EA)の候補の中から,検索対象のキーデータ(KD)に対応するエントリアドレス(EA)を一つ決定するために,確認部250が存在する。この確認部250は,一致判定処理(ステップS9G)を行う。すなわち,確認部250は,複数のエントリアドレス(EA)の候補のそれぞれについて,確認用メモリ300から,これらに対応する複数のキーデータ(KD)の候補を読み出す。また,確認部250は,複数のキーデータ(KD)の候補と入力部210から受け取った検索対象のキーデータ(KD)とを照合する。そして,確認部250は,複数のキーデータ(KD)の候補の中に,検索対象のキーデータ(KD)と一致するものが存在するかどうかを判定する。
ステップS9Gにおいて,確認部250が,複数のキーデータ(KD)の候補の中に,検索対象のキーデータ(KD)と一致するものが存在すると判定した場合,ステップS9Hに移行する。ステップS9Hでは,確認部250によって検索対象のキーデータ(KD)と一致すると判断されたキーデータ(KD)に対応するエントリアドレス(EA)を,確認部250から出力部260へと出力する(ステップS9H)。その読出処理は,図8のメインフローへと戻る。出力部260は,外部回路に接続されている。このため,出力部260を介して,エントリアドレス(EA)が外部回路へと出力される(ステップS10)。このように,出力部260は,半導体装置10の出力インターフェースとして機能する。これにより,半導体装置10は,検索対象のキーデータ(KD)に対応するエントリアドレス(EA)を検索結果として出力することが可能となる。
他方,ステップS9Gにおいて,確認部250が,複数のキーデータ(KD)の候補の中に,検索対象のキーデータ(KD)と一致するものが存在しないと判定した場合,ステップS9Iに移行する。ステップ9Iでは,読出部240が,検索対象のキーデータ(KD)に基づいて,バックアップメモリ400を参照する(ステップS9I)。その後,読出部240は,この参照したバックアップメモリ400内に検索対象のキーデータ(KD)と同じキーデータが記憶されているか否かを判定する(ステップ9J)。ここで,バックアップメモリ400内に検索対象のキーデータ(KD)と同じキーデータが記憶されている場合,読出部240は,そのキーデータと関連付けられているエントリアドレス(EA)を読み出す。その後,読出部240は,バックアップメモリ400から読み出したエントリアドレス(EA)を出力部260へと出力する(ステップS9H)。他方で,バックアップメモリ400内に検索対象のキーデータ(KD)と同じキーデータが記憶されていない場合,読出部240は,“一致データ無し”と判定する(ステップS9K)。つまり,“一致データ無し”とは,検索対象のキーデータ(KD)と同じキーデータ(KD)が,未だ半導体装置10に書き込まれていないことを意味する。読出部240が“一致データ無し”と判定した場合,読出処理は終了する。
ここで,読出部240と確認部250の間には,絞込部270を設けてもよい(図1参照)。つまり,上述したステップS9Fの前に,絞込部270によって,エントリアドレスの候補を絞り込む処理を行うこともできる。具体的に説明すると,本発明の読出処理においては,読出部240によって複数のエントリアドレスが読み出される場合がある。この場合,複数のエントリアドレスのそれぞれについて,確認用メモリ300を照合すれば,検索対象のキーデータに対応するエントリアドレスを一意に定めることができる。しかしながら,読出部240によって読み出されたエントリアドレスが多いと,確認用メモリ300を逐一参照していたのでは,読出処理の遅延を招くおそれがある。そこで,読出部240と確認部250の間に,絞込部270を配置する。そして,この絞込部270によって,読出部240が読み出した複数のエントリアドレスの中から,それよりも少ない候補を絞り込む処理を行い,絞込後のエントリアドレスを確認部250へと送出する。これにより,確認部250によって確認用メモリ300を参照する回数が減少するため,検索処理の高速化を図ることができる。このような絞込部270の具体例については,図14及び図15を参照して後ほど詳しく説明する。
次に,図10及び図11を参照して,読出部240及び確認部250による読出処理について,具体例を挙げて説明する。
まず,図10は,基本的な読出処理の例を示している。図10に示した例では,“00_02_02_03_04_05_06_07_08_09_0A_0B_0C_0D_0E_0F_10_FF”という値のキーデータ(KD)が,検索対象として,半導体装置10に入力される。検索対象のキーデータ(KD)が半導体装置10に入力されると,分割部220が,このキーデータ(KD)を複数の分割データに分割する。図10に示された例において,分割部220は,144bitのキーデータ(KD)を,8bitずつ,18個の分割データへと分割する。このため,各分割データは,8bitの値となる。図10に示した例において,キーデータ(KD)は,“00”“02”“02”“03”“04”“05”“06”“07”“08”“09”“0A”“0B”“0C”“0D”“0E”“0F”“10”“FF”という18個の分割データに分割される。
その後,読出部240は,分割部220によって生成された分割データをアドレスとして分割メモリ110a〜110mのメモリ空間(D)にアクセスし,エントリアドレス(EA)を読み出していく。図10に示されるように,まず,読出部240は,1番目の分割データ“00”を1番目の分割メモリ110aに割り当てて,1番目の分割データ“00”を参照して1番目の分割メモリ110aのメモリアドレス(MA)“00”を指定し,このメモリアドレス(MA)“00”によって特定されるメモリ空間(D)にアクセスする。アクセスしたメモリ空間(D)には,エントリアドレス(EA)“00”が記憶されているため,読出部240は,このエントリアドレス(EA)“00”を読み出す。同様に,読出部240は,2番目の分割データ“02”をアドレスとして,2番目の分割メモリ110bのメモリ空間(D)にアクセスし,エントリアドレス(EA)“01”を読み出す。読出部240は,このような処理を全ての分割データ及び分割メモリに対して実行する。図10に示した例では,1番目の分割メモリ110aからエントリアドレス“00”が読み出され,2番目の分割メモリ110bからエントリアドレス“01”が読み出され,3番目の分割メモリ110cからエントリアドレス“02”が読み出され,18番目の分割メモリ110mからエントリアドレス“FE”が読み出されている。その他の分割メモリについては,該当するメモリ空間(D)にエントリアドレスが記憶されておらず,読出部240は,“検索結果なし”と判断している。
このように,本発明の読出処理においては,エントリアドレスが,例えば“00”“01”“02”“FE”のように,複数読み出されることがある。その場合,どのエントリアドレスが検索対象のキーデータに対応するものであるかを一意に定めることができない。そこで,読出部240が読み出した複数のエントリアドレス“00”“01”“02”“FE”を候補として,この中に正しいエントリアドレスが含まれているかどうかを,確認部250によって確認する処理を行う。
具体的に説明すると,図10に示されるように,確認部250は,読出部240によって読み出された複数のエントリアドレスの候補“00”“01”“02”“FE”のそれぞれをキーとして,確認用メモリ300にアクセスする。確認用メモリ300には,エントリアドレス(EA)一対一で関連付けて,キーデータ(KD)が記憶されている。従って,確認部250は,エントリアドレス(EA)の候補“00”“01”“02”“FE”に対応するキーデータ(KD)を,確認用メモリ300から読み出すことができる。そして,確認部250は,確認用メモリ300から読み出したキーデータ(KD)のそれぞれを,検索対象のキーデータ(KD)と比較して,互いに一致するかどうかを確認する。図10に示した例においては,確認用メモリ300のうち,エントリアドレス“02”と対応付けられた記憶領域に,“00_02_02_03_04_05_06_07_08_09_0A_0B_0C_0D_0E_0F_10_FF”というキーデータ(KD)が記憶されている。このキーデータ(KD)は,検索対象のキーデータ(KD)と一致している。従って,確認部250は,検索対象のキーデータ(KD)に対応するエントリアドレス(EA)は,“02”であると判断することができる。そこで,確認部250は,キーデータ(KD)同士の一致情報とともに,検索対象のキーデータ(KD)に対応するエントリアドレス(EA)“02”を出力する。これにより,検索対象のキーデータ(KD)に対応するエントリアドレス(EA)を一意に定めることができる。
他方で,確認部250が確認用メモリ300を参照した結果,読出部240によって読み出されたエントリアドレスの候補の中に,検索対象のキーデータ(KD)に対応するものが存在しないと判断される場合がある。このような例が,図11に示されている。
図11に示した例では,検索対象のキーデータ(KD)として,“00_02_02_03_04_05_05_07_08_09_01_0B_0C_0D_0E_0F_10_FF”という値が入力されている。分割部220は,入力されたキーデータ(ED)を18分割する。また,読出部240は,複数の分割データのそれぞれを,検索メモリマット100を構成する複数の分割メモリ110a〜110mに割り当てる。また,読出部240は,各分割データをアドレスとして,各分割メモリ110a〜110mのメモリ空間(D)にアクセスし,そこに記憶されているエントリアドレス(EA)を読み出す。図11の例では,図10に示した例では,1番目の分割メモリ110aからエントリアドレス“00”が読み出され,2番目の分割メモリ110bからエントリアドレス“01”が読み出され,3番目の分割メモリ110cからエントリアドレス“02”が読み出され,18番目の分割メモリ110mからエントリアドレス“FE”が読み出されている。その後,確認部250は,読出部240が読み出したエントリアドレス(EA)の候補を用いて,確認用メモリ300を参照し,このエントリアドレスの候補に関連付けられているキーデータ(KD)を読み出す。そして,確認部250は,確認用メモリ300から読み出した複数のキーデータ(KD)と,検索対象のキーデータ(KD)とを比較し,一致するかどうかを判断する。しかし,図11の例では,確認用メモリ300に,検索対象のキーデータ(KD)と一致するキーデータ(KD)が記憶されていない。このため,確認部250は,“不一致”と判断する。
しかしながら,図7で示したように,キーデータに対応するエントリアドレスを書き込む際に,すべての分割メモリにおいて衝突が発生し,エントリアドレスを分割メモリ内に書き込むことができていない場合がある。このような全衝突が発生した場合,本発明では,全衝突したキーデータ(KD)とこれに対応するエントリアドレス(EA)とをバックアップメモリ400に書き込むこととしている(図7参照)。従って,図11に示されるように,確認部250において“不一致”と判断された場合においても,バックアップメモリ400内にキーデータ(KD)が記録されている場合がある。そこで,図11に示されるように,“不一致”と判断された場合,読出部240は,バックアップメモリ400内を検索して,検索対象のキーデータと一致するキーデータが記憶されているかどうかを調査する。ここで,図11の例では,バックアップメモリ400内に検索対象のキーデータと一致するキーデータが記憶されており,それに対応するエントリアドレスが“FF”となっている。従って,読出部240は,バックアップメモリ400内を検索することで,検索対象のキーデータに対応するエントリアドレスが“FF”であると判断できる。このため,読出部240は,検索結果として,エントリアドレス“FF”を出力する。
上記した書込方式及び読出方式を採用することで,本発明の半導体装置10は,最大で,検索メモリマット100のエントリ数と同じ数だけ,キーデータ(KD)を書き込むことができる。図5等示した例では,半導体装置10の総エントリ数が256エントリであるため,最大で256個のキーデータ(KD)を登録することができる。従って,半導体装置10の書込容量を飛躍的に向上させることができる。
次に,図1〜図3,図8,図12及び図13を参照して,キーデータ(KD)の符号化処理について説明する。
上述したとおり,本発明の半導体装置10は,エントリアドレス(EA)の書込処理において衝突が発生したときには,メモリ空間にエントリアドレスを書き込まないこととしている。ここで,書込対象のキーデータ(KD)に偏りがあると,データの衝突頻度が高くなり,検索不能データ列が多くなるという問題が発生する。例えば,ID番号やIPアドレスを降順で連続的に書き込む場合のように,ほとんど同じデータが連続して同じ検索メモリマット100に書き込まれると,データの偏りが発生する。これにより,検索メモリマット100内において,エントリアドレスの衝突が発生する確率が高くなる。例えば,“00_01_02_03”というキーデータ(KD)に続けて,“00_01_02_04”というキーデータ(KD)が入力されたことを考えると,2つのキーデータ(KD)の値には最後の1bitしか違いがない。このため,後者のキーデータ(KD)の書込処理を行う際には,最後までエントリアドレスを書き込むことができない。従って,このようなデータの偏りは,防ぐことが好ましい。
そこで,本発明の半導体装置10は,図1及び図2に示されるように,キーデータ(KD)を符号化するための符号化回路500を備える。書込処理において,符号化回路500は,制御回路200に入力された書込対象のキーデータ(KD)が,分割部220において分割される前に符号化する(図3:ステップS2)。同様に,読出処理において,符号化回路500は,制御回路200に入力された検索対象のキーデータ(KD)が,分割部220において分割される前に符号化する(図8:ステップS7)。ここにいう符号化には,キーデータの値を所定のアルゴリズムで拡散(分散)させることや,キーデータの値の順番を並び替えるような処理が含まれる。このように,ほとんど同じキーデータが続けて入力された場合であっても,これらのキーデータを符号化することにより,検索メモリマット100に書き込まれるデータの偏りを解消することが可能となる。データの偏りが解消すれば,検索メモリマット100内で衝突が発生する可能性を低下させることができる。その結果,正確にデータ検索を行うことのできる可能性が高まる。なお,符号化回路500は,書込対象のキーデータ(KD)についても検索対象のキーデータ(KD)についても全く同じアルゴリズムで符号化する。これにより,書込対象のキーデータ(KD)と検索対象のキーデータ(KD)を整合させることができる。
図12は,符号化回路500によって実行される符号化処理の一例を概念的に示している。図12に示されるように,符号化回路500は,書込対象/検索対象のキーデータ(144bit)を,複数の分割データ(1〜18)に分割する。このときの分割処理は,上述した分割部220による処理と同じようにすればよい。その後,符号化回路500は,複数の分割データ(1〜18)の位置を並べ替える。このときの並べ替え処理は,一定のアルゴリズムに基づいて行われる。その後,符号化回路500は,並べ替えられた複数の分割データの値を拡散(分散)させる。分割データの値の拡散処理は,公知の符号化アルゴリズム(暗号化アルゴリズム)に基づいて行うことができる。例えば,拡散処理を行うことで,最初に入力されたキーデータ(KD)は,bit数を維持したまま,異なる値に変換されることが好ましい。図12に示された例において,最初のキーデータ(KD)と拡散処理後のデータ(拡散化データ)は,共に144bitのデータであるとされている。
上記のように,例えば並べ替え処理と拡散処理との組み合わせによって,符号化回路500はキーデータ(KD)を符号化することができる。符号化されたキーデータ(拡散化データ)は,制御回路200の分割部220に入力される(図1及び図2参照)。その後,図12に示されるように,制御回路200は,通常どおり,拡散化データを分割して,複数の分割データを生成し,各分割データをアドレスとして,検索メモリマット100を構成する分割メモリにアクセスする。そして,制御回路200は,アクセスした分割メモリに対してエントリアドレス(EA)を書き込む処理,又はアクセスした分割メモリからエントリアドレス(EA)を読み出す処理を行う。
図13は,符号化回路500によって実行される符号化処理の他の例を概念的に示している。図13に示されるように,符号化回路500は,書込対象/検索対象のキーデータ(144bit)を複製する。例えば,図13に示されているように,分割メモリが18個存在する場合には,符号化回路500は,この分割メモリの数に併せて,キーデータ(KD)を18個複製する。複製された複数のキーデータ(KD)は同じ値を持つものである。その後,符号化回路500は,同じ値を持つ複数のキーデータ(KD)に対して,それぞれ異なる拡散アルゴリズムに基づいた拡散処理を行う。例えば,キーデータ(KD)は18個に複製されているため,拡散アルゴリズムも18種類用意されている。これにより,異なる値を持つ拡散化データが得られる。このように,符号化回路500は,1つのキーデータ(KD)から,複数(分割メモリに対応した数)の拡散化データを生成することとしてもよい。
上記のように,例えば複製処理と拡散処理との組み合わせによって,符号化回路500はキーデータ(KD)を符号化することができる。複数の拡散化データは,制御回路200の分割部220に入力される(図1及び図2参照)。その後,図13に示されるように,制御回路200は,複数の拡散化データをそれぞれ分割して,各拡散化データから複数の分割データを生成する。また,制御回路200は,各分割データをアドレスとして,検索メモリマット100を構成する分割メモリにアクセスする。そして,制御回路200は,アクセスした分割メモリに対してエントリアドレス(EA)を書き込む処理,又はアクセスした分割メモリからエントリアドレス(EA)を読み出す処理を行う。
このように,符号化回路500を設けて,書込対象のキーデータ(KD)を符号化することにより,検索メモリマット100に書き込まれるデータの偏りを解消することができる。データの偏りが解消すれば,検索メモリマット100内で衝突が発生する可能性を低下させることができる。その結果,正確にデータ検索を行うことのできる可能性が高まる。
次に,図14及び図15を参照して,エントリアドレス(EA)の候補の絞り込み処理について説明する。
図14及び図15は,エントリアドレス(EA)の読出処理において,読出部240によって読み出された複数のエントリアドレス(EA)の候補の中から,検索対象のキーデータ(KD)に対応する可能性が高いものを絞り込むための処理の例を示している。上述したとおり,本発明の読出方式では,読出部240が,検索メモリマット100から複数のエントリアドレス(EA)の候補を読み出してくる。エントリアドレス(EA)の候補が複数存在していても,上述のとおり,逐一確認用メモリ300を利用して照合すれば,検索対象のキーデータ(KD)に対応するエントリアドレス(EA)を一意に定めることができる。しかし,エントリアドレス(EA)の候補の数が多いと,確認用メモリ300と照合する回数が増えるため,読出処理に遅延が発生する可能性がある。そこで,読出部240によって読み出された複数のエントリアドレス(EA)の候補の中から,さらに絞り込みを行い,確認用メモリ300と照合する回数を減らすことが好ましい。
図14は,まず,書込対象のキーデータ(KD)に対応するエントリアドレス(EA)を半導体装置10に書き込む処理の概要を示している。図14に示されるように,1つのキーデータ(KD)を書き込むための検索メモリマット100が,第1の検索メモリマット100aと第2の検索メモリマット100bとから構成されている。つまり,書込対象のキーデータ(KD)は,第1の検索メモリマット100aと第2の検索メモリマット100bの両方に入力されて書き込まれる。また,符号化回路500は,第1の検索メモリマット100a用に設けられた第1の符号化回路500aと,第2の検索メモリマット100b用に設けられた第2の符号化回路500bとから構成されている。これらの第1の符号化回路500aと第2の符号化回路500bとは,それぞれ符号化方式(拡散式)が異なっている。つまり,第1の符号化回路500aは,書込対象のキーデータ(KD)を拡散式Aにて拡散させるのに対し,第2の符号化回路500bは,書込対象の(KD)を拡散式Bにて拡散させる。
図14に示されるように,例えば,288bitのキーデータ(KD)が半導体装置10内に入力されると,このキーデータ(KD)に固有のエントリアドレス(EA)を割り当てて,これらの関連性を確認用メモリ300に記録する。また,エントリアドレス(EA)の割り当てられたキーデータ(KD)は,第1の符号化回路500aと第2の符号化回路500bの両方に入力される。各符号化回路500a,500bは,所定のアルゴリズムによって,書込対象のキーデータ(KD)を288bit長から366bit長に拡散させる点において共通している。このように,キーデータのbit長を長くすることで,書込処理において全衝突が発生する可能性を低減できる。他方で,各符号化回路500a,500bは,キーデータの拡散方式が異なる。このため,各符号化回路500a,500bには,同じ値のキーデータ(288bit)が入力されるが,各符号化回路500a,500bから出力される拡散後のキーデータは,その値が全く異なっている。ただし,各符号化回路500a,500bから出力される拡散後のキーデータは,bit長(366bit)が共通している。その後,半導体装置10は,第1の符号化回路500aによって拡散されたキーデータを24分割し,各分割データをアドレスとして,第1の検索メモリマット100aの適所に,エントリアドレス(EA)を書き込んでいく。同時に,半導体装置10は,第2の符号化回路500aによって拡散されたキーデータを24分割し,各分割データをアドレスとして,第2の検索メモリマット100bの適所に,エントリアドレス(EA)を書き込んでいく。ここでのエントリアドレス(EA)の書込処理は,上述した方法と同じである。このようにして,図14の実施形態において,半導体装置10は,2つの異なる符号化回路500a,500bを用いて,1つのキーデータ(KD)を別々の符号化方式で符号化し,符号化後の2つのキーデータを,それぞれ2つの異なる検索メモリマット100a,100bに書き込んでおく。
図15に示されるように,まず,検索対象のキーデータ(KD)に対応するエントリアドレス(EA)を半導体装置10から読み出す処理の概要を示している。図15に示された実施形態において,半導体装置10の制御回路200は,さらに絞込部270を有している。絞込部270は,読出部240と確認部250の間に設けられる。絞込部270は,読出部240が第1の検索メモリマット100a及び第2の検索メモリマット100bから読み出したエントリアドレス(EA)の候補の中から,さらに絞り込みを行うための機能を有している。絞込部270は,絞り込んだエントリアドレス(EA)の候補を確認部250へと送出する。このため,確認部250は,絞込部270によって絞りこまれた候補についてのみ,確認用メモリ300での照合を行えば済む。従って,エントリアドレス(EA)の検索処理を高速化させることができる。
具体的に説明すると,288bitの検索対象のキーデータ(KD)が半導体装置10に入力される。検索対象のキーデータ(KD)は,第1の符号化回路500a及び第2の符号化回路500bにそれぞれ入力され,366bitに拡散される。拡散後の2つのキーデータ(KD)は,その後,それぞれ24分割される。読出部240は,第1の符号化回路500aを経て得られた分割データをアドレスとして,第1の検索メモリマット100aのメモリ空間にアクセスし,そこに記憶されているエントリアドレス(EA)を読み出す。これにより,第1の検索メモリマット100aから一又は複数のエントリアドレス(EA)の候補が抽出される。第1の検索メモリマット100aは,24個の分割メモリから構築されている。このため,この第1の検索メモリマット100aから読み出され得るエントリアドレス(EA)の候補の数は,最大で24個となる。同時に,読出部240は,第2の符号化回路500bを経て得られた分割データをアドレスとして,第2の検索メモリマット100bのメモリ空間にアクセスし,そこに記憶されているエントリアドレス(EA)を読み出す。これにより,第2の検索メモリマット100bから一又は複数のエントリアドレス(EA)の候補が抽出される。この第2の検索メモリマット100bから読み出され得るエントリアドレス(EA)の候補の数も,最大で24個となる。
ここで,読出部240は,第1の検索メモリマット100a及び第2の検索メモリマット100bから読み出したエントリアドレス(EA)の候補を,それぞれ絞込部270へと送出する。ここで,絞込部270は,第1の検索メモリマット100aから読み出されたエントリアドレス(EA)の候補と,第2の検索メモリマット100bから読み出されたエントリアドレス(EA)の候補とを比較して,共通するエントリアドレス(EA)の候補を抽出する。例えば,第1の検索メモリマット100aから読み出されたエントリアドレス(EA)の候補に,“01”“02”“03”“04”が含まれており,第2の検索メモリマット100bから読み出されたエントリアドレス(EA)の候補に,“03”“04”“05”“06”が含まれている場合,絞込部270は,これらの共通している“03”“04”のエントリアドレスの候補を抽出する。その後,絞込部270は,このようにして絞り込んだエントリアドレスの候補を確認部250へと伝達する。
確認部250は,絞込部270から受け取ったエントリアドレス(EA)の候補について,確認用メモリ300での照合を行う。つまり,確認部250は,エントリアドレス(EA)の候補をキーとして確認用メモリ300にアクセスし,そのエントリアドレス(EA)と対応付けて記憶されているキーデータ(KD)を読み出し,この読み出したキーデータ(KD)が検索対象として入力されたキーデータ(KD)と一致するかどうかの照合処理を行う。そして,半導体装置10は,確認用メモリ300から読み出したキーデータと検索対象のキーデータが一致した場合,そのキーデータに対応するエントリアドレス(EA)を検索結果として出力することができる。
上記のように,読出部240と確認部250との間に絞込部270を設けることで,確認部250が確認用メモリ300に照合を行う回数を減らすことができる。例えば,絞込部270存在していない場合に,第1の検索メモリマット100aから読み出されたエントリアドレス(EA)の候補に,“01”“02”“03”“04”が含まれており,第2の検索メモリマット100bから読み出されたエントリアドレス(EA)の候補に,“03”“04”“05”“06”が含まれていると,確認部250は,確認用メモリ300に最低でも4回の照合を行う必要がある。これに対して,絞込部270が存在していると,エントリアドレスの候補を“03”“04”の2つに絞り込むことができる。絞込部270を設けることで,確認部250は,確認用メモリ300に2回の照合を行えば済むようになる。従って,検索処理の高速化を実現することができる。
なお,エントリアドレスの候補の絞り込み処理は,上述した形態に限定されない。すなわち,絞り込み処理を行うことで,読出部240によって読み出されたエントリアドレスの数よりも,確認部250によって確認用メモリ300に照合されるエントリアドレスの数を少なくすることができればよい。このように,絞込部270としては,エントリアドレスの数を少なくすることのできるものであれば,どのような形態であっても採用することができる。
次に,図16〜図18を参照して,データの偏りが生じにくい書込処理の方式例について説明する。
図5〜図7を参照して説明したとおり,本発明の半導体装置10は,書込対象のキーデータを複数の分割データに分割した後,各分割データを検索メモリマット100を構成する複数の分割メモリ110a,110b…に順番に割り当てて,この分割データに対応するエントリアドレス(EA)を順次書き込んでいく。このとき,一般的には,1番目の分割データから書込処理が開始され,2番目,3番目,それ以降といったように,キーデータの先頭から末尾に向かって順番に書込処理が行われる。しかし,本発明の半導体装置10では,上述したとおり,エントリアドレスの書き込みに成功した場合には,それ以降の書込処理は行わずに書込処理を終了させる。このため,すべての書込対象のキーデータについて一律的に1番目の分割データから書込処理を開始すると,1番目の分割メモリ110aにアクセスが集中する。また,すべての書込対象のキーデータについて一律的に先頭部分から書込処理を開始すると,検索メモリマット100の前半部分の分割メモリにエントリアドレスの書込が集中し,後半部分の分割メモリに空き領域が多くなる。このように,検索メモリマット100内においてデータの書込済み領域に偏りが生じると,書込処理の際に衝突の発生回数が増えて書込処理に遅延が生じたり,読出処理の精度が低下したり,読出処理に遅延が生じるおそれがある。そこで,以下では,データの偏りが生じにくい書込処理の方式例を説明する。
図16に示した方式では,書込処理を行う際に,先頭側から処理を行うキーデータと,末尾側から処理を行うキーデータとに分けている。具体的に説明すると,(1)の書込対象のキーデータについては,拡散符号化し,18個の分割データに分割した後,1番目(先頭)の分割データから昇順で書込処理を行う。他方で,(2)の書込対象のキーデータについては,拡散符号化し,18個の分割データに分割した後,18番目(末尾)の分割データから降順で書込処理を行う。また,(3)の書込対象のデータは,1番目(先頭)の分割データから昇順で書き込み,(4)の書込対象のデータは,18番目(末尾)の分割データから降順で書き込むこととしている。このように,図16の書込方式では,書込対象のキーデータが入力されたときに,先頭から書き込みを開始するものと末尾から書き込みを開始するものとに分ける。これにより,検索メモリマット100内に書き込まれるデータの偏りを解消することができる。
図17に示した方式では,検索メモリマット100を上下2段で構成している。つまり,検索メモリマット100は,y軸方向に,上側メモリマット100cと下側メモリマット100dとを連結して構成されたものである。上側メモリマット100cと下側メモリマット100dは,それぞれ,x軸方向に,18個の分割メモリに分割されている。ここで,(1)の書込対象のキーデータについては,拡散符号化し,18個の分割データに分割した後,上側メモリマット100cに対して,1番目(先頭)の分割データから昇順で書込処理を行う。他方,(2)の書込対象のキーデータについては,拡散符号化し,18個の分割データに分割した後,下側メモリマット100dに対して,18番目(末尾)の分割データから降順で書込処理を行う。また,(3)の書込対象のデータは,上側メモリマット100cに1番目(先頭)の分割データから昇順で書き込み,(4)の書込対象のデータは,下側メモリマット100dに18番目(末尾)の分割データから降順で書き込むこととしている。このように図17の書込方式では,上下2段のメモリマットによって検索メモリマット100を構築し,書込対象のキーデータが入力されたときに,上側メモリマット100cに書き込みを行うものと下側メモリマット100dに書き込みを行うものとに分ける。これにより,検索メモリマット100内に書き込まれるデータの偏りを解消することができる。なお,図17では示していないが,上側メモリマット100cに18番目(末尾)の分割データから昇順で書き込みを行ったり,下側メモリマット100dに1番目(先頭)の分割データから昇順で書き込みを行うことも可能である。
図18に示した方式では,書込処理を行う際に,キーデータごとに最初に書込を開始する分割データを異ならせている。図18では,最初に書込処理を行う分割データを,符号“S”で示している。具体的に説明すると,(1)の書込対象のキーデータについては,拡散符号化し,18個の分割データに分割した後,1番目(先頭)の分割データから昇順で書込処理を行う。また,(2)の書込対象のキーデータについては,拡散符号化し,18個の分割データに分割した後,2番目の分割データから昇順で書込処理を行う。また,(3)の書込対象のデータは,3番目の分割データから昇順で書き込み,(4)の書込対象のデータは,4番目の分割データから昇順で書き込むこととしている。このように,図18の書込方式では,書込対象のキーデータが入力されたときに,最初に書込処理を開始する分割データを異ならせる。これにより,検索メモリマット100内に書き込まれるデータの偏りを解消することができる。
本願明細書では,データの偏りが生じにくい書込処理の方式について,図16から図18に示した例を挙げたが,書込処理の方式はこれに限定されるものではない。例えば,第1のキーデータと第2のキーデータとを半導体装置10に書き込みする場合を想定する。この場合に,第1のキーデータについて書込処理を行うときには,第1のキーデータを分割して得られた複数の分割データのうち,k番目の分割データに対応するエントリアドレスを最初にメモリ空間に書き込むようにすればよい。他方,第2のキーデータについて書込処理を行うときには,第2のキーデータを分割して得られた複数の分割データのうち,k番目以外の分割データに対応するエントリアドレスを最初にメモリ空間に書き込むようにすればよい。また,最初に処理する分割データ以降については,降順又は昇順で処理することとしてもよいし,1つおき又は2つおきに処理してもよい。このように,書込対象のキーデータごとに,最初に書込処理を行う分割データを変えることで,効率的に検索メモリマットに対してキーデータに対応するエントリアドレスを書き込むことが可能となる。
以上,本願明細書では,本発明の内容を表現するために,図面を参照しながら本発明の実施形態の説明を行った。ただし,本発明は,上記実施形態に限定されるものではなく,本願明細書に記載された事項に基づいて当業者が自明な変更形態や改良形態を包含するものである。