(57)【要約】  ｋ近傍法連想メモリ（１００）は、Ｒ個の参照データを保持しており、Ｒ個の参照データのそれぞれについて、与えられた検索データとの距離に応じたクロック数の経過後にアクティブとなるマッチ信号を出力するクロックカウント式連想メモリ（１０）と、クロックカウント式連想メモリから出力されるＲ個のマッチ信号のうちいずれかＫ個のマッチ信号がアクティブになったことを検出し、そのときのＲ個のマッチ信号を保持するｋ近傍検索回路（２０）と、Ｒ個の参照データのそれぞれのクラスを表すＲ個のクラスデータからｋ近傍検索回路が保持するアクティブのｋ個のマッチ信号のそれぞれに対応するｋ個のクラスデータを選択し、ｋ個のクラスデータをクラス別に分類した場合においてデータ数が最大となるクラスを判定するｋ近傍クラスタリング回路（３０）とを備えている。
2015011907.tif 000002
【特許請求の範囲】
【請求項１】
Ｒ個の参照データを保持しており、前記Ｒ個の参照データのそれぞれについて、与えられた検索データとの距離に応じたクロック数の経過後にアクティブとなるマッチ信号を出力するクロックカウント式連想メモリと、
前記クロックカウント式連想メモリから出力されるＲ個のマッチ信号のうちいずれかｋ個のマッチ信号がアクティブになったことを検出し、そのときの前記Ｒ個のマッチ信号を保持するｋ近傍検索回路と、
前記Ｒ個の参照データのそれぞれのクラスを表すＲ個のクラスデータから前記ｋ近傍検索回路が保持するアクティブのｋ個のマッチ信号のそれぞれに対応するｋ個のクラスデータを選択し、前記ｋ個のクラスデータをクラス別に分類した場合においてデータ数が最大となるクラスを判定するｋ近傍クラスタリング回路とを備えている
ことを特徴とするｋ近傍法連想メモリ。
【請求項２】
前記ｋ近傍検索回路が、
前記クロックカウント式連想メモリから出力されるＲ個のマッチ信号のうちアクティブになったマッチ信号の数をカウントするマッチ信号カウント回路と、
前記マッチ信号カウント回路のカウント値がｋに一致したことを検出するｋ−マッチ信号数一致検出回路と、
前記クロックカウント式連想メモリから出力されるＲ個のマッチ信号が入力され、前記ｋ−マッチ信号数一致検出回路によって前記マッチ信号カウント回路のカウント値がｋに一致したことが検出されたときの前記Ｒ個のマッチ信号を保持するマッチ信号保持回路とを有する、請求項１に記載のｋ近傍法連想メモリ。
【請求項３】
前記クロックカウント式連想メモリが、前記ｋ−マッチ信号数一致検出回路によって前記マッチ信号カウント回路のカウント値がｋに一致したことが検出されたとき、動作を停止するように構成されている、請求項２に記載のｋ近傍法連想メモリ。
【請求項４】
前記ｋ−マッチ信号数一致検出回路が、前記マッチ信号カウント回路のカウント値がｋを超えたことを検出するように構成されている、請求項２および３のいずれか一つに記載のｋ近傍法連想メモリ。
【請求項５】
前記マッチ信号カウント回路が、複数の加算器がツリー状に接続されてなり、リーフノードの複数の加算器に前記Ｒ個のマッチ信号がそれぞれ入力され、ルートノードの加算器からカウント値を出力する加算器ツリー回路である、請求項２から４のいずれか一つに記載のｋ近傍法連想メモリ。
【請求項６】
前記ｋ近傍クラスタリング回路が、
前記Ｒ個のクラスデータを保持するクラスデータメモリと、
Ｘ個のクラスのそれぞれに対応するＸ個のクラスカウンタと、
前記ｋ近傍検索回路が保持するアクティブのｋ個のマッチ信号を順次選択し、当該選択したマッチ信号に対応するクラスデータを前記クラスデータメモリから読み出し、当該読み出したクラスデータによって表されるクラスに対応するクラスカウンタをカウントアップするクラス識別回路と、
前記Ｘ個のクラスカウンタの中からカウント値が最大のクラスカウンタを見つける最大カウンタ検出回路とを有する、請求項１から５のいずれか一つに記載のｋ近傍法連想メモリ。
【請求項７】
前記クラス識別回路が、前記ｋ近傍検索回路が保持するＲ個のマッチ信号のそれぞれに対応して設けられ、対応するマッチ信号がアクティブであることを検出して前記クラスデータメモリに当該マッチ信号に対応するクラスデータを選択する選択信号を出力するＲ個のマッチ信号検出回路を有し、
前記Ｒ個のマッチ信号検出回路が、動作開始信号を伝搬するように直列に接続されており、
前記Ｒ個のマッチ信号検出回路のそれぞれが、前記対応するマッチ信号が非アクティブのとき、入力された前記動作開始信号をすぐさま次段に伝達し、前記対応するマッチ信号がアクティブのとき、前記動作開始信号を受けて前記選択信号を出力してから前記動作開始信号を次段に伝達するように構成されている、請求項６に記載のｋ近傍法連想メモリ。
【請求項８】
前記最大カウンタ検出回路が、
初期値からカウント値をカウントダウンするダウンカウンタと、
前記Ｘ個のクラスカウンタのそれぞれに対応して設けられ、対応するクラスカウンタのカウント値と前記ダウンカウンタのカウント値との一致を検出するＸ個の一致検出回路とを有し、
前記ダウンカウンタのカウント値がカウントダウンされている間に、前記Ｘ個の一致検出回路のうちのいずれか一つによって前記ダウンカウンタのカウント値と対応するクラスカウンタのカウント値との一致が検出されたとき、前記ダウンカウンタのカウント動作を停止させる、請求項６および７のいずれか一つに記載のｋ近傍法連想メモリ。
【請求項９】
前記最大カウンタ検出回路が、２入力１出力の複数の最大値選出回路がツリー状に接続されてなり、リーフノードの複数の最大値選出回路に前記Ｘ個のクラスカウンタの各カウント値および各クラスカウンタの識別番号を結合した各信号が入力され、ルートノードの最大値選出回路から前記Ｘ個のクラスカウンタの最大カウント値およびそのクラスカウンタの識別番号を結合した信号を出力するトーナメント回路であり、
前記最大値選出回路が、第１のクラスカウンタのカウント値および前記第１のクラスカウンタの識別番号を結合した第１の信号、および第２のクラスカウンタのカウント値および前記第２のクラスカウンタの識別番号を結合した第２の信号を受け、前記第１および第２のクラスカウンタのうちカウント値が大きい方のクラスカウンタのカウント値およびそのクラスカウンタの識別番号を結合した第３の信号を出力する、請求項６および７のいずれか一つに記載のｋ近傍法連想メモリ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、連想メモリに関し、特に、ｋ近傍法を効果的に実現する連想メモリに関する。
【背景技術】
【０００２】
近年、文字認識・画像認識などに代表されるパターンマッチングを必要とするアプリケーションが大変注目されている。特に、パターンマッチングをＬＳＩ（Ｌａｒｇｅ  Ｓｃａｌｅ  Ｉｎｔｅｇｒａｔｅｄ  ｃｉｒｃｕｉｔ）上で実現することにより、将来、人工知能およびモバイル機器などの高機能アプリケーションに適用可能になり、この技術の実現は、非常に注目を浴びている。【０００３】
パターンマッチングでは、データベースに保存された複数の参照データの中から、完全に検索データと一致するパターンを検索する「完全一致検索処理」と、検索データと最も類似するパターンを検索する「最類似検索処理」とがある。【０００４】
前者は、ＣＡＭ（Ｃｏｎｔｅｎｔ  Ａｄｄｒｅｓｓａｂｌｅ  Ｍｅｍｏｒｙ）と呼ばれ、ネットワークルータのＩＰアドレステーブルのルーティングおよびプロセッサのキャッシュなどの実現に用いられる。人間の脳のような柔軟な検索・比較をコンピュータに処理させるには、後者の最類似検索処理を実現することが必要不可欠である。このような柔軟な比較を実現する機能を持つメモリのことを特に連想メモリ（Ａｓｓｏｃｉａｔｉｖｅ  Ｍｅｍｏｒｙ）と呼ぶ。【０００５】
連想メモリの例として、検索データと参照データとのマンハッタン距離またはユークリッド距離を用いて最類似検索処理を行うものが知られている（非特許文献１参照）。また、連想メモリにｋ近傍探索を取り入れたものが知られている（非特許文献２参照）。
【先行技術文献】
【特許文献】
【０００６】
【非特許文献１】S.Sasaki et al., "Digital Associative Memory for Word-Parallel Manhattan-Distance-Based Vector Quantization," ESSCIRC'2012, 2012, pp.185-188
【非特許文献２】M.A.Abedin et al., "Realization of K-Nearest-Matches Search Capability in Fully-Parallel Associative Memories," IEICE Trans. on Fundamentals, vol. E90-A, No.6, 2007, pp.1240-1243
【発明の概要】
【発明が解決しようとする課題】
【０００７】
パターン認識の分野において機械学習アルゴリズムとしてｋ近傍法がよく用いられる。ｋ近傍法は、パターン認識において高い信頼性を持つ。従来技術では、連想メモリにおいてｋ近傍探索を取り入れているものの、ｋ近傍法が実効的に実現されておらず、特にｋ近傍法に基づいたパターンのクラス分けまでは実現できていない。【０００８】
上記問題に鑑み、本発明は、ｋ近傍法を効果的に実現することができるｋ近傍法連想メモリを提供することを目的とする。
【課題を解決するための手段】
【０００９】
本発明の一局面に従ったｋ近傍法連想メモリは、Ｒ個の参照データを保持しており、前記Ｒ個の参照データのそれぞれについて、与えられた検索データとの距離に応じたクロック数の経過後にアクティブとなるマッチ信号を出力するクロックカウント式連想メモリと、前記クロックカウント式連想メモリから出力されるＲ個のマッチ信号のうちいずれかｋ個のマッチ信号がアクティブになったことを検出し、そのときの前記Ｒ個のマッチ信号を保持するｋ近傍検索回路と、前記Ｒ個の参照データのそれぞれのクラスを表すＲ個のクラスデータから前記ｋ近傍検索回路が保持するアクティブのｋ個のマッチ信号のそれぞれに対応するｋ個のクラスデータを選択し、前記ｋ個のクラスデータをクラス別に分類した場合においてデータ数が最大となるクラスを判定するｋ近傍クラスタリング回路とを備えている。【００１０】
これによると、クロックカウント式連想メモリによって検索データと各参照データとの距離がクロック数に変換されて、距離に応じたタイミングで各参照データに対応するマッチ信号がアクティブとなり、ｋ近傍検索回路によってより先にアクティブになったｋ個のマッチ信号が検出および保持され、ｋ近傍クラスタリング回路によって当該ｋ個のマッチ信号に対応するｋ個のクラスデータをクラス別に分類した場合にデータ数が最大となるクラスが判定される。このようにして、ｋ近傍法に基づいた検索データのクラス分けが実現される。
【発明の効果】
【００１１】
本発明によると、ＬＳＩ上にｋ近傍法を効果的に実装することができる。
【図面の簡単な説明】
【００１２】
【図１】図１は、本発明の一実施形態に係るｋ近傍法連想メモリの概略構成図である。
【図２】図２は、一例に係るクロックカウント式連想メモリの概略構成図である。
【図３】図３は、一例に係る距離／クロック数変換回路の概略構成図である。
【図４】図４は、一例に係るカウンタ一致検出回路の概略構成図である。
【図５】図５は、一例に係るマッチ信号のタイミングチャートである。
【図６】図６は、一例に係るマッチ信号カウント回路の概略構成図である。
【図７】図７は、一例に係るｋ−マッチ信号数一致検出回路の概略構成図である。
【図８】図８は、一例に係るマッチ信号保持回路の概略構成図である。
【図９】図９は、一例に係るクラスデータメモリ、クラスカウンタ、およびクラス識別回路の概略構成図である。
【図１０】図１０は、一例に係るマッチ信号検出回路の概略構成図である。
【図１１】図１１は、一例に係る最大カウンタ検出回路の概略構成図である。
【図１２】図１２は、別例に係る最大カウンタ検出回路の概略構成図である。
【図１３】図１３は、一例に係る最大値選出回路の概略構成図である。
【発明を実施するための形態】
【００１３】
以下、図面を参照しながら本発明を実施するための形態について説明する。なお、本発明は、以下の実施形態に限定されるものではない。
【００１４】
図１は、本発明の一実施形態に係るｋ近傍法連想メモリ１００の概略構成を示す。本実施形態に係るｋ近傍法連想メモリ１００は、クロックカウント式連想メモリ１０と、ｋ近傍検索回路２０と、ｋ近傍クラスタリング回路３０とを備えている。
【００１５】
クロックカウント式連想メモリ１０は、Ｒ個の参照データ（参照データ１，参照データ２，…，参照データＲ）を保持しており、これらＲ個の参照データのそれぞれについて、与えられた検索データとの距離に応じたクロック数の経過後にアクティブとなるマッチ信号を出力する回路である。なお、「距離」とはマンハッタン距離、ユークリッド距離などを含む。また、「アクティブ」とは、正論理では信号がＬレベルからＨレベルへと遷移することをいい、負論理では信号がＨレベルからＬレベルへと遷移することをいう。便宜のため、以下では正論理を前提に説明する。
【００１６】
ｋ近傍検索回路２０は、クロックカウント式連想メモリ１０から出力されるＲ個のマッチ信号のうちいずれかｋ個のマッチ信号がアクティブになったことを検出し、そのときのＲ個のマッチ信号を保持する回路である。
【００１７】
ｋ近傍クラスタリング回路３０は、Ｒ個の参照データのそれぞれのクラスを表すＲ個のクラスデータ（クラスデータ１，クラスデータ２，…，クラスデータＲ）からｋ近傍検索回路２０が保持するアクティブのｋ個のマッチ信号のそれぞれに対応するｋ個のクラスデータを選択し、これらｋ個のクラスデータをクラス別に分類した場合においてデータ数が最大となるクラスを判定する回路である。
【００１８】
ｋ近傍法連想メモリ１００は、上記３つの回路を備えることで、ｋ近傍法に基づいて、与えられた検索データがいずれのクラスに分類されるかを判定することができる。以下、各回路の構成例について説明する。
【００１９】
≪クロックカウント式連想メモリ１０の構成例≫
図２は、一例に係るクロックカウント式連想メモリ１０の概略構成を示す。クロックカウント式連想メモリ１０は、メモリ部１１、行デコーダ１２、列デコーダ１３、読出／書込回路１４、および検索データ保存回路１５を含む。
【００２０】
メモリ部１１は、参照データ保存回路（Ｓｔｏｒａｇｅ  Ｃｅｌｌ：ＳＣ）ＳＣ１１〜ＳＣ１Ｗ，ＳＣ２１〜ＳＣ２Ｗ，…，ＳＣＲ１〜ＳＣＲＷと、距離演算回路（絶対値差演算回路）（Ｄｉｓｔａｎｃｅ  Ｐｒｏｃｅｓｓｏｒ：ＤＰ）ＤＰ１１〜ＤＰ１Ｗ，ＤＰ２１〜ＤＰ２Ｗ，…，ＤＰＲ１〜ＤＰＲＷと、距離／クロック数変換回路ＤＣ１〜ＤＣＲとを含む。なお、ＷおよびＲは、それぞれ、２以上の整数である。
【００２１】
距離演算回路ＤＰ１１〜ＤＰ１Ｗは、それぞれ、参照データ保存回路ＳＣ１１〜ＳＣ１Ｗに対応して設けられる。また、距離演算回路ＤＰ２１〜ＤＰ２Ｗは、それぞれ、参照データ保存回路ＳＣ２１〜ＳＣ２Ｗに対応して設けられる。以下、同様にして、距離演算回路ＤＰＲ１〜ＤＰＲＷは、それぞれ、参照データ保存回路ＳＣＲ１〜ＳＣＲＷに対応して設けられる。
【００２２】
距離／クロック数変換回路ＤＣ１は、距離演算回路ＤＰ１１〜ＤＰ１Ｗに対応して設けられる。距離／クロック数変換回路ＤＣ２は、距離演算回路ＤＰ２１〜ＤＰ２Ｗに対応して設けられる。以下、同様にして、距離／クロック数変換回路ＤＣＲは、距離演算回路ＤＰＲ１〜ＤＰＲＷに対応して設けられる。
【００２３】
参照データ保存回路ＳＣ１１〜ＳＣ１Ｗ，ＳＣ２１〜ＳＣ２Ｗ，…，ＳＣＲ１〜ＳＣＲＷは、行デコーダ１２、列デコーダ１３、および読出／書込回路１４によって書き込まれた参照データを保存する。この場合、参照データ保存回路ＳＣ１１〜ＳＣ１Ｗは、Ｍ×Ｗ（Ｍは１以上の整数）ビットの参照データ１を保存し、参照データ保存回路ＳＣ２１〜ＳＣ２Ｗは、Ｍ×Ｗビットの参照データ２を保存し、以下、同様にして、参照データ保存回路ＳＣＲ１〜ＳＣＲＷは、Ｍ×Ｗビットの参照データＲを保存する。つまり、参照データ保存回路ＳＣ１１〜ＳＣ１Ｗ，ＳＣ２１〜ＳＣ２Ｗ，…，ＳＣＲ１〜ＳＣＲＷのそれぞれは、参照データのＭ×Ｗビットを保存する。
【００２４】
距離演算回路ＤＰ１１〜ＤＰ１Ｗは、参照データ保存回路ＳＣ１１〜ＳＣ１Ｗに保存されたＭ×Ｗビットの参照データ１と、検索データ保存回路１５に保存されたＭ×Ｗビットの検索データとの距離を後述する方法によって演算する。また、距離演算回路ＤＰ２１〜ＤＰ２Ｗは、参照データ保存回路ＳＣ２１〜ＳＣ２Ｗに保存されたＭ×Ｗビットの参照データ２と、検索データ保存回路１５に保存されたＭ×Ｗビットの検索データとの距離を後述する方法によって演算する。以下、同様にして、距離演算回路ＤＰＲ１〜ＤＰＲＷは、参照データ保存回路ＳＣＲ１〜ＳＣＲＷに保存されたＭ×Ｗビットの参照データＲと、検索データ保存回路１５に保存されたＭ×Ｗビットの検索データとの距離を後述する方法によって演算する。そして、距離演算回路ＤＰ１１〜ＤＰ１Ｗ、距離演算回路ＤＰ２１〜ＤＰ２Ｗ、…、距離演算回路ＤＰＲ１〜ＤＰＲＷにおける参照データと検索データとの距離の演算は、並列に行われる。
【００２５】
そして、距離演算回路ＤＰ１１〜ＤＰ１Ｗは、参照データ１と検索データとの距離をＭ×Ｗビットの距離信号として距離／クロック数変換回路ＤＣ１へ出力する。距離演算回路ＤＰ２１〜ＤＰ２Ｗは、参照データ２と検索データとの距離をＭ×Ｗビットの距離信号として距離／クロック数変換回路ＤＣ２へ出力する。以下、同様にして、距離演算回路ＤＰＲ１〜ＤＰＲＷは、参照データＲと検索データとの距離をＭ×Ｗビットの距離信号として距離／クロック数変換回路ＤＣＲへ出力する。
【００２６】
距離演算回路ＤＰ１１〜ＤＰ１Ｗのそれぞれは、参照データ１と検索データとの距離を次式を用いて演算する。
【００２７】
【数１】
2015011907.tif 000003
【００２８】
式（１）において、Ｄｒｊ（ｒ＝１〜Ｒ，ｊ＝１〜Ｗ）は、参照データと検索データとの距離（絶対値差）を表す。ｎＭｒは、参照データと検索データとのマンハッタン距離を示している。また、式(１)において、Ｉｎｊは、検索データであり、Ｒｅｒｊは、参照データである。各データＩｎｊ、Ｒｅｒｊは、それぞれ、Ｍビットからなる。
【００２９】
このように、距離演算回路ＤＰ１１〜ＤＰ１Ｗは、Ｍ×Ｗビットの参照データ１と、Ｍ×Ｗビットの検索データとの距離をＭビットずつ演算し、それぞれがＭビットのビット長を有するＷ個の距離信号Ｄ１ｊを距離／クロック数変換回路ＤＣ１へ出力する。
【００３０】
距離演算回路ＤＰ２１〜ＤＰ２Ｗ、…および距離演算回路ＤＰＲ１〜ＤＰＲＷも、同様にして、それぞれ、式（１）を用いて参照データ２〜Ｒと検索データとの距離を演算する。そして、距離演算回路ＤＰ２１〜ＤＰ２Ｗ、…および距離演算回路ＤＰＲ１〜ＤＰＲＷも、それぞれがＭビットのビット長を有するＷ個の距離信号Ｄ２ｊ〜ＤＲｊをそれぞれ距離／クロック数変換回路ＤＣ２〜ＤＣＲへ出力する。
【００３１】
距離／クロック数変換回路ＤＣ１は、距離演算回路ＤＰ１１〜ＤＰ１ＷからＷ個の距離信号Ｄ１ｊを受け、各距離信号Ｄ１ｊの二乗値の和に相当するクロック信号ＣＬＫのクロック数ＣＮ＿ｔｏｔａｌ１を後述する方法によってカウントする。そして、そのクロック数ＣＮ＿ｔｏｔａｌ１をカウントしたタイミングを示すマッチ信号Ｍ１を出力する。
【００３２】
距離／クロック数変換回路ＤＣ２は、距離演算回路ＤＰ２１〜ＤＰ２ＷからＷ個の距離信号Ｄ２ｊを受け、各距離信号Ｄ２ｊの二乗値の和に相当するクロック信号ＣＬＫのクロック数ＣＮ＿ｔｏｔａｌ２を後述する方法によってカウントする。そして、そのクロック数ＣＮ＿ｔｏｔａｌ２をカウントしたタイミングを示すマッチ信号Ｍ２を出力する。
【００３３】
以下、同様にして、距離／クロック数変換回路ＤＣＲは、距離演算回路ＤＰＲ１〜ＤＰＲＷからＷ個の距離信号ＤＲｊを受け、各距離信号ＤＲｊの二乗値の和に相当するクロック信号ＣＬＫのクロック数ＣＮ＿ｔｏｔａｌＲを後述する方法によってカウントする。そして、そのクロック数ＣＮ＿ｔｏｔａｌＲをカウントしたタイミングを示すマッチ信号ＭＲを出力する。
【００３４】
行デコーダ１２は、メモリ部１１の行方向のアドレスを指定する。列デコーダ１３は、メモリ部１１の列方向のアドレスを指定する。読出／書込回路１４は、参照データを行デコーダ１２および列デコーダ１３によって指定された参照データ保存回路ＳＣ１１〜ＳＣ１Ｗ，ＳＣ２１〜ＳＣ２Ｗ，…，ＳＣＲ１〜ＳＣＲＷに書き込むとともに、検索データを検索データ保存回路１５に書き込む。
【００３５】
検索データ保存回路１５は、読出／書込回路１４によって書き込まれた検索データ（Ｍ×Ｗビットのデータ）を保存する。
【００３６】
図３は、一例に係る距離／クロック数変換回路ＤＣ１の概略構成を示す。なお、距離／クロック数変換回路ＤＣ２〜ＤＣＲのそれぞれも、図３に示す距離／クロック数変換回路ＤＣ１と同様の構成を有する。距離／クロック数変換回路ＤＣ１は、バッファ１２１〜１２Ｗと、カウンタ一致検出回路１３１〜１３Ｗとを含む。
【００３７】
バッファ１２１は、ｋ近傍法連想メモリ１００の制御回路（図示せず）から検索開始信号ＳＢを受け、ｋ近傍法連想メモリ１００に内蔵されたクロック発生回路（図示せず）からクロック信号ＣＬＫを受ける。そして、バッファ１２１は、検索開始信号ＳＢがＬレベルからＨレベルに遷移すると、その受けたクロック信号ＣＬＫをバッファ１２２およびカウンタ一致検出回路１３１へ出力する。バッファ１２２は、クロック信号ＣＬＫをバッファ１２１から受け、カウンタ一致検出回路１３１から、後述するＨレベルの一致信号（ＤＥＴＥＣＴ１）を受けると、クロック信号ＣＬＫをバッファ１２３（図示せず）およびカウンタ一致検出回路１３２へ出力する。以下、同様にして、バッファ１２Ｗは、クロック信号ＣＬＫをバッファ１２Ｗ−１（図示せず）から受け、カウンタ一致検出回路１３Ｗ−１（図示せず）から、後述するＨレベルの一致信号（ＤＥＴＥＣＴＷ−１）を受けると、クロック信号ＣＬＫをカウンタ一致検出回路１３Ｗへ出力する。
【００３８】
カウンタ一致検出回路１３１〜１３Ｗは、それぞれ、距離演算回路ＤＰ１１〜ＤＰ１Ｗに対応して設けられる。そして、カウンタ一致検出回路１３１〜１３Ｗは、直列に接続される。ここで、カウンタ一致検出回路１３１〜１３Ｗの概略構成について説明する。
【００３９】
図４は、一例に係るカウンタ一致検出回路１３１〜１３Ｗの概略構成を示す。本例は、Ｗ＝２の場合を示している。カウンタ一致検出回路１３１は、クロック数変換回路１３１ａと、カウンタ１３１ｂと、一致検出回路１３１ｃとを含む。カウンタ一致検出回路１３２は、クロック数変換回路１３２ａと、カウンタ１３２ｂと、一致検出回路１３２ｃとを含む。以下、各構成の機能について説明する。
【００４０】
クロック数変換回路１３１ａは、距離演算回路ＤＰ１１からＭビットのビット長を有する距離信号Ｄ１１と、バッファ１２１からのクロック信号ＣＬＫとを受ける。クロック数変換回路１３１ａは、クロック信号ＣＬＫのクロック数をカウントし、距離信号Ｄ１１が示す距離と一致するクロック数を検出したタイミングで、カウンタ１３１ｂにＨレベルの一致検出信号を出力する処理を行う。クロック数変換回路１３１ａは、後述の一致検出回路１３１ｃからＨレベルの一致信号（ＤＥＴＥＣＴ１）が出力されるまで、この処理を繰り返し行い、Ｈレベルの一致信号（ＤＥＴＥＣＴ１）が出力されると動作を停止する。
【００４１】
カウンタ１３１ｂは、クロック数変換回路１３１ａからの一致検出信号が立ち上がるごとにカウンタ値をカウントアップさせ、そのカウント値を一致検出回路１３１ｃへ出力する。
【００４２】
一致検出回路１３１ｃは、カウンタ１３１ｂからカウンタ値を受け、距離演算回路ＤＰ１１からＭビットのビット長を有する距離信号Ｄ１１を受ける。一致検出回路１３１ｃは、距離信号Ｄ１１が示す距離とカウンタ値とを比較し、距離信号Ｄ１１が示す距離とカウンタ値とが一致するときに、Ｈレベルの一致信号（ＤＥＴＥＣＴ１）をクロック数変換回路１３１ａとバッファ１２２へ出力する。一致検出回路１３１ｃは、距離信号Ｄ１１が示す距離とカウンタ値とが一致しないときは、Ｌレベルの一致信号（ＤＥＴＥＣＴ１）をクロック数変換回路１３１ａとバッファ１２２へ出力する。
【００４３】
クロック数変換回路１３２ａは、バッファ１２２からクロック信号ＣＬＫを受けると駆動する。クロック数変換回路１３２ａは、距離演算回路ＤＰ１２からＭビットのビット長を有する距離信号Ｄ１２を受ける。クロック数変換回路１３１ａと同様、クロック数変換回路１３２ａは、クロック信号ＣＬＫのクロック数をカウントし、距離信号Ｄ１２が示す距離と一致するクロック数を検出したタイミングで、カウンタ１３２ｂにＨレベルの一致検出信号を出力する処理を行う。クロック数変換回路１３２ａは、後述の一致検出回路１３２ｃからＨレベルの一致信号（ＤＥＴＥＣＴ２）が出力されるまで、この処理を繰り返し行う。クロック数変換回路１３２ａは、Ｈレベルの一致信号（ＤＥＴＥＣＴ２）が出力されると動作を停止する。
【００４４】
カウンタ１３２ｂは、クロック数変換回路１３２ａからの一致検出信号が立ち上がるごとにカウンタ値をカウントアップさせ、そのカウント値を一致検出回路１３２ｃへ出力する。
【００４５】
一致検出回路１３２ｃは、カウンタ１３２ｂからカウンタ値を受け、距離演算回路ＤＰ１２からＭビットのビット長を有する距離信号Ｄ１２を受ける。一致検出回路１３２ｃは、距離信号Ｄ１２が示す距離とカウンタ値とを比較し、距離信号Ｄ１２が示す距離とカウンタ値とが一致するときに、Ｈレベルの一致信号（ＤＥＴＥＣＴ２）をクロック数変換回路１３２ａとバッファ１２２へ出力するとともに、Ｈレベルの一致信号（ＤＥＴＥＣＴ２）をマッチ信号Ｍ１として出力する。また、一致検出回路１３２ｃは、距離信号Ｄ１２が示す距離とカウンタ値とが一致しないときは、Ｌレベルの一致信号（ＤＥＴＥＣＴ２）をクロック数変換回路１３２ａに出力する。
【００４６】
ここで、例えば、距離演算回路ＤＰ１１から距離「２」を示すＭビットの距離信号Ｄ１１が出力され、距離演算回路ＤＰ１２から距離「３」を示すＭビットの距離信号Ｄ１２が出力された場合の動作例について説明する。
【００４７】
クロック数変換回路１３１ａは、距離「２」を示すＭビットの距離信号Ｄ１１を受け、バッファ１２１からのクロック信号ＣＬＫのクロックに同期して、距離「２」に一致するクロック数をカウントする。クロック数変換回路１３１ａは、カウントしたクロック数と距離とが一致すると、Ｈレベルの一致検出信号を出力する。カウンタ１３１ｂは、一致検出信号が立ち上がると、カウント値をカウントアップし、「１」を示すカウンタ値を一致検出回路１３１ｃに出力する。このとき、距離信号Ｄ１１が示す距離「２」とカウント値「１」とが一致しないため、一致検出回路１３１ｃからＬレベルの一致信号（ＤＥＴＥＣＴ１）が出力される。
【００４８】
クロック数変換回路１３１ａは、出力した一致検出信号がＬレベルになると、カウントしたクロック数をリセットする。そして、クロック数変換回路１３１ａは、再びクロック信号ＣＬＫのクロック数をカウントし、カウントしたクロック数が距離「２」と一致すると、カウンタ１３１ｂにＨレベルの一致検出信号を出力する。カウンタ１３１ｂは、一致検出信号が立ち上がると、カウンタ値をカウントアップさせ、一致検出回路１３１ｃに「２」を示すカウンタ値を出力する。一致検出回路１３１ｃは、距離信号Ｄ１１が示す距離「２」とカウンタ値「２」とが一致するため、一致信号（ＤＥＴＥＣＴ１）をバッファ１２２とクロック数変換回路１３１ａに出力する。つまり、検索開始からのクロック数が「４」となるタイミングで、Ｈレベルの一致信号（ＤＥＴＥＣＴ１）が出力される。そして、クロック数変換回路１３１ａは、Ｈレベルの一致信号（ＤＥＴＥＣＴ１）に応じて動作を停止する。
【００４９】
バッファ１２２は、一致検出回路１３１ｃからＨレベルの一致信号（ＤＥＴＥＣＴ１）を受けて、クロック数変換回路１３２ａにクロック信号ＣＬＫを出力する。クロック数変換回路１３２ａは、バッファ１２２からのクロック信号ＣＬＫのクロックに同期して、クロック信号ＣＬＫのクロック数をカウントする。クロック数変換回路１３２ａは、距離「３」を示すＭビットの距離信号Ｄ１２を受け、カウントしたクロック数が距離「３」と一致するタイミングで、Ｈレベルの一致検出信号をカウンタ１３２ｂに出力する。カウンタ１３２ｂは、クロック数変換回路１３２ａからの一致検出信号が立ち上がると、カウンタ値をカウントアップさせ、一致検出回路１３２ｃに「１」を示すカウンタ値を出力する。このとき、距離「３」とカウンタ値「１」とが一致しないため、一致検出回路１３２ｃからＬレベルの一致信号（ＤＥＴＥＣＴ２）が出力される。
【００５０】
クロック数変換回路１３２ａは、出力した一致検出信号がＬレベルになると、カウントしたクロック数をリセットする。そして、クロック数変換回路１３２ａは、再びクロック信号ＣＬＫのクロック数をカウントし、カウントしたクロック数が距離「３」と一致すると、カウンタ１３２ｂにＨレベルの一致検出信号を出力する。カウンタ１３２ｂは、クロック数変換回路１３２ａからの一致検出信号が立ち上がると、カウンタ値をカウントアップさせ、一致検出回路１３２ｃに「２」を示すカウンタ値を出力する。このとき、距離「３」とカウンタ値「２」とが一致しないため、一致検出回路１３２ｃからＬレベルの一致信号（ＤＥＴＥＣＴ２）が出力される。
【００５１】
クロック数変換回路１３２ａは、一致検出信号がＬレベルになると、再びカウントしたクロック数をリセットしてクロック信号ＣＬＫをカウントし、カウントしたクロック数が距離「３」と一致すると、カウンタ１３２ｂにＨレベルの一致検出信号を出力する。そして、クロック数変換回路１３２ａは、Ｈレベルの一致信号（ＤＥＴＥＣＴ２）に応じて動作を停止する。カウンタ１３２ｂは、クロック数変換回路１３２ａからの一致検出信号が立ち上がると、カウンタ値をカウントアップさせ、一致検出回路１３２ｃに「３」を示すカウンタ値を出力する。一致検出回路１３２ｃは、距離「３」とカウント値「３」とが一致するために、Ｈレベルの一致信号（ＤＥＴＥＣＴ２）をクロック数変換回路１３２ａに出力するとともに、マッチ信号Ｍ１を出力する。つまり、クロック数変換回路１３２ａにおいてカウントされたクロック数は「９（＝３＋３＋３）」であり、検索開始からクロック数「１３（＝４＋９）」のタイミングでマッチ信号Ｍ１が出力される。
【００５２】
カウンタ一致検出回路１３１，１３２全体でカウントされるクロック数ＣＮ＿ｔｏｔａｌ１「１３」は、カウンタ一致検出回路１３１においてカウントするクロック数「４（＝２＋２）」と、カウンタ一致検出回路１３２においてカウントするクロック数「９（＝３＋３＋３）」とを加算したものである。つまり、カウンタ一致検出回路１３１，１３２によって、距離「２」の二乗値と距離「３」の二乗値との和に一致するクロック数をカウントすることに相当する。
【００５３】
距離／クロック数変換回路ＤＣ１は、一般的に、Ｗ個の距離信号Ｄ１１〜Ｄ１Ｗを受ける。そして、Ｗ個の距離信号Ｄ１１〜Ｄ１Ｗのそれぞれは、Ｍビットのビット長を有する。したがって、距離／クロック数変換回路ＤＣ１は、Ｍ×Ｗビットのビット長を有する距離信号Ｄ１１Ｄ１２…Ｄ１Ｗを受ける。カウンタ一致検出回路１３１において、距離信号Ｄ１１が示す距離に一致する回数分だけ、その距離に一致するクロック数を繰り返しカウントする。また、カウンタ一致検出回路１３２〜１３Ｗは、それぞれ、カウンタ一致検出回路１３１〜１３Ｗ−１から一致信号を受けた後に、距離信号Ｄ１２〜Ｄ１Ｗにそれぞれ一致するクロック数を、その距離に一致する回数だけ繰り返しカウントする。その結果、距離／クロック数変換回路ＤＣ１においてカウントされる全体のクロック数ＣＮ＿ｔｏｔａｌ１は、カウンタ一致検出回路１３１〜１３Ｗのそれぞれにおいてカウントされたクロック数の和に等しい。カウンタ一致検出回路１３１〜１３Ｗのそれぞれにおいてカウントされたクロック数は、それぞれ、距離信号Ｄ１１〜Ｄ１Ｗが示す各距離の二乗値に相当するため、距離／クロック数変換回路ＤＣ１においてカウントされる全体のクロック数ＣＮ＿ｔｏｔａｌＲは、各距離信号Ｄ１１〜Ｄ１Ｗの二乗値の和を表している。
【００５４】
ここで、ユークリッド距離ｎＥｒは、次式によって表される。
【００５５】
【数２】
2015011907.tif 000004
【００５６】
式（２）の右辺の｜Ｉｎｊ−Ｒｅｒｊ｜２は、式（１）の右辺の｜Ｉｎｊ−Ｒｅｒｊ｜において、検索データと参照データとの距離の二乗値に一致する。したがって、ユークリッド距離ｎＥｒの演算は、上述したように、式（１）によって演算したＷ個の各距離について、距離に一致するクロック数をカウントする処理を距離に一致する回数だけ繰り返し行うことで実現される。そうすると、図４の例において、カウンタ一致検出回路１３２が、カウンタ一致検出回路１３１，１３２全体でカウントしたクロック数のタイミングを示すマッチ信号Ｍ１を出力することは、ユークリッド距離ｎＥｒによって検索データに類似する参照データを検索し、検索データに類似する参照データを検出したことを示す信号を出力することに相当する。なお、距離／クロック数変換回路ＤＣ２〜ＤＣＲのそれぞれも、距離／クロック数変換回路ＤＣ１の動作と同じ動作によって、それぞれ、マッチ信号Ｍ２〜ＭＲを出力する。
【００５７】
図５は、一例に係るマッチ信号のタイミングチャートである。距離／クロック数変換回路ＤＣ１〜ＤＣＲは、図５に示すように、例えばマッチ信号Ｍ１〜ＭＲをそれぞれクロック信号ＣＬＫに同期して出力する。
【００５８】
なお、上記構成のクロックカウント式連想メモリ１０は一例に過ぎず、図５に示したような出力が可能なクロックカウント式連想メモリであればよい。
【００５９】
≪ｋ近傍検索回路２０の構成例≫
図１に戻り、ｋ近傍検索回路２０は、マッチ信号カウント回路２１と、ｋ−マッチ信号数一致検出回路２２と、マッチ信号保持回路２３とを含む。
【００６０】
マッチ信号カウント回路２１は、クロックカウント式連想メモリ１０から出力されるＲ個のマッチ信号のうちアクティブになったマッチ信号の数をカウントする回路である。
【００６１】
図６は、一例に係るマッチ信号カウント回路２１の概略構成を示す。マッチ信号カウント回路２１は、複数の加算器をツリー状に接続した加算器ツリー回路として構成することができる。加算器ツリー回路のリーフノードにはＲ／２個の半加算器（ＨＡ）２１１が配置される。各加算器２１１にはＲ個のマッチ信号のうちの２ビットが入力される。例えば、図６の左端の加算器２１１には参照データ１に対応するマッチ信号Ｍ１と参照データ２に対応するマッチ信号Ｍ２が入力され、右端の加算器２１１には参照データＲ−１に対応するマッチ信号ＭＲ−１と参照データＲに対応するマッチ信号ＭＲが入力される。
【００６２】
加算器ツリー回路の２段目にはＲ／２２個の２ビットの桁上げ伝播加算器（２ｂｉｔ−ＲＣＡ）２１２が配置される。各加算器２１２には前段（リーフノード）の２個の加算器２１１からそれぞれ２ビット出力が入力される。
【００６３】
加算器ツリー回路の３段目にはＲ／２３個の３ビットの桁上げ伝播加算器（３ｂｉｔ−ＲＣＡ）２１３が配置される。各加算器２１３には前段（第２段目）の２個の加算器２１２からそれぞれ３ビット出力が入力される。
【００６４】
加算器ツリー回路のＬ段目のルートノードには１個のＬビットの桁上げ伝播加算器（Ｌｂｉｔ−ＲＣＡ）２１Ｌが配置される。加算器２１Ｌには前段（Ｌ−１段目）の２個の加算器からそれぞれＬビット出力が入力される。
【００６５】
加算器２１ＬからはＬ＋１ビットのＮＭＳ（Ｎｕｍｂｅｒ  ｏｆ  Ｍａｔｃｈ  Ｓｉｇｎａｌｓ）が出力される。ＮＭＳが表す値は、Ｒ個のマッチ信号Ｍ１〜ＭＲのうちアクティブになったマッチ信号の数に相当する。
【００６６】
上記構成のマッチ信号カウント回路２１によると、複数のマッチ信号が同時にアクティブになっても、それらマッチ信号の数を正確にカウントすることができる。
【００６７】
また、マッチ信号カウント回路２１はｋ近傍法連想メモリ１００の構成要素の中で最長の遅延時間を有する回路であるが、上記のようにマッチ信号カウント回路２１を加算器ツリー回路として構成することにより、遅延時間をマッチ信号の総数の対数オーダーに抑えることができる。したがって、マッチ信号カウント回路２１の遅延時間は実用上問題とならない程度のものである。
【００６８】
図１に戻り、ｋ−マッチ信号数一致検出回路２２は、マッチ信号カウント回路２１のカウント値がｋに一致したことを検出する回路である。なお、マッチ信号カウント回路２１のカウント値は上記のＮＭＳによって表され、また、ｋは外部から与えることができる。
【００６９】
図７は、一例に係るｋ−マッチ信号数一致検出回路２２の概略構成を示す。本例において、ｋは４ビット値として与えられるものとする。ｋ−マッチ信号数一致検出回路２２は、ｋとＮＭＳの対応するビットどうしを比較する４個の１ビット一致検出回路２２１を含む。
【００７０】
各１ビット一致検出回路２２１は、１ビット入力Ａ，Ｂ、および１ビット出力Ｘ，Ｙを有する回路である。ＡにＮＭＳの対応ビットが、Ｂにｋの対応ビットが、それぞれ入力される。入力Ａ，Ｂ、出力Ｘ，Ｙの真理値表は表１に示す通りである。
【００７１】
【表１】
2015011907.tif 000005
【００７２】
すなわち、各１ビット一致検出回路２２１は、ＮＭＳの対応ビットとｋの対応ビットが一致すればＹに１を出力し、ＮＭＳの対応ビットがｋの対応ビットよりも大きければＸに１を出力する。
【００７３】
ｋの最上位ビット以外の１ビット一致検出回路２２１において、ＮＭＳの対応ビットとそれよりも上位ビットの１ビット一致検出回路２２１の出力Ｙとの論理積がＡに入力されるようになっている。すなわち、ＭＳＮの対応ビットがそれよりも上位ビットの１ビット一致検出回路２２１の出力Ｙによってマスクされるようになっている。このため、上位ビットにおいてＮＭＳとｋとが一致しない限り、ＮＭＳとｋの下位ビットどうしの一致検出は行われない。これは、ＮＭＳが時間とともに増加することに鑑み、ＮＭＳがｋよりも小さい間はＮＭＳとｋの下位ビットどうしの一致を検出する必要はなく、上位ビットから順に一致を検出すればよいためである。このように、上位ビットの一致を見て下位ビットに進むという方式を採用することにより、１ビット一致検出回路２２１の不要な動作を抑制して消費電力を低減することができる。
【００７４】
各１ビット一致検出回路２２１の出力ＹはＡＮＤゲート２２２に入力され、全出力Ｙの論理積が演算される。ｋとＮＭＳとが完全一致したとき、ＡＮＤゲート２２２の出力がＨレベルに遷移する。ＡＮＤゲート２２２の出力はＤフリップフロップ２２４にクロック入力（ＣＬＫ）される。Ｄフリップフロップ２２４には検索開始信号ＳＢがデータ入力（Ｄ）されており、検索開始信号ＳＢがＨレベルの場合において、Ｄフリップフロップ２２４はクロック入力に応じてＨレベルの検索開始信号ＳＢを保持する。Ｄフリップフロップ２２４の出力（Ｑ）は停止信号ｓｔｏｐとして出力される。
【００７５】
後述するように、停止信号ｓｔｏｐはマッチ信号保持回路２３によるマッチ信号の保持のタイミング信号として利用することができる。また、停止信号ｓｔｏｐはクロックカウント式連想メモリ１０の動作を停止させる制御信号として利用することができる。アクティブのマッチ信号の数がｋ個に達した後はクロックカウント式連想メモリ１０はもはや動作しなくてもよい。したがって、クロックカウント式連想メモリ１０において、例えば、停止信号ｓｔｏｐを受けたときにクロック信号ＣＬＫの供給を遮断するように構成することで、クロックカウント式連想メモリ１０の不要な動作を抑制して消費電力を低減することができる。
【００７６】
各１ビット一致検出回路２２１の出力ＸはＯＲゲート２２３ａに入力され、全出力Ｘの論理和が演算される。１ビット一致検出回路２２１の少なくとも一つにおいてＮＭＳの対応ビットがｋの対応ビットよりも大きくなれば、ＯＲゲート２２３ａの出力がＨレベルに遷移する。また、ＮＭＳの残りの全上位ビットはＯＲゲート２２３ｂに入力され、これらビットの論理和が演算される。ＮＭＳの残りの全上位ビットにおいて少なくとも１ビットがＨレベルとなった場合、ＯＲゲート２２３ｂの出力がＨレベルに遷移する。ＯＲゲート２２３ｃは、ＯＲゲート２２３ａおよびＯＲゲート２２３ｂの各出力の論理和を演算する。ＯＲゲート２２３ｃの出力は、異常信号ａｂｎｏｒｍａｌとして出力される。すなわち、ＮＭＳがｋを超えたとき、異常信号ａｂｎｏｒｍａｌが出力される。異常信号ａｂｎｏｒｍａｌは、ｋ近傍検索のやり直し指示などに利用することができる。また、異常信号ａｂｎｏｒｍａｌはＤフリップフロップ２２４にクロック入力（ＣＬＫ）される。これにより、異常信号ａｂｎｏｒｍａｌの出力に合わせて停止信号ｓｔｏｐが出力される。
【００７７】
異常信号ａｂｎｏｒｍａｌは、Ｄフリップフロップ２２４の出力（Ｑ）の反転論理によってマスクされる。すなわち、異常信号ａｂｎｏｒｍａｌが出力される前にＮＭＳとＫが完全一致して停止信号ｓｔｏｐが出力された場合、その後ＮＭＳがｋを超えても異常信号ａｂｎｏｒｍａｌが出力されないようになっている。
【００７８】
Ｄフリップフロップ２２４のリセットを行うために、ｋ近傍法連想メモリ１００の共通に使用されるリセット信号ＲＳＴが入力される。
【００７９】
図１に戻り、マッチ信号保持回路２３は、クロックカウント式連想メモリ１０から出力されるＲ個のマッチ信号を受け、ｋ−マッチ信号数一致検出回路２２によってマッチ信号カウント回路２１のカウント値がｋに一致したことが検出されたときのＲ個のマッチ信号を保持する。
【００８０】
図８は、一例に係るマッチ信号保持回路２３の構成を示す。マッチ信号保持回路２３は、クロックカウント式連想メモリ１０から出力されるＲ個のマッチ信号Ｍ１〜ＭＲのそれぞれを保持するＲ個のＤフリップフロップ２３１を含む。各Ｄフリップフロップ２３１において、マッチ信号がデータ入力（Ｄ）されるとともに、停止信号ｓｔｏｐがクロック入力（ＣＬＫ）される。Ｒ個のＤフリップフロップ２３１のそれぞれの出力（Ｑ）は、Ｒ個のマッチ信号Ｍ１〜ＭＲとしてｋ近傍クラスタリング回路３０に入力される。なお、図示していないが、各Ｄフリップフロップ２３１はリセット信号ＲＳＴを受けることで初期状態にリセットされる。
【００８１】
≪ｋ近傍クラスタリング回路３０の構成例≫
図１に戻り、ｋ近傍クラスタリング回路３０は、クラスデータメモリ３１と、Ｘ個のクラスカウンタ３２と、クラス識別回路３３と、最大カウンタ検出回路３４とを含む。
【００８２】
クラスデータメモリ３１は、Ｒ個の参照データのそれぞれのクラスを表すＲ個のクラスデータ（クラスデータ１，クラスデータ２，…，クラスデータＲ）を保持する回路である。
【００８３】
各クラスカウンタ３２は、対応するクラスのデータ数をカウントするための回路である。クラス数は、全部でＸ個（Ｘは２以上の整数）である。
【００８４】
クラス識別回路３３は、ｋ近傍検索回路２０（より詳細にはマッチ信号保持回路２３）が保持するアクティブのｋ個のマッチ信号を順次選択し、当該選択したマッチ信号に対応するクラスデータをクラスデータメモリ３１から読み出し、当該読み出したクラスデータによって表されるクラスに対応するクラスカウンタ３２をカウントアップする回路である。
【００８５】
図９は、一例に係るクラスデータメモリ３１、クラスカウンタ３２、およびクラス識別回路３３の概略構成を示す。
【００８６】
クラスデータメモリ３１は、メモリ部３１１、行選択回路３１２、列デコーダ３１３、および読出／書込回路３１４を含む。
【００８７】
メモリ部３１１は、ＳＲＡＭなどで構成されるクラスデータ保存回路Ｓ１１〜Ｓ１Ｑ，Ｓ２１〜Ｓ２Ｑ，…，ＳＲ１〜ＳＲＱを含む。なお、Ｑは、２以上の整数である。
【００８８】
クラスデータ保存回路Ｓ１１〜Ｓ１Ｑ，Ｓ２１〜Ｓ２Ｑ，…，ＳＲ１〜ＳＲＱは、行選択回路３１２、列デコーダ３１３、および読出／書込回路３１４によって書き込まれたクラスデータを保存する。この場合、クラスデータ保存回路Ｓ１１〜Ｓ１Ｑは、Ｎ×Ｑ（Ｎは１以上の整数）ビットのクラスデータ１を保存し、クラスデータ保存回路Ｓ２１〜Ｓ２Ｑは、Ｎ×Ｑビットのクラスデータ２を保存し、以下、同様にして、クラスデータ保存回路ＳＲ１〜ＳＲＱは、Ｎ×ＱビットのクラスデータＲを保存する。つまり、クラスデータ保存回路Ｓ１１〜Ｓ１Ｑ，Ｓ２１〜Ｓ２Ｑ，…，ＳＲ１〜ＳＲＱのそれぞれは、クラスデータのＮビットを保存する。
【００８９】
行選択回路３１２は、メモリ部３１１の行方向のアドレスを指定する。列デコーダ３１３は、メモリ部３１１の列方向のアドレスを指定する。読出／書込回路３１４は、行選択回路３１２および列デコーダ３１３によって指定されたクラスデータ保存回路Ｓ１１〜Ｓ１Ｑ，Ｓ２１〜Ｓ２Ｑ，…，ＳＲ１〜ＳＲＱに対してクラスデータを読み書きする。
【００９０】
クラス識別回路３３は、Ｒ個のマッチ信号検出回路３３１と、デマルチプレクサ３３２と、バッファ３３３とを含む。動作開始信号ｓｔａｒｔがＨレベルに遷移することで、バッファ３３３がクラス識別回路３３にクロック信号ＣＬＫを供給する。これにより、クラス識別回路３３は動作を開始する。また、クラス識別回路３３によるクラス識別動作が終了すると終了信号ｅｎｄがＨレベルに遷移する。
【００９１】
Ｒ個のマッチ信号検出回路３３１は、ｋ近傍検索回路２０（より詳細にはマッチ信号保持回路２３）が保持するＲ個のマッチ信号のそれぞれに対応して設けられている。各マッチ信号検出回路３３１は、対応するマッチ信号がアクティブであることを検出してクラスデータメモリ３１に当該マッチ信号に対応するクラスデータを選択する選択信号ａｃｔを出力する回路である。
【００９２】
Ｒ個のマッチ信号検出回路３３１は、動作開始信号を伝搬するように直列に接続されている。すなわち、マッチ信号検出回路３３１は動作開始信号を次々に受けて順次動作するようになっている。初段のマッチ信号検出回路３３１は、動作開始信号ｓｔａｒｔを動作開始信号ｎｅｘｔ０として受けて動作を開始し、動作が終了すると次段（２段目）のマッチ信号検出回路３３１へ動作開始信号ｎｅｘｔ１を出力する。２段目のマッチ信号検出回路３３１は、動作開始信号ｎｅｘｔ１を受けて動作を開始し、動作が終了すると次段（３段目）のマッチ信号検出回路３３１へ動作開始信号ｎｅｘｔ２を出力する。以下、同様にして、最終段（Ｒ段目）のマッチ信号検出回路３３１は、動作開始信号ｎｅｘｔＲ−１を受けて動作を開始し、動作が終了すると動作開始信号ｎｅｘｔＲを出力する。動作開始信号ｎｅｘｔＲは終了信号ｅｎｄに相当する。
【００９３】
マッチ信号Ｍ１が入力されるマッチ信号検出回路３３１から出力される選択信号ａｃｔ１によって、クラスデータメモリ３１においてクラスデータ１が選択され、出力される。マッチ信号Ｍ２が入力されるマッチ信号検出回路３３１から出力される選択信号ａｃｔ２によって、クラスデータメモリ３１においてクラスデータ２が選択され、出力される。以下、同様にして、マッチ信号ＭＲが入力されるマッチ信号検出回路３３１から出力される選択信号ａｃｔＲによって、クラスデータメモリ３１においてクラスデータＲが選択され、出力される。
【００９４】
図１０は、一例に係るマッチ信号検出回路３３１の概略構成を示す。マッチ信号検出回路３３１は、一致検出回路３３１１と、レジスタ３３１２とを含む。一致検出回路３３１１は、レジスタ３３１２が保持する１ビット値とマッチ信号Ｍｉとの一致を検出して一致信号ｍａｔｃｈを出力する回路である。両者が一致する場合、一致信号ｍａｔｃｈはＨレベルとなり、両者が一致しない場合、一致信号ｍａｔｃｈはＬレベルとなる。一致信号ｍａｔｃｈおよびマッチ信号検出回路３３１に入力される動作開始信号ｎｅｘｔｉ−１はＡＮＤゲート３３１３に入力されて論理積が演算される。ＡＮＤゲート３３１３の出力が、次段のマッチ信号検出回路３３１に供給される動作開始信号ｎｅｘｔｉとなる。また、一致信号ｍａｔｃｈの論理反転および動作開始信号ｎｅｘｔｉ−１はＡＮＤゲート３３１４に入力されて論理積が演算される。ＡＮＤゲート３３１４の出力が、クラスデータの選択信号ａｃｔｉとなる。
【００９５】
レジスタ３３１２には初期値として０が保持されている。したがって、マッチ信号Ｍｉが非アクティブのとき、両者は一致して一致信号ｍａｔｃｈがＨレベルとなる。このとき、ＡＮＤゲート３３１３の出力がＨレベルとなり、次段のマッチ信号検出回路３３１に動作開始信号ｎｅｘｔｉ−１が供給される。また、ＡＮＤゲート３３１４の出力はＬレベルとなる。すなわち、クラスデータの選択信号ａｃｔｉは出力されない。このように、マッチ信号Ｍｉが非アクティブのとき、マッチ信号検出回路３３１は、クラスデータの選択信号を出力せずに、入力された動作開始信号をすぐさま次段のマッチ信号検出回路３３１に伝達する。
【００９６】
一方、マッチ信号Ｍｉがアクティブのとき、両者が一致しないため一致信号ｍａｔｃｈがＬレベルとなる。このとき、ＡＮＤゲート３３１３の出力がＬレベルとなり、Ｈレベルの動作開始信号ｎｅｘｔｉ−１が入力されることで、ＡＮＤゲート３３１４からＨレベルの選択信号ａｃｔｉが出力される。
【００９７】
レジスタ３３１２には、直列に接続されたバッファ３３１５とバッファ３３１６を介してクロック信号ＣＬＫが接続されている。動作開始信号ｎｅｘｔｉ−１がＨレベルになると、バッファ３３１５はクロック信号ＣＬＫをバッファ３３１６へ供給する。さらに、一致信号ｍａｔｃｈの反転がＨレベルになるとバッファ３３１６はクロック信号ＣＬＫをレジスタ３３１２へ供給する。レジスタ３３１２はクロック信号ＣＬＫを受けると保持値を１に変更する。これにより、アクティブのマッチ信号Ｍｉとレジスタ３３１２の保持値とが一致して一致信号ｍａｔｃｈがＬレベルとなる。このとき、ＡＮＤゲート３３１３の出力がＨレベルとなり、次段のマッチ信号検出回路３３１に動作開始信号ｎｅｘｔｉ−１が供給される。また、ＡＮＤゲート３３１４の出力はＬレベルとなる。すなわち、クラスデータの選択信号ａｃｔｉがＬレベルに遷移する。このように、マッチ信号Ｍｉがアクティブのとき、マッチ信号検出回路３３１は、クラスデータの選択信号を出力してから１クロック周期後に、入力された動作開始信号を次段のマッチ信号検出回路３３１に伝達する。このとき出力されるクラスデータの選択信号は１クロック周期だけＨレベルとなる。
【００９８】
図９に戻り、デマルチプレクサ３３２にはバッファ３３３から供給されるクロック信号ＣＬＫが入力され、出力先はクラスデータメモリ３１から出力されたＱビットのクラスデータｃｌｓによって決定される。すなわち、クラスデータｃｌｓはＸ個のクラスカウンタ３２の中のいずれか一つを選択する信号として用いられる。そして、１クロック周期ごとにクラスデータが選択され、当該選択されたクラスデータに対応するクラスカウンタ３２にクロック信号ＣＬＫが入力されることで、当該クラスカウンタ３２のカウント値がカウントアップされる。
【００９９】
上記構成のクラスデータメモリ３１、クラスカウンタ３２、およびクラス識別回路３３によると、マッチ信号保持回路２３が保持するマッチ信号の総数に拘わらず、ｋクロック周期で、アクティブのｋ個のマッチ信号に対応するクラスのカウントが完了する。したがって、ｋ近傍クラスタリング処理を高速に行うことができる。
【０１００】
Ｘ個のクラスカウンタ３２のカウント値Ｃｎ１〜ＣｎＸは、各クラスの近傍の数を示している。すなわち、カウント値Ｃｎ１〜ＣｎＸを参照することで各クラスの票数（データ数）がわかる。最大カウンタ検出回路３４は、Ｘ個のクラスカウンタ３２の中からカウント値が最大のクラスカウンタを見つける回路である。
【０１０１】
図１１は、一例に係る最大カウンタ検出回路３４の概略構成を示す。最大カウンタ検出回路３４は、ダウンカウンタ３４１と、Ｘ個の一致検出回路３４２とを含む。ダウンカウンタ３４１は、クロック信号ＣＬＫを受けて、初期値からカウント値をカウントダウンする回路である。ダウンカウンタ３４１へはバッファ３４３を介してクロック信号ＣＬＫが供給される。バッファ３４３は、クラス識別回路３３によるクラス識別動作が終了したときに出力される終了信号ｅｎｄを受けて、ダウンカウンタ３４１へクロック信号ＣＬＫを供給する。
【０１０２】
Ｘ個の一致検出回路３４２は、Ｘ個のクラスカウンタ３２のそれぞれに対応して設けられている。各一致検出回路３４２は、対応するクラスカウンタ３２のカウント値とダウンカウンタ３４１のカウント値との一致を検出して、一致信号Ｃ１〜ＣＸを出力する回路である。各一致検出回路３４２は、一致を検出すると、一致信号Ｃ１〜ＣＸをＨレベルに遷移させる。
【０１０３】
Ｘ個の一致検出回路３４２の出力信号はＯＲゲート３４４に入力され、これらの論理和が演算される。ダウンカウンタ３４１に入力されるクロック信号ＣＬＫは、ＯＲゲート３４４の出力の論理反転によってマスクされるようになっている。すなわち、ダウンカウンタ３４１のカウント値がカウントダウンされている間に、Ｘ個の一致検出回路３４２のうちのいずれか一つによってダウンカウンタ３４１のカウント値と対応するクラスカウンタ３２のカウント値との一致が検出されたとき、ダウンカウンタ３４１のカウント動作を停止させるようになっている。これにより、最大のカウント値を保持するクラスカウンタ３２のみを検出することができる。一致信号Ｃ１〜ＣＸのうちＨレベルになっているものが、ｋ近傍法に基づいて決定された検索データのクラスを表している。
【０１０４】
図１２は、別例に係る最大カウンタ検出回路３４の概略構成を示す。最大カウンタ検出回路３４は、複数の最大値選出回路３４５をツリー状に接続したトーナメント回路として構成することもできる。
【０１０５】
図１３は、一例に係る最大値選出回路３４５の概略構成を示す。最大値選出回路３４５は、比較回路３４６と、マルチプレクサ３４７とを含む。
【０１０６】
最大値選出回路３４５には、あるクラスカウンタ３２のカウント値Ａとそのクラスカウンタ３２の識別番号ｉを結合した信号Ａ＆ｉと、別のクラスカウンタ３２のカウンタ値Ｂとそのクラスカウンタ３２の識別番号ｊを結合した信号Ｂ＆ｊが入力される。比較回路３４６は、カウンタ値Ａおよびカウンタ値Ｂの大小を比較する。マルチプレクサ３４７は、信号Ａ＆ｉおよび信号Ｂ＆ｊを受け、比較回路３４６の出力信号に応じて信号Ｃとして信号Ａ＆ｉおよび信号Ｂ＆ｊのいずれか一方を出力する。具体的には、マルチプレクサ３４７は、Ａ≧Ｂの場合、信号Ａ＆ｉを出力し、Ａ＜Ｂの場合、信号Ｂ＆ｊを出力する。すなわち、信号Ｃとして、カウンタ値が大きい方のクラスカウンタ３２のカウント値ｍａｘ（Ａ，Ｂ）とそのクラスカウンタの識別番号ｉｎｄｅｘ（ｉ  ｏｒ  ｊ）を結合した信号が出力される。なお、マルチプレクサ３４７は、Ａ＞Ｂの場合、信号Ａ＆ｉを出力し、Ａ≦Ｂの場合、信号Ｂ＆ｊを出力してもよい。
【０１０７】
図１２に戻り、トーナメント回路のリーフノードにはＸ／２個の最大値選出回路３４５が配置される。リーフノードの各最大値選出回路３４５にはＸ個のクラスカウンタ３２のうち隣り合う２個のクラスカウンタ３２の各カウンタ値とそれら２個のクラスカウンタ３２の各識別番号を結合した信号が入力される。
【０１０８】
トーナメント回路の２段目にはＸ／２２個の最大値選出回路３４５が配置される。２段目の各最大値選出回路３４５にはリーフノードの隣り合う２個の最大値選出回路３４５から出力される信号が入力される。
【０１０９】
トーナメント回路のルートノードには１個の最大値選出回路３４５が配置される。そして、ルートノードの最大値選出回路３４５から、Ｘ個のクラスカウンタ３２の最大カウント値ｍａｘ（Ｃｎ１，…，ＣｎＸ）およびそのクラスカウンタ３２の識別番号であるｃｌａｓｓ  ｉｎｄｅｘを結合した信号が出力される。
【０１１０】
上記構成の最大カウンタ検出回路３４によると、Ｘ個のクラスカウンタ３２の最大値を１クロックサイクルで決定することができるため、特に高速処理に適している。
【０１１１】
以上のように、本実施形態によると、クロックカウント式連想メモリ１０によって検索データと各参照データとの距離がクロック数に変換されて、距離に応じたタイミングで各参照データに対応するマッチ信号がアクティブとなる。そして、ｋ近傍検索回路２０によってより先にアクティブになったｋ個のマッチ信号が検出および保持される。さらに、ｋ近傍クラスタリング回路３０によって当該ｋ個のマッチ信号に対応するｋ個のクラスデータをクラス別に分類した場合にデータ数が最大となるクラスが判定される。このようにして、ｋ近傍法に基づいた検索データのクラス分けが実現される。
【０１１２】
なお、本実施形態では、ｋ近傍検索回路２０において、クロックカウント式連想メモリ１０から出力されるＲ個のマッチ信号を各１ビット情報として保存するため、距離情報が欠落してしまう。そこで、例えば、ｋ近傍検索回路２０にカウンタを設けて、各マッチ信号がアクティブになるまでの時間情報（すなわち時間換算した距離情報）を保持するようにしてもよい。その場合、時間情報を用いて、検索データにより距離の近い参照データの重みを大きくするようにクラスデータの重み付けを行って、より高度なクラス判別を行うことができる。また、アクティブとなったｋ個のマッチ信号に対応する参照データのうち、検索データとの距離が閾値以上のものは除外してｋ個以下でｋ近傍法を適用することも可能である。
【産業上の利用可能性】
【０１１３】
本発明に係るｋ近傍法連想メモリは、ＬＳＩ上にｋ近傍法を効果的に実装することができるため、文字認識・画像認識などに代表されるパターンマッチングを必要とするアプリケーションに有用である。
【符号の説明】
【０１１４】
１００  ｋ近傍法連想メモリ
１０    クロックカウント式連想メモリ
２０    ｋ近傍検索回路
３１    マッチ信号カウント回路
２１１，２１２，２１３，２１Ｌ  加算器
２２    ｋ−マッチ信号数一致検出回路
２３    マッチ信号保持回路
３０    ｋ近傍クラスタリング回路
３１    クラスデータメモリ
３２    クラスカウンタ
３３    クラス識別回路
３３１  マッチ信号検出回路
３４    最大カウンタ検出回路
３４１  ダウンカウンタ
３４２  一致検出回路
３４５  最大値選出回路
【図１】
2015011907.tif 000006
【図２】
2015011907.tif 000007
【図３】
2015011907.tif 000008
【図４】
2015011907.tif 000009
【図５】
2015011907.tif 000010
【図６】
2015011907.tif 000011
【図７】
2015011907.tif 000012
【図８】
2015011907.tif 000013
【図９】
2015011907.tif 000014
【図１０】
2015011907.tif 000015
【図１１】
2015011907.tif 000016
【図１２】
2015011907.tif 000017
【図１３】
2015011907.tif 000018
【国際調査報告】
2015011907.tif 000019
2015011907.tif 000020
2015011907.tif 000021
2015011907.tif 000022