(57)【特許請求の範囲】
【請求項１】
第１ビットが第１値を示す場合に＋１を表し、第２ビットが第１値を示す場合に−１を表し、前記第１及び前記第２ビットが何れも第２値を示す場合に０を表す、複数の２ビット幅の三値データを１つのワードに格納することで構成される第１及び第２入力データのそれぞれの複数の三値データ間の乗算を行う三値乗算部と、
前記三値乗算部の乗算結果を構成する複数の三値データのうち、＋１を表す三値データの数、及び、−１を表す三値データの数、を選択的にカウントするカウンタと、を備え、
前記三値乗算部の乗算結果を構成する前記複数の三値データのうち前記カウンタによりカウントされた＋１を表す前記三値データの数から−１を表す前記三値データの数を減算した数が内積演算結果として出力される、三値内積演算回路。
【請求項２】
前記カウンタは、前記三値乗算部の乗算結果を構成する前記複数の三値データのうち第１ビットが第１値を示す三値データの数をカウントすることで、＋１を表す前記三値データの数を特定するとともに、第２ビットが第１値を示す三値データの数をカウントすることで、−１を表す前記三値データの数を特定する、請求項１に記載の三値内積演算回路。
【請求項３】
第１ビットが第１値を示す場合に＋１を表し、第２ビットが第１値を示す場合に−１を表し、前記第１及び前記第２ビットが何れも第２値を示す場合に０を表す、複数の２ビット幅の三値データを１つのワードに格納することで構成される第１及び第２入力データのそれぞれの複数の三値データ間の乗算を行う三値乗算部と、
前記三値乗算部の乗算結果を構成する複数の三値データのうち＋１を表す三値データの数から−１を表す三値データの数を減算した数を内積演算結果として出力する乗算結果処理部と、を備え、
前記乗算結果処理部は、
前記三値乗算部の乗算結果を構成する前記複数の三値データのうち＋１を表す前記三値データの数をカウントする第１カウンタと、
前記三値乗算部の乗算結果を構成する前記複数の三値データのうち−１を表す前記三値データの数をカウントする第２カウンタと、
前記第１カウンタのカウント結果から前記第２カウンタのカウント結果を減算する減算回路と、を有する、三値内積演算回路。
【請求項４】
前記第１カウンタは、前記三値乗算部の乗算結果を構成する前記複数の三値データのうち第１ビットが第１値を示す三値データの数をカウントすることで、＋１を表す前記三値データの数を特定し、
前記第２カウンタは、前記三値乗算部の乗算結果を構成する前記複数の三値データのうち第２ビットが第１値を示す三値データの数をカウントすることで、−１を表す前記三値データの数を特定する、請求項３に記載の三値内積演算回路。
【請求項５】
第１ビットが第１値を示す場合に＋１を表し、第２ビットが第１値を示す場合に−１を表し、前記第１及び前記第２ビットが何れも第２値を示す場合に０を表す、複数の２ビット幅の三値データを１つのワードに格納することで構成される第１及び第２入力データのそれぞれの複数の三値データ間の乗算を行う乗算処理と、
前記乗算処理による乗算結果を構成する複数の三値データのうち＋１を表す三値データの数をカウントする第１カウント処理と、
前記乗算処理による乗算結果を構成する複数の三値データのうち−１を表す三値データの数をカウントする第２カウント処理と、
＋１を表す前記三値データの数から−１を表す前記三値データの数を減算する減算処理と、をコンピュータに実行させる三値内積演算処理プログラムであって、
前記第１カウント処理は、前記乗算結果を構成する前記複数の三値データのうち第１ビットが第１値を示す三値データの数をカウントすることで、＋１を表す前記三値データの数を特定し、
前記第２カウント処理は、前記乗算結果を構成する前記複数の三値データのうち第２ビットが第１値を示す三値データの数をカウントすることで、−１を表す前記三値データの数を特定する、三値内積演算処理プログラム。
【請求項６】
第１ビットが第１値を示す場合に＋１を表し、第２ビットが第１値を示す場合に−１を表し、前記第１及び前記第２ビットが何れも第２値を示す場合に０を表す、複数の２ビット幅の三値データを１つのワードに格納することで構成される第１及び第２入力データのそれぞれの複数の三値データ間の乗算を行い、
前記乗算の結果を構成する複数の三値データのうち＋１を表す三値データの数を、第１カウンタを用いてカウントし、
前記乗算の結果を構成する複数の三値データのうち−１を表す三値データの数を、第２カウンタを用いてカウントし、
前記第１カウンタのカウント結果から前記第２カウンタのカウント結果を減算することにより、前記乗算の結果を構成する前記複数の三値データのうち＋１を表す三値データの数から−１を表す三値データの数を減算した数である内積演算結果を出力する、
三値内積演算回路による演算処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はデータ格納方法、三値内積演算回路、それを備えた半導体装置、及び、三値内積演算処理プログラムに関する。
【背景技術】
【０００２】
近年、車両に搭載された電子制御システムは、カメラ等によって取り込まれた画像を認識する画像認識用プロセッサを備えている。例えば、電子制御システムは、画像認識用プロセッサの認識結果に基づいて障害物が接近しているか否かを判断し、ブレーキの自動制御等を行う。
【０００３】
画像認識用プロセッサは、入力画像から得られた画素データの配列に基づいて、量子化されたデータ（所謂、特徴量データ）を作成する。例えば、画像認識用プロセッサは、入力画像から得られたエッジ画像の方向成分を角度ごとに表したヒストグラム（勾配方向ヒストグラム）を特徴量データとして作成する。そして、画像認識用プロセッサは、作成した特徴量データと、予め機械学習によって得られた辞書データと、の内積演算を行い、その演算結果に基づいて入力画像に検出対象が含まれるか否かの判断を行う。
【０００４】
ここで、画像認識用プロセッサは、電子制御システムの処理性能を向上させるため、内積演算を高精度かつ高速に処理することが求められている。
【０００５】
しかしながら、例えば、精度向上を目的として浮動小数点型データを用いて内積演算を行う構成とした場合、処理速度が低下してしまう。他方、処理速度向上を目的として１及び０で表される二値のデータ（以下、二値データとも称す）を用いて内積演算を行う構成とした場合、精度が低下してしまう。
【０００６】
そこで、近年では、＋１，０，−１の三値で表されるデータ（以下、三値データとも称す）を用いて内積演算を行う画像認識用プロセッサの開発が進められている。三値データを用いて内積演算を行う構成は、二値データを用いて内積演算を行う場合よりも精度を向上させることでき、かつ、浮動小数点型データを用いて内積演算を行う場合よりも処理速度を向上させることができる。なお、三値データ間の演算については、例えば、特許文献１にも開示されている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００２−１４８０４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、三値データを用いて内積演算を行う関連技術の構成では、多ビット幅の１つのワードに対して、２ビットで表現可能な１個の三値データが多ビット幅で表現されたうえで格納されるのが一般的である。そのため、関連技術の構成では、複数の三値データ間の演算を効率よく処理することができない、という問題があった。
【０００９】
なお、特許文献２の構成は、キャリー信号の伝搬遅延に伴う処理速度低下を防ぐために複数の全加算器を用いて三値データ間の演算を行うものであって、複数の三値データからなるデータ間の内積演算を行うことを想定していない。そのため、特許文献２の構成でも、複数の三値データ間の演算を効率よく処理することができない、という問題があった。
【００１０】
その他の課題と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
【課題を解決するための手段】
【００１１】
一実施の形態によれば、データ格納方法は、第１ビットが第１値を示す場合に＋１を表し、第２ビットが第１値を示す場合に−１を表し、前記第１及び前記第２ビットが何れも第２値を示す場合に０を表す、複数の２ビット幅の三値データを１つのワードに格納する。
【００１２】
また、一実施の形態によれば、三値内積演算回路は、複数の２ビット幅の三値データを１つのワードに格納することで構成される第１及び第２入力データのそれぞれの複数の三値データ間の乗算を行う三値乗算部を備え、前記三値乗算部の乗算結果を構成する複数の三値データのうち＋１を表す三値データの数から−１を表す三値データの数を減算した数が内積演算結果として出力される。
【００１３】
また、一実施の形態によれば、三値内積演算処理プログラムは、複数の２ビット幅の三値データを１つのワードに格納することで構成される第１及び第２入力データのそれぞれの複数の三値データ間の乗算を行う乗算処理と、前記乗算結果を構成する複数の三値データのうち＋１を表す三値データの数をカウントする第１カウント処理と、前記乗算結果を構成する複数の三値データのうち−１を表す三値データの数をカウントする第２カウント処理と、＋１を表す前記三値データの数から−１を表す前記三値データの数を減算する減算処理と、をコンピュータに実行させる。
【発明の効果】
【００１４】
前記一実施の形態によれば、複数の三値データ間の演算を効率よく処理することが可能なデータ格納方法、三値内積演算回路、それを備えた半導体装置、及び、三値内積演算処理プログラムを提供することができる。
【図面の簡単な説明】
【００１５】
【図１】実施の形態１に係る画像認識装置を示すブロック図である。
【図２】図１に示す画像認識装置に設けられた画像認識用プロセッサの動作を示すフローチャートである。
【図３】特徴量データを三値データに変換してワードに格納するまでの流れを説明するための図である。
【図４】実施の形態１に係る三値データ格納方法を示す図である。
【図５】実施の形態１に係る三値データ格納方法の具体例を示す図である。
【図６】実施の形態１に係る画像認識用プロセッサを示すブロック図である。
【図７】図６に示す画像認識用プロセッサに設けられた三値乗算器を示すブロック図である。
【図８】図６に示す画像認識用プロセッサに設けられた三値乗算器の具体例を示す回路図である。
【図９】図６に示す画像認識用プロセッサによる三値内積演算処理に関するアセンブリプログラムである。
【図１０】図６に示す画像認識用プロセッサによる三値内積演算処理の具体例を示す図である。
【図１１】図１に示す画像認識装置及びそれに設けられた画像認識用プロセッサのハードウエア構成の一例を示すブロック図である。
【図１２】図１に示す画像認識装置の他の適用事例を示す図である。
【図１３】実施の形態２に係る画像認識用プロセッサを示すブロック図である。
【図１４】図１３に示す画像認識用プロセッサに設けられた三値用ビットカウンタを示すブロック図である。
【図１５】図１３に示す画像認識用プロセッサによる三値内積演算処理に関するアセンブリプログラムである。
【図１６】実施の形態３に係る画像認識用プロセッサを示すブロック図である。
【図１７】図１６に示す画像認識用プロセッサに設けられた三値用ビットカウンタを示すブロック図である。
【図１８】図１６に示す画像認識用プロセッサによる三値内積演算処理に関するアセンブリプログラムである。
【図１９】関連技術の三値データ格納方法を示す図である。
【図２０】関連技術の三値データ格納方法の具体例を示す図である。
【図２１】関連技術の画像認識用プロセッサを示すブロック図である。
【図２２】関連技術の三値内積演算処理に関するアセンブリプログラムである。
【発明を実施するための形態】
【００１６】
以下、図面を参照しつつ、実施の形態について説明する。なお、図面は簡略的なものであるから、この図面の記載を根拠として実施の形態の技術的範囲を狭く解釈してはならない。また、同一の要素には、同一の符号を付し、重複する説明は省略する。
【００１７】
以下の実施の形態においては便宜上その必要があるときは、複数のセクションまたは実施の形態に分割して説明するが、特に明示した場合を除き、それらはお互いに無関係なものではなく、一方は他方の一部または全部の変形例、応用例、詳細説明、補足説明等の関係にある。また、以下の実施の形態において、要素の数等（個数、数値、量、範囲等を含む）に言及する場合、特に明示した場合および原理的に明らかに特定の数に限定される場合等を除き、その特定の数に限定されるものではなく、特定の数以上でも以下でもよい。
【００１８】
さらに、以下の実施の形態において、その構成要素（動作ステップ等も含む）は、特に明示した場合および原理的に明らかに必須であると考えられる場合等を除き、必ずしも必須のものではない。同様に、以下の実施の形態において、構成要素等の形状、位置関係等に言及するときは、特に明示した場合および原理的に明らかにそうでないと考えられる場合等を除き、実質的にその形状等に近似または類似するもの等を含むものとする。このことは、上記数等（個数、数値、量、範囲等を含む）についても同様である。
【００１９】
＜実施の形態１＞
図１は、実施の形態１に係る画像認識装置（半導体装置）１を示す図である。
図１に示すように、画像認識装置１は、例えば車両に搭載され、ホストプロセッサ１１と、画像認識用プロセッサ（三値内積演算回路）１２と、メモリ１３と、を少なくとも備える。
【００２０】
ホストプロセッサ１１は、画像認識装置１における各種処理、画像認識用プロセッサ１２及びメモリ１３へのアクセス等、を制御する。例えば、ホストプロセッサ１１は、カメラ等によって取り込まれた画像をメモリ１３に記憶させたり、メモリ１３に記憶された画像を画像認識用プロセッサ１２によって認識させたりする。
【００２１】
画像認識用プロセッサ１２は、カメラ等によって取り込まれた画像を認識するプロセッサである。
【００２２】
図２は、画像認識用プロセッサ１２の動作を示すフローチャートである。
図２に示すように、まず、画像認識用プロセッサ１２は、カメラ等によって取り込まれた画像を受け取る（ステップＳ１０１）。
【００２３】
その後、画像認識用プロセッサ１２は、受け取った画像の中から特徴量データを作成する領域を選択する（ステップＳ１０２）。図２の例では、画像認識用プロセッサ１２は、画像の一端から他端にかけて順に領域を選択しているが、これに限られず、例えば、あるアルゴリズムに基づいて領域を選択してもよい。
【００２４】
その後、画像認識用プロセッサ１２は、選択領域の画像から得られた画素データの配列に基づいて、量子化されたデータ（所謂、特徴量データ）を作成する（ステップＳ１０３）。図２の例では、画像認識用プロセッサ１２は、選択領域の画像から得られたエッジ画像の方向成分を角度ごとに表したヒストグラム（勾配方向ヒストグラム）を特徴量データとして作成する。
【００２５】
そして、画像認識用プロセッサ１２は、作成した特徴量データと、予め機械学習によって得られた辞書データと、の内積演算を行い、その演算結果に基づいて入力画像に検出対象が含まれるか否かの判断を行う（ステップＳ１０４）。具体的には、例えば、障害物が接近しているか否かの判断を行う。
【００２６】
なお、ｆ（ｘ）を識別関数、ｘを特徴量データベクトル、ｗを辞書データベクトル、ｗ０を辞書データとすると、以下の式（１）が成り立つ。
【００２７】
【数１】
0006324264.tif 000002
【００２８】
画像認識用プロセッサ１２の認識結果は、例えば、電子制御ユニット（ＥＣＵ）に伝えられる（ステップＳ１０５）。電子制御ユニットは、画像認識用プロセッサ１２の認識結果に基づいて障害物が接近しているか否かを判断し、ブレーキの自動制御等を行う。
【００２９】
ここで、画像認識用プロセッサ１２は、実数で表される特徴量データの各要素（勾配方向ヒストグラムの各方向成分）を２ビット幅の三値データに変換した後、複数の２ビット幅の三値データを纏めて１つのワードに格納する。
【００３０】
なお、本実施の形態では、画像認識用プロセッサ１２が、特徴量データの各要素を２ビット幅の三値データに変換した後、複数の２ビット幅の三値データを纏めて１つのワードに格納する場合を例に説明しているが、これに限られない。三値内積演算処理前に任意の手段で２ビット幅の三値データが纏めて１つのワードに格納されていればよい。
【００３１】
また、本実施の形態では、複数の２ビット幅の三値データが、１つのワードに対して割り当てられたレジスタ、に格納される場合について説明するが、これに限られない。例えば、アセンブリ等の言語レベルであれば、複数の２ビット幅の三値データは、各言語における任意のデータフォーマットに従い格納される。なお、ワードとは、画像認識用プロセッサ１２にて同時に処理されるデータ量の最小単位のことである。ワード長とは、ワードのビット数（ビット幅）のことである。
【００３２】
図３は、特徴量データを三値データに変換してワードに格納するまでの流れを説明するための図である。
【００３３】
図３に示すように、画像認識用プロセッサ１２は、実数で表される勾配方向ヒストグラムの各方向成分（特徴量データの各要素）と閾値ｔｈ１，ｔｈ２（但しｔｈ１＜ｔｈ２）とを比較して、閾値ｔｈ２以上の方向成分を値“＋１”、閾値ｔｈ１以上閾値ｔｈ２未満の方向成分を値“０”、閾値ｔｈ１未満の方向成分を値“−１”に変換する。この三値データ＋１，０，−１は、それぞれ２ビット幅の二進数値“０１”，“００”，“１０”で表現される。より詳細には、＋１を示す三値データの場合、２ビット幅の二進数値の下位ビットは１（第１値）を示す。−１を示す三値データの場合、２ビット幅の二進数値の上位ビットは１（第１値）を示す。０を示す三値データの場合、２ビット幅の二進数値の上位及び下位ビットは何れも０（第２値）を示す。そして、画像認識用プロセッサ１２は、複数の２ビット幅の三値データを纏めて１つのワードに格納する。
【００３４】
図３の例では、勾配方向ヒストグラムの方向成分が８個（要素数８個）、ワード長が１６ビットとなっている。したがって、８個の方向成分は、何れも２ビット幅の三値データに変換された後、１６ビット幅の１つのワードに纏めて格納される。
【００３５】
以下、本実施の形態に係る三値データ格納方法についてさらに詳細に説明する。
【００３６】
図４は、本実施の形態に係る三値データ格納方法を示す図である。
図４に示すように、入力データ（特徴量データ等）は、Ｎ（Ｎは１以上の整数）個の三値データ（要素）からなるデータ配列Ｘで表される。また、ワード長はＬ（Ｌは２以上の整数）ビットである。ここでは、２Ｎ≦Ｌである場合について説明する。
【００３７】
例えば、０番目の三値データＸ０として、値＋１，０，−１に対応する２ビット幅の二進数値“０１”，“００”，“１０”の何れかが、ワードの０，１番目のビットｂ０，ｂ１に格納される。１番目の三値データＸ１として、値＋１，０，−１に対応する２ビット幅の二進数値“０１”，“００”，“１０”の何れかが、ワードの２，３番目のビットｂ２，ｂ３に格納される。同様にして、２〜Ｎ−１番目の三値データＸ２〜ＸＮ−１として、各々、値＋１，０，−１に対応する２ビット幅の二進数値“０１”，“００”，“１０”の何れかが、ワードの対応する２ビットに格納される。このようにして、Ｎ個の２ビット幅の三値データがＬビット幅の１つのワードに纏めて格納される。
【００３８】
このように、複数の２ビット幅の三値データ（要素）を１つのワードに格納することで、当該複数の三値データを画像認識用プロセッサ１２にて同時に処理することが可能になる。それにより、画像認識用プロセッサ１２は、複数の三値データ間の演算（具体的には内積演算）を効率よく処理することが可能となる。
【００３９】
図５は、本実施の形態に係る三値データ格納方法の具体例を示す図である。ここでは、要素数Ｎ＝３２、ワード長Ｌ＝１６、即ち、２Ｎ＞Ｌである場合について説明する。
【００４０】
図５に示すように、入力データのデータ配列Ｘは、３２個の三値データＸ０〜Ｘ３１からなる。この場合、３２個の２ビット幅の三値データＸ０〜Ｘ３１は、４つの１６ビット幅のワードに分割して格納される。より具体的には、８個の２ビット幅の三値データＸ０〜Ｘ７が１つ目の１６ビット幅のワードに格納され、８個の２ビット幅の三値データＸ８〜Ｘ１５が２つ目の１６ビット幅のワードに格納され、８個の２ビット幅の三値データＸ１６〜Ｘ２３が３つ目の１６ビット幅のワードに格納され、８個の２ビット幅の三値データＸ２４〜Ｘ３１が４つ目の１６ビット幅のワードに格納される。
【００４１】
（関連技術のデータ格納方法）
図１９は、関連技術の三値データ格納方法を示す図である。
図１９に示すように、入力データは、Ｎ（Ｎは１以上の整数）個の三値データ（要素）からなるデータ配列Ｘで表される。また、ワード長はＬ（Ｌは２以上の整数）ビットである。
【００４２】
関連技術の構成では、ｉ（ｉは０〜Ｎ−１の任意の整数）番目の三値データＸｉとして、値＋１，０，−１に対応するＬビット幅の値“００…０００００００１”，“００…００００００００”，“１１…１１１１１１１１”の何れかが、Ｌビット幅の１つのワードに格納される。つまり、１つのワードに対して１つの三値データ（要素）のみが格納される。
【００４３】
図２０は、関連技術の三値データ格納方法の具体例を示す図である。ここでは、要素数Ｎ＝３２、ワード長Ｌ＝１６である場合について説明する。
【００４４】
図２０に示すように、入力データのデータ配列Ｘは、３２個の三値データＸ０〜Ｘ３１からなる。この場合、３２個の三値データＸ０〜Ｘ３１は、それぞれ３２個のワードに個別に格納される。このような構成では、複数の三値データを同時に処理することができないため、複数の三値データ間の演算（具体的には内積演算）を効率よく処理することができない。
【００４５】
（画像認識用プロセッサ１２の構成）
図６は、画像認識用プロセッサ１２の構成を示すブロック図である。
図６に示すように、画像認識用プロセッサ１２は、半導体基板上にＣＭＯＳ製造プロセスを用いて形成され、メモリ１３に記憶された入力データ（特徴量データ等）及び命令データに基づいて演算処理を実行して、演算結果（画像認識結果）を出力する。
【００４６】
具体的には、画像認識用プロセッサ１２は、制御部１２１と、ＡＬＵ（算術演算部）１２２と、三値乗算器（三値乗算部）１２３と、を少なくとも備える。また、制御部１２１は、複数のレジスタからなるレジスタ部１２４を有する。
【００４７】
制御部１２１は、メモリ１３から受け取った命令データをデコードし、ＡＬＵ１２２及び三値乗算器１２３の制御を行う。ＡＬＵ１２２は、乗算、加算、論理演算、ビットカウント等の機能を有する回路である。三値乗算器１２３は、指定されたアドレスのレジスタに格納された複数の２ビット幅の三値データ（要素）と、指定された別のアドレスに格納された複数の２ビット幅の三値データ（要素）と、をそれぞれ乗算する回路である。ＡＬＵ１２２及び三値乗算器１２３のそれぞれの演算結果は、レジスタ部１２４に書き込まれる。
【００４８】
（三値乗算器１１３の構成例）
図７は、三値乗算器１２３を示すブロック図である。ここでは、要素数Ｎ＝８，ワード長Ｌ＝１６である場合について説明する。
【００４９】
図７に示すように、三値乗算器１２３は、８個の２ビット幅の三値データ（要素）Ｘ０〜Ｘ７からなる１６ビット幅のデータｒｄ１と、８個の２ビット幅の三値データ（要素）Ｙ０〜Ｙ７からなる１６ビット幅のデータｒｄ２と、を受け取って、同じく８個の２ビット幅の三値データ（要素）Ｚ０〜Ｚ７からなる１６ビット幅のデータｒｄｏを出力する。
【００５０】
より具体的には、三値乗算器１２３は、Ｌ／２個の三値乗算回路を有する。ここでＬ＝１６であるから、三値乗算器１２３は、８個の三値乗算回路３ｍｕｌ２ｂ＿０〜３ｍｕｌ２ｂ＿７を有する。三値乗算回路３ｍｕｌ２ｂ＿０〜３ｍｕｌ２ｂ＿７は、それぞれ、データｒｄ１を構成する２ビット幅の三値データＸ０〜Ｘ７と、データｒｄ２を構成する２ビット幅の三値データＹ０〜Ｙ７と、を乗算して、データｒｄｏを構成する２ビット幅の三値データＺ０〜Ｚ７を出力する。
【００５１】
図８は、三値乗算回路３ｍｕｌ２ｂ＿０の具体例を示す回路図である。なお、三値乗算回路３ｍｕｌ２ｂ＿１〜３ｍｕｌ２ｂ＿７については、三値乗算回路３ｍｕｌ２ｂ＿０と同じ構成であるため、その説明を省略する。
【００５２】
図８に示すように、三値乗算回路３ｍｕｌ２ｂ＿０は、データｒｄ１に含まれる三値データＸ０と、データｒｄ２に含まれる三値データＹ０と、を乗算して、データｒｄｏに含まれる三値データＺ０を出力する回路である。ここで、三値データＸ０は、データｒｄ１の第０ビット（ｒｄ１［０］）及び第１ビット（ｒｄ１［１］）により構成される。三値データＹ０は、データｒｄ２の第０ビット（ｒｄ２［０］）及び第１ビット（ｒｄ２［１］）により構成される。三値データＺ０は、データｒｄｏの第０ビット（ｒｄｏ［０］）及び第１ビット（ｒｄｏ［１］）により構成される。
【００５３】
具体的には、三値乗算回路３ｍｕｌ２ｂ＿０は、論理積回路（以下、ＡＮＤ回路と称す）１５１〜１５３と、論理和回路（以下、ＯＲ回路と称す）１５４と、排他的論理和回路（以下、ＥＸＯＲ回路と称す）１５５，１５６と、を有する。
【００５４】
ＡＮＤ回路１５１は、データｒｄ１［０］と、データｒｄ１［１］と、の論理積を出力する。ＡＮＤ回路１５２は、データｒｄ２［０］と、データｒｄ２［１］と、の論理積を出力する。ＯＲ回路１５４は、ＡＮＤ回路１５１，１５２のそれぞれの出力の論理和をデータｒｄｏ［０］として出力する。
【００５５】
ＥＸＯＲ回路１５５は、データｒｄ１［０］と、データｒｄ１［１］と、の排他的論理和を出力する。ＥＸＯＲ回路１５６は、データｒｄ２［０］と、データｒｄ２［１］と、の排他的論理和を出力する。ＡＮＤ回路１５３は、ＥＸＯＲ回路１５５，１５６のそれぞれの出力の論理積をデータｒｄｏ［１］として出力する。
【００５６】
かかる構成により、三値乗算回路３ｍｕｌ２ｂ＿０は、三値データ＋１，０，−１をそれぞれ２ビット幅の２進数の値“０１”，“００”，“１０”で表した乗算結果を出力することが可能となる。
【００５７】
なお、各三値乗算回路３ｍｕｌ２ｂ＿０〜３ｍｕｌ２ｂ＿７は、上記構成に限られず、同等の機能を有する他の構成に適宜変更可能である。
【００５８】
（画像認識用プロセッサ１２の動作）
次に、図９及図１０を用いて、画像認識用プロセッサ１２の動作について説明する。
図９は、三値内積演算処理に関するアセンブリプログラムである。
【００５９】
制御部１２１は、メモリ１３に記憶された命令コードの一つである図９に示すアセンブリプログラムに基づいて、ＡＬＵ１２２及び三値乗算器１２３の処理を制御する。本例では、要素数Ｎ＝１２８、ワード長Ｌ＝１６である場合について説明する。したがって、１ワード当たり８個の２ビット幅の三値データを格納することができる。なお、レジスタ部１２４に設けられた各レジスタは、１ワード（即ち１６ビット）分のデータを格納することができるものとする。
【００６０】
図９に示すように、１サイクル目では、ロード命令によって、一方の入力データ（例えば特徴量データ）を構成する１２８個の要素のうちの８個の要素がメモリ１３から読み出されレジスタ部１１４に格納される。具体的には、レジスタｒ１に記憶されたメモリ１３の先頭アドレスに、レジスタｒ２に記憶されたアドレスオフセットを加算することで指定されたメモリ１３のアドレス、に記憶されている８個の２ビット幅の三値データ（例えば特徴量データの要素）が、レジスタアドレスｒ０のレジスタ（レジスタｒ０と称す）に格納される。
【００６１】
２サイクル目では、ロード命令によって、他方の入力データ（例えば辞書データ）を構成する１２８個の要素のうちの８個の要素がメモリ１３から読み出されレジスタ部１１４に格納される。具体的には、レジスタｒ４に記憶されたメモリ１３の先頭アドレスに、レジスタｒ２に記憶されたアドレスオフセットを加算することで指定されたメモリ１３のアドレス、に記憶されている８個の２ビット幅の三値データ（例えば辞書データの要素）が、レジスタアドレスｒ３のレジスタ（レジスタｒ３と称す）に格納される。
【００６２】
３サイクル目では、専用の三値乗算命令(mult3)によって、三値乗算器１２３による乗算が実行される。三値乗算器１２３は、一方の入力データの８要素と、他方の入力データの８要素と、をそれぞれ乗算する。具体的には、三値乗算器１２３は、レジスタｒ０に記憶された８個の２ビット幅の三値データと、レジスタｒ３に記憶された８個の２ビット幅の三値データと、をそれぞれ並列に乗算する。三値乗算器１２３の乗算結果（８個の２ビット幅の三値データ）は、レジスタｒ５に格納される。
【００６３】
４サイクル目では、レジスタｒ５に格納された三値乗算器１２３の乗算結果（８個の２ビット幅の三値データ）と、０ｂ０１０１０１０１０１０１０１０１（＝０ｘ５５５５）と、の論理積が実行され、その結果がレジスタｒ６に格納される。この論理演算は、各三値データの下位ビット（偶数ビット）の値をそのまま出力させて、上位ビット（奇数ビット）の値を０にマスクする、ビットマスク処理に相当する。ここで、＋１の二進数値は“０１”、０の二進数値は“００”、−１の二進数値は“１０”と表されていることから、＋１を示す三値データのみレジスタｒ６に格納されることになる。
【００６４】
５サイクル目では、レジスタｒ５に格納された三値乗算器１２３の乗算結果（８個の２ビット幅の三値データ）と、０ｂ１０１０１０１０１０１０１０１０（＝０ｘＡＡＡＡ）と、の論理積が実行され、その結果がレジスタｒ７に格納される。この論理演算は、各三値データの上位ビット（奇数ビット）の値をそのまま出力させて、下位ビット（偶数ビット）の値を０にマスクする、ビットマスク処理に相当する。ここで、＋１の二進数値は“０１”、０の二進数値は“００”、−１の二進数値は“１０”と表されていることから、−１を示す三値データのみレジスタｒ７に格納されることになる。
【００６５】
６サイクル目では、ビットカウント命令によって、レジスタｒ６に格納された＋１を示す三値データの数がカウントされる。具体的な処理としては、レジスタｒ６に格納されたデータを構成する１６ビットのうち１を示すビットの数がカウントされる。カウント結果は、レジスタｒ８に格納される。
【００６６】
７サイクル目では、ビットカウント命令によって、レジスタｒ７に格納された−１を示す三値データの数がカウントされる。具体的な処理としては、レジスタｒ７に格納されたデータを構成する１６ビットのうち１を示すビットの数がカウントされる。カウント結果は、レジスタｒ９に格納される。
【００６７】
８サイクル目では、レジスタｒ８に格納された＋１を示す三値データの数から、レジスタｒ９に格納された−１を示す三値データの数が、減算される。この減算結果は、要素８個分の内積演算結果に相当し、レジスタｒ１０に格納される。
【００６８】
図１０は、三値内積演算処理の具体例を示す図である。
図１０を参照すると、
１サイクル目にて、レジスタｒ０に
（＋１，＋１，  ０，  ０，  ０，−１，−１，−１）
＝（０１，０１，００，００，００，１０，１０，１０）が格納され、
２サイクル目にて、レジスタｒ３に
（−１，＋１，−１，  ０，＋１，−１，  ０，＋１）
＝（１０，０１，１０，００，０１，１０，００，０１）が格納される。
【００６９】
この場合、３サイクル目の三値乗算器１１３の乗算結果は、
（−１，＋１，  ０，  ０，  ０，＋１，  ０，−１）
＝（１０，０１，００，００，００，０１，００，１０）となる。
【００７０】
したがって、４サイクル目のビットマスク処理の結果は、
（００，０１，００，００，００，０１，００，００）となる。
また、５サイクル目のビットマスク処理の結果は、
（１０，００，００，００，００，００，００，１０）となる。
【００７１】
したがって、６サイクル目のビットカウントの結果、即ち、＋１を示す三値データの数は２個となる。７サイクル目のビットカウントの結果、即ち、−１を示す三値データの数は２個となる。
【００７２】
したがって、８サイクル目の減算結果、即ち、要素８個分の内積演算結果は、「＋１を示す三値データの数」−「−１を示す三値データの数」＝２−２＝０となる。
【００７３】
図９に戻り、９サイクル目では、レジスタｒ１０に格納された要素８個分の内積演算結果が、レジスタｒ１１の値（初期値は０）に累積加算される。
【００７４】
１０サイクル目では、レジスタｒ２に記憶されたオフセット値に１が加算される。それにより、次の８個の要素の読み出しが可能となる。
【００７５】
１１サイクル目では、レジスタｒ２に記憶されたオフセット値が所定値に達したか否かが判定される。つまり、各入力データを構成する１２８個の要素の全てについて内積が行われたか否かが判定される。全てについて内積が行われていなければ、１サイクル目に戻り、全てについて内積が行われていれば、次の処理に進む。本例では、要素数＝１２８，ワード長Ｌ＝１６であって、１ワード当たり８個の要素が格納されることから、合計１６（＝１２８／８））回、１〜１１サイクル目の処理が繰り返される。最終的に、レジスタｒ１１には、要素１２８個分の内積演算結果が格納されることとなる。
【００７６】
ここで、１〜１１サイクル目の処理が１６回繰り返されることから、合計サイクル数は、１１×１６＝１７６サイクルとなる。
【００７７】
（関連技術の構成）
図２１は、関連技術の画像認識用プロセッサ５２の構成を示すブロック図である。
図２１に示すように、画像認識用プロセッサ５２は、制御部５２１，ＡＬＵ５２２と、を備える。また、制御部５２１は、複数のレジスタからなるレジスタ部５２４を有する。
【００７８】
制御部５２１は、外部メモリから受け取った命令データをデコードし、ＡＬＵ５２２の制御を行う。ＡＬＵ５２２の演算結果は、レジスタ部５２４に書き込まれる。
【００７９】
（関連技術の動作）
次に、関連技術の画像認識用プロセッサ５２の動作について説明する。図２２は、関連技術の三値内積演算処理に関するアセンブリプログラムである。本例では、要素数Ｎ＝１２８、ワード長Ｌ＝１６である場合について説明する。ここで、関連技術の構成では、上述のように１ワード当たり１つの三値データのみ格納される。
【００８０】
図２２に示すように、１サイクル目では、ロード命令によって、一方の入力データ（例えば特徴量データ）を構成する１２８個の要素のうち１個の要素が外部メモリから読み出されレジスタ部５２４に格納される。具体的には、レジスタｒ１に記憶された外部メモリの先頭アドレスに、レジスタｒ２に記憶されたアドレスオフセットを加算することで指定された外部メモリのアドレス、に記憶されている１個の１６ビット幅の三値データ（例えば特徴量データの要素）が、レジスタｒ０に格納される。
【００８１】
２サイクル目では、ロード命令によって、他方の入力データ（例えば辞書データ）を構成する１２８個の要素のうち１個の要素が外部メモリから読み出されレジスタ部５２４に格納される。具体的には、レジスタｒ４に記憶された外部メモリの先頭アドレスに、レジスタｒ２に記憶されたアドレスオフセットを加算することで指定された外部メモリのアドレス、に記憶されている１個の１６ビット幅の三値データ（例えば辞書データの要素）が、レジスタｒ３に格納される。
【００８２】
３サイクル目では、一方の入力データの１要素と、他方の入力データの１要素と、の乗算が実行される。具体的には、レジスタｒ０に記憶された１個の三値データと、レジスタｒ３に記憶された１個の三値データと、の乗算が実行される。この乗算結果（１個の１６ビット幅の三値データ）は、要素１個分の内積演算結果に相当し、レジスタｒ５に格納される。
【００８３】
４サイクル目では、レジスタｒ５に格納された要素１個分の内積演算結果が、レジスタｒ６の値（初期値は０）に累積加算される。
【００８４】
５サイクル目では、レジスタｒ２に記憶されたオフセット値に１が加算される。それにより、次の１個の要素の読み出しが可能となる。
【００８５】
６サイクル目では、レジスタｒ２に記憶されたオフセット値が所定値に達したか否かがが判定される。つまり、各入力データを構成する１２８個の要素の全てについて内積が行われたか否かが判定される。全てについて内積が行われていなければ、１サイクル目に戻り、全てについて内積が行われていれば、次の処理に進む。本例では、要素数＝１２８，ワード長Ｌ＝１６であって、１ワード当たり１個の要素のみ格納されることから、合計１２８回、１〜６サイクル目の処理が繰り返される。最終的に、レジスタｒ６には、要素１２８個分の内積演算結果が格納されることとなる。
【００８６】
ここで、１〜６サイクル目の処理が１２８回繰り返されることから、合計サイクル数は、６×１２８＝７６８サイクルとなる。
【００８７】
このように、画像認識用プロセッサ１２は、関連技術の画像認識用プロセッサ５２の場合よりも、少ないサイクル数で効率よく２入力データ間の三値内積演算を実行することができる。
【００８８】
（画像認識用プロセッサ及び画像認識装置のハードウエア構成）
なお、画像認識用プロセッサ１２及びそれを備えた画像認識装置１は、例えば、汎用的なコンピュータシステムにより実現可能である。以下、図１１を用いて簡単に説明する。
【００８９】
図１１は、画像認識用プロセッサ１２及びそれを備えた画像認識装置１のハードウエア構成の一例を示すブロック図である。コンピュータ１００は、例えば、制御装置であるＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ；画像認識用プロセッサ１２及びホストプロセッサ１１に相当）１０１と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）１０２と、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）１０３と、外部とのインターフェースであるＩＦ（Ｉｎｔｅｒ  Ｆａｃｅ）１０４と、不揮発性記憶装置の一例であるＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）１０５と、を備える。さらに、コンピュータ１００は、その他図示しない構成として、キーボードやマウス等の入力装置やディスプレイ等の表示装置を備えていても良い。
【００９０】
ＨＤＤ１０５には、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）（不図示）と、三値内積演算処理プログラム１０６と、が記憶されている。三値内積演算処理プログラム１０６は、本実施の形態に係る三値内積演算処理が実装されたコンピュータプログラムである。
【００９１】
ＣＰＵ１０１は、コンピュータ１００における各種処理、ＲＡＭ１０２，ＲＯＭ１０３，ＩＦ１０４及びＨＤＤ１０５へのアクセス等を制御する。コンピュータ１００は、ＣＰＵ１０１がＨＤＤ１０５に記憶されたＯＳ及び三値内積演算処理プログラム１０６を読み込み、実行する。これにより、コンピュータ１００は、本実施の形態にかかる画像認識用プロセッサ１２及びそれを備えた画像認識装置１を実現する。
【００９２】
（画像認識装置１の他の適用事例）
続いて、画像認識装置１の他の適用事例について説明する。
図１２は、画像認識装置１の適用事例を示す図である。
【００９３】
図１２に示すように、画像認識装置１は、車両に搭載される場合に限られず、ビデオ等で撮影された画像をパーソナルコンピュータに取り込む場合などにも適用可能である。
【００９４】
＜実施の形態２＞
図１３は、実施の形態２に係る画像認識用プロセッサ２２を示すブロック図である。
図１３に示すように、画像認識用プロセッサ２２は、制御部２２１と、ＡＬＵ２２２と、三値乗算器２２３と、三値用ビットカウンタ２２５と、を少なくとも備える。また、制御部２２１は、複数のレジスタからなるレジスタ部２２４を有する。なお、制御部２２１、ＡＬＵ２２２、三値乗算器２２３及びレジスタ部２２４は、それぞれ、制御部１２１、ＡＬＵ１２２、三値乗算器１２３及びレジスタ部１２４に対応する。
【００９５】
制御部２１１は、メモリ１３から受け取った命令データをデコードし、ＡＬＵ２２２、三値乗算器２２３及び三値用ビットカウンタ２２５の制御を行う。三値用ビットカウンタ２２５は、指定されたアドレスのレジスタに格納された複数の２ビット幅の三値データ（要素）のうち、＋１を示す三値データの数、及び、−１を示す三値データの数、を選択的にカウントする回路である。ＡＬＵ２２２及び三値乗算器２２３については、ＡＬＵ１２２及び三値乗算器１２３と同様であるため、その説明を省略する。ＡＬＵ２２２、三値乗算器２２３及び三値用ビットカウンタ２２５のそれぞれの演算結果は、レジスタ部２２４に書き込まれる。
【００９６】
（三値用ビットカウンタ２２５）
図１４は、三値用ビットカウンタ２２５を示すブロック図である。ここでは、要素数Ｎ＝８，ワード長Ｌ＝１６である場合について説明する。
【００９７】
図１４に示すように、三値用ビットカウンタ２２５は、８個の２ビット幅の三値データ（要素）Ｘ０〜Ｘ７からなる１６ビット幅のデータｒｄｉｎを受け取って、＋１を示す三値データの数、及び、−１を示す三値データの数、を選択的にカウントしてデータｒｄｏｕｔとして出力する。
【００９８】
より具体的には、三値用ビットカウンタ２２５は、Ｌ／２個のセレクタと、ビットカウント回路ＢＣ１と、を有する。ここでＬ＝１６であるから、三値用ビットカウンタ２２５は、８個のセレクタＳＥＬ０〜ＳＥＬ７を有する。セレクタＳＥＬ０〜ＳＥＬ７は、それぞれ、三値データＸ０〜Ｘ７の下位ビット（偶数ビット）、又は、三値データＸ０〜Ｘ７の上位ビット（奇数ビット）、を選択して出力する。ここで、＋１の二進数値は“０１”、０の二進数値は“００”、−１の二進数値は“１０”と表されていることから、三値データＸ０〜Ｘ７の下位ビット（偶数ビット）の値に基づいて当該三値データＸ０〜Ｘ７が＋１を示すか否か判別することができ、三値データＸ０〜Ｘ７の上位ビット（奇数ビット）の値に基づいて当該三値データＸ０〜Ｘ７が−１を示すか否か判別することができる。
【００９９】
ビットカウント回路ＢＣ１は、セレクタＳＥＬ０〜ＳＥＬ７のそれぞれの出力結果のうち１を示す出力結果の数をカウントする。つまり、セレクタＳＥＬ０〜ＳＥＬ７により三値データＸ０〜Ｘ７の下位ビットが選択されている場合には、ビットカウント回路ＢＣ１は、＋１を示す三値データＸ０〜Ｘ７の数をカウントする。他方、セレクタＳＥＬ０〜ＳＥＬ７により三値データＸ０〜Ｘ７の上位ビットが選択されている場合には、ビットカウント回路ＢＣ１は、−１を示す三値データＸ０〜Ｘ７の数をカウントする。そして、ビットカウント回路ＢＣ１は、カウント結果をデータｒｄｏｕｔとして出力する。
【０１００】
かかる構成により、三値用ビットカウンタ２２５は、８個の三値データのうち、＋１を示す三値データの数、及び、−１を示す三値データの数、を選択的にカウントして出力することができる。なお、三値用ビットカウンタ２２５は、上記構成に限られず、同等の機能を有する他の構成に適宜変更可能である。
【０１０１】
（画像認識用プロセッサ２２の動作）
次に、図１５を用いて、画像認識用プロセッサ２２の動作について説明する。
図１５は、三値内積演算処理に関するアセンブリプログラムである。
【０１０２】
制御部２２１は、メモリ１３に記憶された命令コードの一つである図１５に示すアセンブリプログラムに基づいて、ＡＬＵ２２２、三値乗算器２２３及び三値用ビットカウンタ２２５の処理を制御する。本例では、要素数Ｎ＝１２８、ワード長Ｌ＝１６である場合について説明する。したがって、１ワード当たり８個の２ビット幅の三値データを格納することができる。なお、レジスタ部２２４に設けられた各レジスタは、１ワード（即ち１６ビット）分のデータを格納することができるものとする。
【０１０３】
図１５に示すように、１サイクル目では、８個の２ビット幅の三値データ（例えば特徴量データの要素）がレジスタｒ０に格納される。２サイクル目では、８個の２ビット幅の三値データ（例えば辞書データの要素）がレジスタｒ３に格納される。
【０１０４】
３サイクル目では、専用の三値乗算命令(mult3)によって、三値乗算器２２３による乗算が実行される。具体的には、三値乗算器２２３は、レジスタｒ０に記憶された８個の２ビット幅の三値データと、レジスタｒ３に記憶された８個の２ビット幅の三値データと、をそれぞれ並列に乗算する。三値乗算器２２３の乗算結果（８個の２ビット幅の三値データ）は、レジスタｒ５に格納される。
【０１０５】
４サイクル目では、専用のビットカウント命令(bcountE)によって、＋１を示す三値データの数が三値用ビットカウンタ２２５によりカウントされる。具体的には、三値用ビットカウンタ２２５は、レジスタｒ５に記憶された三値乗算器２２３の乗算結果のうち１を示す偶数ビットの数をカウントする。このカウント結果は、レジスタｒ６に格納される。
【０１０６】
５サイクル目では、専用のビットカウント命令(bcountO)によって、−１を示す三値データの数が三値用ビットカウンタ２２５によりカウントされる。具体的には、三値用ビットカウンタ２２５は、レジスタｒ５に記憶された三値乗算器２２３の乗算結果のうち１を示す奇数ビットの数をカウントする。このカウント結果は、レジスタｒ７に格納される。
【０１０７】
６サイクル目では、レジスタｒ６に格納された＋１を示す三値データの数から、レジスタｒ７に格納された−１を示す三値データの数が、減算される。この減算結果は、要素８個分の内積演算結果に相当し、レジスタｒ８に格納される。
【０１０８】
７サイクル目では、レジスタｒ８に格納された要素８個分の内積演算結果が、レジスタｒ９の値（初期値は０）に累積加算される。
【０１０９】
８サイクル目では、レジスタｒ２に記憶されたオフセット値に１が加算される。それにより、次の８個の要素の読み出しが可能となる。
【０１１０】
９サイクル目では、レジスタｒ２に記憶されたオフセット値が所定値に達したか否かが判定される。つまり、各入力データを構成する１２８個の要素の全てについて内積が行われたか否かが判定される。全てについて内積が行われていなければ、１サイクル目に戻り、全てについて内積が行われていれば、次の処理に進む。本例では、要素数＝１２８，ワード長Ｌ＝１６であって、１ワード当たり８個の要素が格納されることから、合計１６（＝１２８／８））回、１〜９サイクル目の処理が繰り返される。最終的に、レジスタｒ９には、要素１２８個分の内積演算結果が格納されることとなる。
【０１１１】
ここで、１〜９サイクル目の処理が１６回繰り返されることから、合計サイクル数は、９×１６＝１４４サイクルとなる。
【０１１２】
このように、画像認識用プロセッサ２２は、画像認識用プロセッサ１２の場合よりも、さらに少ないサイクル数で効率よく２入力データ間の三値内積演算を実行することができる。
【０１１３】
＜実施の形態３＞
図１６は、実施の形態３に係る画像認識用プロセッサ３２を示すブロック図である。
図１６に示すように、画像認識用プロセッサ３２は、制御部３２１と、ＡＬＵ３２２と、三値乗算器３２３と、三値用ビットカウンタ（乗算結果処理部）３２５と、を少なくとも備える。また、制御部３２１は、複数のレジスタからなるレジスタ部３２４を有する。なお、制御部３２１、ＡＬＵ３２２、三値乗算器３２３及びレジスタ部３２４は、それぞれ、制御部１２１、ＡＬＵ１２２、三値乗算器１２３及びレジスタ部１２４に対応する。
【０１１４】
制御部３１１は、メモリ１３から受け取った命令データをデコードし、ＡＬＵ３２２、三値乗算器３２３及び三値用ビットカウンタ３２５の制御を行う。三値用ビットカウンタ３２５は、指定されたアドレスのレジスタに格納された複数の２ビット幅の三値データ（要素）のうち、＋１を示す三値データの数、及び、−１を示す三値データの数、をそれぞれカウントした後、＋１を示す三値データの数から−１を示す三値データの数を減算した結果を出力する回路である。ＡＬＵ３２２及び三値乗算器３２３については、ＡＬＵ１２２及び三値乗算器１２３と同様であるため、その説明を省略する。ＡＬＵ３２２、三値乗算器３２３及び三値用ビットカウンタ３２５のそれぞれの演算結果は、レジスタ部３２４に書き込まれる。
【０１１５】
（三値用ビットカウンタ３２５）
図１７は、三値用ビットカウンタ３２５を示すブロック図である。ここでは、要素数Ｎ＝８，ワード長Ｌ＝１６である場合について説明する。
【０１１６】
図１７に示すように、三値用ビットカウンタ３２５は、８個の２ビット幅の三値データ（要素）Ｘ０〜Ｘ７からなる１６ビット幅のデータｒｄｉｎを受け取って、＋１を示す三値データの数、及び、−１を示す三値データの数、をそれぞれカウントした後、これらの差を算出してデータｒｄｏｕｔ２として出力する。
【０１１７】
より具体的には、三値用ビットカウンタ３２５は、ビットカウント回路（第１及び第２カウンタ）ＢＣ２，ＢＣ３と、減算回路ＳＵＢ１と、を有する。ビットカウント回路ＢＣ２は、三値データＸ０〜Ｘ７の上位ビット（奇数ビット）のうち１を示すビットの数をカウントする。ビットカウント回路ＢＣ３は、三値データＸ０〜Ｘ７の下位ビット（偶数ビット）のうち１を示すビットの数をカウントする。
【０１１８】
ここで、＋１の二進数値は“０１”、０の二進数値は“００”、−１の二進数値は“１０”と表されていることから、三値データＸ０〜Ｘ７の上位ビット（奇数ビット）のうち１を示すビットの数に基づいて、−１を示す三値データＸ０〜Ｘ７の数を特定することができ、また、三値データＸ０〜Ｘ７の下位ビット（偶数ビット）のうち１を示すビットの数に基づいて、＋１を示す三値データＸ０〜Ｘ７の数を特定することができる。
【０１１９】
そして、減算回路ＳＵＢ１は、＋１を示す三値データの数から、−１を示す三値データの数を減算して、減算結果をデータｒｄｏｕｔ２として出力する。この減算結果は、要素８個分の内積演算結果に相当する。
【０１２０】
かかる構成により、三値用ビットカウンタ３２５は、８個の三値データのうち、＋１を示す三値データの数、及び、−１を示す三値データの数、をそれぞれカウントした後、これらの差を要素８個分の内積演算結果として出力することができる。なお、三値用ビットカウンタ３２５は、上記構成に限られず、同等の機能を有する他の構成に適宜変更可能である。
【０１２１】
（画像認識用プロセッサ３２の動作）
次に、図１８を用いて、画像認識用プロセッサ３２の動作について説明する。
図１８は、三値内積演算処理に関するアセンブリプログラムである。
【０１２２】
制御部３２１は、メモリ１３に記憶された命令コードの一つである図１８に示すアセンブリプログラムに基づいて、ＡＬＵ３２２、三値乗算器３２３及び三値用ビットカウンタ３２５の処理を制御する。本例では、要素数Ｎ＝１２８、ワード長Ｌ＝１６である場合について説明する。したがって、１ワード当たり８個の２ビット幅の三値データを格納することができる。なお、レジスタ部３２４に設けられた各レジスタは、１ワード（即ち１６ビット）分のデータを格納することができるものとする。
【０１２３】
図１８に示すように、１サイクル目では、８個の２ビット幅の三値データ（例えば特徴量データの要素）がレジスタｒ０に格納される。２サイクル目では、８個の２ビット幅の三値データ（例えば辞書データの要素）がレジスタｒ３に格納される。
【０１２４】
３サイクル目では、専用の三値乗算命令(mult3)によって、三値乗算器３２３による乗算が実行される。具体的には、三値乗算器３２３は、レジスタｒ０に記憶された８個の２ビット幅の三値データと、レジスタｒ３に記憶された８個の２ビット幅の三値データと、をそれぞれ並列に乗算する。三値乗算器３２３の乗算結果（８個の２ビット幅の三値データ）は、レジスタｒ５に格納される。
【０１２５】
４サイクル目では、専用のビットカウント命令(bcount3)によって、三値用ビットカウンタ３２５による処理が行われる。具体的には、三値用ビットカウンタ３２５は、レジスタｒ５に記憶された三値乗算器３２３の乗算結果のうち、１を示す偶数ビットの数、及び、１を示す奇数ビットの数、をそれぞれカウントした後、１を示す偶数ビットの数から１を示す奇数ビットの数を減算する。この減算結果は、要素８個分の内積演算結果に相当し、レジスタｒ６に格納される。
【０１２６】
５サイクル目では、レジスタｒ６に格納された要素８個分の内積演算結果が、レジスタｒ７の値（初期値は０）に累積加算される。
【０１２７】
６サイクル目では、レジスタｒ２に記憶されたオフセット値に１が加算される。それにより、次の８個の要素の読み出しが可能となる。
【０１２８】
７サイクル目では、レジスタｒ２に記憶されたオフセット値が所定値に達したか否かが判定される。つまり、各入力データを構成する１２８個の要素の全てについて内積が行われたか否かが判定される。全てについて内積が行われていなければ、１サイクル目に戻り、全てについて内積が行われていれば、次の処理に進む。本例では、要素数＝１２８，ワード長Ｌ＝１６であって、１ワード当たり８個の要素が格納されることから、合計１６（＝１２８／８））回、１〜７サイクル目の処理が繰り返される。最終的に、レジスタｒ７には、要素１２８個分の内積演算結果が格納されることとなる。
【０１２９】
ここで、１〜７サイクル目の処理が１６回繰り返されることから、合計サイクル数は、７×１６＝１１２サイクルとなる。
【０１３０】
このように、画像認識用プロセッサ３２は、画像認識用プロセッサ２２の場合よりも、さらに少ないサイクル数で効率よく２入力データ間の三値内積演算を実行することができる。
【０１３１】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は既に述べた実施の形態に限定されるものではなく、その要旨を逸脱しない範囲において種々の変更が可能であることはいうまでもない。
【０１３２】
例えば、上記の実施の形態に係る半導体装置では、半導体基板、半導体層、拡散層（拡散領域）などの導電型（ｐ型もしくはｎ型）を反転させた構成としてもよい。そのため、ｎ型、及びｐ型の一方の導電型を第１の導電型とし、他方の導電型を第２の導電型とした場合、第１の導電型をｐ型、第２の導電型をｎ型とすることもできるし、反対に第１の導電型をｎ型、第２の導電型をｐ型とすることもできる。
【符号の説明】
【０１３３】
１  画像認識装置
１１  ホストプロセッサ
１２  画像認識用プロセッサ
１３  メモリ
１２１  制御部
１２２  ＡＬＵ
１２３  三値乗算器
１２４  レジスタ部
３ｍｕｌ２ｂ＿０〜３ｍｕｌ２ｂ＿７  三値乗算回路
１５１，１５２，１５３  ＡＮＤ回路
１５４  ＯＲ回路
１５５  ＥＸＯＲ回路
２２  画像認識用プロセッサ
２２１  制御部
２２２  ＡＬＵ
２２３  三値乗算器
２２４  レジスタ部
２２５  三値用ビットカウンタ
３２  画像認識用プロセッサ
３２１  制御部
３２２  ＡＬＵ
３２３  三値乗算器
３２４  レジスタ部
３２５  三値用ビットカウンタ
ＢＣ１〜ＢＣ３  ビットカウント回路
ＳＥＬ０〜ＳＥＬ７  セレクタ
ＳＵＢ１  減算回路
【図１】
0006324264.tif 000003
【図２】
0006324264.tif 000004
【図３】
0006324264.tif 000005
【図４】
0006324264.tif 000006
【図５】
0006324264.tif 000007
【図６】
0006324264.tif 000008
【図７】
0006324264.tif 000009
【図８】
0006324264.tif 000010
【図９】
0006324264.tif 000011
【図１０】
0006324264.tif 000012
【図１１】
0006324264.tif 000013
【図１２】
0006324264.tif 000014
【図１３】
0006324264.tif 000015
【図１４】
0006324264.tif 000016
【図１５】
0006324264.tif 000017
【図１６】
0006324264.tif 000018
【図１７】
0006324264.tif 000019
【図１８】
0006324264.tif 000020
【図１９】
0006324264.tif 000021
【図２０】
0006324264.tif 000022
【図２１】
0006324264.tif 000023
【図２２】
0006324264.tif 000024