以下、図面を参照し、本発明の実施の形態を詳しく説明する。図中同一又は相当部分には同一符号を付してその説明は繰り返さない。
[第1の実施の形態]
[全体構成]
図1を参照して、本発明の実施の形態による連想メモリ100は、メモリアレイ部10と、WTA(Winner Take All)回路20とを備える。
メモリアレイ部10は、メモリ部1と、行デコーダ2と、列デコーダ3と、Read/Write回路4と、検索データ保存回路5とを備える。
メモリ部1は、ユニットデータ保存回路(Unit Strage:US)US11〜US1W、US21〜US2W、・・・、USR1〜USRWを備える。ここで、Wは2以上の自然数であり、Rは2以上の自然数である。以降の説明では、任意のユニットデータ保存回路をUSij(1≦i≦W、1≦j≦R)と記載する。
ユニットデータ保存回路(Unit Strage:US)US11〜US1W、US21〜US2W、・・・、USR1〜USRWは、行列状に配置される。同じ行に配列された複数のユニットデータ保存回路USijは保存回路Siを構成する。たとえば、第1行に配列されたユニットデータ保存回路US11〜US1Wは、保存回路S1を構成する。同様に、第2行に配列されたユニットデータ保存回路US21〜US2Wは、保存回路S2を構成し、第R行に配列されたユニットデータ保存回路USR1〜USRWは、保存回路SRを構成する。
各行の保存回路SiはWビット幅の参照データを記憶する。具体的には、第1行に対応した保存回路S1は、Wビット幅の参照データを記憶する。第2行に対応した保存回路S2は、保存回路S1が保存する参照データと異なる他の参照データを記憶する。保存回路Si内の複数
のユニットデータ保存回路USijの各々は、参照データのうちの対応する1ビットデータを記憶する。
メモリ部1はさらに、各保存回路S1〜SRに対応した複数の比較回路C1〜CRを備える。
比較回路C1は、第1行に配置された保存回路S1に対応する。比較回路C2は、第2行に配置された保存回路S2に対応する。同様に、比較回路CRは、第R行に配置された保存回路SRに対応する。
比較回路C1は、複数のユニットデータ比較回路(Unit Comparator:UC)UC11〜UC1Wを備える。同様に、第2行に対応した比較回路C2は、複数のユニットデータ比較回路UC21〜UC2Wを備える。同様に、第3行〜第R行に対応した比較回路C3〜CRは、複数のユニットデータ比較回路UC31〜UC3W、・・・、UCR1〜UCRWを備える。
ユニットデータ比較回路UC11〜UC1Wは、それぞれ、ユニットデータ保存回路US11〜US1Wに対応して配置される。ユニットデータ比較回路UC21〜UC2Wは、それぞれ、ユニットデータ保存回路US21〜US2Wに対応して配置される。以下、同様にして、ユニットデータ比較回路UC31〜UC3W、・・・、UCR1〜UCRWは、それぞれ、ユニットデータ保存回路US31〜US3W、・・・、USR1〜USRWに対応して配置される。
以降の説明では、任意の比較回路をCi、任意のユニットデータ比較回路をUCijと記載する。
各行の比較回路Ciは、外部からWビット幅の検索データを受け付ける。そして、検索データと、対応する保存回路Siに保存されたWビット幅の参照データとを比較する。より具体的には、比較回路Ciは、検索データと参照データとの距離(本例ではハミング距離)を求める。各行の参照データと検索データとの比較は、並列に実行される。つまり、各比較回路Ciは、対応する第i行の参照データと検索データとの比較を、並列(同時)に実行する。
メモリ部1はさらに、パルス生成回路を備える。パルス生成回路は、複数の発振回路(Oscillating Circuit:OC)OC1〜OCRを備える。以降、任意の発振回路をOCiと記載する。
各発振回路OCiは、各行に配置される。具体的には、発振回路OC1は、保存回路S1及び比較回路C1に対応する。発振回路OC2は、保存回路S2及び比較回路C2に対応する。同様に、発振回路OCRは、保存回路SR及び比較回路CRに対応する。
発振回路OCiは、比較回路Ciにより求められたハミング距離に応じた発振周波数を有するパルス信号Piを出力する。具体的には、発振回路OC1は、第1行(保存回路S1)に保存された参照データと検索データとのハミング距離に応じた発振周波数を有するパルス信号P1を出力する。発振回路OC2は、第2行の参照データと検索データとのハミング距離に応じた発信周波数を有するパルス信号P2を出力する。同様に、発信回路OCRは、第R行の参照データと検索データとのハミング距離に応じた発信周波数を有するパルス信号PRを出力する。
要するに、複数の発振回路OC1〜OCRを備えたパルス生成回路は、各行の参照データに応じたパルス信号P1〜PRを生成する。パルス信号Piの発信周波数は、対応する行(第i行)の参照データと検索データとのハミング距離に対応する。具体的には、ハミング距離が小さい程、発振周波数は高く、ハミング距離が大きい程、発振周波数は低い。
行デコーダ2は、メモリ部1の行方向のアドレスを指定する。列デコーダ3は、メモリ部1の列方向のアドレスを指定する。Read/Write回路4は、行デコーダ2及び列デコーダ3により指定されたユニットデータ保存回路US11〜US1W、US21〜US2W、・・・、USR1〜USRWに参照データを書き込む。Read/Write回路4はさらに、検索データを検索データ保存回路5に書き込む。
検索データ保存回路5は、Read/Write回路4によって書き込まれた検索データを保存する。
WTA回路20は、パルス生成回路(発信回路OC1〜OCR)で生成された複数のパルス信号P1〜PRを受ける。WTA回路20は、パルス信号P1〜PRの発振周波数に基づいて、検索データに最も類似する参照データを決定する。WTA回路20は、パルス信号P1〜PRのうち、発振周波数が最大のパルス信号Piを特定する。そして、特定されたパルス信号Piに対応する行(第i行)に記憶された参照データを、検索データに最も類似した参照データに決定する。
WTA回路20は、複数の発振回路OC1〜OCRに対応した複数の判定回路(Judgment Circuit)JC1〜JCRを備える。以降、任意の判定回路をJCiと記載する。複数の判定回路JC1〜JCRは、対応するパルス信号P1〜PRを受ける。パルス信号P1〜PRのうち、発振周波数が最大のパルス信号Piの電圧レベルが最も早く変化する。判定回路JC1〜JCRのうち、最も早くレベル変化したパルス信号Piを受けた判定回路JCiは、活性化された判定信号(Judgment Signal)JSiを出力する。2番目以降にレベル変化した信号Piを受けた残りの判定回路JCiは、非活性化された判定信号JSiを出力する。活性化された判定信号JSは「1」を示し、電圧VDDからなる。非活性化された判定信号JSiは「0」を示し、電圧Vref(Vref<VDD)からなる。活性化された判定信号JSiは、対応する行(第i行)の参照データが検索データに最も類似した参照データ(以降、この参照データをWinnerという)であることを示す。また、非活性化された判定信号JSiは、対応する行の参照データが検索データに最も類似した参照データではない(以降、この参照データをLoserという)ことを示す。
たとえば、メモリ部1に記憶された複数の参照データのうち、保存回路S2に記憶された参照データが検索データに最も類似していると仮定する。この場合、パルス信号P1〜PRのうち、パルス信号P2の発振周波数が最も高い。そのため、WTA回路20は、判定信号JS1〜JSRのうち、判定信号JS2のみを活性化し、残りの判定信号JSiを非活性化する。
以上のとおり、連想メモリ100は、従来の連想メモリのように、参照データと検索データとの距離の違いを電流及び電圧差に置き換えない。代わりに、距離の違いをパルスの発振周波数の違いに置き換える。つまり、距離が異なれば発振周波数も異なる。発振周波数が異なれば、パルスが最初に立ち上がる(又は立ち下がる)時刻が異なるため、距離の違いが時間差に置き換わる。連想メモリ100は、この時間差に基づいて、検索データに最も類似する参照データを決定する。距離の違いを電流及び電圧差に変換する場合、アナログ処理が実行される。この場合、上述のとおり、WinnerとLoserを分けるために利用されるトランジスタ素子の特性ばらつきにより誤検索が生じる場合がある。これに対して、連想メモリ100は、距離の違いを発振周波数の違い(時間差)に置き換えてWinnerを決定する。つまり、デジタル処理によりWinnerを決定する。そのため、トランジスタ素子の特性のばらつき影響を受けにくく、誤検索が抑制される。
以下、保存回路Si内のユニットデータ保存回路USijと、比較回路Ci内のユニットデータ比較回路UCijと、パルス生成回路内の発振回路OCiと、WTA回路20とについて詳述する。以降の説明では、Wビット幅の参照データを構成する各ビットデータを参照ビットデータという。また、Wビット幅の参照データを構成する各ビットデータを検索ビットデータという。つまり、参照データはW個の参照ビットデータを有し、検索データは、参照ビットデータに対応するW個の検索ビットデータを有する。
[ユニットデータ保存回路及びユニットデータ比較回路]
図2を参照して、ユニットデータ保存回路US11は、SRAM素子を構成する。ユニットデータ保存回路US11は、データをラッチするラッチ回路210と、n型MOSトランジスタ201、202とを含む。n型MOSトランジスタ201及び202は直列に接続される。そして、n型MOSトランジスタ201と202との間には、ラッチ回路210が接続される。n型MOSトランジスタ201及び202のゲートは、それぞれワード線WL1に接続される。
ワード線WL1は行デコーダ2に接続される。行デコーダ2がワード線WL1を選択したとき、n型MOSトランジスタ201及び202はオンになる。このとき、n型MOSトランジスタ201は、外部から入力された参照データを構成する1ビットの参照ビットデータDをラッチ回路210に供給する。n型MOSトランジスタ202は、参照ビットデータDの反転信号である参照ビットデータDQを受け、ラッチ回路210に供給する。
ラッチ回路210は、2つのインバータI1及びI2を含む。インバータI1の入力端子はインバータI2の出力端子と接続される。インバータI1の出力端子はインバータI2の入力端子と接続される。インバータI1はn型MOSトランジスタ201から参照ビットデータDを受ける。インバータI2はn型MOSトランジスタ202から参照ビットデータDQを受ける。そのため、ラッチ回路210は1ビットの参照ビットデータDをラッチする。参照ビットデータDは「1」又は「0」である。参照ビットデータDが「1」とは、n型MOSトランジスタ201からラッチ回路210に供給される信号がHレベルである場合を示し、参照ビットデータDが「0」とは、信号がLレベルであることを示す。
ユニットデータ比較回路UC11には、外部から検索ビットデータCAMが入力される。検索ビットデータCAMは、検索データを構成する1ビットのデータであり、ユニットデータ保存回路US11に対応する。ユニットデータ比較回路UC11は、ユニットデータ保存回路US11で保存されている参照ビットデータDと、検索ビットデータCAMとを比較して、距離(ハミング距離)を求める。そして、求めた距離を対応する発振回路OC1に出力する。
ユニットデータ比較回路UC11は、2つのトランスファゲートTG1、TG2とインバータI3とを含む。
各トランスファゲートTG1、TG2は、n型MOSトランジスタと、p型MOSトランジスタとで構成される。トランスファゲートTG1内のp型MOSトランジスタのゲートは、参照ビットデータDをラッチ回路210から受け、n型MOSトランジスタのゲートは参照ビットデータDQをラッチ回路210から受ける。トランスファゲートTG2内のp型MOSトランジスタのゲートは、ラッチ回路210から参照ビットデータDQをラッチ回路210から受け、n型MOSトランジスタのゲートは参照ビットデータDをラッチ回路210から受ける。
参照ビットデータDのレベル(「1」又は「0」)に応じて、トランスファゲートTG1及びTG2のいずれか一方がオンになり、他方はオフになる。トランスファゲートTG1は外部から検索ビットデータCAMを受ける。トランスファゲートTG2は、検索ビットデータCAMの反転信号である検索ビットデータCAMQを外部から受ける。
ノードN1はオンされたトランスファゲートTG1又はTG2から出力された信号を、パスイネーブル信号path_enaとして出力する。インバータI3はパスイネーブル信号path_enaを反転したパスイネーブル信号path_enaqを出力する。つまり、ユニットデータ比較回路UC11は、2つの信号path_ena、path_enaqを出力する。2つの信号path_ena、path_enaqは、参照ビットデータDと検索ビットデータCAMとの比較結果であり、ハミング距離に相当する。
参照ビットデータDと検索ビットデータCAMとが一致する場合、信号path_enaはLレベルになり、信号path_enaqはHレベルになる。たとえば、参照ビットデータD及び検索ビットデータCAMがいずれも「1」である場合、トランスファゲートTG1がオフになり、TG2がオンになる。また、参照ビットデータD及び検索ビットデータCAMがいずでも「0」である場合、トランスファゲートTG1がオンになり、TG2がオフになる。その結果、信号path_enaはLレベルになり、信号path_enaqはHレベルになる。
一方、参照ビットデータDと検索ビットデータCAMとが一致しない場合、信号path_enaはHレベルになり、信号path_enaqはLレベルになる。たとえば、参照ビットデータDが「1」であり、検索ビットデータCAMが「0」である場合、トランスファゲートTG1がオフになり、TG2がオンになる。参照ビットデータDが「0」であり、検索ビットデータCAMが「1」である場合、トランスファゲートTG1がオンになり、TG2がオフになる。その結果、信号path_enaはHレベルになり、信号path_enaqはLレベルになる。
信号path_ena及びpath_enaqは、発振回路OC1生成されるパルス信号P1の発振周波数を決定する。
ユニットデータ保存回路US12〜US1W、US21〜US2W、・・・USR1〜USRWは、ユニットデータ保存回路US11と同じ構成からなる。また、ユニットデータ比較回路UC12〜UC1W、UC21〜UC2W、・・・UCR1〜UCRWは、ユニットデータ比較回路UC11と同じ構成からなる。
[発振回路]
発振回路OC1は、保存回路S1に記憶されたWビット幅の参照データとWビット幅の検索データとの距離(ハミング距離)に応じた発振周波数のパルス信号P1を出力する。具体的には、参照データと検索データとの距離が小さい程、つまり、参照データが検索データに類似する程、発振回路OC1は、高い発振周波数のパルス信号P1を出力する。
図3は発振回路OC1の機能ブロック図である。図3を参照して、発振回路OC1は、複数の遅延回路(Delay Circuit)DC11〜DC1Wを含む。遅延回路DC11〜DC1Wはそれぞれ、ユニットデータ比較回路UC11〜UC1Wに対応する。
遅延回路DC11〜DC1Wは直列に接続される。直列された複数の遅延回路DC11〜DC1Wのうち、端に位置する遅延回路DC11の出力端子は出力ノードN10に接続される。また、他方の端に位置する遅延回路DC1Wの入力端子は、NANDゲート300の出力端子と接続される。NANDゲート300は、発振回路OC1を起動する役割を有する。NANDゲート300の一方の入力端子には、発振回路OC1を起動するためのイネーブル信号ENAが入力される。また他方の入力端子は出力ノードN10と接続される。
イネーブル信号ENAが活性化(Hレベル)されたとき、NANDゲート300は、入力信号を反転して出力する反転回路として機能する。一方、各遅延回路DC11〜DC1Wは、受けた信号を反転して外部に出力する。つまり、各遅延回路DC11〜DC1Wも上述の反転回路として機能する。したがって、発振回路OC1は、リング状に連結された奇数個の反転回路(起動時のNANDゲート300及び遅延回路DC11〜DC1W)を備える。
図4に遅延回路DC11の回路図を示す。遅延回路DC11は、複数のインバータI10〜I14と、インバータの段数を選択する段数選択回路SEとを備える。段数選択回路SEは、2つのトランスファゲートTG10及びTG11を備える。トランスファゲートTG10は、Hレベルの信号path_enaとLレベルの信号path_enaqとを受けたときにオンする。つまり、対応するユニットデータ比較回路UC11から出力された参照ビットデータDと検索ビットデータCAMとが一致しないとき、トランスファゲートTG10はオンする。
トランスファゲートTG11は、Lレベルの信号path_enaとHレベルの信号path_enaqとを受けたときにオンする。つまり、参照ビットデータDと検索ビットデータCAMとが一致したとき、スイッチ回路TG11はオンになる。
複数のインバータI10〜I14は直列に接続される。インバータI13とインバータI14との間にはトランスファゲートTG10が接続される。そして、スイッチ回路TG11は、インバータI10の入力端子とインバータI14の入力端子との間に接続される。
段数選択回路SEは、対応するユニットデータ比較回路UC11の比較結果に応じてインバータの段数を選択する。ユニットデータ比較回路UC11での比較の結果、参照ビットデータDと検索ビットデータCAMとが一致する場合、トランスファゲートTG10がオフになり、TG11がオンになる。そのため、遅延回路DC11の入力信号は1段のインバータI14を介して外部に出力される。
一方、参照ビットデータDと検索ビットデータCAMとが異なる場合、トランスファゲートTG10がオンになり、TG11がオフになる。そのため、遅延回路DC11の入力信号は、5段のインバータを介して外部に出力される。つまり、参照ビットデータDと検索ビットデータとが一致しない方が、遅延時間が長くなる。
要するに、遅延回路DC11は、インバータ段数が少ないパス(ショートパス)と、インバータ段数が多いパス(ロングパス)と、参照ビットデータと検索ビットデータとのハミング距離に応じてショートパス及びロングパスのいずれかを選択する段数選択回路とを備える。
他の遅延回路DC12〜DC1Wも、遅延回路DC11と同じ構成を有する。したがって、発振回路OC1では、保存回路S1に記憶されたWビット幅の参照データがWビット幅の検索データに類似するほど、つまり、参照データと検索データとの距離が小さい程、インバータの段数が少なくなる。なぜなら、Lレベルの信号path_enaとHレベルの信号path_enaqとを出力するデータユニット比較回路UC1jの数が相対的に多くなるからである。インバータの段数が少ないほど、遅延時間は短くなる。したがって、発振回路OC1は、発振周波数の高いパルス信号P1を出力する。
一方、保存回路S1に記憶された参照データと検索データとの距離が遠い程、発振回路OC1内で利用されるインバータの段数は多くなる。そのため、発振回路OC1は発振周波数の低いパルス信号P1を出力する。
以上の構成により、発信回路OC1は、保存回路S1の参照データと検索データとの距離に応じた発振周波数のパルス信号P1を出力する。発振回路OC1は、参照データと検索データとの距離が小さい程、利用するインバータの段数を減らす。そのため、参照データが検索データに類似する程、高い発振周波数を有するパルス信号P1を出力する。
発振回路OC2〜OCRはそれぞれ、発振回路OC1と同じ構成を有する。したがって、発振回路OC1〜OCRのうち、発振周波数が最大となるパルス信号Piを出力した発振回路OCiに対応する保存回路Siに、検索データに最も類似した参照データが格納されている。
NANDゲート300は、ノードN10上の信号とイネーブル信号ENAとを受け、NAND論理演算結果を遅延回路DC1Wに出力する。上述のとおり、NANDゲート300は、イネーブル信号ENAに応じて発振回路OC1を起動又は停止する。イネーブル信号ENAが非活性(Lレベル)のとき、NANDゲート300は常にHレベルの信号を出力する。そのため、発振回路OC1から出力される信号はHレベルで一定である。つまり、発振回路OC1は、パルス信号を出力しない。
[WTA回路]
WTA回路20は、発振回路OC1〜OCRからパルス信号P1〜PRを受ける。そして、パルス信号P1〜PRの発振周波数に基づいて、検索データに最も類似した参照データ(Winner)を決定する。
図5を参照して、WTA回路20は、複数の判定回路JC1〜JCRと、プリチャージ回路30と、ラッチ指示ノードN40とを備える。各判定回路JC1〜JCRは、ラッチ指示ノードN40に接続される。
プリチャージ回路30は、イネーブル信号ENAの反転信号であるイネーブル信号ENAQを受けたとき、ラッチ指示ノードN40に電荷を供給し、充電する。これにより、ラッチ指示ノードN40の電圧はHレベル(VDD)に上昇する。
判定回路JC1は、対応する発振回路OC1の出力信号を受ける。判定回路JC2は、発振回路OC2の出力信号を受ける。同様に、判定回路JC3〜JCRは、発振回路OC3〜OCRの出力信号をそれぞれ受ける。
判定回路JC1は、インバータI20と、遅延回路251と、ラッチ回路252と、放電回路250と、クロック生成回路253とを備える。
インバータI20は、発信回路OC1の出力信号を受け、反転してノードN30に出力する。放電回路250は、n型MOSトランジスタからなる。n型MOSトランジスタは、ラッチ指示ノードN40と接地電圧が供給されるGNDノードとの間に接続され、そのゲートはノードN30に接続される。放電回路250は、n型MOSトランジスタのゲートにHレベルの信号が入力されたとき、ラッチ指示ノードN40を放電する。つまり、判定回路JC1は、パルス信号P1を受けたとき、放電回路250によりラッチ指示ノードN40の電圧レベルを接地電圧(Lレベル)まで低下する。
クロック生成回路253は、ラッチ指示ノードN40がLレベルとなったときにクロック信号CLKを出力する。クロック生成回路253は、インバータI21からなる。インバータI21の入力端子はラッチ指示ノードN40に接続される。クロック生成回路253は、ラッチ指示ノードN40がLレベルになったとき、Hレベルのクロック信号CLKを出力する。
ラッチ回路252は、Dフリップフロップで構成される。ラッチ回路252は、Hレベルのクロック信号CLKを受けたとき、インバータI20の出力信号をラッチして、判定信号JS1を外部に出力する。
遅延回路251は、発振回路OC1からパルス信号P1が出力された場合、クロック生成回路253がクロック信号を出力するときにパルス信号P1の反転信号がラッチ回路252に入力されるように調整する。ただし、遅延回路251はなくてもよい。
判定回路JC2〜JCRは、判定回路JC1と同じ構成を有する。各判定回路JC1〜JCRの放電回路250及びクロック生成回路253は、いずれもラッチ指示ノードN40と接続されている。したがって、いずれかの判定回路JCの放電回路250がラッチ指示ノードN40を放電すれば、全ての判定回路JC1〜JCRのクロック生成回路253はHレベルのクロック信号CLKを出力する。
発振回路OC1〜OCRの出力信号にパルスが形成されていないとき、つまり、発振回路OCiがパルス信号Piを出力する前、パルス信号P1〜PRはHレベルで一定である。ここで、発振回路OC1〜OCRのうち、発振回路OC2が最大の発振周波数のパルス信号P2を出力したと仮定する。
この場合、発信回路OC2の出力信号が、他の発振回路OCiの出力信号よりも早く、電圧レベルがHレベルからLレベルに変化する。そのため、各判定回路JCi内の放電回路250のうち、判定回路JC2の放電回路250が最も早く動作してラッチ指示ノードN40をLレベルにする。
このとき、判定回路JC2のラッチ回路252はHレベルの信号を受ける。しかしながら、他の判定回路JC1、JC3〜JCRのラッチ回路252はLレベルの信号を受けている。ラッチ指示ノードN40がLレベルになると、各判定回路JCi内のクロック生成回路253が一斉にHレベルのクロック信号CLKを出力する。そのため、判定回路JC2内のラッチ回路252のみがHレベルの信号をラッチし、その他の判定回路JC1、JC3〜JCR内のラッチ回路252はLレベルの信号をラッチする。
以上の工程により、判定回路JC2はWinnerを示すHレベルの判定信号JS2を出力し、他の判定回路JC1、JC3〜JCRはLoserを示すLレベルの判定信号JS1、JS3〜JSRを出力する。
以上のとおり、本実施の形態による連想メモリ100は、参照データと検索データとの距離に応じた発振周波数のパルス信号を生成する。そして、パルス信号の発振周波数に基づいて、Winnerとなる参照データを決定する。
参照データと検索データとの距離を発振周波数に変換すれば、従来の連想メモリのようにトランジスタ素子の特性のばらつきによる誤検索が発生しにくい。発振回路OCiは複数段のインバータを備える。インバータを構成するトランジスタ素子の特性にばらつきが生じても、インバータ段数は複数存在するため、特性ばらつきの影響を抑えることができる。つまり、トランジスタ素子の特性にばらつきが生じても、発振周波数のばらつきを抑制することができる。
図6は発振回路OCi内のインバータの段数と発振周波数のばらつきとの関係を示すグラフである。図6のグラフは次の方法で求めた。初めに、インバータ段数が17段、33段、65段及び129段の発振回路をそれぞれ作製した。使用するCMOSトランジスタのゲート長は90nmとした。
作製された各発振回路に種々の電源電圧を用いてパルス信号を生成した。生成されたパルス信号の発振周波数を測定した。測定された発振周波数の平均値を1として正規化し、標準偏差を求めた。図6中の縦軸は、各発振回路の標準偏差(%)を示す。図6を参照して、インバータ段数が多いほど、発振周波数のばらつきが抑えられることが分かる。
[第2の実施の形態]
上述のとおり、第1の実施の形態による連想メモリ100では、WTA回路20が、パルス信号P1〜PRの発振周波数に基づいて、Winnerとなる参照データを決定する。したがって、最大の発振周波数を有するパルス信号Piと、2番目に高い発振周波数を有するパルス信号Piとの発振周波数の差が大きいほど、Winnerの誤検出が起こりにくい。
図7を参照して、第2の実施の形態による連想メモリ110は、連想メモリ100と比較して、メモリ部10とWTA回路20との間に、分周部35を新たに備える。連想メモリ110のその他の構成は、連想メモリ100と同じである。
分周部35は、複数の分周回路(Frequency Divider)FD1〜FDRを備える。連想メモリ110のその他の構成は、連想メモリ100と同じである。
分周回路FD1は、発振回路OC1のパルス信号P1を受ける。そして、パルス信号P1の周波数を所定の分周比で分周する。本例では、分周回路FD1は、パルス信号P1を1.5分周する。ただし、分周比は1.5に限られない。他の分周回路FD2〜FDRも分周回路FD1と同じ分周比でパルス信号P2〜PRを分周する。
WTA回路20内の各判定回路JC1〜JCRは、分周されたパルス信号P1〜PRを受ける。WTA回路20は、分周されたパルス信号P1〜PRに基づいて、Winnerを決定する。
パルス信号Piを所定の分周比で分周すれば、最も高い発振周波数のパルス信号Piの波形変化と、次に高い発振周波数のパルス信号Piの波形変化との差を大きくすることができる。図8を用いてこの点を説明する。
図8は、各分周回路FDiが分周比1.5でパルス信号Piを分周した場合の、パルス信号P1及びP2の波形を示す図である。図中のP1(FD1)は、分周回路FD1から出力されたパルス信号P1を示す。図中のP2(FD2)は、分周回路FD2から出力されたパルス信号P2を示す。図中のP1は、分周回路FD1に入力されるパルス信号P1を示し、図中のP2は、分周回路FD2に入力されるパルス信号P2を示す。
ここで、パルス信号P1の周波数が最も高く、P2の周波数が次に高いと仮定する。図8に示すとおり、分周回路に入力される前のパルス信号P1とP2との最初の波形変化の時間差はTd1である。
一方、分周されたパルス信号P1(FD1)とP2(FD2)との最初の波形変化の時間差はTd2となる。時間差Td2は時間差Td1よりも大きい。要するに、分周回路FD1〜FDRは、Winnerとなるパルス信号の最初の波形変化と、次に周波数の高いパルス信号の最初の波形変化との時間差を増大する。そのため、WTA回路20はより正確に、Winnerを決定できる。
[第3の実施の形態]
連想メモリ100内のWTA回路20では、図5に示すように、全ての判定回路JC1〜JCRが1つのラッチ指示ノードN40に接続される。WTA回路20のラッチ指示ノードN40は、全ての判定回路JC1〜JCRに接続されるために長い。そのため、ラッチ指示ノードN40の負荷容量は大きい。したがって、放電回路250内のn型MOSトランジスタがオンになってから、ラッチ指示ノードN40の電圧レベルが接地電圧に落ちるまでに時間がかかる。ラッチ指示ノードN40の電圧レベルを落とすのに時間がかかれば、Winnerの決定も時間がかかる。
そこで、本実施の形態による連想メモリは、WTA回路20の代わりに図9に示す新たなWTA回路25を備える。その他の構成は連想メモリ100と同じである。
図9を参照して、WTA回路25は、複数の判定ブロックJBを備える。複数の判定ブロックJBは、トーナメント式に複数段に接続される。図9では、最下段である第1段から、最上段である第n段(nは2以上の自然数)まで、n段のトーナメント式となっている。
最下段に当たる第1段目に配列された複数の判定ブロックJB1は、R個の第1パルス判定回路PJC1〜PJCRを含む。換言すれば、R個の第1パルス判定回路PJC1〜PJCRは、複数の判定ブロックJB1に分割される。
各判定回路JB1は、R個未満の第1パルス判定回路PJCiとパルス受付判定ノードN50とを備える。第1パルス判定回路PJC1〜PJCRの各々は、図5中の判定回路JC1〜JCRと比較して、クロック生成回路253を有さない。その他の構成は判定回路JC1〜JCRと同じである。各第1パルス判定回路PJC1〜PJCRは、対応する発振回路OC1〜OCRからパルス信号P1〜PRをそれぞれ受ける。
各判定ブロックJB1はさらに、パルス受付判定ノードN50と、プリチャージ回路30とを備える。プリチャージ回路30は、イネーブル信号ENAQを受けたとき、パルス受付判定ノードN50を充電する。
パルス受付判定ノードN50は、判定ブロックJB1に含まれる複数の第1パルス判定回路PJCi(ただし、R個未満)に接続される。より具体的には、各第1パルス判定回路PJCi内の放電回路250に接続される。
図5中のラッチ指示ノードN40に接続される判定回路JCiはR個である。これに対して図9中の各パルス受付判定ノードN50に接続される第1パルス判定回路PJCiはR個未満である。パルス受付判定ノードN50は、ラッチ指示ノードN40と比較して、負荷容量が小さい。
トーナメント式に接続された判定ブロックのうち、第2段目〜第n−1段目に配列される判定ブロックJB2〜JBn−1の構成について説明する。図9を参照して、第2段目に配列される複数の判定ブロックJB2の各々は、プリチャージ回路30と、パルス受付判定ノードN50と、複数の第2パルス判定回路PJとを含む。
各第2パルス判定回路PJは、対応する判定ブロックJB1内のパルス受付判定ノードN50に接続される。第2パルス判定回路PJは、インバータI20と、放電回路250とを備える。第2パルス判定回路PJは、自身が属する判定ブロックJB2内のパルス受付判定ノードN50に接続される。より具体的には、第2パルス判定回路PJ内の放電回路250がパルス受付判定ノードN50と接続される。プリチャージ回路30は、イネーブル信号ENAQを受けたとき、パルス受付判定ノードN50を充電する。
第3段目〜第n−1段目に配列された各判定ブロックJBの構成も同じである。第n−1段目に配列された判定ブロックJB内の第2パルス判定回路PJは、前段、つまり、第n−2段目に配列された複数の判定ブロックJBのうち、対応する判定ブロックJB内のパルス受付判定ノードN50に接続される。
最上段である第n段には、1つの判定ブロックJBnが配置される。判定ブロックJBnは、判定ブロックJB2と比較して、クロック生成回路31を新たに備える。他の構成は判定ブロックJB2と同じである。
クロック生成回路31は、パルス受付判定ノードN50がLレベルになったとき、クロック信号CLKを出力する。クロック生成回路31内の構成は図5中のクロック生成回路253と同じである。つまり、クロック生成回路31はインバータI21を備える。
以上のとおり、WTA回路25は、第1段〜第n段までの複数段のトーナメント式に接続された判定ブロックJB1〜JBnを備える。各パルス受付判定ノードN50に接続される第1又は第2パルス判定回路の数は、図5中のラッチ指示ノードN40に接続される判定回路の数よりも少ない。したがって、各パルス受付判定ノードN50の負荷容量は、ラッチ指示ノードN40の負荷容量よりも小さい。そのため、パルス受付判定ノードN50をHレベルからLレベルに下げるのにかかる時間は、ラッチ指示ノードN40よりも短くすることができる。
要するに、トーナメント式に判定ブロックJB1〜JBnを配置すれば、パルス受付判定ノードN50の負荷容量を小さくできる。そのため、判定ブロックJB1内が最も高い周波数のパルス信号Piを受けてから、クロック信号CLKが出力されるまでの時間を短くできる。換言すれば、Winnerの決定時間を短くできる。
[第4の実施の形態]
第1の実施の形態では、データユニット保存回路USijごとに遅延回路DCijを設けた。しかしながら、このような構成では、使用されるトランジスタ素子数が多くなる。そのため、1つの遅延回路を複数のデータユニット保存回路に対応させてもよい。
本実施の形態による連想メモリは、発振回路OC1〜OCRに代えて、新たな発振回路OSC1〜OSCRを備える。その他の構成は連想メモリ100と同じである。
図10を参照して、発振回路OSC1は、発振回路OC1と比較して、遅延回路DC11、DC12、・・・DC1Wに代えて、遅延回路DLC11、DLC12、・・・DCL1T(Tは1以上の自然数)と、距離判定回路DJ11〜DJ1Tとを備える。距離判定回路DJ11〜DJ1Tは、遅延回路DLC11〜DLC1Tに対応する。その他の構成は発振回路OC1と同じである。
活性化されたNANDゲート300は入力信号を反転する。また、遅延回路DLC11〜DLC1Tの各々も、入力信号を反転する。したがって、NANDゲート300及び遅延回路DLC11〜DLC1Tは、反転回路として機能する。つまり、発振回路OSC1は、奇数個の反転回路を備える。したがって、遅延回路DLC11〜DLC1Tは偶数個含まれている。奇数個の反転回路(NANDゲート300及び遅延回路DLC11〜DLC1T)はループ状に直列に連結されている。
各遅延回路DLC11〜DLC1Tは、2つのデータユニット比較回路UCijの比較結果に基づいて、パルス信号P1の発振周波数を決定する。
各距離判定回路DJ11〜DJ1Tは、2つのデータユニット比較回路UCijから比較結果(2つの信号path_ena及び信号path_enaq)を受ける。そして、比較結果からハミング距離を求める。そして、求めたハミング距離に応じた信号を、対応する遅延回路DLC11〜DLC1Tに出力する。
具体的には、距離判定回路DJ11は、ユニットデータ比較回路UC11及びUC12から比較結果を受ける。比較の結果、ユニットデータ保存回路US11及びUS12に格納された参照ビットデータDの全てが対応する検索ビットデータCAMと一致するとき(つまり、ハミング距離=0のとき)、距離判定回路DJ11は、Hレベルの信号S0を出力する。そして、Lレベルの信号S1及びS2を出力する。また、信号S0、S1及びS2の反転信号/S0、/S1及び/S2を出力する。
2つの参照ビットデータのうち、いずれか1つが対応する検索ビットデータと一致するとき(つまり、ハミング距離=1のとき)、距離判定回路DJ11は、Hレベルの信号S1を出力し、Lレベルの信号S0及びS2を出力する。
2つの参照ビットデータのいずれも対応する検索ビットデータと一致しないとき(距離=2であるとき)、距離判定回路DJ11は、Hレベルの信号S2を出力し、Lレベルの信号S0及びS1を出力する。
上述のとおり、遅延回路DLC11〜DCL1TとNANDゲート300は、ループ状に直列に接続される。複数の遅延回路DLC11〜DLC1Tのうち、端に位置する遅延回路DLC11の出力端子は出力ノードN10に接続される。また、他方の端に位置する遅延回路DLC1Tの入力端子は、NANDゲート300の出力端子と接続される。
遅延回路DLC11の構成を図11に示す。遅延回路DLC11は、第1の遅延段70と、第2の遅延段71と、インバータI71と、段数選択回路72とを備える。段数選択回路72は、トランスファゲートTG71、TG72及びTG73を備える。段数選択回路72は、距離判定回路DJ11からの信号S0〜S2に応じて、利用するインバータの段数を選択する。換言すれば、段数選択回路72は、ハミング距離に応じて遅延時間(発振周波数)を選択する。
第1の遅延段70及び第2の遅延段71はそれぞれ、直列に接続された偶数個のインバータを含む。第1の遅延段70は、前段の遅延回路DLC12の出力を受け、遅延する。第2の遅延段71は、第1の遅延段70の出力を受け、遅延する。
段数選択回路72内のトランスファゲートTG71〜TG73は並列に接続される。トランスファゲートTG71〜TG73はそれぞれ、n型MOSトランジスタとp型MOSトランジスタとで構成される。トランスファゲートTG71は、対応する距離判定回路DJ11からHレベルの出力信号S0とLレベルの出力信号/S0を受けるとオンになる。ここで、出力信号/S0は、信号S0の反転信号である。要するに、トランスファゲートTG71は、データユニット保存回路US11及びUS12に格納された参照データがいずれも検索データと一致したとき(距離=0のとき)、オンになる。このとき、遅延回路DLC11は、入力信号をトランスファゲートTG71に通してインバータI71に出力する。
トランスファゲートTG72は、Hレベルの信号S1とLレベルの信号/S1(信号S1の反転信号)とを受けるとオンになる。つまり、距離=1のときにオンになる。このとき、遅延回路DLC11は、入力信号を第1の遅延段70に供給する。そして、第1の遅延段70の出力をインバータI71に供給する。
トランスファゲートTG73は、Hレベルの信号S2とLレベルの信号/S2(信号S2の反転信号)とを受けるとオンになる。つまり、距離=2のときにオンになる。このとき、トランスファゲートTG13は、第2の遅延段71の出力をインバータI71に供給する。
要するに、発振回路DLC11は、3つのパス(遅延段のないショートパス、遅延段71を有するミドルパス、遅延段71及び72を有するロングパス)と、3つのパスのうちいずれか1つを選択する段数選択回路72とを備える。各パスは、それぞれ異なる遅延時間が設定されている。発振回路DLC11は、2つの参照ビットデータと検索ビットデータとの比較結果に応じて、3つのパスの中から1つのパスを選択する。上述の例では、距離=0のとき、遅延回路DLC11は、ショートパスを選択する。このとき、利用するインバータの段数は1つ(インバータI71のみ)である。距離=1のとき、遅延回路DLC11は、ミドルパスを選択する。このとき、インバータの段数は5つである(第1の遅延段70+インバータI71)。距離=2のとき、遅延回路DLC11は、ロングパスを選択する。このとき、インバータ段数は9個である(第1の遅延段70、第2の遅延段71及びインバータI71)。
なお、遅延回路DLC12〜DLC1Tは遅延回路DLC11と同じ構成を有する。
上述のとおり、遅延回路DLCは複数の比較結果に応じてインバータの段数を変える。そのため、発振回路DLC11は、発振回路DC11と比較して、利用するトランジスタ素子数を減らすことができる。さらに、参照データと検索データが一致した場合(距離=0の場合)のインバータ段数を減らすことができる。そのため、より高周波のパルス信号を出力できる。その結果、WTA回路20がWinnerを決定する時間をより短くできる。
上述の例では、遅延回路DLCは、2つの遅延段を含み、利用する遅延段数に応じて3つの遅延時間を設定できる。遅延回路DLCは、2つの参照ビットデータと2つの検索ビットデータから得られる2つの比較結果に応じて、利用する遅延段数を選択する。その結果、3つの遅延時間の中から1つの遅延時間が選択される。
遅延回路DLCはL(Lは2以上の自然数)個の参照ビットデータと検索ビットデータと比較結果に応じて遅延時間を設定することもできる。より具体的には、遅延回路DLCは、複数の遅延段を含み、利用する遅延段数に応じてL+1個の遅延時間を設定できる。遅延回路DLCは、L個の比較結果に応じて、L+1個の遅延時間(パス)の中から1つの遅延時間(パス)を選択する。遅延回路DLCに入力された信号は、選択された遅延時間だけ遅延して次段の遅延回路DLCに出力される。要するに、L個の参照ビットデータと検索ビットデータとを比較する場合、遅延回路DLCは、L+1個のパスを備える。各パスは異なる遅延時間が設定される。
なお、図12に示すように、第1の遅延段70及び第2の遅延段71の初段のインバータをトライステート型のインバータにしてもよい。トライステートインバータI701は、Hレベルの信号S1又はS2を受けると活性化する。また、トライステートインバータI702は、Hレベルの信号S2を受けると活性化する。距離=0のとき、第1の遅延段70及び第2の遅延段71は動作せず、距離=1のとき、第2の遅延段71は動作しない。したがって、消費電力を削減できる。
トライステートインバータI701及びI702が非活性の場合、各遅延段70及び71の2段目のインバータの入力ノードは浮遊状態となる。そのため、ノイズ等の影響でノードのレベルが変動し、インバータが動作してしまう場合がある。図13に示すように、トライステートインバータI701及びI702に代えて、NORゲート721及び722を用いれば、2段目のインバータの入力ノードが浮遊状にならない。そのため、ノイズ等の影響で2段目以降のインバータが動作するのを防止できる。
NORゲート721は、Lレベルの信号/S1又はLレベルの信号/S2を受けると、NOTゲート(インバータ)として動作する。また、NORゲート722は、Lレベルの信号/S2を受けると、NOTゲートとして動作する。
さらに、図14に示すように、第2の遅延段71とトランスファゲートTG73との間にダミーのNORゲート722を配置してもよい。この場合、各パスの配線に係る容量を同じにできる。そのため、設計時において、各パスの遅延回路の設計を同じにすることができる。
[第5の実施の形態]
上述の連想メモリ100は、検索データに最も近い参照データを検索する。しかしながら、検索データに近い参照データを、検索データに近い順に複数検索できる方が好ましい場合がある。
図15を参照して、本実施の形態による連想メモリ200は、連想メモリ100と比較して、新たにフィードバック回路50を備える。その他の構成は連想メモリ100と同じである。
フィードバック回路50は、複数のフィードバック回路51〜5Rを備える。各フィードバック回路51〜5Rは、制御信号CONを受けて起動する。
フィードバック回路51は、Hレベルの判定信号JS1を受けたとき、Hレベルのフィードバック信号を出力する。発振回路OC1の出力ノードは、Hレベルのフィードバック信号を受けて、充電される。つまり、フィードバック回路51は、Hレベルの判定信号JS1を受けると、発振回路OC1の出力ノードをチャージする。そのため、発振回路OC1の出力信号はHレベルで固定される。たとえパルス信号P1が出力されても、パルス信号P1が無効化される。
フィードバック回路51は、判定信号JS1がLレベルのとき、発振回路OC1の出力ノードをチャージしない。しかし、いったん判定信号JS1がHレベルになると、それ以降、Hレベルのフィードバック信号を発振回路OC1の出力ノードに供給し続ける。
同様に、フィードバック回路52〜5Rはそれぞれ、対応する判定信号JS2〜JSRがHレベルになるまで、発振回路OC2〜OCRの出力ノードをチャージしない。しかし、いったん判定信号JS2〜JSRがHレベルになると、それ以降、発振回路OC2〜OCRの出力ノードをチャージし続ける。
以上の構成を有する連想メモリ200の動作は次のとおりである。
連想メモリ200は初めに、1回目の検索を開始する。このとき、連想メモリ200は検索データに最も類似する参照データを検索する。
初めに、各比較回路C1〜CRに検索データが入力される。その後、イネーブル信号ENAがHレベルとなり、発振回路OC1〜OCRが動作を開始する。ここで、保存回路S2に記憶された参照データが検索データに最も類似すると仮定する。この場合、判定信号JS2がHレベルとなり、その他の判定信号JS1、JS3〜JSRはLレベルとなる。
フィードバック回路51〜5Rは、制御信号CONを受けて起動する。フィードバック回路52は、Hレベルの判定信号JS2を受けると、発振回路OC2の出力ノードをチャージする。その結果、発振回路OC2の出力ノードの電圧レベルはHレベルに維持される。そのため、発振回路OC2から出力されるパルス信号P2は無効化される。
第1回目の検索が終了したとき、発振回路OC1〜OCRに入力されるイネーブル信号ENAはいったん非活性(Lレベル)となる。
続いて、連想メモリ200は、第2回目の検索を実行する。このとき、イネーブル信号ENAが再びHレベルになる。そこで、発振回路OC1〜OCRは第1回目と同じ比較結果に基づいて、パルス信号P1〜PRを再び出力する。
しかしながら、発振回路OC2の出力ノードは、フィードバック回路52によりHレベルに維持されている。したがって、パルス信号P2は無効化され、発振回路OC2の出力信号Hレベルのままとなる。そのため、WTA回回路20は、パルス信号P2以外の他の信号P1、P3〜PRに基づいて、最も検索データに近い参照データを決定する。ここで、保存回路S1に記憶された参照データが検索データに最も近いと仮定する。この場合、判定信号JS1がHレベルとなり、その他の信号JS2〜JSRはLレベルとなる。
第2回目の検索によりHレベルとなった信号JS1に対応する参照データ(つまり、保存回路S1に記憶された参照データ)は、検索データに2番目に類似する参照データに相当する。
判定信号JS1がHレベルになると、フィードバック回路51は発振回路OC1の出力ノードをチャージする。要するに、フィードバック回路51は発振回路OC1のパルス信号P1を無効化する。第3回目の検索時では、発振回路OC1及びOC2はパルス信号を出力できない。そのため、既に検索された参照データ(保存回路S1及びS2の参照データ)を除く他の参照データから、検索データに最も類似する参照データが検索される。検索された参照データは検索データに3番目に近いデータに相当する。
以上のとおり、連想メモリ200は、j回目(jは、1<j≦kを満たす整数、kは、2以上の整数)回目の検索において、j−1回目までにHレベルの判定信号JSiを出力した判定回路JCiに対応する発振回路OCiの出力を無効化する。これにより、検索処理を実行するごとに、検索データに近い参照データを、検索データに近い順に検索することができる。
[第6の実施の形態]
第5の実施の形態による連想メモリ200は、フィードバック回路50を用いて発振回路OCiの出力を無効化することにより、検索データに近い参照データを検索データに近い順に複数検索できる。しかしながら、1回の検索処理で1つの参照データしか検索できない。したがって、検索データに近い参照データの複数検索する場合、希望する参照データ数と同じ回数の検索処理を実行しなければならない。
図16に本実施の形態による連想メモリ300の機能ブロック図を示す。図16を参照して、連想メモリ300は、連想メモリ100と比較して、WTA回路20に代えて、カウンタ部40を備える。
カウンタ部40は、複数のカウンタ回路41〜4Rを備える。カウンタ回路41は、発振回路OC1のパルス信号P1を受ける。そして、パルス信号P1のパルスをカウントする。カウント数が所定数CT(たとえば10個)となったとき、カウント回路41はHレベルの判定信号JS1を出力する。
同様に、カウンタ回路42〜4Rはそれぞれ、発振回路OC2〜OCRのパルス信号P2〜PRを受ける。そして、各パルス信号P2〜PRのパルスをカウントする。カウント数が所定数CTとなったとき、カウンタ回路42〜4RはHレベルの判定信号JS2〜JSRを順次出力する。
上述のとおり、発振回路OC1〜OCRは、対応する参照データが検索データに類似するほど、パルス信号P1〜PRの発振周波数を高くする。カウンタ回路41〜4Rは、発振周波数が高いパルス信号P1〜PRを受けるほど早く、Hレベルの判定信号JS1〜JSRを出力する。したがって、判定信号JS1〜JSRは、対応する参照データが検索データに類似する順に、順次Hレベルに立ち上がる。Hレベルの判定信号JS1〜JSRの出力順に基づいて、カウンタ部40は、検索データに近い参照データを、検索データに近い順に決定できる。
以上のとおり、連想メモリ300は、1回の検索処理で、検索データに近い参照データを複数個検索することができる。
[第7の実施の形態]
上述の実施の形態では、ハミング距離を適用した場合の連想メモリについて説明した。しかしながら、本発明による連想メモリは、マンハッタン距離にも適用できる。
図17を参照して、連想メモリ400は、連想メモリ100と同様に、メモリアレイ部10と、WTA回路20とを備える。
メモリアレイ部10は、図1と同様に、メモリ部1と、行デコーダ2と、列デコーダ3と、Read/Write回路4と、検索データ保存回路5とを備える。
メモリ部1内のユニットデータ保存回路US11〜US1W、US21〜US2W、・・・、USR1〜USRWの各々は、参照データをKビット単位で保存する。
ここで、第i行(1≦i≦R)に配置されたユニットデータ保存回路USij(1≦j≦w)に注目する。第i行の保存回路Siに保存された参照データREFiのうち、ユニットデータ保存回路USijに保存されたデータを参照データREFijとする。つまり、第i行に保存された参照データREFiは、REFi1、REFi2、・・・REFij、・・・REFiwで構成される。また、外部から入力される検索データをSWとする。検索データSWは、SW1、SW2、・・・SWj、・・・SWwで構成される。
検索データSWと参照データREF
iとの間のマンハッタン距離は、次の式(1)で示される。
上述のとおり、ユニットデータ保存回路US
ijはkビットの参照データREF
ijを保存する。そのため、ユニットデータ保存回路US
ijはk個の記憶回路(たとえばSRAM素子)を備える。各記憶回路は、参照データREF
ijの各桁の参照ビットデータ(第1桁の参照ビットデータ〜最上位(第k桁)の参照ビットデータ)をそれぞれ記憶する。
ユニットデータ比較回路UCijは、対応するユニットデータ保存回路USijに保存された参照データREFij(kビット)と、検索データSWj(kビット)とのマンハッタン距離を算出する。
図18に、第1行(i=1)に配置されるユニットデータ保存回路とユニットデータ比較回路と発振回路との機能ブロック図を示す。
ユニットデータ保存回路US11は、K個の記憶回路SRAM11〜SRAM1Kを備える。記憶回路SRAM11には、参照データREF11の第1桁目の参照ビットデータが記憶されている。同様に、記憶回路SRAM1Kには、参照データREF11の第K桁目の参照ビットデータが記憶されている。
ユニットデータ比較回路UC11は、Kビット減算器410と、絶対値演算回路420とを備える。Kビット減算器410及び絶対値演算回路420は、検索データSW1と参照データREF11との差の絶対値を算出する。
具体的には、Kビット減算器410は、参照データREF11の第1桁目の参照ビットデータと、検索データSW1の第1桁目の検索ビットデータとを差分する。そして、絶対値演算回路420は、その差分値を絶対値に換算し、出力信号OJ1及び/OJ1として出力する。出力信号/OJ1は出力OJ1の反転信号である。
同様に、Kビット減算器410は、参照データREF11の第2桁目の参照ビットデータと検索データSW1の第2桁目の検索ビットデータとを差分する。そして、絶対値演算回路420は、その差分値を絶対値に換算し、出力信号OJ2及び/OJ2として出力する。Kビット減算器410及び絶対値演算回路420は、参照データREF11の第3桁目以降のビットデータについても同様に算出し、出力信号OJ3〜OJK及び/OJ3〜/OJKを出力する。
同じ第1行のデータユニット保存回路US11〜US1Wに格納された参照データREF11〜REF1Wと検索データSW1〜SWwの比較結果(出力信号OJ1〜OJK×W個分)は、全て、同じ発振回路OCM1に入力される。
発振回路OCM1は、比較回路C1の比較結果、つまり、求められた参照データREF1と検索データSWとのマンハッタン距離に応じて、出力するパルス信号P1の発振周波数を決定する。
発振回路OCM1の機能ブロック図を図19に示す。発振回路OCM1は偶数個の遅延回路DL101〜DL10Wと、NANDゲート300とを備える。偶数個の遅延回路DL101〜DL10WとNANDゲート300とは、動作時に、入力信号を反転する反転回路として機能する。したがって、発振回路OCM1は、ループ状に直列に連結された複数の反転回路を備える。遅延回路DL101の出力は外部に出力されると共に、NANDゲート300に入力される。つまり、遅延回路DL101〜DL10W及びNANDゲート300はリングオシレータを構成する。
遅延回路DL101はデータユニット保存回路US11に対応する。遅延回路DL102はデータユニット保存回路US12に対応する。以降、同様に、遅延回路DL103〜DL10Wは、データユニット保存回路US13〜US1Wにそれぞれ対応する。
遅延回路DL101の構成を図20に示す。遅延回路DL101は、複数の遅延回路DJ1〜DJKと、インバータI50とを備える。遅延回路DJ1〜DJK及びインバータI50は直列に接続される。
遅延回路DJ1は、遅延段DEL1と段数選択回路55とを備える。遅延段DEL1は、直列に接続された複数のインバータで構成される。遅延回路DJ1は、出力信号OJ1に応じて、利用するインバータ段数を選択する。換言すると、遅延回路DJ1は、信号OJ1に応じて遅延段DEL1を利用するか否かを選択する。
距離判定回路DJ1は、遅延回路DL102からの出力を受ける。そして、ユニットデータ比較回路UC11から出力された信号OJ1及び/OJ1に基づいて、ユニットデータ保存回路US11に保存された参照データREF11のうち、第1桁目の参照ビットデータの距離を求める。参照データREF11の第1桁目の参照ビットデータが、検索データSW1の第1桁目の検索ビットデータと一致するとき、信号OJ1はHレベルとなり、信号/OJ1はLレベルとなる。一方、参照データREF11の第1桁目の参照ビットデータが、検索データSW1の第1桁目の検索ビットデータと一致しないとき、信号OJ1はLレベルとなり、信号/OJ1はHレベルとなる。
段数選択回路55は、トランスファゲートGT10とGT11とを備える。トランスファゲートTG10及びTG11は並列に接続される。遅延段DEL1は、遅延回路DJ1の入力端子とトランスミッションゲートGT10との間に接続される。
参照データREF11の第1桁目の参照ビットデータと検索データSW1の第1桁目の検索ビットデータとが一致するとき、トランスファゲートTG11がオンになり、TG10がオフになる。この場合、入力信号は遅延段DEL1を通らずにトランスファゲートGT11を通過し、外部に出力される。
一方、参照データREF11の第1桁目の参照ビットデータと検索データSW1の第1桁目の検索ビットデータとが一致しないとき、トランスファゲートGT10がオンになる。この場合、入力信号は遅延段DEL1により設定された遅延時間ΔT1だけ遅延して、外部に出力される。
要するに、遅延回路DJ1は、2通りの遅延時間を設定でき、参照ビットデータと検索ビットデータとが異なる場合に2通りの遅延時間のうち、長い方の遅延時間を選択する。
遅延回路DJ2〜DJKも遅延回路DJ1と同様に動作する。各遅延回路DJ2〜DJkは、2通りの遅延時間を設定でき、参照ビットデータと検索ビットデータとの比較結果に応じて2通りの遅延時間のいずれかを選択する。そのため、遅延回路DL101は、kビットの参照ビットデータとkビットの検索ビットデータとの比較結果に基づいて、2k通りの遅延時間を設定できる。換言すると、遅延回路DL101は、互いに遅延時間の異なる2k通りのパスを備え、k個の参照ビットデータとk個の検索ビットデータとのマンハッタン距離に応じてパスを選択する。
遅延回路DJ2内の遅延段の遅延時間は、遅延段DEL1の2倍とする。つまり、桁が上がるに従って遅延時間ΔTを長く設定する。これにより、桁が最上位ビットに近いほど、長い遅延時間が設定される。つまり、マンハッタン距離が大きい程、遅延時間が長くなる。
各遅延回路DL102〜DL10Wも、遅延回路DL101と同じ構成を有し、同様の動作をする。そのため、発振回路OCM1は、保存回路S1に保存された参照データと検索データとのマンハッタン距離に応じた発振周波数の信号を出力する。具体的には、参照データと検索データとのマンハッタン距離が近い程、高い発振周波数の信号を出力する。
上述では第1行の保存回路S1、比較回路C1及び発振回路OCM1の構成及び動作を説明した。しかしながら、第2行目以降の保存回路S2〜SR、比較回路C2〜CR及び発振回路OCM2〜OCMRの構成及び動作も、保存回路S1、比較回路C1及び発振回路OCM1と同様である。
したがって、連想メモリ400は、連想メモリ100と同様に、距離に応じて発振周波数を変更できる。
[第8の実施の形態]
本発明による連想メモリは、ハミング距離やマンハッタン距離だけでなく、ユークリッド距離にも適用できる。
ユークリッド距離に適用される連想メモリの構成は、連想メモリ400と同様である。メモリ部1内のユニットデータ保存回路US11〜US1W、US21〜US2W、・・・、USR1〜USRWの各々は、参照データをKビット単位で保存する。第i行の保存回路Siに保存された参照データREFiのうち、ユニットデータ保存回路USijに保存されたデータを参照データREFijとする。つまり、第i行に保存された参照データREFiは、REFi1、REFi2、・・・REFij、・・・REFiwで構成される。また、外部から入力される検索データをSWとする。検索データSWは、SW1、SW2、・・・SWj、・・・SWwで構成される。
検索データSWと参照データREF
iとの間のユークリッド距離は、次の式(2)で示される。
ユニットデータ保存回路US
ijはKビットの参照データREF
ijを保存する。そのため、ユニットデータ保存回路US
ijはK個の記憶回路(SRAM素子)を備える。各記憶回路は、参照データREF
ijの各桁のビットデータ(第1桁のビットデータ〜最上位(第k桁)ビットデータ)をそれぞれ記憶する。
ユニットデータ比較回路UCijは、対応するユニットデータ保存回路USijに保存された参照データREFij(kビット)と、検索データSWj(kビット)とのユークリッド距離を算出する。
図21に、第1行(i=1)に配置されるユニットデータ保存回路とユニットデータ比較回路と発振回路との機能ブロック図を示す。
ユニットデータ保存回路US11は、K個の記憶回路SRAM11〜SRAM1Kを備える。記憶回路SRAM11には、参照データREF11の第1桁目のビットデータが記憶されている。同様に、記憶回路SRAM1Kには、参照データREF11の第K桁目のビットデータが記憶されている。
ユニットデータ比較回路UC11は、Kビット減算器410と、絶対値演算回路420と、比較電流信号生成回路430と、アナログスクエア回路440と、A/Dコンバータ450とを備える。
Kビット減算器410及び絶対値演算回路420は、検索データSW1と参照データREF11との差の絶対値を算出する。算出結果は、対応する比較電流信号生成回路430で絶対値に応じた値のアナログ電流に変換される。
変換されたアナログ電流はアナログスクエア回路440で2乗される。これにより、参照データREF11と、検索データSW1とのユークリッド距離がアナログ電流値で出力される。
A/Dコンバータ450は、出力されたアナログ電流をデジタル変換する。これにより、ユークリッド距離がnビットのデジタルデータで出力される。
発振回路OCE1は、発振回路OC1やOCM1と同様に、ユークリッド距離に応じた発振周波数のパルス信号P1を出力する。発振回路OCE1は、複数のインバータからなる遅延段と、段数選択回路とを備える。発振回路OCE1内の段数選択回路は、ユークリッド距離が小さいほど、使用するインバータ段数を少なく選択する。そのため、ユークリッド距離が小さいほど高い発信周波数のパルス信号P1が出力される。
第1行の保存回路S1内の他のユニットデータ保存回路US12〜US1W、ユニットデータ比較回路UC12〜UC1Wの動作も上述の通りである。また、第2行目以降の保存回路S2〜SR、比較回路C2〜CR及び発振回路OCE2〜OCERの構成及び動作も、保存回路S1、比較回路C1及び発振回路OCE1と同様である。したがって、ユークリッド距離を適用した連想メモリも、連想メモリ100と同様に、距離に応じて発振周波数を変更できる。
[第9の実施の形態]
上述の実施の形態において、WTA回路20(図5)やWTA回路25(図9)について説明した。しかしながら、WTA回路は、図5や図9に限定されない。
図22は、WTA回路の他の例を示す。図22を参照して、WTA回路350は、検知回路351と、複数の判定回路JC11〜JC1Rとを備える。判定回路JC11は発振回路OC1に対応し、発振回路OC1の出力信号を受ける。同様に、判定回路JC12は発振回路OC2に対応し、発振回路JC1Rは発振回路OCRに対応する。
判定回路JC11は、判定回路JC1と比較して、放電回路250及びクロック生成回路253を有さない。他の構成は判定回路JC1と同じである。判定回路JC12〜JC1Rの構成は、判定回路JC11と同じである。
検知回路351は、発信回路OC1〜OCRの出力を受け、最も早く出力されたパルス信号を検知する。検知回路351は、最も早く出力されたパルス信号を受けたとき、検知信号を出力する。より具体的には、検知回路351は、各判定回路JC11〜JC1R内のインバータI20の出力を受ける。そして、いずれかのインバータI20から最初にパルス信号を受けたとき、検知信号を出力する。
判定回路JC11〜JC12内のラッチ回路252は、インバータI20の出力を受ける。つまり、対応する発振回路OC1〜OCRの出力信号を受ける。そして、検知信号を受けたとき、発信回路OC1〜OCRからの出力信号をラッチする。
判定回路JC11が、最も早くパルス信号を受けるとき(つまり、発振回路OC1が最も周波数の高いパルス信号を出力するとき)、判定回路JC11内のラッチ回路252は、Hレベルの信号をラッチする。そして、他の判定回路JC12〜JC1R内のラッチ回路252は、Lレベルの信号をラッチする。以上の結果、判定回路JC11はWinnerを示すHレベルの判定信号JS1を出力し、他の判定回路JC12〜JC1Rは、Looserを示す判定回路JS2〜JSRを出力する。
検知回路350は、各判定回路JC11〜JC1R内のインバータI20の出力を受けるワイヤードOR回路であってもよいし、複数段のOR回路で構成されてもよい。
以上、本発明の実施の形態を説明したが、上述した実施の形態は本発明を実施するための例示に過ぎない。よって、本発明は上述した実施の形態に限定されることなく、その趣旨を逸脱しない範囲内で上述した実施の形態を適宜変形して実施することが可能である。