以下、図面を用いて本発明を実施するための形態について説明する。本発明は、以下に説明する形態に限定されるものではなく、以下の形態から当業者が自明な範囲で適宜修正したものも含む。
なお、本明細書において、「書き込み/読み出し」との用語は、「書き込み及び読み出しの両方又はいずれか一方」を意味する用語として用いる。
本発明は、半導体装置、及び半導体装置に対するエントリアドレスの書き込み/読み出し方法に関する。本発明の基本的な考え方の要素は以下のとおりである。
(1)半導体装置の制御回路は、検索対象となるデータ、すなわち、キーデータを複数に分割(n分割)し、その分割したキーデータをアドレスにして、メモリ回路(検索メモリマット)にアクセスする。
(2)制御回路は、アクセスしたメモリ回路のアドレスに、分割したキーデータに対応するエントリアドレスを登録する。
(3)このエントリアドレスの登録処理は、キーデータの分割数(n)に対応したメモリ回路の全てに対して行われる。
(4)このエントリアドレスの登録の後で、制御回路に検索対象データとしてのキーデータが入力されると、制御回路は、入力されたキーデータを複数に分割(n分割)する。そして、制御回路は、分割したキーデータをアドレスとしてメモリ回路にアクセスし、メモリ回路に登録されているエントリアドレスを出力する。
なお、望ましくは、
(5)制御回路は、出力したエントリアドレスが全て一致したときに、それを求めるエントリアドレスとして採用する。他方、制御回路は、出力したエントリアドレスに不一致があれば、検索対象データと一致するデータは登録されていないと判定する。
以上は、本発明における基本的な考え方である。なお、本発明を、実際に機能を実現できる製品に実装する場合には、様々な解決すべき問題も残っているが、それらの問題を解
決する方法については、後述の実施例において詳しく説明する。
まず、図1〜図5を参照して、本発明の概要について説明する。
図1は、本発明に係る半導体装置の主たる機能構成を示した機能ブロック図である。
図1に示されるように、本発明の半導体装置は、検索メモリマット102と制御回路105とを備える。また、図1に示されるように、本発明の半導体装置は、さらに、確認メモリマット104と符号化回路106とを備えることが好ましい。制御回路105は、検索メモリマット102、確認メモリマット104、及び符号化回路106のそれぞれと接続されており、半導体装置における情報処理を総合的に制御する機能を担っている。
図1に示された検索メモリマット102は、y軸方向にエントリアドレスが登録される場所が割り当てられ、x軸方向にキーデータが割り当てられる構成を持つ。ここにいう「y軸方向」とは、行列からなるアレイにおける列方向(縦方向)と行方向(横方向)のいずれか一方の方向を意味し、「x軸方向」とは、列方向(縦方向)と行方向(横方向)のいずれか他方の方向を意味している。つまり、検索メモリマット102では、一つのエントリアドレスに対して、一つのキーデータが対応付けて記憶される。このように、検索メモリマット102は、y軸方向に複数のエントリアドレスを登録する場所が割り当てられて、各エントリアドレスに対してx軸方向に一つのキーデータ割り当てることのできる構成を基本としている。
また、本発明の半導体装置によって実現可能なCAM(連想メモリ)は、一般的に、検索メモリマットに登録されている複数のキーデータの中から、ユーザによって指定されたキーデータを検索して探し出し、このキーデータが発見された場所のエントリアドレスをユーザに提供するという機能を持つものである。つまり、「キーデータ」とは、検索メモリマット内に登録される所望の情報を意味する。また、「エントリアドレス」とは、キーデータが登録されている検索メモリマット内の場所(アドレス)を示すメタ情報を意味している。
また、例えば後述する図8等に示されるように、検索メモリマット102のy軸方向に割り当てられた「エントリアドレスを登録する場所」には、それぞれ、その場所を特定するための番地データが与えられる。例えば、図8に示された例において、「エントリアドレスを登録する場所」は、y軸方向に4つずつ存在している。それぞれの「エントリアドレスを登録する場所」の番地は、例えば2ビットのデータによって特定されている。例えば、4つの「エントリアドレスを登録する場所」には、それぞれ、“00”、“01”、“10”、及び“11”の番地データが与えられている。この番地データとは、検索メモリ102のメモリ空間における「エントリアドレスを登録する場所」の番地を特定するためのデータである。なお、「エントリアドレスを登録する場所」は、8つ以上存在していてもよい。この「エントリアドレスを登録する場所」を特定するための番地データは、3ビット以上のデータであってもよい。例えば、この「エントリアドレスを登録する場所」を特定するための番地データは、2ビット〜6ビット又は3ビット〜5ビットのデータであってもよい。
また、本発明の半導体装置において、キーデータは、所望のビット数のものを書き込んだり読み出したりすることができる。また、エントリアドレスについては、例えば2ビット以上で定義することが好ましい。例えば、エントリアドレスは、2ビット〜6ビットとすることができ、3ビット〜5ビットであってもよい。
また、図1に示されるように、検索メモリマット102は、複数の分割メモリ102a、102b、102c…によって構築されている。複数の分割メモリは、検索メモリマット102の記憶空間のうち、キーデータが割り当てられるx軸方向の領域を、y軸方向沿って複数に分割するものである。つまり、検索メモリマット102を複数の分割メモリ102a、102b、102c…に分割して構築することで、キーデータが割り当てられる領域が複数に分割される。各分割メモリは、SRAMなどの記憶装置を用いて構成することができる。この意味において、本発明は、複数のSRAMを利用して実現したCAMであるということができる。本願明細書では、SRAMを用いて実現したCAMを、SRAM−CAMと称している。例えば、後述するが、キーデータが割り当てられる領域が複数に分割された検索メモリマット102は、図8に示されるような構成となる。
このようにして、検索メモリマット102のキーデータが割り当てられるx軸方向の領域を複数に分割することで、検索メモリマット102の記憶空間は、y軸方向とx軸方向のそれぞれが複数に分割される。このように、y軸とx軸で特定される区画された記憶空間(セル)を、本願明細書では、検索メモリマット102の場所やアドレスと表現している。
例えば、検索メモリマット102の総エントリ数を、仮に、4096エントリと定めた場合、4096エントリを識別できるアドレスのサイズは、12ビットになる。また、検索メモリ102に入力されるキーデータの大きさが144ビットであるとすると、これを前記の12ビットで割ると12となる。すなわち、このような場合に、分割メモリの数は、少なくとも12以上必要となる。
このような条件を考慮すると、最低限必要となる検索メモリマット102の分割数Nは、以下の式により求めることができる。
(式)N=L/log2・M
L:キーデータ長
M:総エントリ数
N:検索メモリマットの分割数(分割メモリの最小個数)
他方、図1に示されるように、制御回路105は、基本的に、入力部1051、分割部1052、書込部1053、読出部1055、及び出力部1057を有している。また、制御回路105は、さらに、衝突情報記憶部1054と確認部1056とを有していることが好ましい。これらの要素1051〜1056は、制御回路105の機能を概念的に分類して示したものである。すなわち、制御回路105は、これらの要素1051〜1056を利用して、検索メモリマット102に対しエントリアドレスを書き込んだり、検索メモリマット102に登録されているエントリアドレスを読み出したりする処理を行う。
以下では、制御回路105により実行される基本的な処理について、図2〜図5のフロー図を参照しながら説明する。
まず、制御回路105により行われるエントリアドレスの書込処理を説明する。
ここで、図2及び図3は、制御回路105が行う書込処理を示すフロー図である。ここでの書込処理とは、新しいキーデータ(入力データ)を記憶するにあたり、その新しいキーデータに対応したエントリアドレスを検索メモリマットに書き込む処理である。
図2に示されるように、書込処理においては、まず、検索メモリマット内に新たに登録するためのキーデータ(入力データ)が、半導体装置に入力される(ステップS1)。ここで、入力データとしてのキーデータは、図1に示されるように、制御回路105の入力部1051に直接入力されることとしてもよいし、符号化回路106を経由して制御回路105の入力部1051に入力されるものであってもよい。
ここで、キーデータが符号化回路106に入力された場合には、符号化回路106によってキーデータの符号化処理が行われる(ステップS2)。なお、ここで行われる符号化処理については、後の[実施例4]において詳しく説明する。
他方、入力データとしてのキーデータが制御回路105の入力部1051に直接入力された場合、この入力部1051は、キーデータを分割部1052へと送出する。つまり、入力部1051は、制御回路105における入力インターフェースである。
続いて、分割部1052は、入力データとしてのキーデータを複数に分割する(ステップS3)。つまり、分割部1052は、入力されたキーデータのバイナリデータ(コンピュータが扱うことのできる2進形式データ)を複数に分割する。例えば、分割部1052は、検索メモリマット102を構築する分割メモリ102a、102b、102c…の数と等しい数にキーデータを分割することが好ましい。要するに、分割部1052がキーデータを分割する分割数nは、検索メモリマット102を構築する分割メモリの数Nであることが好ましい。これにより、分割部1052によって複数に分割したキーデータ(「分割キーデータ」ともいう)の全てを、それぞれ順番に、複数の分割メモリに対して登録していくことができる。
また、分割部1052は、キーデータのバイナリデータを分割するにあたり、このバイナリデータを所定ビットずつに分けることが好ましい。例えば、キーデータとして“2699”が入力された場合に、このキーデータ“2699”をバイナリで表すと“101010001011”となる。例えば、分割部1052は、このキーデータを、“10”“10”“10”“00”“10”“11”のように、2ビットずつに分割することとしてもよい。また、分割部1052は、キーデータを、3ビットずつに分割することとしてもよいし、4ビットずつに分割することもできる。例えば、分割するビット数は、2〜10ビットずつとすればよい。
さらに具体的に説明すると、分割部1052が分割したキーデータのビット数(α)は、検索メモリマット102のy軸方向に割り当てられる「エントリアドレスを登録する場所」を特定するための番地データのビット数(β)と等しいことが好ましい(α=β)。例えば、検索メモリマット102内の「エントリアドレスを登録する場所」を特定するための番地データが2ビットで表されている場合には、分割部1052は、入力されたキーデータを2ビットずつ複数に分割することが好ましい。同様に、検索メモリマット102に割り当てられるエントリアドレスを登録する場所が3ビットの番地データで特定される場合には、分割部1052は、入力されたキーデータを3ビットずつ複数に分割することが好ましい。これにより、後の処理において、分割部1052が分割したキーデータのそれぞれを、当該分割したキーデータをアドレスとして、検索メモリマット102を構築する分割メモリに適切に割り当てることができる。
図1に示されるように、書込処理においては、分割部1052は、上記のようにして分割したキーデータを書込部1053へと送出する。
次に、書込部1053は、分割部1052から受け取ったキーデータに対して、固有のエントリアドレスを割り当てて、確認メモリマット104に書き込む処理を行う(ステップS4)。すなわち、このステップS4では、新規のキーデータを新しく検索メモリマット102に登録するに際し、この新規のキーデータに対して一つのエントリアドレスを割り当てて、新規のキーデータとエントリアドレスの対応関係を、確認メモリマット104に記憶しておく。確認メモリマット104のデータ構造の例は、図8の右下に示されている。このように、確認メモリマット104は、キーデータとエントリアドレスの対応関係を記憶しておくためのデータベースとしても機能させることができる。また、確認メモリマット104は、後述するとおり、読出処理を行う際に、制御回路が読み出したエントリアドレスが正しいものであるか否かの最終確認を行う際にも利用される。なお、確認メモリマット104は、SRAM等の記憶装置によって構成すればよい。
その後、書込部1053は、分割部1052によって分割された複数の分割キーデータを、それぞれ、検索メモリマット102の分割メモリ102a、102b、102c…に書き込む処理を行う(ステップS5)。このステップS5において行われる処理は、図3においてより詳しく説明されている。
図3のフロー図は、キーデータ(KD)のバイナリデータをn個の分割キーデータに分割し、この分割キーデータの順序をk番目と定義した場合を示している。
すなわち、図3に示されるように、まず、“k”に“1”が代入されて、n個の分割キーデータのうち1番目(最初)の分割キーデータの処理が開始される(ステップS5A)。
次に、書込部1053は、1番目(k番目)の分割キーデータのエントリアドレスを、検索メモリマット102に割り付ける(ステップS5B)。具体的に、書込部1053は、検索メモリマット102のy軸に割り当てられた「エントリアドレス(EA)を登録する場所」を特定するための番地データを参照しながら、1番目(k番目)の分割キーデータを表すバイナリデータをアドレスとして検索メモリマット102にアクセスし、ここでアクセスした検索メモリマット102の場所(アドレス)に対し、この分割キーデータに対応付けられたエントリアドレス(EA)を割り付ける。ここでの処理は、後に、図8等を参照してより詳しく説明する。
要するに、書込部1053は、検索メモリマット102の適切な場所(アドレス)に、1番目(k番目)の分割キーデータに対応付けられたエントリアドレス(EA)を割り付けていく。この検索メモリマット102の適切な場所(アドレス)は、現在処理されている分割キーデータの順序(k番目)と、分割キーデータのバイナリデータによって特定することができる。つまり、まず、分割キーデータの順序(k番目)を参照して、この分割キーデータのエントリアドレスを書き込む検索メモリマット102のx軸方向の領域を特定する。例えば、1番目の分割キーデータのエントリアドレスは、検索メモリマット102を構築する複数の分割メモリ102a、102b、103c…のうち、1番目の分割メモリ102aに書き込まれる。次に、分割キーデータのバイナリデータを参照して、この分割キーデータのエントリアドレスを書き込む検索メモリマット102のy軸方向の領域を特定する。すなわち、分割キーデータのエントリアドレスは、その分割キーデータを示すバイナリデータと、検索メモリマット102のy軸方向に割り当てられた「エントリアドレス(EA)を登録する場所」を特定するための番地データとが一致するy軸方向の領域に書き込まれる。例えば、検索メモリマット102のy軸方向に“00”“01”“10”“11”という4つの番地データが割り当てられており、分割キーデータのバイナリデータが“10”であり、さらにこの分割キーデータに対応するエントリアドレスが“00”である場合を想定する。この場合に、この分割キーデータのエントリアドレス“00”は、検索メモリマット102のうち、“10”の番地データが割り当てられたy軸方向の領域(エントリアドレス(EA)を登録する場所)に書き込まれる。このようにして、現在処理されている分割キーデータの順序(k番目)と、分割キーデータのバイナリデータとに基づいて、この分割キーデータのエントリアドレスを割り付ける検索メモリマット102の適切な場所(アドレス)を求めることができる。
続いて、書込部1053は、1番目(k番目)の分割キーデータのエントリアドレス(EA)を割り付けた場所(アドレス)に、他のエントリアドレスが既に書き込まれており、エントリアドレスの衝突が発生するか否かを確認する(ステップS5C)。例えば、現在書込処理をしているキーデータの前に、別のキーデータが既に検索メモリマット102に書き込まれている場合には、エントリアドレスの衝突が発生し得る。
まず、ステップS5Cにおいて、書込部1053がエントリアドレスの衝突が発生していないと判断した場合、書込部1053は、そのまま1番目(k番目)の分割キーデータに対応するエントリアドレスを、検索メモリマット102の適切な場所(アドレス)に書き込む(ステップS5D)。
他方、ステップS5Cにおいて、書込部1053がエントリアドレスの衝突が発生していると判断した場合は、衝突情報記憶部1054が、当該衝突の発生している検索メモリマット102の場所(アドレス)に、衝突を表す情報を書き込む(ステップS5E)。例えば、衝突情報記憶部1054は、衝突の発生している場所(アドレス)に、フラグビットなどを追加して、衝突が起こったことを記録すればよい。
上記ステップS5D又はステップS5Eのいずれかの処理が終了した後、書込部1053は、“k”に“1”を加えて、この“k+1”の値を“k”に代入する(ステップS5F)。そして、書込部1053は、ステップS5Gを経て得られた“k”の値が“n(キーデータの分割数)”と等しくなったか否かを確認する(ステップS5G)。kがn未満(k<n)である場合、書込部1053は、ステップS5Bに戻る。例えば、1番目(k番目)の分割キーデータの処理が完了した後には、2番目(k+1番目)の分割キーデータの処理を続けて行う。他方、kがnと等しくなった(k=n)場合、書込部1053は、図3に示されたサブフローを終了し、図2に示されたメインフローへと戻る。
上記の各ステップ(S1〜S5)により、書込部1053は、複数の分割キーデータの全てについて、対応するエントリアドレスを、検索メモリマット102の適切な場所(アドレス)に書き込んでいく。全ての分割キーデータのエントリアドレスを書き終えると、書込部1053は、書込処理を終了させる。
続いて、制御回路105により行われるエントリアドレスの読出処理を説明する。
ここで、図4及び図5は、制御回路105が行う読出処理を示すフロー図である。ここでの読込処理とは、検索対象であるキーデータ(検索データ)と一致するデータが、すでに検索メモリマット102内に書き込まれている場合に、そのキーデータに対応したエントリアドレスを読み出す処理である。
図4に示されるように、読出処理においては、まず、検索メモリマット102内を検索する対象となるキーデータ(検索データ)が、半導体装置に入力される(ステップS6)。ここで、検索データとしてのキーデータは、図1に示されるように、制御回路105の入力部1051に直接入力されることとしてもよいし、符号化回路106を経由して制御回路105の入力部1051に入力されるものであってもよい。
ここで、検索データとしてのキーデータが符号化回路106に入力された場合には、符号化回路106によって、このキーデータの符号化処理が行われる(ステップS7)。なお、ここで行われる符号化処理については、後の[実施例4]において詳しく説明する。
他方、検索データとしてのキーデータが制御回路105の入力部1051に直接入力された場合、この入力部1051は、キーデータを分割部1052へと送出する。
続いて、分割部1052は、検索データとしてのキーデータを複数に分割する(ステップS8)。ここで、読出処理で分割部1052が行う分割処理(ステップS8)は、前述した書込処理で分割部1052が行う分割処理(ステップS3)と同じアルゴリズムで行われる。このように、ステップS8での処理は、ステップS3での処理と同じであるため、説明を省略する。
図1に示されるように、読出処理においては、分割部1052は、分割したキーデータを読出部1055へと送出する。
その後、読出部1055は、分割部1052によって分割された複数の分割キーデータに基づいて、検索メモリマット102の分割メモリ102a、102b、102c…アクセスし、複数の分割キーデータのそれぞれに対応するエントリアドレスを読み出す処理を行う(ステップS9)。このステップS9において行われる処理は、図5においてより詳しく説明されている。
図5のフロー図は、キーデータ(KD)のバイナリデータをn個の分割キーデータに分割し、この分割キーデータの順序をk番目と定義した場合を示している。
すなわち、図3に示されるように、まず、“k”に“1”が代入されて、n個の分割キーデータのうち1番目(最初)の分割キーデータの処理が開始される(ステップS9A)。
次に、読出部1055は、1番目(k番目)の分割キーデータに基づいて、検索メモリマット102内を検索する(ステップS9B)。具体的に、読出部1055は、検索メモリマット102のy軸に割り当てられた「エントリアドレス(EA)を登録する場所」を特定するための番地データを参照しながら、1番目(k番目)の分割キーデータを表すバイナリデータをアドレスとして検索メモリマット102にアクセスし、ここでアクセスした検索メモリマット102のアドレス内に書き込まれている情報を抽出する。ここでの処理は、後に、図8等を参照してより詳しく説明する。
要するに、ステップS9Bにおいて、読出部1055は、書込部1053がステップS5Bで行った方法を同じ方法で、検索メモリマット102の適切な場所(アドレス)にアクセスする。つまり、この検索メモリマット102の適切な場所(アドレス)は、現在処理されている分割キーデータの順序(k番目)と、分割キーデータのバイナリデータによって特定することができる。検索メモリマット102の適切な場所を特定する方法は、ステップS5Bにおいて説明したため、ここでの説明は省略する。
続いて、読出部1055は、1番目(k番目)の分割キーデータに基づいてアクセスしたアドレスに、衝突を表す情報(衝突フラグ)が書き込まれているか否かを確認する(ステップS9C)。ここにいう「衝突を表す情報」は、上述したステップS5Eにおいて、衝突情報記憶部1054により書き込まれた情報である。
ここで、ステップS9Cにおいて、エントリアドレスの衝突が発生している判断した場合に、読出部1055は、1番目(k番目)の分割キーデータを検索対象として「配慮しない(don’t care)」ものとして扱う(ステップS9D)。すなわち、「配慮しない(don’t care)ものとして扱われた分割キーデータについては、それに対応するエントリアドレスを読み出さずに、処理を終了させる(ステップS9Gへ)。このように、読出処理においてアクセスしたアドレスに、エントリアドレスの衝突が生じている場合には、そのエントリアドレスを「配慮しない(don’t care)」という概念を導入することで、高速且つ低消費電力で、効率的にデータ検索を行うことが可能となる。
他方、ステップS9Cにおいて、エントリアドレスの衝突が発生していないと判断した場合、読出部1055は、アクセスした検索メモリマット102の場所(アドレス)に書き込まれている一つのエントリアドレスを読み出す(ステップ9E)。すなわち、ここで読出部1055が読み出すエントリアドレスは、検索対象として入力されたキーデータ(検索データ)に対応するエントリアドレスである可能性がある。ただし、一つの分割キーデータに対応するエントリアドレスを読み出すことができても、このエントリアドレスが、検索対象としてのキーデータ(検索データ)に対応するエントリアドレスであるとは言い切れないため、引き続き、各分割データに対応するエントリアドレスの読出処理をおこなっていく。
次に、読出部1055は、ステップS9Eで読み出したエントリアドレスが、他の分割データに基づいて以前に読み出したエントリアドレスと不一致であるかどうかを確認する(ステップS9F)。なお、最初は、1番目の分割キーデータについての処理を行っており、以前に読み出したエントリアドレスが存在しないため、ステップS9Fを通過して、ステップS9Gへと移行する。
上記ステップS9D又はステップS9Fのいずれかの処理が終了した後、読出部1055は、“k”に“1”を加えて、この“k+1”の値を“k”に代入する(ステップS9G)。そして、読出部1055は、ステップS9Gを経て得られた“k”の値が“n(キーデータの分割数)”と等しくなったか否かを確認する(ステップS9H)。kがn未満(k<n)である場合、読出部1055は、ステップS9Bに戻る。例えば、1番目(k番目)の分割キーデータに基づいた読出処理が完了した後には、2番目(k+1番目)の分割キーデータに基づいた読出処理を続けて行う。他方、kがnと等しくなった(k=n)場合、読出部1055は、図5に示されたサブフローを終了し、図4に示されたメインフローへと戻る。
その後、1番目(k番目)の分割キーデータに続いて、2番目(k+1番目)の分割キーデータに基づく読出処理を行う。ここで、例えば、ステップ9Fにおいて、2番目の分割キーデータに基づいて読み出したエントリアドレスが、1番目の分割データに基づいて以前に読み出したエントリアドレスと不一致であったと判断されたとする(ステップ9F)。例えば、2番目の分割キーデータに基づいて読み出したエントリアドレスが“00”であったのに対し、1番目の分割データに基づいて以前に読み出したエントリアドレスが“01”である可能性もある。この場合には、読出部1055は、検索対象として入力されたキーデータは、検索メモリマット102内に登録されておらず、「一致データ無し」と判定する(ステップS9I)。そして、読出部1055は、図4で示したメインフローへとは戻らずに、ここで読出処理全体を終了させる。このように、本発明では、例えば、2番目の分割キーデータを処理した段階で「一致データ無し」と判定することができるため、3番目以降の分割キーデータの読出処理を実行しなくとも、早期に結果を出すことができる。これにより、検索処理の高速化を図ることができる。
図4に示されるように、エントリアドレスの読出処理(ステップS9)を終えると、制御回路105による処理は、ステップS10へと進む。ステップS10においては、制御回路105の確認部1056が、読出部1055の読み出したエントリアドレスに基づいて、確認メモリマット104を参照する。確認メモリマット104には、ステップS4で説明したとおり、エントリアドレスとキーデータが正しい組み合わせで対応付けて記憶されている。つまり、ここで、確認部1056は、読出部1055の読み出したエントリアドレスに基づいて、このエントリアドレスに対応付けられているキーデータを確認メモリマット104から読み出す。そして、確認部1056は、確認メモリマット104から読み出したキーデータが、検索対象として入力されたキーデータのエントリアドレスと一致するかどうかを確認する。このように、読出部1055が読み出したエントリアドレスに基づいて確認用104を参照することで、このエントリアドレスが、本当に、検索対象として入力されたキーデータのエントリアドレスと一致するものであるか否かを確認することができる。
例えば、複数に分割されたキーデータに基づいて複数のエントリアドレスを読み出したときに、すべてのエントリアドレスが同じ値であれば、そのエントリアドレスは正しいものであることがわかる。しかし、本発明では、上述したとおり、複数のエントリアドレスが同じ場所(アドレス)に登録されて“衝突”が発生したときに、「配慮しない(don’t care)」という概念を導入している。そうすると、複数に分割されたキーデータに基づいて複数のエントリアドレスを読み出したときに、そのうちの幾つかは同じ値を示すものの、その他のものは「配慮しない(don’t care)」という結果が得られることもある。このため、確率論的には、読み出したエントリアドレスにエラーが発生する場合もある。そこで、このような不確実性を排除するために、本発明では、確認メモリマット104を参照することとしている。
ステップS10において、確認メモリマット104を参照した結果、読出部1055が読み出したエントリアドレスに誤りがないと判断した場合、確認部1056は、このエントリアドレスを、出力部1057へと送出する。そして、出力部1057は、確認部1056から受け取った一つのエントリアドレスを、検索結果として、制御回路105の外部へと出力する(ステップS10)。つまり、出力部1057は、制御回路105における出力インターフェースである。
上記の各ステップ(S6〜S10)により、制御回路105は、ユーザからの検索要求に応じて、検索メモリマット102に登録されているデータの検索を行い、検索データとして入力されたキーデータに対応する一つのエントリアドレスを出力する。
上記のように、本発明に係る半導体装置は、図1に示された基本構成を有する。この半導体装置は、基本的に、図2〜図5に示した書き込み処理/読み出し処理を行う。これらの処理は、本発明の基本概念を示すものである。本発明におけるより具体的な処理は、下記[実施例1]〜[実施例6]においてより詳しく説明する。
本発明は、上述のように、従来の回路構成、特にメモリ回路をベースとしながら、まったく新しい論理的方式論を提供するものである。すなわち、本発明は、キーデータとそのエントリアドレスの構成を巧みに利用したプログラムレスのアーキテクチャに関する。別の言い方をすれば、本発明は、脳型のアーキテクチャに関するものである。
本発明においては、まず、メモリ回路のメモリ空間を複数のクラスタに分割するとともに、このクラスタに書き込むデータも同様にして分割する。また、本発明では、分割したデータ自体を、クラスタにアクセスするためのアドレスとして捉える。さらに、このアドレスをメモリ空間のy軸に割り当て、クラスタに入力するデータをメモリ空間のx軸に割り当てる。そして、本発明では、x方向のメモリ空間を独立に書き込み/読み出しができる複数のメモリに分割し、分割された複数のメモリに、分割したクラスタの入力を割り当てることとしている。
さらに、本発明は、上記の構成により、アドレスが衝突したときに「配慮しない(don’t care)」という概念を導入することで、高速且つ低消費電力でスイッチや検索を実現することができるようになるという発想に基づいている。
また、本発明の発明者は、分割メモリの入力と出力部に、入出力されるデータの順序を選択的に分配できるスイッチと、これらのスイッチを制御する制御回路を設けることを発想した。これにより、分割メモリをLUT(Look Up Table)として扱うことも可能となり、メモリ内のクラスタを論理回路として扱うことも可能となる。すなわち、本発明の半導体装置は、いわゆる均質回路となる。これにより、本発明の半導体装置は、必要に応じて、論理回路やメモリとしての機能を切り替えて用いることができる。また、本発明の半導体装置は、設定する必要クラスタを隣接した位置に動的に移動することも可能となり、低消費電力で高速な検索処理が可能となる。
さらに、本発明の半導体装置は、分割メモリの入力部と出力部にスイッチ回路を設けることもできる。この場合、半導体装置の制御回路が、さらに、論理的に分割メモリを選択できるように構成される。この分割メモリは、さらに、LUT(Look Up Table)としてデータが入力されていることで論理演算が可能な構成を備えており、必要ならばこれを複数ブロック配列することを可能としている。
また、本発明の半導体装置に対するエントリアドレス書き込み/読み出し方法は、分割キーデータで特定される分割メモリの同一のアドレスに複数のエントリアドレスが書き込まれた場合、その分割メモリのアドレスに衝突を表す情報を記憶することとしている。また、本発明の方法は、分割キーデータに基づいて読み出された情報のすべてが衝突を表す情報の場合には、読み出された衝突情報で確認メモリマットを順次参照して、一致するキーアドレスを抽出するように構成している。
ここで、本発明の理解を容易にするために、検索メモリマット及び分割メモリについて、具体的な数値を当てはめて説明する。検索メモリマット102は、複数の分割メモリを備える。例えば、検索メモリマット102の総エントリ数を、4096エントリと定めた場合、4096エントリを識別できるアドレスのサイズは、12ビットになる。また、検索メモリマット102からエントリアドレスを検索するためのキーデータの大きさが144ビットであるとすると、これを前記の12ビットで割ると12となる。すなわち、分割メモリの数は12となる。
検索メモリマット102に付属している制御回路105は、144ビットのキーデータが入力されると、これを12分割して、それぞれを予め対応させた各分割メモリに割り当てる。分割したキーデータのバイナリデータは、対応する分割メモリにアクセスするためのアドレスとして用いられる。そして、この分割したキーデータにより指定された検索メモリマットの場所には、キーデータに対応するエントリアドレスを書き込む。このエントリアドレスは、12分割された全ての分割メモリに書き込まれる。
次に、書き込まれた情報を読み出す場合、制御回路105は、書き込みと同じ手順で、入力した144ビットのキーデータを12分割する。また、制御回路105は、分割されたキーデータをアドレスとして予め定めた分割メモリにアクセスする。そして、制御回路105は、指定された分割メモリに書き込まれたデータを読み出す。この読み出されたデータが、キーデータに対応するエントリアドレスである。
ここで、入力されるキーデータの大きさを更に大きくすることもできる。例えば、キーデータの大きさ144ビットから288ビットに拡張することも可能である。この場合には、検索メモリマット102を並列的に2つ並べた構成すればよい。また、検索メモリマット102の総エントリ数を拡大することもできる。例えば、検索メモリマット102の総エントリ数を4096から8192に拡大するときには、検索メモリマット102を直列的に2つ並べて構成すればよい。なお、検索メモリマットの総エントリ数の基本単位や、並列的又は直列的に並べる検索メモリマットの個数は、上記に限定されるものではなく、要求により自由に拡大したり縮小したりすることができる。
なお、後述するが、上記の検索メモリマットにスイッチ機能を付加することも可能である。この場合、検索メモリマットをルックアップテーブルLUT(Look Up Table)方式の論理回路として構成することもできる。さらに、拡大メモリ空間の一部として検索メモリマットの構成含むように設定することもできる。
上記の説明は、本発明の理解を容易にするための具体例である。したがって、本発明は、上記のものに限定されるものではない。
図1は、本発明を実現する半導体装置の例を示している。特に、図6は、SRAM−CAMによるメモリ回路構成の一例を示している。なお、本実施例では、SRAM−CAMによって構成された半導体装置のメモリ構成や基本原理について説明する。しかしながら、例えば、ロウアドレス(row address)とカラムアドレス(column address)からなるメモリアレイにアクセスを行なうメモリ空間(メモリマット)を備える半導体装置であれば、本発明の原理を実現可能である。
図6に示されるように、本発明の一実施例に係る半導体装置は、近接キャッシュメモリマット101、制御回路105、検索メモリマット102、比較及びラッチ回路103、確認メモリマット104を備えている。また、検索メモリマット102は、複数の分割メモリ102a、102b、102c、…、102hによって構築されている。なお、近接キャッシュメモリマット101は、必要としない場合には設ける必要はない。
まず、本発明は、インターネットのスイッチやルータでよく用いられているCAMの欠点を克服することを目的とするものである。すなわち、従来のCAMは、データの検索を行う際に、全ビットを活性するため大電力を消費するという欠点を有している。そこで、本発明は、検索時において、従来のCAMのように全ビットを活性するのではなく、y軸の指定エントリのみを活性にすることとしている。これにより、本発明によれば、従来のCAMと比較して、エントリ数分の一(1/エントリ数)の活性ビットでの検索が可能となる。すなわち、本発明は、従来のCAMと比較すると、y軸のエントリ数分の一(1/エントリ数)のアドレスのみを動作させるだけで、検索結果を出力することができる。このため、本発明では、従来のCAMが使用していた出力エンコーダが不要となり、また、大きな電力を消費するナンド回路のツリー構造が不要となる。従って、本発明によれば、低消費電力で検索処理を実行できる。
図6に示されるように、本発明の半導体装置(SRAM−CAM)では、入力データであるキーデータ(KD)とエントリアドレス(EA)が制御回路105に入力され、所定のアルゴリズムで検索メモリマット102に書き込まれる。つまり、制御回路105は、入力されたキーデータを所定数に分割し、分割したキーデータをアドレスとして、予め定められた対応する分割メモリ102a、102b、102c、…、102hにアクセスする。そして、制御回路105は、このアクセスした分割メモリ102a、102b、102c、…、102hに、キーデータとエントリアドレスを書き込む。この制御回路105の書き込み動作は、分割メモリ102a、102b、102c、…、102hの全てに対して行なわれる。なお、本願明細書では、検索メモリマット102に新しく登録するために入力されたキーデータを、「入力データ」と称し、検索メモリマット102内を検索するために入力されたキーデータを、「検索データ」と称することもある。
制御回路105は、検索メモリマット102のy軸にエントリアドレス(EA)を登録する場所(アドレス)を割り付け、そのx軸にキーアドレス(KD)を割り付ける。この制御回路105の動作を、CAMの基本動作に対応付けて説明すると、データ検索の際に入力されるキーデータをx軸に割り付け、エントリアドレスを登録するための場所(アドレス)をy軸に割り付けるものである。
検索メモリマット102は、x軸方向の領域が、複数の基本セルに分割される。検索メモリマット102を分割する数は、n(nは2以上の自然数)である。各基本セルには、適切な大きさのビット数に分割されたキーデータにより指定された場所にエントリアドレス(EA)が格納される。図6の例では、nを8とした場合を示している。各基本セルに格納するエントリアドレスのビット数は分割されたキーデータのビット数により定まるが、キーデータのビット数は、任意である。
確認メモリマット104は、y軸にエントリアドレス(EA)が割り付けられ、x軸にエントリアドレスに対応するキーデータ(KD)が割り付けられる。つまり、確認メモリマット104のx軸には、エントリアドレスに対応したキーデータが書き込まれている。
図7は、図6で示したメモリ回路の検索動作のタイミングを、第1クロック及び第2クロックの繋がりで示している。第1のクロックでは、キーデータ(KD)を制御回路105に入力し、分割された各マットに格納されたエントリアドレス(EA)を読み出し、読み出したエントリアドレスをラッチ回路103aへラッチする動作までが実行される。続いて、第2クロックでは、ラッチ回路103aのデータを比較器103bで比較し、一致が確認されたエントリアドレスを確認メモリマット104へ入力し、確認メモリマット104を参照して一致が確認されたエントリアドレスを、CAMの出力とする動作が実行される。
このように、図7では、本発明の実施例に係るSRAM−CAMによるスイッチ又は検索の動作が示されている。図7に示されるように、本実施例では、一度の検索動作が、2クロックのマシンサイクルで完了する。これに対して、従来のCAMは、一度の検索動作を行うにあたり、最低でも3クロックを必要とし、一般的には5から10クロックを必要とする。すなわち、従来のCAMは、全ビットを動作させるための電力供給が不可欠であるため、パイプライン的操作が必要になる。さらに、従来のCAMは、エンコーダで1クロック消費するため、最低でも3クロックが必要となる。この点、本発明のSRAM−CAMは、キーデータの入力方法を工夫することにより、図7で示したように、2クロックで検索動作を完了させることができる。つまり、本発明のSRAM−CAMでは、従来のCAMと比較して、エントリ数分の一(1/エントリ数)の電力で検索動作を実行できる。
図8は、本発明の実施例に係るSRAM−CAMの書込動作を示している。図8では、4つのキーデータ(KD=“2699”“3779”“1859”“1440”)のエントリアドレスを、検索メモリマット102に入力した場合の例を示している。なお、図8に示した例では、4つのキーデータのエントリアドレスをすべて入力した後であっても、検索メモリマット102にはまだ空白が存在している。このため、図8の例では、エントリ数以上のキーデータを登録することができる。これは、キーデータ長がエントリ数に対して十分大きいためである。図8の例では、キーデータ長がエントリ数の2倍以上となっている。
図8を用いて、検索メモリマット102にエントリアドレスの書き込む動作の例を説明する。図8の例では、検索メモリマット102を6つに分割している(検索メモリマットの分割数:N)。これにより、検索メモリマット102bは、6つの分割メモリ102a、102b、102c、102d、102e、102fにより構築される。また、図8の例では、検索メモリマットに書き込まれるキーデータは、12ビットで表される。このような12ビットのキーデータを、6つの分割メモリに書き込んでいく。このため、制御回路105は、入力されたキーデータを6つに分割する(キーデータの分割数:n)。従って、分割されたキーデータのビット数は、それぞれ2ビットとなる。
また、図8に示されるように、検索メモリマット102を構成する複数の分割メモリ102a〜102fのそれぞれには、そのy軸方向に、複数のエントリアドレスを登録するための場所が割り当てられている。このように、各分割メモリ102a〜102fの記憶領域は、それぞれy軸方向に複数に分割されている。図8に示された例において、各分割メモリ102a〜102fは、エントリアドレスを登録する場所を4つずつ有している。また、図8に示されるように、エントリアドレスを登録する場所には、それぞれ、検索メモリマット102内のメモリ空間における番地を特定するための番地データが与えられている。図8に示された例において、番地データは2ビットの情報である。例えば、番地データは、“00”“01”“10”“11”のバイナリデータで表される。図8に示されるように、エントリアドレスを登録する場所には、上から順に、“00”“01”“10”“11”の番地データを与えればよい。
まず、入力データされたキーデータ(KD)である“2699”“3779”“1859”“1440”のそれぞれに、エントリアドレス(EA)を割り当てる。図8の例では、エントリアドレスは、それぞれ2ビットのデータである。すなわち、エントリアドレスは、“00”“01”“10”“11”である。このように、一つのキーデータには、一つのエントリアドレスが対応付けられる。キーデータとエントリアドレスの対応関係は、確認メモリマット104に記憶することとしてもよいし、他のメモリに記憶することもできる。図8の左上には、エントリアドレス(EA)とキーデータ(KD)の対応関係が示されている。
まず、エントリアドレス“00”に書き込まれるべきデータとして入力されたキーデータは、“2699”である。このキーデータ“2699”は、バイナリで表わすと“10 10 10 00 10 11”となる。本実施例では、この6分割されたキーデータのバイナリ値を、分割された検索メモリマット102にアクセスするためのアドレスとして用いる。すなわち、制御回路105は、検索メモリマット102を構築する複数の分割メモリ102a〜102fのそれぞれに、キーデータ“2699”のエントリアドレスである“00”を書き込む。このように、本発明の半導体装置では、メモリマットに書き込まれるデータが通常のCAMとは逆転した形になっている。
図8(a)に示されるように、キーデータ“2699”は、6分割されて、“10”“10”“10”“00”“10”“11”として表わされている。制御回路105は、これらの分割キーデータをアドレスとして分割された分割メモリ102a〜102fを備えた検索メモリマット102に対して、エントリアドレス“00”を書き込む。具体的に説明すると、制御回路105は、6分割された入力データ“2699”のうち、1番目の分割キーデータ“10”をアドレスとして、1番目の分割メモリ102a内の番地データ“10”で特定される場所にアクセスし、この場所に、入力データ“2699”に対応するエントリアドレス“00”を書き込む。続いて、制御回路105は、入力データ“2699”の2番目の分割キーデータ“10”については、この“10”をアドレスとして、2番目の分割メモリ102b内の番地データ“10”で特定される場所にアクセスし、この場所に、エントリアドレス“00”を書き込む。また、制御回路105は、3番目の分割キーデータ“10”をアドレスとして、3番目の分割メモリ102c内の番地データ“10”で特定される場所にアクセスし、この場所にエントリアドレス“00”を書き込む。また、制御回路105は、4番目の分割キーデータ“00”をアドレスとして、4番目の分割メモリ102d内の番地データ“00”で特定される場所にアクセスし、この場所にエントリアドレス“00”を書き込む。また、制御回路105は、5番目の分割キーデータ“10”をアドレスとして、5番目の分割メモリ102e内の番地データ“10”で特定される場所にアクセスし、この場所にエントリアドレス“00”を書き込む。同様に、制御回路105は、6番目の分割キーデータ“11”をアドレスとして、6番目の分割メモリ102f内の番地データ“11”で特定される場所にアクセスし、この場所にエントリアドレス“00”を書き込む。
これにより、キーデータ“2699”で指定された検索メモリマット102の分割メモリに対して、入力されたキーデータ“2699”に対応するエントリアドレス“00”が書き込まれたことになる。このように、キーデータ“2699”は、“10 10 10 00 10 11”で表わされるので、それを2ビットずつに6分割する。そして、分割したキーデータのそれぞれを、6分割された検索メモリマットのy軸に割り当てられた「エントリアドレスを登録する場所」にアクセスするためのアドレスとして用いる。
上記のようにして、入力されたキーデータに対応するエントリアドレスを検索メモリマットに書き込んでおく。そして、検索メモリマットを検索するときには、キーデータを書き込んだときと同様の手順で、検索対象としてのキーデータを複数に分割する。例えば、検索対象としてのキーデータが、“2699”である場合、このバイナリデータを“10 10 10 00 10 11”の6つに分割する。これにより、1番目の分割キーデータ“10”をアドレスとして検索メモリマット102のデータを読み出すと、エントリアドレスの“00”が読み出される。続いて、2番目の“10”をアドレスとして検索メモリマット102のデータを読み出すと、エントリアドレスの“00”が読み出される。以下同様に、3番目〜6番目のデータ“10”“00”“10”“11”をそれぞれアドレスとして検索メモリマット102をアクセスすると、上記と同様に検索メモリマット102からエントリアドレスの“00”が読み出される。なお、図8は分割メモリ102a〜102hの各々から、エントリアドレスが読み出された状態を示している。
すなわち、分割されたキーデータのいずれか一つで、エントリアドレス“00”を検索することが可能となる。なお、この意味において、本実施例で備えている確認メモリマット104は、あくまでも確認用であり、原理的には必須の構成要件ではない。
上記のように検索メモリマット102を複数の分割メモリによって構成するとともに、入力用及び検索用のキーデータを分割する処理を行うことで、従来のCAMの問題点を解消できる。つまり、本発明によれば、従来のCAMのように全ビットを活性にする必要がなくなるため、大電力を消費するという欠点を解消することができる。本発明の実施例においては、検索結果を出力するのに、y軸のエントリ数分の一(1/エントリ数)の活性ビットで検索が可能となる。、このように、本発明は、y軸のエントリ数分の一(1/エントリ数)のエントリアドレスのみ動作させることが可能となる。従って、本発明では、従来のCAMの出力部で使用していた大面積を消費するナンド回路のツリーで構成される出力エンコーダが不要になる。
続いて、図8に戻り説明を続ける。上記と同様にして、次の入力データであるキーデータ“3779”の入力時の動作を説明する。この、キーデータ“3779”は、エントリアドレス“01”に書き込まれるべきデータとして入力されるキーデータである。キーデータ“3779”をバイナリで表わすと“11 10 11 00 00 11”となる。このバイナリ値をアドレスとして、6分割された検索メモリマット102のy軸の記憶領域にアクセスし、検索メモリマット102に対して、キーデータ“3779”に対応するエントリアドレス“01”を書き込む。
図8(b)では、キーデータ“3779”が6分割されて、“11”“10”“11”“00”“00”“11”として表わされている。制御回路105は、これらの分割キーデータをアドレスとして、複数の分割メモリ102a〜102fを備えた検索メモリマット102に対して、エントリアドレス“01”を書き込む。つまり、制御回路105は、入力キーデータ“3779”の分割キーデータのうち、最初の分割キーデータ“11”をアドレスとして、最初の分割メモリ102a内の番地データ“11”で特定される場所にアクセスし、この場所にキーデータ“3779”に対応するエントリアドレス“01”を書き込む。続いて、制御回路105は、2番目の分割キーデータ“10”をアドレスとして、2番目の分割メモリ102b内の番地データ“10”で特定される場所にアクセスし、この場所にエントリアドレス“01”を書き込む。ただし、2番目の分割メモリ102bにエントリアドレスを書き込む際、この2番目の分割メモリ102bの場所には、既に、キーデータ“2699”のエントリアドレス“00”が書き込まれている。このように、検索メモリマット102にエントリアドレスを書き込もうとする際に、衝突という現象が発生する場合もある。この衝突現象が発生したアドレスは、図8(b)では、塗りつぶされた部分として表示されている。この塗りつぶされた部分のキーデータは、この後に行われる検索処理では、「配慮しない(don’t care)」ものとして処理される。
また、本発明では、上記の衝突が起こったことを記録するために、衝突フラグを設けることが好ましい。衝突フラグは、例えば2ビットのデータとすることができる。例えば、衝突フラグを2ビットとした場合、“00”の時は未書込みの初期状態を示し、“01”は書込み済み状態を示し、“10”は衝突状態を示し、“11”はその他の状態を示すことができる。
図8(b)では、続けて、3番目の分割キーデータ“11”をアドレスとして、3番目の分割メモリ102c内の番地データ“10”で特定される場所にアクセスし、この場所にエントリアドレス“01”を書き込む。同様に、4番目から6番目の分割キーデータ“00”“00”“11”についても、これらをアドレスとして、それぞれ3番目から6番目の分割メモリ102d〜102fにエントリアドレス“01”を書き込む。ただし、4番目と6番目のアドレスについては、既に他のキーデータ“2699”の書き込みによって使用されているため、衝突フラグが書き込まれる。これにより、4番目と6番目のアドレスについては、この後で行なわれる検索処理では「配慮しない(don’t care)」として処理される。
以上の処理により、キーデータ“3799”で指定された検索メモリマット102に、エントリアドレス“01”が書き込まれたことになる。ここまでで、2つのキーデータ“2699”“3799”を検索メモリマット102に書き込む処理が完了する。ただし、キーデータ“3799”については、2、4、6番目の分割キーデータの書き込み動作で衝突が発生し、後の検索処理で「配慮しない(don’t care)」処理を行なうことになる。このため、キーデータ“3799”に着目すると、6つの分割キーデータのうち、3つが検索対象として扱われないため、検索対象が6個から3個に減少したことになる。
制御回路105は、同様にして、3番目及び4番目のキーデータ“1859”及び“1440”について、上記したキーデータと同様の手順で、対応するエントリアドレス“10”及び“11”を検索メモリマット102に書き込む。図8(c)に示されるように、キーデータ“1859”の書き込み処理では、新たに5番目の分割メモリ102eでアドレス衝突が生じている。また、図8(d)に示されるように、キーデータ“1440”の書き込み処理、新たに1番目と3番目の分割メモリ102a、102cでアドレス衝突が生じている。
図8(e)には、確認メモリマット(SRAM)104の書き込み状態を示している。この確認メモリマット104のメモリアドレス“00”には、第1の入力データであるキーデータ“2699”のバイナリデータ“10 10 10 00 10 11”が分割されて順次書き込まれている。また、確認メモリマット104のメモリアドレス“01”には、第2の入力データであるキーデータ“3779”のバイナリデータ“11 10 11 00 00 11”が順次書き込まれている。以下同様に、確認メモリマット104のメモリアドレス“10”には、第3の入力データであるキーデータ“1859”のバイナリデータが順次書き込まれ、メモリアドレス“11”には、第4の入力データであるキーデータ
“1440”のバイナリデータが順次書き込まれている。
以上の処理が、検索メモリマット102に入力されたキーデータに対応するエントリアドレスを書き込む基本的な処理となる。
続いて、以下では、入力されたキーデータに基づいて検索メモリマット102内を検索し、このキーデータに対応するエントリアドレスを読み出す処理について説明する。
図9は、本発明の実施例のSRAM−CAMの検索・読出動作の例を示した図である。図9は、書込処理時にエントリアドレスの衝突が生じた場合、つまり、図8に示した濃く網掛けされたエントリアドレスを「配慮しない(don’t care)」とした場合であっても、検索入力データに基づいて正しく検索可能であることを示している。
図9(a)は、検索データとして、キーデータ“2699”が入力された場合を示している。入力されたキーデータ“2699”は、バイナリデータで“10 10 10 00 10 11”と表わされる。また、このキーデータ“2699”のバイナリデータは、“10”“10”“10”“00”“10”“11”のように6分割される。そして、これら複数の分割キーデータは、6分割された検索メモリマット102のy軸に割り当てられた「エントリアドレスを登録する場所」にアクセスするためのアドレスとして用いる。
まず、6つの分割キーデータのうち、最初の分割キーデータ“10”をアドレスとして、検索メモリマット102内の番地データ“10”で特定される場所にアクセスすると、最初の分割メモリ10aのうちの“10”に対応した場所(アドレス)から、エントリアドレス“00”が読み出される。同様に、2番目の分割キーデータ“10”をアドレスとして、2番目の分割メモリ102b内の番地データ“10”で特定される場所にアクセスする。しかしながら、この2番目の分割メモリ102bの場所(アドレス)には、図8(b)の第2の入力データ“3799”の書き込み時に、アドレスの衝突が生じている。このため、制御回路は、2番目の分割キーデータ“10”に基づいた検索処理では、検索結果を「配慮しない(don’t care)」ものとして処理を行う。よって、検索メモリマット102の2番目の分割メモリ102bからの読み出しデータは、検索の対象外とされる。「配慮しない(don’t care)」処理を行うか否かは、メモリからデータを一旦読み出し、その読み出したデータに付与されているフラグ部分で判断すればよい。このように、厳密に言うと、制御回路105は、検索の対象外としたデータについてはエントリアドレスの出力は行なわないものの、メモリ回路からの読み出し動作は行う。
3番目の分割キーデータ“10”、4番目の分割キーデータ“00”、及び6番目の分割キーデータ“11”をアドレスとした検索メモリマット102へのアクセスについても、同様に、「配慮しない(don’t care)」処理によって、読み出されたデータが検索の対象外とされる。他方、5番目の分割キーデータ“10”をアドレスとして、検索メモリマット102の5番目の分割メモリ102f内の番地データ“10”で特定される場所にアクセスすると、衝突フラグが発生していないため、エントリアドレス“00”を読み出すことができる。図9(a)の右側の図は、キーデータ“2699”に基づいて、検索メモリマット102から読み出されたエントリアドレス(EA)を並べて表示したものである。
図9(a)で示されるように、検索データとしてのキーデータ“2699”に基づいて検索メモリマット102から読み出されるエントリアドレスのうち、実際に検索に使用されるエントリアドレスは、1番目の分割メモリ105aと5番目の分割メモリ105eに書き込まれていたエントリアドレス“00”ということになる。
ここで、エントリアドレス“00”に基づいて、図8(e)に示す確認メモリマット104からキーデータの値を読み出すと、このエントリアドレス“00”に対応するキーデータは、“10 10 10 00 10 11”であることがわかる。この、“10 10 10 00 10 11”は、十進法表すと“2699”である。これにより、読出処理で読み出されたエントリアドレス“00”が、検索データとして入力されたキーデータ“2699”のものであることが分かる。つまり、本発明では、「配慮しない(don’t care)」処理を適用しながらも、検索メモリマット102からエントリアドレスを読み出し、このエントリアドレスを用いて、確認メモリマット104にアクセスする。そこで、本発明は、確認メモリマット104からの出力データであるキーデータと、検索対象として入力されたキーデータを比較し、一致することを確認して、このエントリアドレスを出力する。
図9(b)は、検索入力データのキーデータとして、“3779”が入力された場合を示している。入力されたキーデータ“3779”は、バイナリデータで“11 10 11 00 00 11”で表わされる。このバイナリデータは、“11”“10”“11”“00”“00”“11”のように6分割され、検索メモリマット102のy軸に割り当てられた「エントリアドレスを登録する場所」にアクセスするためのアドレスとしてそれぞれ用いられる。最初の分割キーデータ“11”をアドレスとして、最初の分割メモリ102aからデータを読み出すと、エントリアドレス“01”が読み出される。2番目の分割キーデータ“10”をアドレスとして、2番目の分割メモリ102bからデータを読み出すが、このデータは、入力データ“3779”の入力時にアドレス衝突が生じているため、「配慮しない(don’t care)」ものとして、検索の対象外となる。
3番目の分割キーデータ“11”をアドレスとして検索メモリマット102の分割メモリ102cからデータを読み出すと、エントリアドレス“01”が読み出される。また、4番目の分割キーデータ“00”、5番目の分割キーデータ“00”、6番目の分割キーデータ“11”をそれぞれアドレスとした検索メモリマット102へのアクセスは、衝突が生じているために、「配慮しない(don’t care)」処理によって、検索の対象外となる。
図9(b)に示されるように、検索データとしてのキーデータ“3779”に基づいて検索メモリマット102から読み出される値は、最初の分割メモリ102a3番目の分割メモリ102cに書き込まれていたエントリアドレス“01”ということになる。
ここで、エントリアドレス“01”により、図8(e)に示した確認メモリマット104に格納されているキーデータの値を読み出すと、“11 10 11 00 00 11”となり、入力データとしてキーデータ“3779”と一致することが分かる。つまり、「配慮しない(don’t care)」処理を適用しつつも、検索メモリマット102から読み出したデータから読み出されるエントリアドレスを用いて、確認メモリマット104にアクセスする。そして、制御回路105は、確認メモリマット104からの出力データとしてのキーデータと、検索対象として入力されたキーデータと比較し、一致することを確認した上で出力する。
次に、図9(c)には、検索メモリマット102に書き込まれていないキーデータ“1504”が、検索対象のキーデータとして入力された場合の処理が示されている。
まず、検索データとしてキーデータ“1504”が入力されると、“1504”のバイナリデータは、“01”“01”“11”“10”“00”“00”のように6分割される。この6つの分割キーデータは、それぞれ、検索メモリマット102のy軸に割り当てられた「エントリアドレスを登録する場所」にアクセスするためのアドレスとして用いられる。最初の分割キーデータ“01”をアドレスとして、最初の分割メモリ102aからデータを読み出すと、書込処理時にアドレス衝突しているため、「配慮しない(don’t care)」処理が行なわれる。次いで、2番目の分割キーデータ“01”をアドレスとして、2番目の分割メモリ102bからデータを読み出すと、エントリアドレス“11”が読み出される。次に、3番目の分割キーデータ“11”をアドレスとして、3番目の分割メモリ102cからデータを読み出すと、エントリアドレス“01”が読み出される。しかし、ここで読み出されたエントリアドレス“01”は、先に読み出されたエントリアドレス“11”と異なる値となっている。すなわち、キーデータ“1504”に基づいて読み出されたエントリアドレスには、“11”と“01”において不一致が発生している。そうすると、検索メモリマット102には、未だキーデータ“1504”が記録されていないことがわかる。従って、制御回路10は、3番目の分割キーデータを処理した段階で、「一致データ無し」と判定することができる。
このように、検索メモリマット102から読み出されたエントリアドレスに不一致が発生した場合は、上述した確認メモリマット104を用いた確認処理が不要となる。なお、本実施例には示していないが、同じ分割メモリに複数のアドレス衝突があり「配慮しない(don’t care)」処理が行われる場合、メモリから読み出されたエントリアドレスの全てが一致していても、検索データとして入力されたキーデータと、読み出し処理で出力されたエントリアドレスに対応するキーデータとが、一致しないという問題が発生することもあり得る。ただし、このような問題は、確認メモリマット104を参照することで解消できる。つまり、検索メモリマット102から読み出されたエントリアドレスに基いて、確認メモリマット104にアクセスし、検索対象としてのキーデータと、確認メモリマット104から出力されたキーデータとが一致しない場合には、「一致データ無し」と判定することができる。
図10は、エントリ数分だけキーデータを書き込んだ時の検索不一致(NG)発生数を示したグラフである。つまり、図10のグラフでは、「配慮しない(don’t care)」という処理が、検索メモリマット102内に複数発生し、誤動作する確率を乱数表からシミュレーションした例を示している。図10(a)は、キーデータが4ビット以上で、検索メモリマットのエントリ数が4の場合を示している。また、図10(b)は、キーデータが8ビット以上で、検索メモリマットのエントリ数が8の場合を示している。図10(a)に示されたシミュレーション結果を見ると、キーデータ長を8ビット以上に設定することで、検索不一致(NG)の発生数が限りなくゼロに近づくことがわかる。同様に、図10(b)に示されたシミュレーション結果を見ると、キーデータ長を16ビット以上に設定することで、検索不一致(NG)の発生数が限りなくゼロに近づくことがわかる。つまり、これらのシミュレーション結果をみると、キーデータのビット数を、検索メモリマットのエントリ数の2倍以上とすることで、半導体装置が誤動作して検索不一致(NG)を発生させることを、ほぼ確実に防止することができることがわかる。よって、キーデータのビット数は、検索メモリマットのエントリ数の2倍以上であることが好ましい。
上述したように、本発明の半導体装置は、検索メモリマット102を構成する複数の分割メモリに対して、入力データを分割した分割キーデータをアドレスにして、その入力データのエントリアドレスを書き込む。分割キーデータは入力データを複数に分割したものであるため、これらの分割キーデータを検索メモリマット102に書き込む際には、衝突状態が発生する可能性がある。
このような複数の分割メモリへのエントリアドレスの書き込み操作を「第1操作」とする。なお、第1操作の処理工程の例は、図2にも示されている。
以上の第1操作は、検索メモリマット内のスイッチング操作または検索処理を行うための基本情報データを作成する操作となる。
この第1操作では、同じアドレスに複数のエントリアドレスが書き込まれる場合であっても、衝突フラグを設定して、そのまま入力を進める。そして、検索メモリマット内を検索する際に、衝突フラグが設定されているアドレスについては、「配慮しない(don’t care)」として処理する。このように、本発明では、分割メモリにエントリアドレスを書き込むときに発生するアドレス衝突の問題を、検索動作を行うときに解決している。
ここで、本実施例で説明したように、入力されるキーデータ(KD)のビット長がエントリアドレス(EA)の数に対して十分大きい場合、例えば2倍以上ある場合について考える。
例えば、キーデータのビット長が、エントリアドレスの大きさに対して小さい場合は、キーデータを分割するときに、分割部分の最初のデータの一部が次の分割キーデータに重なるようにキーデータを分割することにより、分割部分のデータの総和を元のキーデータビット長より大きくすることができる。このキーデータの拡張により、キーデータのビット長が、エントリアドレスの大きさに対して小さい場合でもキーデータのビット長を、エントリアドレスの大きさに対して十分大きくすることができる。ただし、キーデータの拡張は、分割キーデータ同士の完全な重なりが生じないようにする必要がある。
また、後に説明する検索動作では、検索結果として出力されるデータが正しいものであることを確認できるようにすることが、データの信頼度を確保するために重要である。このために、本発明の実施例では、メモリ空間の一部を確認メモリマット104に割り当てる。この確認メモリマット104は、y軸方向にエントリアドレス(EA)を記憶する領域を有し、x軸方向に、エントリアドレスに対応付けてキーデータ(KD)の記憶する領域を有している。そして、本発明の実施例では、入力されたキーデータを検索メモリマット102に書き込むと同時に、この確認メモリマット104にも、入力されたキーデータとエントリアドレスの書き込みを行う。このようにして、確認メモリマット104に、確認用の基本情報データを用意する。このような確認メモリマット104に対するキーデータの書込操作を、「第2操作」とする。なお、第1操作の処理工程の例は、図2にも示されている。
その後、制御回路105は、ユーザからの要求に応じて、入力されたキーデータに基づいて検索メモリマット102内を検索し、このキーデータに対応するエントリアドレスを読み出す処理を行う。エントリアドレスの読出処理では、制御回路105が、検索データとして入力されたキーデータを、上述したキーデータ(KD)の分割方法に従って分割し、分割キーデータで検索メモリマットを活性化させて、該当分割キーデータに基づいて読みだしたエントリアドレス(EA)を出力する。この検索処理を、「第3操作」とする。ただし、上述した書込処理(第1操作)でアドレスの衝突を記録したエントリアドレスについては、読出処理において「配慮しない(don’t care)」ものとして扱い、エントリアドレスは出力しない。
また、制御回路105は、複数の分割キーデータに基づいて1つ以上のエントリアドレスを読み出し、その読み出したエントリアドレスの全てが一致したときには、そのエントリアドレスを使用して、確認用基本情報データが格納された確認メモリマット104を参照する。すなわち、制御回路105は、検索処理で読み出したエントリアドレス、及び検索対象として入力されたキーデータを、確認メモリマット104のy軸に記憶されているエントリアドレス、及びx軸に記憶されているキーデータと比較する。そして、制御回路105は、エントリアドレスとキーデータが一致したことを確認して、一つのエントリアドレスを出力する。このような確認メモリマット104を参照する操作を、「第4操作」とする。なお、第4操作の処理工程の例は、図4にも示されている。なお、上記第3操作及び第3操作で出力されるエントリアドレスが、スイッチ接続または検索のアドレスとなる。
以上、本発明は、第1操作〜第4操作までの4つの操作を可能とするメモリ回路構成、すなわちこれらの論理方式構成を、図6に示したSRAM−CAMのメモリ回路で実現する。
次に、本発明の実施例として、「配慮しない(don’t care)」という処理が複数回発生しても、半導体装置が誤動作する確率を減らす他の方法について説明する。
まず最初にこの実施例の概要を説明すると、この実施例では、検索メモリマット102として、m個(mは2以上の自然数)の定義ブロックを用意する。また、検索メモリマット102のエントリ数をある任意の大きさに定めたときに、1つのブロックに対して、エントリアドレスを分割し、下位からエントリ数の1/mまで入力することを決める。そして、1つのブロックに対しては、一定数以上のエントリアドレスの入力を打ち切り、別のメモリブロックに移ってその操作を継続し、大きな基本情報データを複数のメモリブロックに格納する。この方法においては、キーデータ長がエントリ数の1/8ビット以上あることを条件とする。残り1/mより上位のエントリアドレスについても、下位アドレスから順番に最初のメモリブロックと同様に入力する。本実施例においては、各メモリブロックの間の操作の切り替え等を、セレクタによりこれを制御することができる。これにより、上位下位検索アドレスが合成され、前記確認用検索マットのアドレス軸としてのy軸に入力されて、実施例1で説明した第1から第4操作を行なうことができる。
図11は、検索メモリマット102のエントリ数を256とした場合の実施例を示す。
図11に示されるように、検索メモリマット102は、2つのメモリマットで構成されている。ここで、y軸方向のエントリの大きさを256としたときに、0から127エントリまでを、第1の検索メモリマット102に入力し、128から255エントリまでを第2の検索メモリマット102に入力する。これにより、ほぼ完全に誤動作発生の確率を実用レベル以下に維持することが可能となる。この検索メモリマット102を構成する2つのメモリマット間の切り替えは、ヘッダに付加されている第1フラグF1を使用して行えばよい。実際の検索メモリマット102には、フラグとして2ビットが必要なので、256エントリ×32ビットキーデータの場合、検索メモリマットとして256ワード×10ビットのSRAMが8個と、確認メモリマット104として256ワード×32ビットのSRAMが1個で構成することになる。
以上説明したように、検索メモリマット102への書込み可能なエントリ数を1/m(mは2以上の自然数)に制限することで誤動作発生の確率を減らすことができる。図12には、mが2の場合、即ち、メモリに書き込むエントリ数を1/2に制限した場合の誤動作発生の確率のシミュレーション結果が示されている。図12に示されるように、エントリ幅(エントリ数)が256ワード(8ビット)であっても、確率的にはキーデータ長が32ビットで誤動作がなくなる。なお、図12に示したシミュレーションでは、CAMの書き込みデータとしてEXCELの乱数関数を適用した。
以上は、誤動作を防ぐ方法の例について説明したが、本発明の他の実施例としては、未書き込み領域をなくして、検索メモリマット102に対して効率的にエントリアドレスを登録する方法もある。
書き込むことができるエントリアドレスである登録エントリアドレスの数は、SRAM単位で見ると、登録エントリアドレスが全てユニークである場合に限り、未書き込み領域がなくなる。ユニークとは、nワード×nビット構成のSRAMを想定したとき、SRAMのアドレスとSRAMの内容が同じ場合と、この状態でSRAMの内容またはアドレスを任意に入れ替えた場合の2つである。
しかし、図13に示すように、複数個所でSRAMの内容、またはアドレスの重なりが生じると、その分、未書き込み領域が増える。すなわち、SRAMの内容が同じ場合、例えば「00…00」番地のデータが「00…01」番地のデータと同じ場合、「00…00」番地の内容が右図のように未書き込み領域になる。つまり、ユニークでないデータが増えると未書き込み領域が増える(登録しやすくなる)という結果になる。これを利用して、書き込み数を増やすことができる。これを説明している理由は、たとえばCAMの検索の場合、ヘッダ等のように同じデータを何度も使用する傾向がある。この結果、個々のSRAMで見ると未書込み領域が多くなる傾向があるためである。
ここで、本実施例をその効果の面から纏める。
まず、SRAMを使用しているので大規模化が容易で一般的なCAMに比べエントリ数分の一(1/エントリ数)の大幅な低電力化ができる。
次に、書込み動作が終了した後、エントリアドレスを書き込んだ分割メモリ(SRAM)が1個でも残れば登録したエントリアドレスを正常に検索できる。
分割メモリ(SRAM)の中に検索対象外のアドレスが複数個存在しても、確認メモリマット(SRAM)を用いることで正しい検索が可能になる。本実施例では、SRAMを用いて説明したが、確認メモリマットの内容は、入力データをアドレスに従って書き込めるデバイスであれば良く、レジスタ等で実現することもできる。
本実施例によれば、キーデータのエントリ登録時にアドレス衝突が生じたとき、「配慮しない(don’t care)」処理を行なうことによって、検索の対象外となる検索対象外を導入したことにより未書込み領域が増加した。この未書き込み領域を利用することでエントリアドレスを拡張することが可能である。
また、本実施例によれば、キーデータのエントリ登録時に、検索メモリマット102の全分割メモリ(SRAM)が検索対象外となる場合はキーデータのエントリ登録ができないが、この状態はCAMを構成するSRAMのエリアがオーバーフローしていることを表しており、対応策としては検索メモリマットを複数個準備し、この状態が発生したら切り替えることで解決できる。
次に、実施例3では、実施例1及び実施例2で説明した半導体装置について、さらなる機能拡張を行う手順について説明する。
実施例1や実施例2においては、誤動作防止のため、エントリアドレスの書き込み処理を、分割メモリのアドレスの衝突により誤動作しない領域に制限するようにしている。これに加え、入力可能なエントリアドレスの数を増やすことによっても、さらに誤動作を防止することが可能となる。
例えば、図14に示されるように、エントリアドレス(EA)を2ビット(図14(a))から、3ビット(図14(b))に増やすこともできる。これにより、確認メモリマット104のエントリアドレスの数を増やすことができる。図14に示されるように、エントリアドレスを3ビットする場合には、拡張フラグ(FRG)を設定して、通常のエントリアドレス(通常アドレス)と、拡張したエントリアドレス(拡張アドレス)を識別するようにすればよい。例えば、図14の例では、エントリアドレスの3ビット目が“0”である場合には、通常アドレスであることを示し、エントリアドレスの3ビット目が“1”である場合には、拡張アドレスであることを示している。
図15及び図16は、エントリアドレス(EA)を3ビットとした場合において、データを書き込む処理の例と、データを検索する処理の例を示している。
図15は、書き込み動作の例を示したものである。図15に示されるように、エントリアドレス(EA)を3ビットで表わすことで、エントリアドレス(EA)の数が8個となる。例えば、図15の例では、図8に示した4つのキーデータ“2699”“3779”“1859”“1440”の他に、5つめのキーデータ“408”を、実施例1で説明した第1操作の手順に従って、検索メモリマット1002と確認メモリマット1004のそれぞれに書き込むこととしている。
キーデータ“408”のバイナリデータは“00 01 10 01 10 00”であるため、検索メモリマット1002に対しては、これらをアドレスとして書き込みを行なう。すると、最初の分割キーデータ“00”については、メモリアドレス“00”に対して、3ビットのエントリアドレス“001”を書き込むことになる。図15では、“00”と記載されているが、実際には、“001”を書き込む。
エントリアドレス(EA)が2ビットから3ビットなったことにより、例えば、増加した1ビットが“0”のときには、エントリアドレスが2ビットのときと同じ処理を行い、増加した1ビットが“1”のときは、拡張アドレスであることの識別に使用するものとする。具体的には、キーデータ“408”の2番目の分割キーデータ“01”をアドレスとすると、既に書き込まれている“1440”との間でアドレス衝突を起すため(図8(d)参照)「配慮しない(don’t care)」処理を行う。キーデータ“408”の3番目の分割キーデータ“10”をアドレスとすると、既にこのアドレスは“1440”の書き込み処理の際に「配慮しない(don’t care)」処理が行なわれているため、書き込みを行なわず処理を終了する。同様に4番目の分割キーデータ“01”では、メモリアドレスに“001”を書き込む。図15では、“00”と記載されているが、実際には“001”を書き込む。5、6番目の分割キーデータの“10”“00”では、それぞれのメモリアドレスで「配慮しない(don’t care)」処理を行なう。
検索メモリマット1002に対しては、エントリアドレスの3ビットのうち、上位2ビットを用いて書き込み動作を行なうことで、実施例1と同様に書き込み動作を行うことができる。
一方、確認メモリマット1004に対しては、3ビットによりエントリ数が2倍に増えていることから、3ビットの下位1ビットが図15のように増える。つまり、エントリアドレス“001”に対して、入力データ“00 01 10 01 10 00”を書き込む。
次に、図16において、図15で書き込まれた拡張されたエントリアドレスを用いた検索例を示す。
図16(a)に示されるように、検索データとしてキーデータ“2699”が入力された場合、分割された検索メモリマット1004の最初の分割メモリ(SRAM)から“000”が読み出される。2番目から6番目の分割キーデータ対応したメモリアドレスに対しては、「配慮しない(don’t care)」処理が行なわれているため、読み出されたデータは検索対象外になる。そして、“000”をアドレスとして確認メモリマット1004にアクセスすると“10 10 10 00 10 11”が読み出される。このように、検索メモリマット102の確認結果が、入力データ“2699”と一致することが分かる。
次に、図16(b)に示されるように、検索データとしてキーデータ“408”が入力された場合、分割された検索メモリマット1002の1番目と4番目から“001”のエントリアドレスが読み出され、残りの検索メモリマット1002からは、アクセスされたデータが何れも「配慮しない(don’t care)」処理が行なわれているため、読み出されたデータは検索対象外になる。読み出されたエントリアドレス“001”で確認メモリマット1004にアクセスすると、“00 01 10 01 10 00”と入力データ“408”と一致することが分かる。
次に、キーワード検索の基本となるマスク操作の方法について、図17を用いて説明する。図17(a)は、キーデータ“1440”で、分割された検索メモリマット1002の4番目から6番目をマスクして検索した様子を示している。この場合、図17(a)の状態において、検索メモリマット1002からは“11”が出力され、確認メモリマット1004にメモリアドレス“11”でアクセスすると、検索メモリマット1002からの出力と入力データとしてのキーデータとが一致することが分かる。
一方、図17(b)は、入力データ“1440”に対して、2番目、4番目、及び6番目のメモリマットをマスクして検索した例を示している。この場合、1番目、3番目、及び5番目のエントリが「配慮しない(don’t care)」とされており、2番目、4番目、及び6番目はマスクされているため、検索メモリマット1002の出力はなくなってしまう。つまり、この場合では、検索データなしと判断される。
次に、本発明の実施例におけるマルチヒットの定義、及び検索エンジンへの拡張について説明する。
実施例1や実施例2と同様に、ヘッダに第1コントロールビットとしての第1フラグF1のビットと、第2、第3、第4・・・フラグビットとしての関連アドレスRFのツリーを表すビットを追加して、第1操作から第3操作を完了する。第1フラグF1のビットが活性でないときは、実施例1や実施例2と同様に操作を行う単一ヒットモードとなる。他方、第1フラグF1が活性である場合は、マルチヒットへの対応とし、図18に示すように、要求されたキーデータを第3操作で処理し、エントリアドレスを出力した後に、これをバッファメモリBSRAMに一時貯蔵する。この場合第4操作を中止して、第2クロックで、第3操作により出力されたエントリアドレスの関連アドレスツリーの上位アドレスをキャッシュメモリマットでヒットし、データを抽出して、そのアドレスと共に一時貯蔵をする。次のクロックで、関連アドレスツリーの第2番目にあるアドレスを、前記キャッシュメモリマットで第2該当データをヒットし、該当アドレスとデータを抽出する。これを関連フラグツリーにおける優先順位下位まで続ける。第1関連アドレスに戻ったときに、フラグが不活性になる操作を行う。これはフィードバックループであるため、この繰り返しの間(フラグの活性な間)は新規検索を中止する。新しい第4操作で一時貯蔵し、関連付けた複数のアドレスを出力する。必要に応じてデータの付加を行う。
これにより、検索エンジンの重要な役目である複数の類似検索が可能となる。図6において、フラグF1が存在する場合、先ほどの入力エントリ数の1/2入力もフラグが必要であったが、ビット数の追加を行い、フラグ機能を追加してデータに関連付けてフラグRFを用意する。このフラグは、いくつかに分類し、ツリー検索が可能なフラグとなる。このセット情報が近接キャッシュメモリマットに書き込みされているため、サブルーチン操作を開始し、複数の検索アドレスおよびデータを出力する。
CAMをマルチヒットとして利用できるようにするには、複数のキーデータを1つのエントリに対応させる必要がある。現状では、1つのエントリアドレスに複数のキーデータを対応させようとすると、検索メモリマット102の出力が全て検索無視状態になり、確認メモリマット104の読出しができなくなる。この問題を次の方法により解決する。
複数のキーデータを1つのエントリアドレスに対応させる場合は、フラグを“11”に設定する。“11”フラグのときは、確認メモリマット104を使用せずに、検索無視の部分を除いて、読み出したエントリアドレスの全てが一致することを確認したら、そのデータをエントリアドレスと判定する。
これは、エントリアドレスでアクセスするキャッシュメモリのデータの一部のデータで、検索の動作を制御できるようになることを意味する。
それを説明した図が、図19である。図19は、一般的なCAMのマルチヒットとの違いを示している。一般的なCAMのマルチヒットでは、図19(a)に示すように、一つのキーデータに対して複数のエントリアドレスを出力する。一方、本実施例のSRAM−CAMのマルチヒットでは、図19(b)に示すように、複数のキーデータの入力に対し、一つのエントリアドレスを出力する。
本発明のSRAM−CAMにおいて、一般的なCAMと類似なマルチヒットを可能とする方法を図20に記述する。一般的なCAMでは、図20(a)に示すように、一つのキーデータ“A”に対して、複数のエントリアドレス“m”“n”“p”がヒットしている。これに対し、本実施例のSRAM−CAMでは、図20(b)に示すように、一つのキーデータ“A”に対して、エントリアドレス“m”“n”“p”が対応している。データ0の部分は、フラグとして、マルチヒットがonの場合に0若しくは1のデータを用い、マルチヒットがoffの場合に0若しくは1のデータを用いる。データ1の部分が0になるまでフラグを切替え、0となったところで、キーデータの入力停止を解除する。
このようにすることで、エントリアドレスでアクセスするSRAMを複数個設け、データ0で複数のSRAMを制御することができる。また、マルチポートのSRAMを使用することでマルチヒットデータの出力を高速化させることができる。
マルチヒットのクロックタイミングを示すと図21のようになる。システム動作に対してSRAMの動作に余裕がある場合、SRAMを高速化させてマルチポート的な動作をさせることができる。この図21は、4ポート動作の例を示している。システムクロック、RAM0クロック、RAM1クロック、RAM2クロック、RAM3クロックは、4倍速クロックにより、カウンターと簡単な論理回路で容易に生成可能である。なお、システム出力をRAM3クロックのインバート信号でラッチすると、システム出力と同じタイミングになる。また、通常の動作は、システムクロックとRAM0クロックで動作させる。マルチヒットのときは、RAM0〜RAM3のOR信号(4倍速クロック)でエントリ先のSRAMを動作させ、SRAMのラッチ出力をRAM3クロックのインバート信号でラッチすると、システム出力と同一タイミングの4つの並列出力を得ることができる。
以上、スイッチルータに使用可能なCAM的動作と検索エンジンを実現する方式を述べたが、この構成はLUT(Look Up Table)をベースとした機能にも拡張可能である。そのためには、検索メモリマットのマット上下に小規模のスイッチなどの制御回路を付けることとすればよい。
エントリアドレスのメモリへの入力で重なりを「配慮しない(don’t care)」とする実施例1、2に記載の方法の限界は、メモリ列全てが重なる前までである。この問題は、ランダムデータよりデータの隔たりがあると起り易い。そのときの対応策は、エントリアドレスに付随しているフラグの読み替えを行なうことである。
データ書込み時に書き込み済みのアドレスが選択されると、フラグを“10”として書込みを行なわず、検索時に“10”のフラグの入力データ情報を無視する。しかし、データの隔たりにより、検索時に全メモリマットのフラグが“10”になり検索不能に陥ることがある。これを回避するためには、検索時に全入力データのフラグが“10”であってもSRAMの読み出し情報が全て一致する場合に限り、そのデータを検索データとしてのキーデータとして扱うようにする。
論理回路への適用方法は、均質回路群単位(Unified cluster circuit)の概念形成であり、飛躍的応用範囲が広がることとなる。検索メモリマットにLUT制御回路(LUTC)が付加された状態を図22に示す。すなわち、図22は、図6の検索メモリマット102の入力部と論理出力部にスイッチ回路網を付加された構成を示している。
この図22において、CTSは制御信号、LOは論理出力を示す。検索メモリマット102は、LUT(Look Up Table)102’として利用する。四則演算およびシフトの元になる加算器の例を示すと図23のようになる。四則演算に必要な演算ステップがスイッチ回路で構成されている。すなわち、図23は、複数のLTUを持つ場合を示しており、16ビット加算器選択時の例を示している。SWは2つの入力を切り替えるスイッチ回路、b_DVはビット分配回路、Cはコネクタで、オン/オフ設定可能でオフの時に強制的に0にする回路である。なお、LUTの周辺回路を複数のLUTに対応できるようにすることで、ダイナミックに機能が変更できるようになる。また、複数の回路ブロックと協調することで処理効率を上げ、システムの面積を縮小することができる。また、コネクタCの出力を0に設定すると、8ビット加算器×2となる。
さらに、ビット数を示した全体構成例を図24に示す。このように、検索メモリマットが、付加スイッチ回路(LUT制御回路)により論理動作を行うことができるブロックとなる。
図24において、256エントリ×32キーのCAMアレイの単位部分の構成を示すと、次のようになる。すなわち、(1)CAM本体は、マルチヒット機能までのCAM機能を実現するものとなる。(2)LUTは、(a)256ワード×10ビットのSRAMが8個、(b)256ワード×32ビットのSRAMが1個、(c)256ワード×48ビットのSRAMが1個の構成となる。このうち、(b)と(c)は、256ワード×10ビットのSRAMが9個でもよい。このほうが、LUTとしての利用効率が高くなる。なお、このようにすれば、面積効率の良い論理回路あるいはメモリとして使用できる均質回路群単位が実現できる。図24に示したブロックをアレイ状に配置するとプログラマブル論理ブロックあるいはメモリブロックとして使用できる。概念的には、CAM機能+プログラマブル論理ブロックあるいはメモリブロックと等価な形に構成することができる。なお、MBはマルチバスを示す。
このようなメモリと論理が同じマットで構成できる均質ブロック配列は、必要処理ブロックを隣接に配置することが可能になるため、バスネックを解消でき、低消費電力で高速動作を確保できる。また、このような均質ブロック配列により、あらゆるプロセッシングが可能となる。
図25のうち、図25(a)は、スイッチまたは検索の動作を説明しており、図25(b)は、論理演算の手順(図25(b))を説明している。図25では、システム全体を制御する回路からの指示で切り替えることで、あらゆる処理が可能となる構成を示している。なお、図25(b)において、CBは近接接続バスを示し、LIは論理入力を示し、LOは論理出力を示している。また、一点鎖線で囲まれた部分は、サブルーチンを示し、1ループ/クロックである。
本実施例では、必要データ群を隣接して配置するため、隣接と1クロックで並列演算を行うことが可能である。それを図25では、第1クロックというタイミングで表示している。これにより、可能な限り隣接状態で構成することができる。図25(a)は、スイッチまたは検索の場合を示し、図25(b)は、論理演算の場合を示す。すなわち、これを拡張するとブロック単位でも可能であり、システムとしてダイナミックリコンフィグレーション(Dynamic reconfiguration)概念が生まれる(図26)。すなわち4×4ブロック配列の例を示すと図26のようになり、あらゆる構成が瞬時に切り替えられることが容易に判明する。これこそ脳型コンピュータの端緒であることがわかる。
図26は、論理演算機能を加味したSRAM_CAMアレイの構成を示す図である。図26に示した例は、ダイナミックリコンフィギュレーション(Dynamic reconfiguration)メモリプロックを4×4の16個並べた場合の構成例である。図26に示した例では、すべてがSRAMで構成されたブロックであり、さらに機能切り替えレジスタを内蔵することで、どのような形にも瞬時に切り替えることができる。ローカルバス(LB)は、図25の隣接バス(CB)と書かれた内容であり、これにより、隣接間の情報や処理の共有化が1クロックででき、高速化と低消費電力が達成できる。グローバルバス(GB)は、ダイナミックリコンフィギュレーション時のブロックシフト時に主に使用され、ブロックデータ群のバースト転送が主たる役目である。
図26は、SRAM−CAMアレイを示したものであり、GBはグローバルバス、LBはローカルバスである。ブロックA,D,E,H,I,L,M,PはCAM機能ブロック、その他はLUT機能ブロックである。各ブロックは、機能指定をプログラムで設定する。これにより、CAM機能ブロックで検索し、LUT機能ブロックで各種演算処理を実行する。2つのブロックを破線で囲ってある部分は、2ブロックで処理単位ブロックを構成することを意味する。また、グローバルバス(GB)の1組のデータ幅をnバイトとすると、本例では16nバイトの処理が可能となる。また、本実施例のLUT方式は、図27に示すように、四則演算処理が1クロックでできる利点が大きい(図27)。すなわち、一般的な演算方式であるシフトと加算とレジスタラッチのプロセスでの4ビット乗算では、6ステップが必要となるが、本実施例のLUT方式では、x、yアドレス入力でアクセスできる答えを引き出すのみで済むため、1ステップで完了する。なお、図27(a)は2進4ビット乗算器であり、Hは半加算器、Fは全加算器、図中○で示したものはフリップフロップ回路(F/F)である。また、リップルキャリー加算器の加算段数は6段で、レイテンシーは2である。そして、これは、図27(b)に示すLUT方式の乗算器と同一機能である。
さらに、図28に、エントリ数が256より大きい場合の考え方の概念を示す。エントリ数が256より大きく、例えば4kの場合は、256×16=4kから16面の領域“0000”〜“1111”を確保できる。この16面の領域を、メモリ領域、LUT、演算器、及び比較器等に割り当て、ダイナミックに切り替えることで機能向上を図ることができる。エントリアドレスを12ビットとすると、この内の4ビットを領域指定とし、8ビットを領域内アドレスとすることができる。
図29は、入力データのキーデータと、検索データとしてのキーデータを符号化する処理を行う実施例を示している。この[実施例4]は、図2に示したステップS2、及び図4に示したステップS7に関連するものである。
すなわち、実施例4に係る半導体装置は、入力データ及び検索データとしてのキーデータの符号化を行うことで、制御回路に入力される複数のキーデータの偏りを解消することを目的としている。複数のキーデータの偏りを解消することで、検索メモリマットに書き込む際の衝突頻度を低減すると共に、仮に衝突が発生した場合でも適切に検索処理を行うことができるようにすることができる。特に、図29は、SRAM−CAMのメモリ回路構成の一例を示している。
キーデータの偏りとは、例えば、ほとんど同じバイナリデータを有する複数のキーデータが、連続して検索メモリマットに書き込まれる場合などに発生する。例えば、“00 01 10 01 10 00”というキーデータが入力された後に、続けて“00 01 10 01 10 01”というキーデータが入力された場合を想定すると、2つのキーデータは、最後の1ビットしか異なる点がない。本発明の半導体装置は、アドレスの“衝突”が発生する確率を低下させるために、複数のキーデータがある程度ランダム化されて入力されることが好ましい。しかし、上記した例のように、ほとんど同じキーデータが続けて入力されると、アドレスの“衝突”が頻繁に発生することとなる。そこで、本実施例では、入力されるキーデータを符号化させて、人為的に、複数のキーデータのバイナリデータをランダム化させることとしている。
ここで、「符号化」とは、所定の規則(アルゴリズム)に従ってキーデータの分散化を行うことを含む。また、「符号化」には、数式(アルゴリズム)による符号化のみならず、キーデータを表すデータビットの順序を並び替えることを含むものとする。
図29に示されるように、半導体装置は、近接キャッシュメモリマット101、符号化回路106、制御回路105、検索メモリマット102、比較+ラッチ回路103、及び確認用メモリ104を含む。近接キャッシュメモリマット101は、必要でない場合は設ける必要はない。
図29に示したSRAM−CAMでは、元情報であるキーデータ(KD)が、まず最初に符号化回路106に入力される。そして、元情報であるキーデータは、符号化回路106によって、所定のアルゴリズムに従って符号化される。符号化回路106は、所定のアルゴリズムに従い、入力されたキーデータを符号化して、符号化後のキーデータを出力する。符号化回路106により符号化されたキーデータは、制御回路105に入力される。制御回路105は、符号化されたキーデータを、検索メモリマット102を検索するためのアドレス、あるいは検索メモリマット102に新たに書き込むためのアドレスとして用いる。
つまり、制御回路105は、符号化後のキーデータを、[実施例1]などで説明したキーデータと全く同じように扱うことができる。すなわち、制御回路105は、符号化後のキーデータを複数に分割し、分割したキーデータをアドレスにして検索メモリマット102にアクセスする。そして、制御回路105は、アクセスした検索メモリマット102にエントリアドレスを書き込んだり、アクセスした検索メモリマット102に書き込まれているエントリアドレスを読み出す。これらの書込処理及び読出処理は、[実施例1]等で説明した処理と同じである。この書込処理及び読出処理は、分割した検索メモリマット102全てに対して行なわれる。
まず、制御回路105は、検索メモリマット102のy軸にエントリアドレス(EA)を格納するための場所(アドレス)を割り付け、そのx軸に符号化後の分割したキーデータ(KD)を割り付ける。
検索メモリマット102は、x軸に割り付けられた符号化後のキーデータに対応する適切な大きさのビット数の基本セルに分割される(分割数:N)。ここで、Nは2以上の自然数である。図29の例では、Nは8となる。他方、各基本セルに対するビット数の割り付けは、任意とする。また、制御回路105は、確認メモリマット104のy軸にエントリアドレスを割り付け、x軸にエントリアドレスに対応するキーデータをそれぞれ割り付ける。このため、確認メモリマット104には、エントリアドレスに従って、キーデータが書き込まれている。なお、確認メモリマット104に格納されるキーデータは、上記符号化回路106により符号化された入力データではなく、符号化回路106に入力される前の元情報としてのキーデータに対応している。
即ち、検索メモリマット102に入力されるキーデータは、書き込み時または検索時に入力される元情報としてのキーデータを符号化した符号化後のキーデータである。これに対し、確認メモリマット104に格納されるキーデータは符号化前のデータ、つまり書き込み時または検索時に入力される元情報としてのキーデータそのものである。つまり、確認メモリマット104に対する参照処理は、符号化回路106に入力される符号化前の元情報としてのキーデータに対して行われる。
図35は、図29で示した半導体装置の動作タイミングを、第1クロック及び第2クロックの繋がりで示している。まず、第1クロックでは、キーデータが符号化回路106に入力され、元情報としてのキーデータが符号化され、符号化後のキーデータが制御回路105へと出力される。また、第1クロックでは、制御回路105に符号化後のキーデータが入力され、検索メモリマット102に対する書込処理または読出処理が行われ、エントリアドレスがラッチ回路103aへとラッチされる。ここまでの処理が、第1のクロックで実行される。続いて、第2クロックでは、ラッチ回路103aからのデータが比較器103bによって比較され、その比較結果が確認メモリマット104へと入力される。そして、第2クロックにおいては、確認メモリマット104のデータと符号化前の入力データが一致することの確認が行われ、最終的に、確認メモリマット104から読み出されたデータが出力される。
以下、本実施例の符号化回路106の動作及び回路構成について説明する。符号化回路106は、データの書き込み時または読み出し時に入力される元情報としてのキーデータを符号化する。そして、符号化回路106は、符号化の条件を適当に設定することで、キーデータの偏りを除去したり、ビット長を変更したりする機能を有している。この符号化処理は、後述するように、データを混合したり、拡散したり、若しくは冗長性を付加したりすることにより行われる。例えば、符号化ビットは、生成多項式を用いて元情報から生成され、冗長ビットの長さは符号生成時に指定するパラメータに応じて変化する。検索メモリマット102(SRAM−CAM)に符号化されたデータを入力する方法としては、(1)元情報+符号化ビットの形で使用する方法、又は(2)符号化ビットのみを使用する方法が挙げられる。本実施例においては、上記(1)の方法を最初に説明し、その後で上記(2)の方法について説明する。なお、(2)の方法は、符号化ビットの中に元情報が広い範囲に渡って拡散される構成になっているため、ビットの偏りの除去により有効である。
図30は、符号化ビットとデータの散乱度合いを説明するための図である。図30では、28ビットのキーデータが符号化回路に入力される場合を示している。図30に示された符号生成パラメータは、入力データまたはキーデータとしての元情報の散乱度合いを表す指標となっている。例えば、28ビットの元情報に対して符号化処理を施し、6ビットの符号化ビットを得る場合、制御回路105に入力される符号化後の入力データは総ビット数34ビットとなる。この場合、散乱度合いを表す符号生成パラメータは、1ビットとなる。また、28ビットの元情報に対して符号化処理を施し、27ビットの符号化ビットを得る場合、制御回路105に入力される符号化後の入力データは総ビット数55ビットとなる。この場合、散乱度合いを表す符号生成パラメータは、5ビットとなる。また、28ビットの元情報に対し符号化処理を施し、70ビットの符号化ビットを得る場合、制御回路105に入力される符号化後の入力データは総ビット数98ビットとなる。この場合、散乱度合いを表す符号生成パラメータは、11ビットとなる。
従って、散乱度合いを高くして符号生成パラメータのビット数を増大させるためには、符号化ビット数を増大すれば良いことがわかる。但し、符号化ビット数を増大すると検索メモリマット102を構成するSRAM数を増やす必要がある。これに対し、上記(2)符号化ビットのみを使用する方法では、元情報のビット数分だけ総ビット数が減少するため、検索メモリマット102を構成するSRAM数を節約することができる。また、生成される符号化ビットには冗長性があるので、生成された符号化ビットを全ビット使用する必要はなく、一部を削除することができる。このように、符号化ビットの一部を削除することにより、検索メモリマット102を構成するSRAM数の節約だけでなく、キーデータのビット長をSRAMの構成に合う形に適切に調整することができる。
ここで、元情報としてのキーデータを7ビットとし、符号化ビットを8ビットとする場合について説明する。図31は、本発明の一実施例を示す図であり、符号化回路106が出力する元情報と符号化ビットを示している。本実施例においては、符号化処理に使用する符号の一例として、ボーズ・チョドーリ・ボッケンジェム符号(BCH符号:Bose Chaudhurin Hocquenghem符号)を利用する。BCH符号は、パラメータ化された誤り訂正符号の一種で、シンドローム復号という簡潔な代数学的手法で復号できる点を特徴としている。BCH符号は、低電力で小型の機器で符号化及び復号化が可能であるが、本発明では符号化の機能のみを使用し、復号の機能は使用しない。BCH符号は、複数ビットの元データのXOR(加算+で表示されている)からなる値で構成されている。BCH符号は、符号化という観点から見ると、元データの部分を含まない符号化ビットのみで符号化を行っても検索が可能となる。なお、符号化には、BCH符号化以外に、低密度パリティ検査符号(LDPC:Low-density parity-check code)や、QSBC(Quadruple Swing-By Code:(株)東芝の登録商標)などがある。本発明では、これらのLDPCやQSBCを、BCH符号に替えて用いてもよい。
図31に示されるように、7ビットの元情報としてのキーデータ“a6 a5 a4 a3 a2 a1 a0”を符号化処理することで、8ビットの符号化ビット(15,7)符号が生成されている。符号化ビットの各ビットは、“a6+a2+a0”、“a6+a5+a2+a1+a0”、“a6+a5+a4+a2+a1”、“a5+a4+a3+a1+a0”、“a6+a4+a3”、“a5+a3+a2”、“a4+a2+a1”、“a3+a1+a0”となる。このように、生成される符号化ビットの各ビットには、元情報としてのキーデータの各ビットの値が混合及び拡散されて、冗長性が確保されたものとなっている。
符号化回路106にて実行されるBCH符号化処理について、その詳細を説明する。
kビットの元情報である情報ビットを、“ak-1、ak-2、・・・a1、a0”とし、mビットの符号化ビットを“cm-1、cm-2、・・・c1、c0”とすると、nビットのBCH符号は、“ak-1、ak-2、・・・a1、a0、cm-1、cm-2、・・・c1、c0”のように表される。BCH符号の生成は、mビットの符号化ビットを求めることになる。
また、情報ビット部分をP(x)とし、符号ビットをR(x)とすると、式(2)のとおり表現できる。
また生成多項式と呼ぶm次の多項式G(x)を導入し、G(x)で割り切れるもののみを符号語とするとF(x)とG(x)の間には、次式(3)が成り立つ。なお、次式(3)では、F(x)がG(x)で割り切れるということを式で表現するため、F(x)をG(x)で割ったときの商を“Q(x)”としている。
この式から、BCH符号の生成はx
mP(x)をG(x)で割った余りR(x)を求めることである。
K−1次の多項式、式(5)
をm次の多項式、式(6)
で割ったときの商と余りを計算する回路は一般的には図33に示すようになる。
更に、図33に示された回路をxmP(x)をG(x)で割る回路に変形すると、図34の構成のようになる。図34は、実際にBCH符号を生成するのに用いられる回路を示している。余りR(x)は、ak-1、ak-2、・・・a1、a0を入力後、シフトレジスタに蓄えられている情報をシフト操作により出力することにより得ることができる。この図34に示された符号化回路で演算することで、図31に示した(15,7)符号を生成できる。本発明の符号化回路106には図34の回路は使用せずに、図31の演算結果を表す式を用いて構成する。この式を用いることで、図34の回路のように符号化に何サイクルも要せずに、符号化することができる。(15,7)符号は、生成パラメータが2(t=2)のケースであり、上述の図31に示される元情報に符号化ビットが付加された15ビットの符号になる。そして、この符号が、符号化後の入力データとなる。即ち、制御回路105を介して、検索メモリマット102に入力されるキーデータが生成される。t=4では図32のようになり、より散乱度が増している。図32は、本発明の他の例で、8ビットの元情報とこれから生成される20ビットの符号化ビットを示す図である。
図32において、8ビットの元情報としてのキーデータ“a7 a6 a5 a4 a3 a2 a1 a0 ”に対する符号化処理により20ビットの符号化ビットが生成されている。符号化ビットの各ビットは、“a1+a2+a3処、“a0+a1+a2”、“a0+a2+a3+a6+a7”、“a3+a5”、“a2+a4+a7”、“a1+a3+a6+a7”、“a0+a2+a5+a6”、“a2+a3+a4+a5+a6”、“a1+a2+a3+a4+a5+a7”、“a0+a1+a2+a3+a4+a6+a7”、“a0+a5”、“a1+a2+a3+a4+a6+a7”、“a0+a1+a2+a3+a5+a6”、“a0+a3+a4+a5+a6”、“a1+a4+a5+a6”、“a0+a3+a4+a5+a6”、“a1+a4+a6+a7”、“a0+a3+a5+a6+a7”、“a1+a3+a4+a5”、“a0+a2+a3+a4+a7”となる。このように、生成される符号化ビットの各ビットには、元情報としてのキーデータの各ビットの値が混合、拡散され冗長性が確保されたものとなっている。そして、図31の場合に比べ、散乱度は明らかに増大している。この元情報から生成される20ビットの符号化ビットは元情報のXOR論理式で表されており、そのまま元情報のXOR論理回路に変換できる。
上記の符号化回路106に要求される条件としては、データの書き込み時と検索時で符号化回路106の出力が一致することである。即ち、符号化回路106は、データの書き込み時と検索時で同一の符号化を実行する。このように、符号化回路106は、データの書き込み時と検索時で異なる符号化ビットを生成することがないように保証されていれば良い。このようにすることで、検索メモリマット102を構成する各SRAMの対応関係を維持することができる。
図36を用いて、本発明の検索メモリマット102への書き込み動作を説明する。図36では、説明を分かりやすくするため、4つのエントリアドレスに対応する入力データとしてのキーデータ“167”、“235”、“116”、“90”は、( )内に表示されている。すなわち、( )内に表示されているキーデータは、符号化される前のデータである。そして、これらのデータが、符号化回路106によって符号化されて、“2699”、“3779”、“1859”、“1440”というキーデータに変換されている。
図36の例では、検索メモリマット102は、6つの分割メモリに分割されている(分割数N=6)。そして、制御回路105が、符号化後のキーデータである“2699”“3779”“1859”“1440”のそれぞれに対し、エントリアドレス“00”“01”“10”“11”を割り当てた場合を想定している。
つまり、エントリアドレス“00”に書き込まれるべきデータとして入力されたキーデータ“167”は、符号化回路106により、“2699”に変換される。また、符号化後のキーデータ“2699”は、バイナリデータで表わすと“10 10 10 00 10 11”となる。符号化後のキーデータが制御回路105に入力されると、この制御回路105は、この符号化後のキーデータを複数に分割する。図36に示された例では、符号化後のキーデータは、6つに分割されている。この分割したキーデータのそれぞれを、6分割された検索メモリマット102に対して書き込む。この際、検索メモリマット102に書き込まれるデータは、符号化後のキーデータ“2699”に対応したエントリアドレス“00”である。
図36(a)に示されるように、符号化されたキーデータ“2699”は、制御回路105によって6分割されて、“10”“10”“10”“00”“10”“11”として表わされる。制御回路105は、最初の分割キーデータ“10”をアドレスとして、最初の分割メモリ102aに対して、エントリアドレス“00”を書き込む。次に、制御回路105は、2番目の分割キーデータ“10”をアドレスとして、2番目の分割メモリ102bに対し、エントリアドレス“00”を書き込む。更に、制御回路105は、3番目の分割キーデータ“10”をアドレスとして、3番目の分割メモリ102cに対して、エントリアドレス“00”を書き込む。また、制御回路105は、4番目から6番目の分割キーデータ“00”“10”“11”についても同様に、4番目から6番目の分割メモリ102d、102e、102fのそれぞれに、エントリアドレス“00”を書き込んでいく。
これにより、符号化後のキーデータ“2699”で指定された検索メモリマット102に対し、エントリアドレス“00”が書き込まれたことになる。
続いて、エントリアドレス“01”に書き込まれるべきデータとして入力されたキーデータ“235”は、符号化回路106により、“3779”に変換される。符号化後のキーデータ“3779”は、バイナリデータで表わすと“11 10 11 00 00 11”となる。ここで、制御回路105は、6分割された検索メモリマット102に対して、この符号化後のキーデータ“3779”に対応したエントリアドレス“01”を書き込んでいく。
図36(b)に示されるように、符号化後のキーデータ“3779”は、制御回路105によって6分割され、“11”“10”“11”“00”“00”“11”として表わされる。制御回路105は、これらの分割キーデータをアドレスとして、検索メモリマット102に対して、エントリアドレス“01”を書き込む。つまり、制御回路105は、最初の分割キーデータ“11”をアドレスとして、最初の分割メモリ102aにエントリアドレス“01”を書き込む。また、制御回路105は、2番目の分割キーデータ“10”をアドレスとして、2番目の分割メモリ102bに対し、エントリアドレス“01”を書き込む。この際、既に、符号化後のキーデータ“2699”の書き込みによって、2番目の分割メモリ102bのアドレスには、エントリアドレス“00”が書き込まれている。そこで、制御回路105は、アドレスの衝突した箇所に衝突フラグを書き込み、後の読み出し処理においては、「配慮しない(don’t care)」ものとして処理する。また、図36(b)に示されるように、さらに、制御回路105は、3番目の分割キーデータ“11”をアドレスとして、3番目の分割メモリ102cにエントリアドレス“01”を書き込む。同様に、制御回路105は、4番目から6番目のキーデータ“00”“00”“11”をアドレスとして、4番目から6番目の分割メモリ102d、102e、102fに対し、エントリアドレス“01”を書き込む。ただし、4番目と6番目の分割メモリ102d、102fのアドレスには既に、符号化後のキーデータ“2699”のエントリアドレスが書き込まれているため、制御回路105は、このアドレスに衝突フラグを設定し、後に行なわれる検索処理では「配慮しない(don’t care)」ものとして処理する。
これにより、符号化後のキーデータ“3799”で指定された検索メモリマット102に、エントリアドレス“01”が書き込まれたことになる。同様にして、元情報であるキーデータ“116”“90”を符号化回路で“1859”“1440”に変換し、これらの符号化後のキーデータ“1859”“1440”をアドレスとして、検索メモリマット102にエントリアドレス“10”“11”を書き込む。なお、図36(c)に示されるように、符号化後のキーデータ“1859”の書き込み処理では、新たに5番目の分割メモリ102eにおいてアドレス衝突が生じる。また、図36(d)に示されるように、符号化後のキーデータ“1440”の書き込み処理では、新たに1番目及び3番目の分割メモリ102a、102cにおいてアドレス衝突が生じている。
図36(e)上段は、確認メモリマット(SRAM)104の書き込み状態の例を示している。
図36(e)上段に示されるように、確認メモリマット104においては、エントリアドレス“00”にキーデータ”167”のバイナリデータ“10 10 10 00”が書き込まれ、エントリアドレス“01”にキーデータ“235”のバイナリデータ“11 10 11 00”が書き込まれ、エントリアドレス“10”にキーデータ“116”のバイナリデータ“01 11 01 00”が書き込まれ、エントリアドレス”11”にキーデータ“90”のバイナリデータ“01 01 10 10”がそれぞれ書き込まれている。
また、図36(e)下段に示されるように、確認メモリマット104のエントリアドレス“00”“01”“10”“11”に、符号化後のキーデータ“2699”、“3779”、“1859”、“1440”を書き込むこととしてもよい。
図37は、本発明に係る半導体装置(SRAM−CAM)の検索動作を示した図である。図37(a)は、元情報のキーデータとして“167”が入力され、符号化回路106によって符号化後のキーデータ“2699”に変換されたときの検索動作を示している。符号化後のキーデータ“2699”は、バイナリデータでは“10 10 10 00 10 11”として表わされる。このバイナリデータが、制御回路105において6つに分割される。分割されたキーデータは、それぞれ、6分割された検索メモリマット102のy軸に割り当てられた「エントリアドレスを登録する場所」にアクセスするためのアドレスとして用いられる。最初の分割キーデータ“10”をアドレスとして、最初の分割メモリ102aからデータを読み出すと、エントリアドレス“00”が読み出される。また、2番目の分割キーデータ“10”をアドレスとして、2番目の分割メモリ102bからデータを読み出す。しかし、このデータは、図36(b)で示した符号化後のキーデータ“3799”の入力時に、アドレス衝突が生じているため、「配慮しない(don’t care)」処理を行なう。すなわち、2番目の分割メモリ102bからの読み出しデータは検索の対象外となる。
また、3番目の分割キーデータ“10”、4番目の分割キーデータ“00”、及び6番目の分割キーデータ“11”のそれぞれをアドレスとした検索処理も同様に、アドレスの衝突が生じていることから、「配慮しない(don’t care)」処理によって、読み出したデータは検索の対象外とする。また、5番目の分割キーデータ“10”については、これをアドレスとして5番目の分割メモリ102eにアクセスすると、エントリアドレス“00”を読み出すことができる。
図37(a)に示されるように、符号化後のキーデータ“2699”に基づいて、検索メモリマット102から読み出されたデータは、最初の分割メモリ102aのデータと5番目の分割メモリ102eのデータが、共に“00”であり一致している。これにより、符号化後のキーデータ“2699”に対応するエントリアドレスは、“00”であると推測できる。
そこで、確認メモリマット104を用いて、エントリアドレス“00”によりアクセスされるキーデータの値を読み出すと、“10 10 10 00”となり、符号化前の入力データであるキーデータ“10 10 10 00”と一致することが分かる。このように、制御回路105は、確認メモリマット104からの出力データであるキーデータと、符号化前の検索データとしてのキーデータを比較し、両者が一致することを確認して、エントリアドレスを出力する。
図37(b)は、符号化後のキーデータ“3779”が、検索対象として入力された場合を示している。キーデータ“3779”は“11 10 11 00 00 11”のバイナリデータで表わされ、制御回路105によって6分割される。分割されたキーデータは、6分割された検索メモリマット102のy軸に割り当てられた「エントリアドレスを登録する場所」にアクセスするためのアドレスとしてそれぞれ用いられる。最初の分割キーデータ“11”をアドレスとして、最初の分割メモリ102aからデータを読み出すと、エントリアドレス“01”が読み出される。2番目の分割キーデータ“10”をアドレスとして、2番目の分割メモリ102bからデータを読み出すが、このデータにはアドレス衝突が生じているため、「配慮しない(don’t care)」ものとして処理する。これにより、2番目の分割キーデータ“10”は検索の対象外とされる。
3番目の分割キーデータ“11”をアドレスとして、3番目の分割メモリ102cからデータを読み出すと、エントリアドレス“01”が読み出さる。他方、4番目の分割キーデータ“00”、5番目の分割キーデータ“00”、及び6番目の分割キーデータ“11”のそれぞれをアドレスとした3〜6番目の分割メモリ102d、102e、102fへのアクセスは、「配慮しない(don’t care)」処理によって、検索の対象外となる。
図37(b)に示されるように、符号化後のキーデータ“3779”によって検索メモリマット102から読み出される値は、1番目及び3番目の分割メモリ102a、102cのエントリアドレス“01”ということになる。
そこで、確認メモリマット104を用いて、エントリアドレス“01”によってアクセスされるキーデータの値を読み出すと、“11 10 11 00”となり、符号化前のキーデータ“11 10 11 00”と一致する。つまり、制御回路105は、確認メモリマット104からの出力データとしてのキーデータと、符号化前の検索データとしてのキーデータと比較して一致することを確認した上で、エントリアドレスを出力する。
続いて、図37(c)は、検索メモリマット102に書き込まれていないキーデータ“94”が符号化され、符号化後のキーデータ“1504”が、検索対象として入力された場合を示している。
図37に示されるように、符号化回路106は、キーデータ“94”を符号化して、“1504”に変換する。符号化後のキーデータ“1504”は、バイナリデータデータ“01 01 11 10 00 00”で表わされる。符号化後のキーデータは、制御回路105において6分割される。分割されたキーデータは、6分割された検索メモリマット102のy軸に割り当てられた「エントリアドレスを登録する場所」にアクセスするためのアドレスとしてそれぞれ用いられる。最初のキーデータ“01”をアドレスとして、最初の分割メモリ102aからデータを読み出すと、アドレス衝突しているため「配慮しない(don’t care)」処理が行なわれる。また、2番目の分割キーデータ“01”をアドレスとして、2番目の分割メモリ102bのデータを読み出すと、エントリアドレス“11”が出力される。
また、図37(c)に示されるように、符号化後の入力データ“1504”に基づいて検索メモリマット102から読み出されるデータは、2番目の分割メモリ102bの出力としてのエントリアドレス“11”、3番目の分割メモリ102cの出力としてのエントリアドレス“01”、及び4番目の分割メモリ102dの出力としてのエントリアドレス“11”と、6番目の分割メモリ102fの出力としてのエントリアドレス“11”ということになる。なお、5番目の分割キーデータ“00”をアドレスとした分割メモリ102eへのアクセスは「配慮しない(don’t care)」処理によって、検索の対象外とされている。この場合に、検索メモリマット102から読み出されるエントリアドレスは、複数種類存在する。すなわち、エントリアドレスに不一致が発生している。このため、制御回路105は、確認メモリマット104を用いなくても、この段階で、検索データとしてのキーデータと一致するデータは、検索メモリマット102内に存在していないと判定することができる。
次に、図38〜図41を参照して、符号化ビットのみを用いて符号化した場合の実施例について説明する。説明を簡単にするため、SRAM−CAMに入力するキーデータのビット長を24ビットとし、符号化により生成される符号化後のキーデータのビット長も24ビットとする。また、符号化後のキーデータを前記の説明と同じように6分割し、分割したキーデータで、6分割された検索メモリマット102を検索する構成になっているとする。この前提から、SRAM−CAMの検索メモリマット102は、16ワード×4ビットのSRAM6個で構成されることが分かる。このため、SRAM−CAMのエントリ数は16となる。
24ビットの元情報から24ビットの符号化ビットを生成する方法には様々な方法がある。ここでは、図38を用いて、符号化ビットの生成方法の一例を説明する。図38は、8ビットの元情報から10ビットの符号化ビットを生成することができる例を示している。ただし、符号化ビットの10ビットの中では、元情報が拡散されているため、c0とc1を除きc2からc9までのビットを使用するものとする。このようにすると、8ビットの元情報から8ビットの符号化ビットが生成されることになる。しかし、このままでは24ビットのキーデータに対して8ビット単位でしか符号化できない。8ビット単位で24ビットの符号化を行うと、キーデータに偏りがあったとき対処できないという問題が発生する。そこで、24ビットのキーデータを4ビットずつ6つのグループに分け、グループ単位で所定のアルゴリズムに従いグループの配列を入れ替える操作を行う。そして、入れ替えたグループの左端から2グループずつ8ビット単位で符号化する。この方法は、図39に示されている。
図39は、SRAM−CAMに入力する元情報であるキーデータ(図39(a))と、4ビットずつグループ分けしグループの配列変更を行った後のキーデータ(図39(b))と、8ビット単位で符号化した後のキーデータ(図39(c))、の3種類のデータの変化を示している。丸内の数字(1)から(6)は、グループの区別を行うために記したものである。
図39(a)(b)(c)の3種類のデータは、SRAM−CAMのエントリ数が16であり、検索メモリマット102には16種類のデータを書き込むことができるため、エントリ番号順に16個記述している。また、偏りの影響を見るために、元情報の6グループの内3グループ((1)から(3))のデータは、全て同じ値である場合を想定している。図39のエントリアドレスと(1)から(6)とが示す場所の数字は、4ビットで表される2進数を10進数で表記したものである。元情報としてのキーデータのエントリアドレス“0”において、(1)から(6)の6つの数字“4”、“1”、“13”、“14”、“11”、“5”は、24ビットの元情報を4ビットずつ区切ったときの(1)から(6)の各グループの値を示している。従って、このグループの配列変更を実施すると、図39(b)に示したように、(1)、(2)、(3)、(4)、(5)、(6)の元情報が、(2)、(5)、(6)、(3)、(1)、(4)の順に並び替えられる。また、並び替え後のエントリアドレス“0”は、その24ビットのバイナリデータが、“1”、“11”、“5”、“13”、“4”、“14”となる。このデータを8ビット単位の符号化で(2)(5)、(6)(3)、(1)(4)の8ビットのデータと見做して、図38に示された符号化ビットのXOR論理式に従い、XOR組み合わせ論理回路で変換する。この8ビット単位の符号化を実施した結果は、図39(c)に示されている。すなわち、図39(c)に示されるように、符号化を実施すると、エントリアドレス“0”のところでは、“1”、“7”、“1”、“10”、“6”、“12”で表される24ビットのデータとなっている。
図40(a)は、元情報としてのキーデータを符号化しないでSRAM−CAMの検索メモリマット102に書き込み、検索メモリマット102に書き込まれたデータを読み出した場合を示している。図40(a)は、左から順に、元情報としてのキーデータ、検索メモリマット102の内容、及び検索メモリマット102の読み出し結果を示している。図40(b)は、前述した8ビット単位の符号化を実施した後で、検索メモリマット102に書き込み、そのデータを読み出した場合を示している。すなわち、図40(b)は、検索メモリマット102のエントリ数が16であるため、16種のキーデータを書込み、検索メモリマット102から読み出した場合を示している。図40(b)は、左から順に、8ビット単位の符号化を実施したデータ、検索メモリマット102の内容、及び検索メモリマット102の読み出し結果を示している。
図40(a)に示されるように、符号化を行わないと、(1)、(2)、(3)の分割メモリでの偏りが大きくなり、1種類のデータしか書き込まれない状態が生じる。また、図40(a)に示されるように、エントリアドレス順に検索メモリマット102への書き込みを行うと、(1)、(2)、(3)のメモリマットには10進数でエントリアドレスの“0”が書き込まれ、その後の書き込み操作ではアドレス衝突状態になる。図40において、塗りつぶし状態で書き込まれている情報は“0”である。また、(4)、(5)、(6)のデータは、ランダム状態を仮定しているため、検索メモリマット102で見るとアドレス衝突がランダムに発生していることが分かる。図40では、アドレス衝突は、塗りつぶし状態で表示されている。この検索メモリマット102に書き込まれた内容を読み出すと(1)、(2)、(3)は完全な衝突状態になり、SRAM−CAMとして機能しているのは、実質的には(4)、(5)、(6)の3つのメモリマットしかないことが分かる。このように、アドレス衝突が多発して、6つの分割メモリの内3つしか機能していないため、16エントリの内5エントリの読み出し、すなわちエントリアドレス“1”、“6”、“7”、“10”、“11”の読み出しで、(1)から(6)が全て衝突状態になる。しかしながら、(1)から(6)の全衝突が発生していないところでは、検索メモリマット102に書き込まれているエントリアドレスと分割したキーデータのエントリアドレスが一致するので正しい検索ができているともいえる。
図40(b)は、8ビット単位の符号化処理を実施した場合の例である。図40(b)に示されるように、符号化処理を行うことにより、図40(a)で示した(1)、(2)、(3)で発生したような極端な衝突は発生しなくなった。ただし、検索メモリマット102の読出し結果は、符号化処理をした場合と符号化処理しない場合とで、同じ結果となっている。これは、図39の8ビット単位の符号化を実施する前のグループの配列変更実施後のデータに示しているように、符号化の対象となる2つのデータの内の1つが全く変化しない固定データになっているためである。そこで、8ビット単位の符号化実施後のデータを元情報として、もう一度、グループ配列変更と8ビット単位の符号化を行い、この結果を2回目の8ビット単位の符号化の実施とし、このデータを用いて検索メモリマット102への書き込みと、読み出しを実施する。
図41(a)は、元情報としてのキーデータを符号化しないでSRAM−CAMの検索メモリマットに書き込み、読み出しを行った場合の結果を示し、図41(b)は、2回目の8ビット単位の符号化を行い、このデータを用いて検索メモリマットに書き込みと読み出しを行った場合の結果を示している。図41(b)に示されるように、2回目の8ビット単位の符号化を行ったデータで検索メモリマット102に書き込み、書き込んだデータを読み出すと6つの分割メモリが全てアドレス衝突になるような状態はなくなる。また、図41(b)に示されるように、分割メモリから読み出されるエントリアドレスの全てが、キーデータのエントリアドレスと一致し、16個のエントリデータの全てが正しく検索できていることが分かる。
この結果から、データの偏りが大きい場合であっても、符号化処理を複数回行うことで、より効果的にデータの偏りを除去できることが分かる。本実施例では、符号化を8ビット単位で行っているが、符号化は8ビットである必要はなく様々な組み合わせを選択することができる。すなわち、本発明は、符号生成パラメータや元情報のビット数を選択することで、様々な符号化ビットを生成することができる。例えば、検索メモリマット102の構成を変えない場合であっても、元情報を12ビットあるいは16ビットにし、10ビットの符号化ビットを生成し、このうち本実施例のように8ビット使用してもよく、元情報を24ビットにして、符号化ビットを24ビットにしてもよい。元情報を16ビットにした場合は、得られる符号化ビットを8ビットにした場合において、6個の4ビットグループ(1)〜(6)の中から重ならないように4つのグループを選択すれば、24ビットの符号化ビットを生成できる。
図42は、検索時に入力されるキーデータの全列に衝突の状態が発生した場合であっても、検索結果を出力できるようにしたSRAM−CAMの書き込み動作を説明するための図である。
本実施例において、半導体メモリ回路の構成、及びSRAM−CAMのスイッチ又は検索の動作については実施例1と同様であるため説明を省略する。
図42を参照して、本実施例における検索メモリマット102への書き込み動作を説明する。なお、本実施例では、エントリアドレスが2ビット4ワード、入力データとしてのキーデータ長が12ビットの場合を想定している。図42の例では、検索メモリマット102は6分割されている。
また、本実施例では、キーデータ“2699”“2691”“1859”“1440”を、エントリアドレス“00”“01”“10”“11”のそれぞれに書き込む場合を想定している。
エントリアドレス“00”に書き込まれるべきデータとして入力されたキーデータ“2699”は、バイナリデータで表わすと“10 10 10 00 10 11”となる。この値を6分割された分割メモリ102a〜102fのy軸のアドレスとして、検索メモリマット102にデータを書き込む。この際、書き込まれるデータは、例えば、キーデータ“2699”のエントリアドレス“00”である。
図42(a)に示されるように、キーデータ“2699”が6分割され、“10”“10”“10”“00”“10”“11”として表わされ、これらをアドレスとして、分割メモリ102a〜102fに対して、エントリアドレス”00”が書き込まれる。つまり、制御回路105は、最初の分割キーデータ“10”をアドレスとして、最初の分割メモリ102aに対し、エントリアドレス“00”を書き込む。また、制御回路105は、2番目の分割キーデータ“10”をアドレスとして、2番目の分割メモリ102bに対し、エントリアドレス“00”を書き込む。更に、制御回路105は、3番目の分割キーデータ“10”をアドレスとして、3番目の分割メモリ102cに対し、エントリアドレス“00”を書き込む。また、制御回路105は、4番目から6番目の分割キーデータ“00”“10”“11”をアドレスとして、4番目から6番目の分割メモリ102d、102e、102fに対し、エントリアドレス“00”を書き込む。
これにより、キーデータ“2699”で指定された検索メモリマット102に、エントリアドレス“00”が書き込まれたことになる。
同様にして、エントリアドレス“01”に書き込まれるべきデータとして入力されたキーデータ“2691”は、バイナリで表わすと“10 10 10 00 00 11”となる。この値を6分割された検索メモリマットのy軸に割り当てられた「エントリアドレスを登録する場所」にアクセスするためのアドレスとして、検索メモリマット102にデータを書き込む。この際、書き込まれるデータは、エントリアドレスとして入力された“01”である。
図42(b)に示されるように、キーデータ“2691”が6分割され、“10”“10”“10”“00”“00”“11”として表わされ、これらをアドレスとしてエントリアドレス“01”が検索メモリマット102に対して書き込まれる。つまり、制御回路105は、最初の分割キーデータ“10”をアドレスとして、最初の分割メモリ102aに対し、エントリアドレス“01”を書き込む。この際、既に、キーデータ“2699”の書き込み処理において、最初の分割メモリ102aのアドレスには、エントリアドレス“00”が書き込まれていることから、アドレスの衝突が生じる。図42(b)では、アドレスの衝突が生じた部分を、塗りつぶして示している。このアドレスの衝突が生じた部分は、後の読み出し処理において、「配慮しない(don’t care)」として処理される。
図42(b)に示されるように、さらに、制御回路105は、2番目の分割キーデータ“10”をアドレスとして、2番目の分割メモリ102bに対し、エントリアドレス“01”を書き込む。また、制御回路105は、3番目から6番目の分割キーデータ“10”“00”“00”“11”をアドレスとして、それぞれ、3番目から6番目の分割メモリ102c、102d、102e、102fに対し、エントリアドレス“01”を書き込む。ただし、2番目〜4番目と6番目のアドレスには既に、キーデータ“2699”のエントリアドレスが書き込まれているため、制御回路105は、衝突フラグを設定し、後の読み出し処理において「配慮しない(don’t care)」ものとして処理する。
これにより、キーデータ“2691”で指定された検索メモリマット102に対しエントリアドレス“01”が書き込まれたことになる。
同様に、制御回路105は、キーデータ“1859”“1440”をアドレスとして、SRAM−CAMの検索メモリマット102に、エントリアドレス“10”“11”を書き込む。図42(c)に示されるように、キーデータ“1859”の書き込み処理においては、4番目〜6番目の分割メモリ102d、102e、102fでアドレス衝突が生じる。また、図42(d)に示されるように、キーデータ“1440”では、1、3、5番目の分割メモリ102a、102c、102eでアドレス衝突が生じている。
図42(e)は、確認メモリマット(SRAM)104の書き込み状態を示している。
図42(a)において、エントリアドレス“00”にキーデータ”2699”のバイナリデータが書き込まれ、エントリアドレス“01”にキーデータ“2691”のバイナリデータが書き込まれ、エントリアドレス“10”にキーデータ“1859”のバイナリデータが書き込まれ、エントリアドレス”11”にキーデータ“1440”のバイナリデータが書き込まれている。
図43は、本発明の[実施例5]に係るSRAM−CAMの検索動作を示す図である。
図43は、図42に示したアドレスの重なった部分、つまり、濃く網掛けされたエントリを「配慮しない(don’t care)」とした場合に、入力データが正しく検索されているか否かを表わしている。
図43(a)では、検索データとしてのキーデータ“2699”が入力された場合を示している。検索データとしてのキーデータ“2699”は、“10 10 10 00 10 11”のバイナリで表わされ、制御回路105によって、2ビットずつに6分割される。分割されたキーデータは、6分割された検索メモリマット102のy軸に割り当てられた「エントリアドレスを登録する場所」にアクセスするためのアドレスとしてそれぞれ用いられる。まず、制御回路105は、最初の分割キーデータをアドレスとして、最初の分割メモリ102aからエントリアドレス“00”を読み出すと、このデータはアドレス衝突が生じているため、「配慮しない(don’t care)」ものして処理する。よって、制御回路105は、最初の分割メモリ102aからの読み出しデータを検索の対象外とする。また、制御回路105は、2番目の分割キーデータ“10”、3番目の分割キーデータの“10”、4番目の分割キーデータの“00”、及び6番目の分割キーデータの“11”のそれぞれをアドレスとして、各分割メモリ102b、102c、102d、102fへアクセスする。ただし、制御回路105は、これらのアクセスについてはアドレスの衝突が生じているため、「配慮しない(don’t care)」処理によって、読み出したデータを検索の対象外とする。他方、制御回路105は、5番目の分割データの“10”をアドレスとして、5番目の分割メモリ102eからエントリアドレス“00”を読み出すことができる。
図43(a)に示されるように、検索データとしてのキーデータ“2699”によって検索メモリマット102から読み出されたデータのうち、実際に検索に使用されるデータは、5番目の分割メモリ102eから読み出されたエントリアドレス“00”ということになる。
そこで、制御回路105は、確認メモリマット104を用いて、エントリアドレス“00”によりアクセスされるキーデータの値を読み出すと、“10 10 10 00 10 11”となり、これは入力データとしてのキーデータと一致することが分かる。つまり、制御回路105は、確認メモリマット104からのキーデータである出力データと入力データを比較して正しいことを確認した上で、エントリアドレスを出力する。
図43(b)は、検索データとしてのキーデータ“1859”が入力された場合を示している。検索データとしてのキーデータ“1859”は“01 11 01 00 00 11”で表わされ、制御回路105によって2ビットずつ6分割される。分割キーデータは、6分割された検索メモリマット102のy軸に割り当てられた「エントリアドレスを登録する場所」にアクセスするためのアドレスとしてそれぞれ用いられる。制御回路105は、最初の分割キーデータ“01”をアドレスとして、最初の分割メモリ102aのデータを読み出すが、このデータは、アドレス衝突が生じているため、「配慮しない(don’t care)」処理を行なうようにする。また、制御回路105は、2番目の分割キーデータ“11”をアドレスとして、2番目の分割メモリ102bからデータを読み出すと、エントリアドレス“10”を読み出すことができる。また、制御回路105は、3番目の分割キーデータ“01”をアドレスとして、3番目の分割メモリ102cからデータを読み出すと、エントリアドレス“10”を得ることができる。
なお、4番目の分割キーデータ“00”、5番目の分割キーデータ“00”、及び6番目の分割キーデータ“11”のそれぞれをアドレスとした分割メモリ102d、102e、102fへのアクセスは、「配慮しない(don’t care)」処理によって、検索の対象外となる。
図43(b)に示されるように、検索データとしてのキーデータ“1859”によって検索メモリマット102から読み出される値は、2番目の分割メモリ102bからの出力であるエントリアドレス“10”と、3番目の分割メモリ102cからの出力であるエントリアドレス“10”ということになる。
確認メモリマット104を用いて、エントリアドレス“10”をアドレスとしてアクセスされるキーデータの値を読み出すと、“01 11 01 00 00 11”となり、これは検索データとしてのキーデータと一致していることが分かる。つまり、制御回路105は、確認メモリマット104からのキーデータとしての出力データが、検索データと比較して正しいことを確認して、エントリアドレスを出力する。
図43(c)に、検索データとしてのキーデータとして“2691”が入力された場合を示す。検索データとしてのキーデータ“2691”は、“10 10 10 00 00 11”のバイナリで表わされる。制御回路105は、キーデータ“2691”のバイナリデータを、2ビットずつに6分割する。分割キーデータは、6分割された検索メモリマット102のy軸に割り当てられた「エントリアドレスを登録する場所」にアクセスするためのアドレスとしてそれぞれ用いられる。最初の分割キーデータ“10”をアドレスとして、最初の分割メモリ102aのデータを読み出すと、「配慮しない(don’t care)」処理が行われる。また、2番目の分割キーデータ“10”、3番目の分割キーデータ“10”、4番目の分割キーデータ“00”、5番目の分割キーデータ“00”、分割キーデータ6番目の“11”をアドレスとして、各分割メモリ102b、102c、102d、102e、102fのデータを読み出すと、「配慮しない(don’t care)」処理が行なわれて、検索の対象外となる。即ち、図43(c)に示した例では、キーデータを分割した全ての分割桁で、アドレスの衝突が生じている状態となっている。
この場合、制御回路105は、まず、「配慮しない(don’t care)」とした各分割メモリ102a〜102fのアドレスから、そのアドレスに書き込まれているエントリアドレスを読み出す。すなわち、各分割メモリ102a〜102fには衝突が生じている場合であっても、衝突フラグとともに、一つのエントリアドレスが書き込まれている。制御回路105は、この衝突フラグとともに書き込まれているエントリアドレスを、各分割メモリ102a〜102fから読み出しておく。そして、制御回路105は、衝突フラグとともに書き込まれているエントリアドレスを用いて、図43(e)に示された確認メモリマット104を順次参照する。この図43(e)に示された例において、衝突した状態のエントリアドレスは“00”と“01”である。最初に、制御回路105は、確認メモリマット104から、エントリアドレス“00”に対応したキーデータの値を読み出すと“10 10 10 00 10 11”であることがわかる。このキーデータ“10 10 10 00 10 11”は、検索対象データとして入力されたキーデータと一致していない。よって、制御回路105は、“00”は求めているエントリアドレスではないと判断する。次に、制御回路105は、確認メモリマット104のエントリアドレス“01”に対応しているキーデータの値を読み出すと、“10 10 10 00 00 11”であることがわかる。このキーデータ、“10 10 10 00 00 11”は、検索対象データとして入力されたキーデータと一致している。よって、制御回路105は、“01”が求めるエントリアドレスであると判断することができる。そして、制御回路105は、検索結果として、このエントリアドレス“01”を出力する。このように、分割した検索データの全てが衝突した状態にあるときでも、確認メモリマット104を衝突した状態のエントリアドレスで順次参照することで、キーデータと一致するキーデータを抽出することが可能となる。
すなわち、本発明の実施例においては、エントリアドレスの書き込み処理時にアドレスの衝突が発生すると、「配慮しない(don’t care)」処理を行う。この「配慮しない(don’t care)」処理では、(1)エントリアドレスの書き込み動作を止めるか、(2)既に書き込まれているエントリアドレスに他のエントリアドレスを上書きする処理のいずれかがなされる。このため、検索メモリマット102には、前者(1)の場合は、最初に書き込まれたエントリアドレスが書き込まれた状態になっており、後者(2)の場合は、最後に書き込まれたエントリアドレスが書き込まれた状態になっている。このため、アドレスに衝突が発生した状態であっても、そのアドレスには、検索の対象となるエントリアドレスが含まれている可能性がある。そこで、本発明の実施例ではこの可能性に着目し、衝突が発生したアドレスの中に含まれているエントリアドレスを抽出することで、検索対象を発見することのできる可能性を高めることとしている。これにより、本発明の実施例では、検索時に入力される検索データに全列衝突の状態が発生しても、その中に検索の対象となるエントリアドレスが含まれていれば、検索結果を出力することができる。
まず前提として、先述したとおり、検索メモリマット102を分割するときには、最低限以下の個数が必要となる。
(式)N=L/log2・M
L:キーデータ長
M:総エントリ数
N:検索メモリマットの分割数(分割メモリの最小個数)
例えば、キーデータ長が32ビットであり、検索メモリマットの総エントリ数が8ビット256ワードである場合、分割メモリは最低限の4個必要となる。また、キーデータ長が同一である場合、検索メモリマットの総エントリ数が増加すれば、必要最低限の分割数は減少する。しかし、分割メモリの個数が減少すると情報の分散が小さくなり、衝突確率が上がる傾向にある。そのため本実施例では、以下に説明するとおり、分割メモリの数を増加して、衝突頻度を低減させることとしている。なお、例えば12ビットのデータ長の場合、通常は1ビット目から12ビット目として各ビットを特定するが、以下では便宜上、0ビット目から11ビット目と称し説明する。
図44は、本発明の第6の実施例を示す検索メモリマットの書き込み動作を示す図である。図44を参照して、本発明における検索メモリマット102への書き込み動作を説明する。なお、本実施例では、エントリアドレスが2ビット4ワード、キーデータ長が12ビットの場合を想定している。この場合、上述の式により、最低限必要となる分割メモリの個数は6個となる。図44では、検索メモリマット102が、分割メモリ102a〜102fの6個に分割されており、さらに追加用分割メモリ102g〜102lの6個を加え、12個の分割メモリとされた場合の例を示している。すなわち、本実施例では、[実施例1]と比較して、検索メモリマット102の分割数を2倍としている。また、本実施例では、キーデータとして、“2699”“2691”“1859”“1440”をエントリアドレス“00”“01”“10”“11”に書き込む場合を想定している。
なお、検索メモリマット102にデータを書き込む際の具体的な動作を説明する前に、追加用分割メモリ102g〜102lに書きこまれるデータについて説明する。
図44(a)において、検索メモリマット102の下部に、例えば[1:0]等として示した数字は、「キーデータ選択ビット」を意味している。ここにいう「キーデータ選択ビット」とは、複数の分割メモリ102a〜102f毎に、各分割メモリに格納するキーデータのビット番号を選択するための情報である。例えば、図44(a)に示した例において、「キーデータ選択ビット」は、入力された12ビットのキーデータのバイナリデータのうち、その0ビット目と1ビット目が6番目の分割メモリ102fに格納され、2ビット目と3ビット目が5番目の分割メモリ102eに格納され、4ビット目と5ビット目が4番目の分割メモリ102dに格納され、6ビット目と7ビット目が3番目の分割メモリ102cに、8ビット目と9ビット目が2番目の分割メモリ102bに格納され、10ビット目と11ビット目が1番目の分割メモリ102aに格納されることを示している。
また、図44(a)に示されるように、12ビットのキーデータのうち、4ビット目と6ビット目が12番目の分割メモリ102lに格納され、5ビット目と7ビット目が11番目の分割メモリ102kに格納され、0ビット目と8ビット目が10番目の分割メモリ102jに格納され、1ビット目と9ビット目が9番目の分割メモリ102iに格納され、2ビット目と10ビット目が8番目の分割メモリ102hに格納され、3ビット目と11ビット目が7番目の分割メモリ102gに格納されるように、「キーデータ選択ビット」が設定されている。
このように、本実施例において、入力された12ビットのキーデータは、24ビットに拡張され、追加分割メモリを含む合計12個の分割メモリに分散して格納される。このため、6個の追加分割メモリには、6個の分割メモリに格納されるビットデータが重複して格納される。なお、このビットデータの重複は所望の値に設定でき、それにより追加用SRAMの個数も任意に設定することができる。
次に、検索メモリマット102に対する書き込み動作を具体的に説明する。
エントリアドレス“00”に書き込まれるべきデータとして入力されたキーデータ“2699”は、バイナリデータで表わすと“10 10 10 00 10 11”となる。そして、上述のとおり「キーデータ選択ビット」に従って、入力されたキーデータに、追加分割メモリに格納すべきビットデータを重複して追加する。すなわち、12ビットのキーデータに、12ビットのデータを下位ビットとして追加する。これにより、追加後のキーデータを“10 10 10 00 10 11 11 00 11 01 10 00”(24ビット)とする。この値を12分割された検索メモリマット102のy軸のアドレスとして、検索メモリマット102にデータを書き込む。この際、検索メモリマットに書き込まれるデータは、キーデータ“2699”のエントリアドレスとして入力された“00”である。
図44(a)に示されるように、12ビットのキーデータ“2699”の下位に、キーデータ選択ビットに従った12ビットが追加される。これにより、キーデータ“2699”は、24ビットで表現される。そして、このデータは、12分割されて、“10”“10”“10”“00”“10”“11”“11”“00”“11”“01”“10”“00”として表わされる。制御回路105は、これらの12個の分割キーデータをアドレスとして、12個の分割マット102a〜102lに対して、エントリアドレス“00”を書き込む。つまり、最初の分割キーデータ“10”をアドレスとして、最初の分割メモリ102aに対し、エントリアドレス“00”が書き込まれる。次に、2番目の分割キーデータ“10”をアドレスとして、2番目の分割メモリ102bに、エントリアドレス“00”が書き込まれる。さらに、3番目の分割キーデータ“10”をアドレスとして、3番目の分割メモリ102cに、エントリアドレス“00”が書き込まれる。同様に、4番目から6番目の分割キーデータ“00”“10”“11”をアドレスとして、4番目から6番目の分割メモリ102d〜102fにエントリアドレス“00”が書き込まれる。さらに、同じように、7番目から12番目の分割キーデータ“11”“00”“11”“01”“10”“00”をアドレスとして、7番目から12番目の分割メモリ102g〜メモリ102lの6個の追加分割メモリにも、エントリアドレス“00”が書き込まれる。
これにより、キーデータ“2699”で指定された検索メモリマット102に、エントリアドレス“00”が書き込まれたことになる。
同様にして、エントリアドレス“01”に書き込まれるべきデータとして入力されたキーデータ“2691”は、バイナリで表わすと“10 10 10 00 00 11”となる。そして、上述のとおりキーデータ選択ビットに従って、入力されたキーデータに追加分割メモリに格納すべきビットデータを重複して追加する。つまり、12ビットのキーデータに、12ビットのデータを下位ビットとして追加する。追加後のキーデータは、“10 10 10 00 00 11 10 00 11 01 10 00”(24ビット)となる。この24ビットのキーデータを、12個の分割キーデータに分割する。そして、この分割キーデータを12分割された検索メモリマット102のy軸にアクセスするためのアドレスとして、検索メモリマット102にデータを書き込む。この際、検索メモリマット102に書き込まれるデータは、エントリアドレスとして入力された“01”である。
図44(b)では、キーデータ“2691”に、上記のとおりキーデータ選択ビットに従って12ビットが下位に追加され、その後12分割されて、“10”“10”“10”“00”“00”“11”“10”“00”“11”“01”“10”“00”として表わされる。これらの分割キーデータをアドレスとして、分割された検索メモリマット102に対して、エントリアドレス“01”が書き込まれる。つまり、最初の分割キーデータ“10”をアドレスとして、最初の分割メモリ102aにエントリアドレス“01”が書き込まれる。この際、既に、キーデータ“2699”の書き込みによって、分割メモリ102aのアドレスには、エントリアドレス“00”が書き込まれており、アドレスの衝突が生じる。図44(b)において、塗りつぶして示された部分が衝突の生じている部分であり、この衝突の生じた部分において、分割キーデータは、「配慮しない(don’t care)」として処理される。図44(b)では、さらに、2番目の分割キーデータ“10”をアドレスとして、2番目の分割メモリ102bにエントリアドレス“01”を書き込む。また、3番目から6番目の分割キーデータ“10”“00”“00”“11”をアドレスとして、それぞれ、3番目から6番目の分割メモリ102c、102d、102e、102fに、エントリアドレス“01”を書き込む。ただし、2番目から4番目と6番目のアドレスは既に、キーデータ“2699”の書き込みによって使用されているため、「配慮しない(don’t care)」として処理される。続いて、7番目から12番目の分割キーデータ“10”“00”“11”“01”“10”“00”をアドレスとしてそれぞれ、7番目から12番目の6個の追加分割メモリ102g〜102lの6個に、エントリアドレス“01”を書き込む。ただし、8番目から12番目のアドレスも既に、分割キーデータ“2699”の書き込みによって使用されているため、「配慮しない(don’t care)」として処理される。
これにより、キーデータ“2691”で指定された分割メモリに、エントリアドレス“01”が書き込まれたことになる。同様にして、キーデータ“1859”“1440”をアドレスとして、検索メモリマット102にエントリアドレス“10”“11”を書き込む。図44(c)に示されるように、キーデータ“1859”の書き込みによっては、4番目から6番目、9番目の分割メモリでアドレスの衝突が生じている。また、図44(d)に示されるように、キーデータ“1440”では、1、3、5、7、8、12番目の分割メモリでアドレスの衝突が生じている。
図44(e)は、確認メモリマット(SRAM)104の書き込み状態を示している。
図44(e)に示されるように、確認メモリマットには、エントリアドレス“00”にキーデータ”2699”のバイナリデータが書き込まれ、エントリアドレス“01”にキーデータ“2691”のバイナリデータが書き込まれ、エントリアドレス“10”にキーデータ“1859”のバイナリデータが書き込まれ、エントリアドレス”11”にキーデータ“1440”のバイナリデータが書き込まれている。
図45は、本発明の[実施例6]における検索メモリマット102の検索動作を示している。図45は、図44に示したアドレスの重なった部分、つまり、濃く網掛けされたエントリを「配慮しない(don’t care)」とした場合に、入力データが正しく検索されているか否かを表わしている。
図45(a)では、検索データとしてキーデータ“2699”が入力された場合を示している。キーデータ“2699”は、バイナリデータ“10 10 10 00 10 11”で表わされる。そして、図44で説明したとおり、キーデータ選択ビットに従い、12ビットのキーデータに、12ビットのデータを下位ビットとして追加する。追加後のキーデータは、“10 10 10 00 10 11 11 00 11 01 10 00”(24ビット)となる。この分割キーデータは、12分割された検索メモリマット102のy軸に割り当てられた「エントリアドレスを登録する場所」にアクセスするためのアドレスとしてそれぞれ用いられる。最初の分割キーデータ“10”をアドレスとして、最初の分割メモリ102aのデータであるエントリアドレスを読み出すと、アドレス衝突が生じているため、「配慮しない(don’t care)」処理を行なう。よって、分割メモリマット102aからの読み出しデータは検索の対象外とされる。2番目の以降の分割キーデータについても同様に、これらの分割キーデータをアドレスとして、検索メモリマット102からエントリアドレスを読み出す。ここで、5番目の分割キーデータ“10”をアドレスとして、5番目の分割メモリ102eからデータを読み出すとエントリアドレス“00”が読み出される。また、7番目の分割キーデータ“11”をアドレスとして、7番目の分割メモリマット102gを読み出すとエントリアドレス“00”が得られる。その他の分割キーデータについては、「配慮しない(don’t care)」処理によって検索の対象外とされる。
図45(a)に示されるように、検索データとしてのキーデータ“2699”によって検索メモリマット102から読み出されるデータの内、検索に使用されるデータは、5番目の分割メモリ102eと7番目の分割メモリ102gの出力であるエントリアドレス“00”ということになる。
確認メモリマット104を用いて、エントリアドレス“00”をアドレスとしてアクセスされるキーデータの値を読み出すと、“10 10 10 00 10 11”となり、検索データとしてのキーデータと一致することが分かる。つまり、制御回路105は、確認メモリマット104からの出力データであるキーデータと検索データを比較して一致することを確認した上で、エントリアドレスを出力する。
図45(b)は、検索データとしてキーデータ“1859”が入力された場合を示している。キーデータ“1859”は“01 11 01 00 00 11”で表わされる。そして、図44で説明したとおり、キーデータ選択ビットに従って、12ビットのキーデータに、12ビットのデータを下位ビットとして追加する。追加後のキーデータは、“01 11 01 00 00 11 00 10 11 11 00 10”(24ビット)となる。これらの分割キーデータは、12分割された検索メモリマット102のy軸に割り当てられた「エントリアドレスを登録する場所」にアクセスするためのアドレスとしてそれぞれ用いられる。最初の分割キーデータ“01”をアドレスとして、最初の分割メモリ102aのデータを読み出すが、アドレス衝突が生じているため、「配慮しない(don’t care)」処理を行なうようにされている。よって、最初の分割キーデータは、検索の対象外となる。2番目の分割キーデータ“11”をアドレスとして、2番目の分割メモリ102bからデータを読み出すと、エントリアドレス“10”が読み出される。3番目の分割キーデータ”01”をアドレスとして、3番目の分割メモリ102cからデータを読み出すと、エントリアドレス“10”が得られる。
4番目の“00”、5番目の“00”、6番目の“11”、7番目の“00”、8番目の“10”、9番目の“11”をそれぞれアドレスとした分割メモリへのアクセスは、配慮しない(don’t care)」処理によって、検索の対象外となる。また、10番目の分割キーデータ“11”をアドレスとして、10番目の分割メモリ102jからデータを読み出すと、エントリアドレス“10”が読み出される。11番目の分割キーデータ“00”をアドレスとして、11番目の分割メモリ102kからデータを読み出すと、エントリアドレス“10”が読み出される。また、12番目の分割キーデータ“10”をアドレスとして、12番目の分割メモリ102lからデータを読み出すと、エントリアドレス“10”が得られる。
図45(b)で示したように、検索データとしてのキーデータ“1859”によって検索メモリマット102から読み出される値は、分割された2番目の分割メモリ102b、3番目の分割メモリ102c、10番目の分割メモリ102j、11番目の分割メモリ102k、及び12番目の分割メモリ102lの出力であるエントリアドレス“10”ということになる。
確認メモリマット104を用いて、エントリアドレス“10”によりアクセスされるキーデータの値を読み出すと、“01 11 01 00 00 11”となり、検索データとしてのキーデータと一致することが分かる。つまり、制御回路105は、確認メモリマット104からの出力データであるキーデータが検索データと比較して一致することを確認した上で、エントリアドレスを出力する。
図45(c)は、検索データとしてのキーデータとして“2691”が入力された場合を示している。検索データとしてキーデータ“2691”は、バイナリデータ“10 10 10 00 00 11”で表わされる。そして、図44で説明したとおりキーデータ選択ビットに従って、12ビットのキーデータに、12ビットのデータを下位ビットとして追加する。追加後のキーデータは、“10 10 10 00 00 11 10 00 11 01 10 00”(24ビット)となる。分割キーデータは、12分割された検索メモリマット102’のy軸に割り当てられた「エントリアドレスを登録する場所」にアクセスするためのアドレスとしてそれぞれ用いられる。最初の分割キーデータ“10”をアドレスとして、最初の分割メモリ102aのデータを読み出すと、アドレス衝突しているため「配慮しない(don’t care)」処理が行なわれる。2番目の”10”、3番目の“10”、4番目の“00”、5番目の“00”、6番目の“11”をアドレスとして、各分割メモリ102b、102c、102d、102e、102fのデータを読み出すと、アドレス衝突しているため「配慮しない(don’t care)」処理が行なわれる。
続いて7番目の分割キーデータ“10”をアドレスとして、7番目の分割メモリ102gからデータを読み出すと、エントリアドレス“01”が読み出さる。他方、8番目の“00”、9番目の“11”、10番目の“01”、11番目の“10”、12番目の“00”をアドレスとして、各分割メモリのデータを読み出すと、アドレス衝突しているため「配慮しない(don’t care)」処理が行なわれて、検索の対象外とされる。
図45(c)で示したように、検索データとしてのキーデータ“2691”によって検索メモリマット102から読み出される値は、7番目の分割メモリ102gの出力のエントリアドレス“01”ということになる。
確認メモリマット104を用いて、エントリアドレス“01”によりアクセスされるキーデータの値を読み出すと、“10 10 10 00 00 11”となり、検索データとしてのキーデータと一致することが分かる。つまり、制御回路105は、確認メモリマット104からの出力データであるキーデータが検索データと比較して一致することを確認して、エントリアドレスを出力する。
ここで、図45(c)を用いて、仮に検索メモリマット102を分割メモリ102a〜102fの6個に分割した場合を考える。この場合、検索データとしてのキーデータ“2691”が入力されると、この“2691”はバイナリデータ“10 10 10 00 00 11”で表わされる。分割キーデータは、6分割された検索メモリマットのy軸に割り当てられた「エントリアドレスを登録する場所」にアクセスするためのアドレスとしてそれぞれ用いられる。1番目の“10”、2番目の“10”、3番目の“10”、4番目の“00”、5番目の“00”、6番目の“11”をアドレスとして各分割メモリのデータを読み出すと、いずれもアドレス衝突しているため「配慮しない(don’t care)」処理が行なわれる。このため、この条件において、検索メモリマット102を分割メモリ102a〜102fの6個に分割するだけでは不十分であり、検索メモリマットから検索結果を出力することが不可能となる。
よって、本実施例によれば、上述のようにして分割メモリの数を増加することで、衝突頻度を低減することができる、また、本実施例によれば、検索結果を出力することができる可能性を高めることができる。
以上、本発明を実施例に沿って説明したが、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。つまり、上記した実施例は本発明を分かりやすくするために、本発明の内容を詳細に説明したものである。従って、本発明は、上記説明した全ての構成を備えるものに限定されるものではない。
例えば、上記の説明では、本発明の半導体装置をSRAMによって構成した例を説明したが、本発明は他のメモリ回路でも同様に実現可能である。特に、本発明としては、高速不揮発性メモリ、例えばMRAMを好適に用いることができる。