(57)【要約】【課題】簡易な処理で精度良く係数を設定する。【解決手段】演算装置は、Ｍ個の入力値とＭ個の係数とを積和演算する。演算装置は、Ｍ個の係数記憶部と、Ｍ個の乗算部と、出力部と、制御部とを備える。Ｍ個の乗算部は、対応する入力値に応じて反転する符号を対応する係数記憶部に含まれる正側係数に乗じた正側乗算値と、対応する入力値に応じて反転する符号を対応する係数記憶部に含まれる負側係数に乗じた負側乗算値とを、それぞれが算出する。出力部は、Ｍ個の正側乗算値を合計した正側積和演算値と、Ｍ個の負側乗算値を合計した負側積和演算値との差に応じた出力値を出力する。制御部は、初期化モードにおいて、正側係数と負側係数とを一致させ、設定モードにおいて、正側係数と負側係数との大小関係を対応する係数に応じて設定する。【選択図】図４
2020013398.tif 000002
【特許請求の範囲】
【請求項１】
Ｍ個（Ｍは２以上の整数）の入力値と、前記Ｍ個の入力値に一対一で対応するＭ個の係数とを積和演算する演算装置であって、
前記Ｍ個の係数に対応して設けられ、差の符号が対応する係数を表す正側係数および負側係数を、それぞれが含むＭ個の係数記憶部と、
前記Ｍ個の入力値に対応して設けられ、対応する入力値に応じて反転する符号を対応する係数記憶部に含まれる前記正側係数に乗じた正側乗算値と、対応する入力値に応じて反転する符号を対応する係数記憶部に含まれる前記負側係数に乗じた負側乗算値とを、それぞれが算出するＭ個の乗算部と、
Ｍ個の前記正側乗算値を合計した正側積和演算値と、Ｍ個の前記負側乗算値を合計した負側積和演算値との差に応じた出力値を出力する出力部と、
を備える演算装置。
【請求項２】
制御部と、
をさらに備え、
前記制御部は、
初期化モードにおいて、前記Ｍ個の係数記憶部のそれぞれに含まれる前記正側係数と前記負側係数とを一致させ、
設定モードにおいて、前記Ｍ個の係数記憶部のうちの設定対象の係数記憶部に含まれる前記正側係数と前記負側係数との大小関係を、対応する係数に応じて設定する
請求項１に記載の演算装置。
【請求項３】
Ｍ個（Ｍは２以上の整数）の入力値と、前記Ｍ個の入力値に一対一で対応するＭ個の係数とを積和演算する演算装置であって、
前記Ｍ個の係数に対応して設けられ、コンダクタンスの差の符号が対応する係数を表す正側抵抗および負側抵抗をそれぞれが含むＭ個の係数記憶部と、
前記Ｍ個の入力値に対応して設けられ、対応する入力値に応じた電圧を対応する係数記憶部に含まれる前記正側抵抗および前記負側抵抗に印加することにより、対応する係数記憶部から出力される正側電流と負側電流との大小関係を、対応する入力値と対応する係数との乗算結果に応じて変更させるＭ個の印加部と、
Ｍ個の係数記憶部から出力される前記正側電流を合計した正側合計電流と、Ｍ個の係数記憶部から出力される前記負側電流を合計した負側合計電流との差に応じた出力値を出力する出力部と、
を備える演算装置。
【請求項４】
制御部と、
をさらに備え、
前記制御部は、
初期化モードにおいて、前記Ｍ個の係数記憶部のそれぞれに含まれる前記正側抵抗のコンダクタンスと前記負側抵抗のコンダクタンスとを一致させ、
設定モードにおいて、前記Ｍ個の係数記憶部のうち設定対象の係数記憶部に含まれる前記正側抵抗のコンダクタンスと前記負側抵抗のコンダクタンスとの大小関係を、対応する係数に応じて設定する
請求項３に記載の演算装置。
【請求項５】
前記Ｍ個の印加部のそれぞれは、対応する入力値に応じて正負が反転する電圧を対応する係数記憶部に含まれる前記正側抵抗および前記負側抵抗に印加し、前記正側抵抗に流れる電流を前記正側電流として出力させ、前記負側抵抗に流れる電流を前記負側電流として出力させる
請求項４に記載の演算装置。
【請求項６】
前記Ｍ個の印加部のそれぞれは、前記正側抵抗および前記負側抵抗に所定の電圧を印加し、対応する入力値に応じて、前記正側抵抗に流れる電流を前記正側電流とし且つ前記負側抵抗に流れる電流を前記負側電流として出力させるか、または、前記負側抵抗に流れる電流を前記正側電流とし且つ前記正側抵抗に流れる電流を前記負側電流として出力させるかを切り替える
請求項４に記載の演算装置。
【請求項７】
前記制御部は、前記設定モードにおいて、前記設定対象の係数記憶部に含まれる前記正側抵抗および前記負側抵抗のうち、一方のコンダクタンスを変更する
請求項４から６の何れか１項に記載の演算装置。
【請求項８】
前記制御部は、前記設定モードにおいて、前記設定対象の係数記憶部に含まれる前記正側抵抗のコンダクタンスと前記負側抵抗のコンダクタンスとの差の絶対値を、予め定められた値とする
請求項４から７の何れか１項に記載の演算装置。
【請求項９】
前記初期化モードにおいて、前記Ｍ個の係数記憶部のそれぞれ毎に、前記制御部は、
前記正側抵抗に所定電圧を印加して流れる電流と、前記負側抵抗に前記所定電圧を印加して流れる電流との差を検出し、
検出した前記差の絶対値が予め定められた値以下となるように、前記正側抵抗または前記負側抵抗のうちの何れか一方のコンダクタンスを変更する
請求項４から８の何れか１項に記載の演算装置。
【請求項１０】
前記Ｍ個の係数記憶部のそれぞれに含まれる前記正側抵抗および前記負側抵抗は、抵抗変化型メモリである
請求項４から９の何れか１項に記載の演算装置。
【請求項１１】
前記Ｍ個の入力値、前記Ｍ個の係数および前記出力値は、２値である
請求項１から１０の何れか１項に記載の演算装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、演算装置に関する。
【背景技術】
【０００２】
ニューラルネットワークを用いた技術が知られている。また、専用のハードウェアを用いてニューラルネットワークを構成する技術も研究されている。
【０００３】
ニューラルネットワークに含まれる各ユニットでは、積和演算（乗累算）を実行する。すなわち、各ユニットでは、前段のユニットから受け取った複数の入力値のそれぞれに対して係数を乗算し、係数を乗算した後の複数の入力値を加算する。さらに、各ユニットでは、このように算出した値を活性化関数に与える。そして、各ユニットでは、活性化関数の出力値を出力する。
【０００４】
ところで、ハードウェアで実現したニューラルネットワーク装置は、このようなユニットを多数備えなければならない。このため、ニューラルネットワークをハードウェアで実現する場合、個々のユニットでの積和演算を簡易な処理で精度良く実現することが望まれる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】米国特許出願公開第２０１５／００８８７９７号明細書
【特許文献２】特開平０２−２９２６０２号公報
【特許文献３】特開平０２−２３６６５９号公報
【特許文献４】特開平０５−２０４８８５号公報
【非特許文献】
【０００６】
【非特許文献１】Geoffrey  W.  Burr,  “Analog  resistive  neuromorphic  hardware”,  IBM  Research  -  Almaden.,  BioComp  Summer  School,  ２０１７年６月３０日
【発明の概要】
【発明が解決しようとする課題】
【０００７】
本発明が解決しようとする課題は、簡易な処理で精度良く係数を設定することにある。
【課題を解決するための手段】
【０００８】
実施形態に係る演算装置は、Ｍ個（Ｍは２以上の整数）の入力値と、前記Ｍ個の入力値に一対一で対応するＭ個の係数とを積和演算する。前記演算装置は、Ｍ個の係数記憶部と、Ｍ個の乗算部と、出力部とを備える。前記Ｍ個の係数記憶部は、前記Ｍ個の係数に対応して設けられ、差の符号が対応する係数を表す正側係数および負側係数を、それぞれが含む。前記Ｍ個の乗算部は、前記Ｍ個の入力値に対応して設けられ、対応する入力値に応じて反転する符号を対応する係数記憶部に含まれる前記正側係数に乗じた正側乗算値と、対応する入力値に応じて反転する符号を対応する係数記憶部に含まれる前記負側係数に乗じた負側乗算値とを、それぞれが算出する。前記出力部は、Ｍ個の前記正側乗算値を合計した正側積和演算値と、Ｍ個の前記負側乗算値を合計した負側積和演算値との差に応じた出力値を出力する。
【図面の簡単な説明】
【０００９】
【図１】実施形態に係る演算装置の構成図。
【図２】演算装置による演算処理の内容の説明図。
【図３】演算部により実行される積和演算処理の説明図。
【図４】実施形態に係る演算部のハードウェア構成図。
【図５】ｗｉ＝＋１、ｘｉ＝＋１の場合の係数記憶部の動作の説明図。
【図６】ｗｉ＝＋１、ｘｉ＝−１の場合の係数記憶部の動作の説明図。
【図７】ｗｉ＝−１、ｘｉ＝＋１の場合の係数記憶部の動作の説明図。
【図８】ｗｉ＝−１、ｘｉ＝−１の場合の係数記憶部の動作の説明図。
【図９】演算モードにおける演算部による動作の説明図。
【図１０】正側比較部、負側比較部および一致判定部の入出力特性を示す図。
【図１１】初期化モードにおける演算部の処理フロー図。
【図１２】コンダクタンスの大小の検出動作を示す図。
【図１３】初期化時における正側抵抗への書き込み動作を示す図。
【図１４】初期化時における負側抵抗への書き込み動作を示す図。
【図１５】Ｍ個の係数記憶部の全てを初期化した後の状態を示す図。
【図１６】設定モードにおける演算部による動作を示す図。
【図１７】ｗｉ＝＋１、ｘｉ＝＋１の場合の変形例に係る係数記憶部の動作の説明図。
【図１８】ｗｉ＝＋１、ｘｉ＝−１の場合の変形例に係る係数記憶部の動作の説明図。
【図１９】ｗｉ＝−１、ｘｉ＝＋１の場合の変形例に係る係数記憶部の動作の説明図。
【図２０】ｗｉ＝−１、ｘｉ＝−１の場合の変形例に係る係数記憶部の動作の説明図。
【発明を実施するための形態】
【００１０】
以下、図面を参照しながら実施形態に係る演算装置１０について詳細に説明する。演算装置１０は、ニューロンを模擬した非線形演算を簡易な構成で実現する。
【００１１】
（実施形態）
図１は、実施形態に係る演算装置１０の構成を示す図である。演算装置１０は、演算部２０と、設定部２２とを備える。
【００１２】
演算部２０は、それぞれが２値で表されるＭ個の入力値と、それぞれが２値で表されるＭ個の係数とを受け取る。Ｍは、２以上の整数である。Ｍ個の係数は、Ｍ個の入力値に一対一で対応している。
【００１３】
設定部２２は、Ｍ個の係数を例えば外部の学習装置等から受け取る。設定部２２は、Ｍ個の係数を演算部２０の内部に記憶させる。演算部２０は、内部に複数の不揮発メモリ型セルを有する。設定部２２は、複数の不揮発メモリ型セルに、Ｍ個の係数を記憶させる。
【００１４】
演算部２０は、Ｍ個の入力値を他のユニットから受け取る。演算部２０は、Ｍ個の入力値を受け取ると、受け取ったＭ個の入力値と、内部に記憶しているＭ個の係数とを積和演算（乗累算）する。そして、演算部２０は、積和演算をした結果として、２値で表される出力値を出力する。
【００１５】
本実施形態においては、Ｍ個の入力値を、ｘ１、ｘ２、ｘ３、…、ｘＭと表す。また、本実施形態においては、Ｍ個の係数を、ｗ１、ｗ２、ｗ３、…、ｗＭと表す。また、本実施形態においては、出力値をｙと表す。下付の添え字は、インデックスを表す。同一のインデックスが付けられた入力値と係数とは、対応している。すなわち、ｘ１とｗ１とが対応しており、ｘ２とｗ２とが対応しており、ｘＭとｗＭとが対応している。また、任意のインデックスの入力値をｘｉと表し、任意のインデックスの係数をｗｉと表す。ｉは、１からＭまでの整数である。
【００１６】
図２は、演算装置１０による演算処理の内容を説明するための図である。
【００１７】
本実施形態において、Ｍ個の入力値のそれぞれは、下記の式（１１）で示されるように、−１および＋１の何れかの値を表す。
ｘｉ＝｛−１，＋１｝…（１１）
【００１８】
本実施形態において、Ｍ個の係数のそれぞれは、下記の式（１２）で示されるように、−１および＋１の何れかの値を表す。
ｗｉ＝｛−１，＋１｝…（１２）
【００１９】
本実施形態において、出力値は、下記の式（１３）で示されるように、−１および＋１の何れかの値を表す。
ｙ＝｛−１，＋１｝…（１３）
【００２０】
Ｍ個の入力値を受け取った場合、演算部２０は、Ｍ個の入力値とＭ個の係数との積和演算をアナログ処理により実行する。例えば、下記の式（１４）により算出されるｕを中間値とする。
【数１】
2020013398.tif 000003
なお、ドットは、乗算を表す。
【００２１】
中間値は、Ｍ個の入力値のそれぞれと対応する係数とを乗算したＭ個の乗算値を、累積した所定ビット数の値を表す。演算部２０は、このような中間値を表す信号に対して、符号関数処理をして、２値の出力値を生成する。すなわち、演算部２０は、中間値を表す信号に対して、下記の式（１５）の演算処理を実行する。
【数２】
2020013398.tif 000004
なお、ｆ（）は、符号関数を表す。ｙは、出力値の値を表す。
【００２２】
符号関数は、引数（中間値）が０より小さい場合、−１を出力し、引数（中間値）が０以上である場合、＋１を出力する関数である。すなわち、符号関数は、下記の式（１６）に示すような関数である。
【数３】
2020013398.tif 000005
【００２３】
図３は、本実施形態に係る演算部２０により実行される積和演算処理を説明するための図である。
【００２４】
本実施形態において、Ｍ個の係数のそれぞれは、正側係数と負側係数との差の符号（正または負）により表される。すなわち、ｗｉは、下記の式（１７）により表される。
ｗｉ＝ｆ（Ｇｐｉ−Ｇｎｉ）…（１７）
【００２５】
Ｇｐｉは、正側係数である。Ｇｎｉは、負側係数である。
【００２６】
正側係数（Ｇｐｉ）および負側係数（Ｇｎｉ）は、対応する係数に応じて大小関係が変更される。例えば、ｗｉ＝＋１である場合、Ｇｐｉ＞Ｇｎｉとなる。また、例えば、ｗｉ＝−１である場合、Ｇｐｉ＜Ｇｎｉとなる。
【００２７】
さらに、本実施形態において、演算部２０は、下記の式（１８）の演算処理を実行して、中間値（ｕ）を算出する。
ｕ＝Ｉｐ−Ｉｎ…（１８）
【００２８】
Ｉｐは、Ｍ個の正側乗算値を合計した正側積和演算値である。正側乗算値は、Ｍ個の入力値毎に算出される。具体的には、ｉ番目の正側乗算値は、対応する入力値に応じて反転する符号（ｘｉ）を、対応する正側係数（Ｇｐｉ）に乗じた値である。すなわち、演算部２０は、下記の式（１９）の演算処理を実行して、正側積和演算値（Ｉｐ）を算出する。
Ｉｐ＝｛ｘ１・Ｇｐ１＋ｘ２・Ｇｐ２＋…＋ｘＭ・ＧｐＭ｝…（１９）
【００２９】
Ｉｎは、Ｍ個の負側乗算値を合計した負側積和演算値である。負側乗算値は、Ｍ個の入力値毎に算出される。具体的には、ｉ番目の負側乗算値は、対応する入力値に応じて反転する符号（ｘｉ）を、対応する負側係数（Ｇｎｉ）に乗じた値である。すなわち、演算部２０は、下記の式（２０）の演算処理を実行して、負側積和演算値（Ｉｎ）を算出する。
Ｉｎ＝｛ｘ１・Ｇｎ１＋ｘ２・Ｇｎ２＋…＋ｘＭ・ＧｎＭ｝…（２０）
【００３０】
従って、正側係数（Ｇｐｉ）および負側係数（Ｇｎｉ）の値は、正の値であれば、どのような値であってもよい。正側係数（Ｇｐｉ）および負側係数（Ｇｎｉ）の値は、インデックス毎に異なっていてもよい。ただし、正側係数と負側係数との差の絶対値（｜Ｇｐｉ−Ｇｎｉ｜）は、予め定められた値に設定される。もっとも、正側係数と負側係数との差の絶対値（｜Ｇｐｉ−Ｇｎｉ｜）は、積和演算の演算精度に影響を与えない範囲内であれば、ばらつきがあってもよい。
【００３１】
図４は、実施形態に係る演算部２０のハードウェア構成を示す図である。演算部２０は、演算モード、初期化モードまたは設定モードで動作する。
【００３２】
演算部２０は、演算モードにおいて、外部から取得したＭ個の入力値と、内部に記憶しているＭ個の係数とを積和演算する。演算部２０は、初期化モードにおいて、内部に記憶しているＭ個の係数を初期化する。演算部２０は、設定モードにおいて、外部からＭ個の係数を取得し、取得した係数を内部に記憶させる。
【００３３】
演算部２０は、Ｍ個の係数記憶部３６（３６−１〜３６−Ｍ）と、Ｍ個の印加部３８（３８−１〜３８−Ｍ）と、検出部４０と、出力部４２と、正側電圧発生部４４と、負側電圧発生部４６と、制御部４８とを備える。
【００３４】
Ｍ個の係数記憶部３６は、Ｍ個の係数に対応して設けられる。Ｍ個の係数記憶部３６のそれぞれは、正側抵抗５８と、負側抵抗６０と、正側整流部６２と、負側整流部６４とを含む。
【００３５】
正側抵抗５８のコンダクタンスは、正側係数（Ｇｐｉ）を表す。また、負側抵抗６０のコンダクタンスは、負側係数（Ｇｎｉ）を表す。従って、正側抵抗５８および負側抵抗６０は、コンダクタンスの差の符号が対応する係数（ｗｉ）を表す。
【００３６】
また、正側抵抗５８および負側抵抗６０は、抵抗変化型メモリである。抵抗変化型メモリは、所定電圧である読出電圧が印加された場合には、抵抗値は保持されたまま、通常の抵抗として機能する。しかし、抵抗変化型メモリは、読出電圧よりも高い所定の閾値以上の書込電圧が印加された場合、コンダクタンス（抵抗値の逆数）が、電圧の印加時間または電流量等に応じた値に変化する。
【００３７】
このような正側抵抗５８および負側抵抗６０は、情報（コンダクタンス）を記憶する不揮発メモリとして機能する。従って、正側抵抗５８は、正側係数（Ｇｐｉ）を記憶する記憶部として機能する。また、負側抵抗６０は、負側係数（Ｇｎｉ）を記憶する記憶部として機能する。これにより、Ｍ個の係数記憶部３６のそれぞれは、正側係数（Ｇｐｉ）および負側係数（Ｇｎｉ）を記憶する記憶部として機能する。
【００３８】
正側整流部６２は、正側抵抗５８に流れる電流の逆流を防止する。例えば、正側整流部６２は、印加部３８により正側抵抗５８に正の電圧が印加された場合には、正側抵抗５８に逆方向の電流が流れることを防止し、印加部３８により正側抵抗５８に負の電圧が印加された場合には、正側抵抗５８に順方向の電流が流れることを防止する。
【００３９】
負側整流部６４は、負側抵抗６０に流れる電流の逆流を防止する。例えば、負側整流部６４は、印加部３８により負側抵抗６０に正の電圧が印加された場合には、負側抵抗６０に逆方向の電流が流れることを防止し、印加部３８により負側抵抗６０に負の電圧が印加された場合には、負側抵抗６０に順方向の電流が流れることを防止する。
【００４０】
正側抵抗５８は、一端が正側ビットライン３２に接続され、他端が正側整流部６２を介して印加部３８に接続される。また、負側抵抗６０は、一端が負側ビットライン３４に接続され、他端が負側整流部６４を介して印加部３８に接続される。Ｍ個の係数記憶部３６のそれぞれは、演算モードにおいて、印加部３８から読出電圧が発生されたことに応じて、正側ビットライン３２に正側電流を出力し、負側ビットライン３４に負側電流を出力する。
【００４１】
Ｍ個の印加部３８は、Ｍ個の入力値に対応して設けられる。Ｍ個の印加部３８のそれぞれは、演算モードにおいて、Ｍ個の入力値のうちの対応する入力値を取得する。
【００４２】
演算モードにおいて、Ｍ個の印加部３８のそれぞれは、対応する入力値に応じた電圧を対応する係数記憶部３６に含まれる正側抵抗５８および負側抵抗６０に印加する。これにより、Ｍ個の印加部３８のそれぞれは、対応する係数記憶部３６から出力される正側電流と負側電流との大小関係を、対応する入力値と対応する係数との乗算結果に応じて変更させることができる。
【００４３】
本実施形態においては、Ｍ個の印加部３８のそれぞれは、対応する入力値に応じて正負が反転する読出電圧を、対応する係数記憶部３６に含まれる正側抵抗５８および負側抵抗６０に印加する。そして、Ｍ個の印加部３８のそれぞれは、正側抵抗５８に流れる電流を正側電流として係数記憶部３６から出力させ、負側抵抗６０に流れる電流を負側電流として係数記憶部３６から出力させる。これにより、Ｍ個の印加部３８のそれぞれは、対応する係数記憶部３６から出力される正側電流と負側電流との大小関係を、対応する入力値と対応する係数との乗算結果に応じて変更させることができる。
【００４４】
ここで、正側電流は、対応する入力値に応じて反転する符号を正側係数に乗じた正側乗算値を表す。また、負側電流は、対応する入力値に応じて反転する符号を負側係数に乗じた負側乗算値を表す。従って、Ｍ個の印加部３８のそれぞれは、対応する入力値に応じて反転する符号を対応する係数記憶部３６に含まれる正側係数に乗じた正側乗算値と、対応する入力値に応じて反転する符号を対応する係数記憶部３６に含まれる負側係数に乗じた負側乗算値とを算出する乗算部として機能することができる。
【００４５】
検出部４０は、Ｍ個の係数記憶部３６から出力された正側電流を合計した正側合計電流と、Ｍ個の係数記憶部３６から出力された負側電流を合計した負側合計電流とを比較する。
【００４６】
正側ビットライン３２には、Ｍ個の係数記憶部３６から出力された正側電流を合計した正側合計電流が流れる。また、負側ビットライン３４には、Ｍ個の係数記憶部３６から出力された負側電流を合計した負側合計電流が流れる。そこで、検出部４０は、正側ビットライン３２に流れる電流と、負側ビットライン３４に流れる電流とを比較する。そして、検出部４０は、正側合計電流が負側合計電流以上であるか、負側合計電流が正側合計電流より大きいか、正側合計電流と負側合計電流とが一致しているかを検出する。
【００４７】
本実施形態において、検出部４０は、正側比較部７２と、負側比較部７４と、一致判定部７６とを有する。正側比較部７２は、正側ビットライン３２に流れる電流（正側合計電流）が負側ビットライン３４に流れる電流（負側合計電流）より大きいか否かを判定する。負側比較部７４は、負側ビットライン３４に流れる電流（負側合計電流）が正側ビットライン３２に流れる電流（正側合計電流）より大きいか否かを判定する。一致判定部７６は、正側ビットライン３２に流れる電流（正側合計電流）と負側ビットライン３４に流れる電流（負側合計電流）とが所定範囲内で一致しているか否かを判定する。
【００４８】
なお、正側比較部７２、負側比較部７４および一致判定部７６の動作については、図１０を参照してさらに説明する。
【００４９】
出力部４２は、演算モードにおいて、正側合計電流と負側合計電流との差に応じた出力値を出力する。本実施形態においては、出力部４２は、正側合計電流が負側合計電流以上の場合に＋１の出力値（ｙ）を出力し、正側合計電流が負側合計電流より小さい場合に−１の出力値（ｙ）を出力する。
【００５０】
例えば、出力部４２は、一致判定部７６により正側合計電流と負側合計電流とが一致していると判定された場合または正側比較部７２により正側合計電流が負側合計電流より大きいと判定された場合、＋１の出力値を出力する。また、例えば、出力部４２は、一致判定部７６により正側合計電流と負側合計電流とが一致していないと判定された場合であって、且つ、負側比較部７４により負側合計電流が正側合計電流より大きいと判定された場合、−１の出力値を出力する。
【００５１】
ここで、正側合計電流は、Ｍ個の正側乗算値を合計した正側積和演算値を表す。また、負側合計電流は、Ｍ個の負側乗算値を合計した負側積和演算値を表す。従って、出力部４２は、演算モードにおいて、Ｍ個の正側乗算値を合計した正側積和演算値と、Ｍ個の負側乗算値を合計した負側積和演算値との差に応じた出力値を出力することができる。
【００５２】
正側電圧発生部４４は、正側ビットライン３２に電圧を印加する。正側電圧発生部４４は、演算モードにおいて、正側ビットライン３２に基準電圧（例えばグランド電位）を印加する。正側抵抗５８には、対応する印加部３８から発生された電圧と、正側電圧発生部４４から発生された電圧との電位差が印加される。従って、演算モードにおいて、正側抵抗５８には、印加部３８により発生された読出電圧が印加される。
【００５３】
また、正側抵抗５８の抵抗値を変化させる場合、正側電圧発生部４４は、制御部４８の制御に応じて、正側ビットライン３２に、基準電圧よりも低い電圧を印加する。従って、抵抗値を変化させる場合、正側抵抗５８には、読出電圧よりも高い書込電圧が印加される。
【００５４】
負側電圧発生部４６は、負側ビットライン３４に電圧を印加する。負側電圧発生部４６は、演算モードにおいて、負側ビットライン３４に基準電圧（例えばグランド電位）を印加する。負側抵抗６０には、対応する印加部３８から発生された電圧と、負側電圧発生部４６から発生された電圧との電位差が印加される。従って、演算モードにおいて、負側抵抗６０には、印加部３８により発生された読出電圧が印加される。
【００５５】
また、負側抵抗６０の抵抗値を変化させる場合、負側電圧発生部４６は、制御部４８の制御に応じて、負側ビットライン３４に、基準電圧よりも低い電圧を印加する。従って、抵抗値を変化させる場合、負側抵抗６０には、読出電圧よりも高い書込電圧が印加される。
【００５６】
制御部４８は、Ｍ個の印加部３８、正側電圧発生部４４および負側電圧発生部４６の動作を制御する。具体的には、制御部４８は、演算モードにおいて、正側電圧発生部４４および負側電圧発生部４６から基準電圧を発生させ、Ｍ個の印加部３８のそれぞれから対応する入力値に応じて符号が反転する読出電圧を発生させる。これにより、制御部４８は、Ｍ個の係数記憶部３６のそれぞれから、対応する入力値と対応する係数との乗算結果に応じて大小関係が反転する正側電流および負側電流を出力させることができる。
【００５７】
また、制御部４８は、初期化モードにおいて、Ｍ個の印加部３８、正側電圧発生部４４および負側電圧発生部４６の動作を制御して、Ｍ個の係数記憶部３６のそれぞれに含まれる正側抵抗５８のコンダクタンスと負側抵抗６０のコンダクタンスとを一致させる。これにより、制御部４８は、初期化モードにおいて、Ｍ個の係数記憶部３６のそれぞれに含まれる正側係数と負側係数とを一致させることができる。なお、初期化モードにおける制御部４８のより詳細な制御動作については、図１１から図１５を参照してさらに説明する。
【００５８】
また、制御部４８は、設定モードにおいて、Ｍ個の係数を外部の学習装置等から受け取る。そして、制御部４８は、設定モードにおいて、Ｍ個の印加部３８、正側電圧発生部４４および負側電圧発生部４６の動作を制御して、Ｍ個の係数記憶部３６のうち設定対象の係数記憶部３６に含まれる正側抵抗５８のコンダクタンスと負側抵抗６０のコンダクタンスとの大小関係を、対応する係数に応じて設定する。
【００５９】
例えば、制御部４８は、係数が＋１である場合、対応する係数記憶部３６に含まれる正側抵抗５８のコンダクタンスを、対応する係数記憶部３６に含まれる負側抵抗６０のコンダクタンスより大きくする。また、制御部４８は、係数が−１である場合、対応する係数記憶部３６に含まれる正側抵抗５８のコンダクタンスを、対応する係数記憶部３６に含まれる負側抵抗６０のコンダクタンスより小さくする。これにより、制御部４８は、設定モードにおいて、Ｍ個の係数記憶部３６のうちの設定対象の係数記憶部３６に含まれる正側係数と負側係数との大小関係を、対応する係数に応じて設定する。なお、設定モードにおける制御部４８のより詳細な制御動作については、図１６を参照してさらに説明する。
【００６０】
図５は、ｗｉ＝＋１、ｘｉ＝＋１の場合の係数記憶部３６の動作を説明するための図である。第ｉの係数（ｗｉ）が＋１である場合、第ｉの係数記憶部３６−ｉに含まれる正側抵抗５８は、第１コンダクタンス（Ｇ１＝１／Ｒ１）に設定される。第ｉの係数（ｗｉ）が＋１である場合、第ｉの係数記憶部３６−ｉに含まれる負側抵抗６０は、第２コンダクタンス（Ｇ２＝１／Ｒ２）に設定される。
【００６１】
また、第ｉの入力値（ｘｉ）が＋１である場合、印加部３８は、正側抵抗５８および負側抵抗６０に正の読出電圧（＋ＶＲ）を印加する。このような場合、正側抵抗５８には、正の第１電流値（＋Ｉ１）の電流が流れる。また、負側抵抗６０には、正の第２電流値（＋Ｉ２）の電流が流れる。なお、Ｇ１＞Ｇ２であるとする。従って、｜Ｉ１｜＞｜Ｉ２｜である。
【００６２】
また、正側抵抗５８に流れる電流は、正側ビットライン３２に出力される。また、負側抵抗６０に流れる電流は、負側ビットライン３４に出力される。
【００６３】
ここで、第ｉの係数（ｗｉ）に第ｉの入力値（ｘｉ）を乗じた値（ｗｉ・ｘｉ）の算出結果は、第ｉの係数記憶部３６−ｉから正側ビットライン３２に出力される電流（Ｉｐ＿ｉ）と、第ｉの係数記憶部３６−ｉから負側ビットライン３４に出力される電流（Ｉｎ＿ｉ）との電流差（Ｉｐ＿ｉ−Ｉｎ＿ｉ）で表される。
【００６４】
このため、図５の例では、Ｉｐ＿ｉ＝＋Ｉ１、Ｉｎ＿ｉ＝＋Ｉ２となり、電流差（Ｉｐ＿ｉ−Ｉｎ＿ｉ）は、正の値となる。従って、ｗｉ＝＋１、ｘｉ＝＋１の場合、演算部２０は、第ｉの係数（ｗｉ）に第ｉの入力値（ｘｉ）を乗じた値（ｗｉ・ｘｉ）として、＋１を算出することができる。
【００６５】
図６は、ｗｉ＝＋１、ｘｉ＝−１の場合の係数記憶部３６の動作を説明するための図である。第ｉの係数（ｗｉ）が＋１である場合、第ｉの係数記憶部３６−ｉに含まれる正側抵抗５８は、第１コンダクタンス（Ｇ１）に設定される。第ｉの係数（ｗｉ）が＋１である場合、第ｉの係数記憶部３６−ｉに含まれる負側抵抗６０は、第２コンダクタンス（Ｇ２）に設定される。
【００６６】
また、第ｉの入力値（ｘｉ）が−１である場合、印加部３８は、正側抵抗５８および負側抵抗６０に負の読出電圧（−ＶＲ）を印加する。このような場合、正側抵抗５８には、負の第１電流値（−Ｉ１）の電流が流れる。また負側抵抗６０には、負の第２電流値（−Ｉ２）の電流が流れる。
【００６７】
このため、図６の例では、Ｉｐ＿ｉ＝−Ｉ１、Ｉｎ＿ｉ＝−Ｉ２となり、電流差（Ｉｐ＿ｉ−Ｉｎ＿ｉ）は、負の値となる。従って、ｗｉ＝＋１、ｘｉ＝−１の場合、演算部２０は、第ｉの係数（ｗｉ）に第ｉの入力値（ｘｉ）を乗じた値（ｗｉ・ｘｉ）として、−１を算出することができる。
【００６８】
図７は、ｗｉ＝−１、ｘｉ＝＋１の場合の係数記憶部３６の動作を説明するための図である。第ｉの係数（ｗｉ）が−１である場合、第ｉの係数記憶部３６−ｉに含まれる正側抵抗５８は、第２コンダクタンス（Ｇ２）に設定される。第ｉの係数（ｗｉ）が−１である場合、第ｉの係数記憶部３６−ｉに含まれる負側抵抗６０は、第１コンダクタンス（Ｇ１）に設定される。
【００６９】
また、第ｉの入力値（ｘｉ）が＋１である場合、印加部３８は、正側抵抗５８および負側抵抗６０に正の読出電圧（＋ＶＲ）を印加する。このような場合、正側抵抗５８には、正の第２電流値（＋Ｉ２）の電流が流れる。また、負側抵抗６０には、正の第１電流値（＋Ｉ１）の電流が流れる。
【００７０】
このため、図７の例では、Ｉｐ＿ｉ＝＋Ｉ２、Ｉｎ＿ｉ＝＋Ｉ１となり、電流差（Ｉｐ＿ｉ−Ｉｎ＿ｉ）は、負の値となる。従って、ｗｉ＝−１、ｘｉ＝＋１の場合、演算部２０は、第ｉの係数（ｗｉ）に第ｉの入力値（ｘｉ）を乗じた値（ｗｉ・ｘｉ）は、−１を算出することができる。
【００７１】
図８は、ｗｉ＝−１、ｘｉ＝−１の場合の係数記憶部３６の動作を説明するための図である。第ｉの係数（ｗｉ）が−１である場合、第ｉの係数記憶部３６−ｉに含まれる正側抵抗５８は、第２コンダクタンス（Ｇ２）に設定される。第ｉの係数（ｗｉ）が−１である場合、第ｉの係数記憶部３６−ｉに含まれる負側抵抗６０は、第１コンダクタンス（Ｇ１）に設定される。
【００７２】
また、第ｉの入力値（ｘｉ）が−１である場合、印加部３８は、正側抵抗５８および負側抵抗６０に負の読出電圧（−ＶＲ）を印加する。このような場合、正側抵抗５８には、負の第２電流値（−Ｉ２）の電流が流れる。また、負側抵抗６０には、負の第１電流値（−Ｉ１）の電流が流れる。
【００７３】
このため、図８の例では、Ｉｐ＿ｉ＝−Ｉ２、Ｉｎ＿ｉ＝−Ｉ１となり、電流差（Ｉｐ＿ｉ−Ｉｎ＿ｉ）は、正の値となる。従って、ｗｉ＝−１、ｘｉ＝−１の場合、演算部２０は、第ｉの係数（ｗｉ）に第ｉの入力値（ｘｉ）を乗じた値（ｗｉ・ｘｉ）として、＋１を算出することができる。
【００７４】
以上から、Ｍ個の係数記憶部３６に含まれるＭ個の正側抵抗５８に流れる電流の合計（Ｉｐ＿１＋Ｉｐ＿２＋…＋Ｉｐ＿Ｍ）と、Ｍ個の係数記憶部３６に含まれるＭ個の負側抵抗６０に流れる電流の合計（Ｉｎ＿１＋Ｉｎ＿２＋…＋Ｉｎ＿Ｍ）との差分値｛（Ｉｐ＿１＋Ｉｐ＿２＋…＋Ｉｐ＿Ｍ）−（Ｉｎ＿１＋Ｉｎ＿２＋…＋Ｉｎ＿Ｍ）｝は、Ｍ個の入力値とＭ個の係数との積和演算（乗累算）結果を表す。
【００７５】
図９は、演算モードにおける演算部２０による動作を説明するための図である。演算モードにおいて、Ｍ個の正側抵抗５８のそれぞれには、対応する係数（ｘ）が＋１の場合には、正の読出電圧（＋ＶＲ）が印加され、対応する係数（ｘ）が−１の場合には、負の読出電圧（−ＶＲ）が印加される。また、正側ビットライン３２には、Ｍ個の係数記憶部３６から出力された正側電流（本例では、正側抵抗５８に流れる電流）の合計が出力される。
【００７６】
また、演算モードにおいて、Ｍ個の負側抵抗６０のそれぞれには、対応する係数（ｘ）が＋１の場合には、正の読出電圧（＋ＶＲ）が印加され、対応する係数（ｘ）が−１の場合には、負の読出電圧（−ＶＲ）が印加される。また、負側ビットライン３４には、Ｍ個の係数記憶部３６から出力された負側電流（本例では、負側抵抗６０に流れる電流）の合計が出力される。
【００７７】
検出部４０は、演算モードにおいて、正側ビットライン３２に流れる電流（Ｉｐ）と、負側ビットライン３４に流れる電流（Ｉｎ）とを比較する。出力部４２は、正側ビットライン３２に流れる電流（Ｉｐ）と負側ビットライン３４に流れる電流（Ｉｎ）とが一致する場合、または、正側ビットライン３２に流れる電流（Ｉｐ）が負側ビットライン３４に流れる電流（Ｉｎ）より大きい場合に、＋１の出力値（ｙ）を出力する。また、出力部４２は、正側ビットライン３２に流れる電流（Ｉｐ）と負側ビットライン３４に流れる電流（Ｉｎ）とが一致せず、且つ、負側ビットライン３４に流れる電流（Ｉｎ）が正側ビットライン３２に流れる電流（Ｉｐ）より大きい場合に、−１の出力値（ｙ）を出力する。
【００７８】
以上のように、演算モードにおいて、演算部２０は、２値のＭ個の入力値と２値のＭ個の係数とを積和演算し、積和演算した結果として２値で表される出力値を出力することができる。
【００７９】
図１０は、正側比較部７２、負側比較部７４および一致判定部７６の入出力特性を示す図である。
【００８０】
正側比較部７２は、正側ビットライン３２に流れる電流が、負側ビットライン３４に流れる電流から所定のオフセット（｜Δｉ｜）を減じた電流より大きいか否かを判定する。これにより、正側比較部７２は、図１０の（Ａ）に示すように、正側合計電流から負側合計電流を減じた電流差が、０からオフセットを減じた第１閾値（−Δｉ）以下である場合には、Ｌ論理を出力し、電流差が第１閾値（−Δｉ）より大きい場合には、Ｈ論理を出力する。
【００８１】
また、負側比較部７４は、負側ビットライン３４に流れる電流が、正側ビットライン３２に流れる電流から所定のオフセットを加えた電流より大きいか否かを判定する。これにより、負側比較部７４は、図１０の（Ｂ）に示すように、正側合計電流から負側合計電流を減じた電流差が、０からオフセットを加算した第２閾値（＋Δｉ）以下である場合には、Ｈ論理を出力し、電流差が第２閾値（＋Δｉ）より大きい場合には、Ｌ論理を出力する。
【００８２】
また、一致判定部７６は、正側比較部７２から出力された論理値と、負側比較部７４から出力された論理値とが一致する場合にＨ論理を出力し、不一致の場合にＬ論理を出力する。これにより、一致判定部７６は、図１０の（Ｃ）に示すように、正側合計電流と負側合計電流との電流差が、第１閾値（−Δｉ）から第２閾値（＋Δｉ）までの範囲内である場合に、Ｈ論理を出力し、他の場合にＬ論理を出力する。
【００８３】
従って、検出部４０は、Ｍ個の正側抵抗５８に流れる電流を合計した正側合計電流と、Ｍ個の負側抵抗６０に流れる電流を合計した負側合計電流が、一致しているか否かを判定することができる。さらに、検出部４０は、正側合計電流が負側合計電流より大きいか、負側合計電流が正側合計電流より大きいかを判定することができる。
【００８４】
なお、正側比較部７２は、正側合計電流から負側合計電流を減じた電流差が、０からオフセットを減じた第１閾値（−Δｉ）以下である場合には、Ｈ論理を出力し、電流差が第１閾値（−Δｉ）より大きい場合には、Ｌ論理を出力してもよい。また、負側比較部７４は、正側合計電流から負側合計電流を減じた電流差が、０からオフセットを加算した第２閾値（＋Δｉ）以下である場合には、Ｌ論理を出力し、電流差が第２閾値（＋Δｉ）より大きい場合には、Ｈ論理を出力する。このような場合も、一致判定部７６は、図１０の（Ｃ）に示すように、正側合計電流と負側合計電流との電流差が、第１閾値（−Δｉ）から第２閾値（＋Δｉ）までの範囲内である場合に、Ｈ論理を出力し、他の場合にＬ論理を出力する。
【００８５】
図１１は、初期化モードにおける演算部２０の処理フローを示す図である。また、図１２〜図１５は、図１１の説明において参照される図である。図１２は、正側抵抗５８のコンダクタンスと負側抵抗６０のコンダクタンスの大小の検出動作を示す図である。図１３は、初期化時における正側抵抗５８への書き込み動作を示す図である。図１４は、初期化時における負側抵抗６０への書き込み動作を示す図である。図１５は、Ｍ個の係数記憶部３６の全てを初期化した後の状態を示す図である。
【００８６】
演算装置１０は、ユーザ等により指示がされた場合に、初期化モードに遷移する。演算部２０の制御部４８は、初期化モードにおいて、図１１に示すフローの流れで処理を実行する。
【００８７】
まず、Ｓ１１において、制御部４８は、Ｍ個の係数記憶部３６のうちの１つの係数記憶部３６を処理対象として選択する。
【００８８】
続いて、Ｓ１２において、制御部４８は、処理対象の係数記憶部３６について、正側抵抗５８のコンダクタンスと負側抵抗６０のコンダクタンスとが一致しているか、正側抵抗５８のコンダクタンスが負側抵抗６０のコンダクタンスより大きいか、負側抵抗６０のコンダクタンスが正側抵抗５８のコンダクタンスより大きいかを検出する。
【００８９】
例えば、Ｓ１２において、図１２に示すように、制御部４８は、処理対象の係数記憶部３６に含まれる正側抵抗５８および負側抵抗６０に正の読出電圧（＋ＶＲ）を印加する。処理対象の係数記憶部３６に含まれる正側抵抗５８および負側抵抗６０のみに正の読出電圧（＋ＶＲ）を印加した場合、検出部４０は、処理対象の係数記憶部３６に含まれる正側抵抗５８のコンダクタンスと負側抵抗６０とのコンダクタンスとの大小関係を検出することができる。そして、制御部４８は、検出部４０による検出結果を取得する。
【００９０】
続いて、Ｓ１３において、制御部４８は、検出部４０から取得した検出結果に基づき、正側抵抗５８のコンダクタンスと負側抵抗６０のコンダクタンスとが一致しているか否かを判定する。例えば、制御部４８は、一致判定部７６によりＨ論理が出力された場合、正側抵抗５８のコンダクタンスと負側抵抗６０のコンダクタンスとが一致していると判定する。
【００９１】
制御部４８は、正側抵抗５８のコンダクタンスと負側抵抗６０のコンダクタンスとが一致していない場合（Ｓ１３のＮｏ）、処理をＳ１４に進める。Ｓ１４において、制御部４８は、検出部４０から取得した検出結果に基づき、正側抵抗５８のコンダクタンスが負側抵抗６０のコンダクタンスより大きいか、または、負側抵抗６０のコンダクタンスが正側抵抗５８のコンダクタンスより大きいかを判定する。例えば、制御部４８は、一致判定部７６からＬ論理が出力され、且つ、正側比較部７２からＨ論理が出力された場合、正側抵抗５８のコンダクタンスが負側抵抗６０のコンダクタンスより大きいと判定する。また、制御部４８は、一致判定部７６からＬ論理が出力され、且つ、負側比較部７４からＨ論理が出力された場合、負側抵抗６０のコンダクタンスが正側抵抗５８のコンダクタンスより大きいと判定する。
【００９２】
制御部４８は、正側抵抗５８のコンダクタンスが負側抵抗６０のコンダクタンスより大きいと判定した場合（Ｓ１４のＹｅｓ）、処理をＳ１５に進める。また、制御部４８は、負側抵抗６０のコンダクタンスが正側抵抗５８のコンダクタンスより大きいと判定した場合（Ｓ１４のＮｏ）、処理をＳ１６に進める。
【００９３】
Ｓ１５において、制御部４８は、正側抵抗５８のコンダクタンスを所定量小さくする。具体的には、制御部４８は、処理対象の係数記憶部３６に含まれる正側抵抗５８に読出電圧より大きい、所定の閾値以上の書込電圧を印加して、正側抵抗５８のコンダクタンスを変化させる。
【００９４】
例えば、図１３に示すように、制御部４８は、対応する印加部３８から正の読出電圧（＋ＶＲ）を発生させると同時に、正側電圧発生部４４から基準電圧（例えばグランド電位）より低い第１電圧を発生させる。これにより、制御部４８は、読出電圧（ＶＲ）より大きい書込電圧を正側抵抗５８に印加することができる。なお、制御部４８は、読出電圧（ＶＲ）を発生させている期間中において、正側電圧発生部４４から、最初に基準電圧より高い電圧を所定期間発生させ、続いて、第１電圧を発生させてもよい。これにより、制御部４８は、正側抵抗５８のコンダクタンスを微小量ずつ変化させることができる。
【００９５】
なお、本実施形態では、Ｓ１５において、制御部４８は、正側抵抗５８のコンダクタンスを所定量小さくしている。これに代えて、Ｓ１５において、制御部４８は、負側抵抗６０のコンダクタンスを所定量大きくしてもよい。
【００９６】
Ｓ１６において、制御部４８は、負側抵抗６０のコンダクタンスを所定量小さくする。具体的には、制御部４８は、処理対象の係数記憶部３６に含まれる負側抵抗６０に読出電圧より大きい書込電圧を印加して、負側抵抗６０のコンダクタンスを変化させる。
【００９７】
例えば、図１４に示すように、制御部４８は、対応する印加部３８から正の読出電圧（＋ＶＲ）を発生させると同時に、負側電圧発生部４６から基準電圧より低い電圧を発生させる。これにより、制御部４８は、読出電圧（ＶＲ）より大きい書込電圧を負側抵抗６０に印加することができる。なお、制御部４８は、読出電圧（ＶＲ）を発生させている期間中において、負側電圧発生部４６から、最初に基準電圧より高い電圧を所定期間発生させ、続いて、基準電圧より低い電圧を発生させてもよい。これにより、制御部４８は、負側抵抗６０のコンダクタンスを微小量ずつ変化させることができる。
【００９８】
なお、本実施形態では、Ｓ１６において、制御部４８は、負側抵抗６０のコンダクタンスを所定量小さくしている。これに代えて、Ｓ１６において、制御部４８は、正側抵抗５８のコンダクタンスを所定量大きくしてもよい。
【００９９】
Ｓ１５またはＳ１６を終えると、制御部４８は、処理をＳ１２に戻す。そして、制御部４８は、正側抵抗５８のコンダクタンスと負側抵抗６０のコンダクタンスとが一致するまで、Ｓ１２からＳ１６までの処理を繰り返して、正側抵抗５８または負側抵抗６０のコンダクタンスを徐々に小さくする。
【０１００】
正側抵抗５８のコンダクタンスと負側抵抗６０のコンダクタンスとが一致した場合（Ｓ１３のＹｅｓ）、制御部４８は、処理をＳ１７に進める。Ｓ１７において、制御部４８は、Ｍ個の係数記憶部３６の全てについて、正側抵抗５８のコンダクタンスと負側抵抗６０のコンダクタンスとを一致させたか否かを判断する。まだ、正側抵抗５８のコンダクタンスと負側抵抗６０のコンダクタンスとを一致させていない係数記憶部３６が残っている場合（Ｓ１７のＮｏ）、制御部４８は、処理をＳ１１に戻して、Ｓ１１から処理を繰り返す。
【０１０１】
例えば、図１５に示すように、制御部４８は、Ｍ個の係数記憶部３６の全てについて、正側抵抗５８のコンダクタンスと負側抵抗６０のコンダクタンスとを一致させる。そして、制御部４８は、Ｍ個の係数記憶部３６の全てについて、正側抵抗５８のコンダクタンスと負側抵抗６０のコンダクタンスとを一致させた場合（Ｓ１７のＹｅｓ）、本フローを終了する。
【０１０２】
図１６は、設定モードにおける演算部２０による動作を示す図である。設定モードにおいて、制御部４８は、更新対象の係数記憶部３６に対して、係数を記憶させる。この場合、制御部４８は、更新対象の係数記憶部３６に含まれる正側抵抗５８または負側抵抗６０のうちの一方のコンダクタンスを変更し、他方のコンダクタンスは変更しない。
【０１０３】
例えば、係数が＋１である場合、制御部４８は、更新対象の係数記憶部３６に含まれる正側抵抗５８のコンダクタンスを大きくして、負側抵抗６０のコンダクタンスは変更しない。これに代えて、係数が＋１である場合、制御部４８は、更新対象の係数記憶部３６に含まれる負側抵抗６０のコンダクタンスを小さくして、正側抵抗５８のコンダクタンスは変更しなくてもよい。
【０１０４】
また、例えば、係数が−１である場合、制御部４８は、更新対象の係数記憶部３６に含まれる負側抵抗６０のコンダクタンスを大きくして、正側抵抗５８のコンダクタンスは変更しない。これに代えて、係数が−１である場合、制御部４８は、更新対象の係数記憶部３６に含まれる正側抵抗５８のコンダクタンスを小さくして、負側抵抗６０のコンダクタンスは変更しなくてもよい。これにより、制御部４８は、更新対象の係数記憶部３６に含まれる正側抵抗５８および負側抵抗６０のコンダクタンスを、係数に応じた大小関係に設定することができる。
【０１０５】
また、設定モードにおいて、制御部４８は、複数の係数を取得し、複数の係数を複数の更新対象の係数記憶部３６に対して同時に記憶させてもよい。
【０１０６】
この場合、図１６の（Ａ）に示すように、制御部４８は、＋１の係数に対応する１または複数の印加部３８から正の読出電圧（＋ＶＲ）を発生させ、他の印加部３８から基準電圧（例えばグランド電位）を発生させる。これと同時に、制御部４８は、正側電圧発生部４４から基準電圧より低い第１電圧を発生させ、負側電圧発生部４６から基準電圧を発生させる。これにより、制御部４８は、＋１の係数を記憶させる１または複数の係数記憶部３６に含まる正側抵抗５８のコンダクタンスを大きくして、負側抵抗６０のコンダクタンスを変更させないようにすることができる。
【０１０７】
続いて、図１６の（Ｂ）に示すように、制御部４８は、−１の係数に対応する１または複数の印加部３８から正の読出電圧（＋ＶＲ）を発生させ、他の印加部３８から基準電圧を発生させる。これと同時に、制御部４８は、負側電圧発生部４６から基準電圧より低い第１電圧を発生させ、正側電圧発生部４４から基準電圧を発生させる。これにより、制御部４８は、−１の係数を記憶させる１または複数の係数記憶部３６に含まる負側抵抗６０のコンダクタンスを大きくして、正側抵抗５８のコンダクタンスを変更させないようにすることができる。
【０１０８】
なお、制御部４８は、読出電圧（ＶＲ）を発生させている期間中において、正側電圧発生部４４または負側電圧発生部４６から、最初に基準電圧より高い電圧を所定期間発生させ、続いて、基準電圧より低い電圧を発生させてもよい。これにより、制御部４８は、正側抵抗５８または負側抵抗６０のコンダクタンスを微小量ずつ変化させることができる。
【０１０９】
また、制御部４８は、更新対象の係数記憶部３６に対して係数を記憶させる処理をした後、更新対象の係数記憶部３６に設定された正側抵抗５８のコンダクタンスと負側抵抗６０のコンダクタンスの差を読み出してもよい。続いて、制御部４８は、読み出したコンダクタンスの差を検証する。そして、制御部４８は、検証の結果、正しいコンダクタンスの差が記憶されていない場合には、再度、更新対象の係数記憶部３６に含まれる正側抵抗５８または負側抵抗６０のコンダクタンスをさらに変更する。これにより、制御部４８は、正側抵抗５８のコンダクタンスと負側抵抗６０のコンダクタンスとの差を精度良く設定することができる。
【０１１０】
以上のように、本実施形態に係る演算装置１０は、初期化モードにおいて、Ｍ個の係数記憶部３６に含まれる正側抵抗５８のコンダクタンスと負側抵抗６０のコンダクタンスとを一致させる。そして、演算装置１０は、設定モードにおいて、記憶させる係数の値に応じて、正側抵抗５８または負側抵抗６０の一方のコンダクタンスを変更し、他方のコンダクタンスを変更しない。これにより、本実施形態に係る演算装置１０は、正側抵抗５８または負側抵抗６０の一方のコンダクタンスを変更することにより係数を設定することができるので、簡易な処理で精度良く係数を設定することができる。
【０１１１】
なお、制御部４８は、定期的に初期化モードを実行してもよい。この場合、制御部４８は、設定モードで正側抵抗５８および負側抵抗６０のうち一方のコンダクタンスを小さくしていれば、初期化モードにおいて、設定モードでコンダクタンスを小さくした方のコンダクタンスを大きくすることにより、正側抵抗５８と負側抵抗６０とのコンダクタンスを一致させる。あるいは、制御部４８は、設定モードで正側抵抗５８および負側抵抗６０のうち一方のコンダクタンスを大きくしていれば、初期化モードにおいて、設定モードでコンダクタンスを大きくした方のコンダクタンスを小さくすることにより、正側抵抗５８と負側抵抗６０とのコンダクタンスを一致させる。これにより、制御部４８は、初期化モードと設定モードとが繰り返させた場合であっても、正側抵抗５８のコンダクタンスおよび負側抵抗６０のコンダクタンスが工場設定時からずれないようにすることができる。
【０１１２】
（変形例）
つぎに、変形例に係る演算装置１０について説明する。変形例に係る演算装置１０は、図１から図１６を参照して説明した演算装置１０と略同一の機能および構成を有するので、略同一の機能を有するブロックには同一の符号を付け、相違点を除き詳細な説明を省略する。第２変形例についても同様である。
【０１１３】
図１７は、ｗｉ＝＋１、ｘｉ＝＋１の場合の、変形例に係る係数記憶部３６の動作を説明するための図である。
【０１１４】
変形例に係るＭ個の係数記憶部３６のそれぞれは、切替部８２をさらに含む。切替部８２は、外部からの制御に応じて、ストレート接続状態とクロス接続状態とを切り替える。
【０１１５】
切替部８２は、ストレート接続状態の場合、正側抵抗５８の一端を正側ビットライン３２に接続し、負側抵抗６０の一端を負側ビットライン３４に接続する。これにより、切替部８２は、ストレート接続状態において、正側抵抗５８に流れる電流を正側電流として正側ビットライン３２に出力し、負側抵抗６０に流れる電流を負側電流として負側ビットライン３４に出力することができる。
【０１１６】
また、切替部８２は、クロス接続状態の場合、正側抵抗５８の一端を負側ビットライン３４に接続し、負側抵抗６０の一端を正側ビットライン３２に接続する。これにより、切替部８２は、ストレート接続状態において、負側抵抗６０に流れる電流を正側電流として正側ビットライン３２に出力し、正側抵抗５８に流れる電流を負側電流として負側ビットライン３４に出力することができる。
【０１１７】
また、変形例において、Ｍ個の印加部３８のそれぞれは、演算モードにおいて、対応する係数記憶部３６に含まれる正側抵抗５８および負側抵抗６０に対して、正の読出電圧（ＶＲ）を印加する。また、変形例において、正側整流部６２は、正側抵抗５８に逆方向の電流が流れることを防止する。また、変形例において、負側整流部６４は、負側抵抗６０に逆方向の電流が流れることを防止する。
【０１１８】
変形例において、Ｍ個の印加部３８のそれぞれは、対応する係数記憶部３６に含まれる切替部８２を、対応する入力値に応じて、ストレート接続をさせるか、クロス接続をさせるかを切り替える。
【０１１９】
例えば、図１７に示すように、第ｉの係数（ｗｉ）が＋１である場合、第ｉの係数記憶部３６−ｉに含まれる正側抵抗５８は、第１コンダクタンス（Ｇ１＝１／Ｒ１）に設定される。第ｉの係数（ｗｉ）が＋１である場合、第ｉの係数記憶部３６−ｉに含まれる負側抵抗６０は、第２コンダクタンス（Ｇ２＝１／Ｒ２）に設定される。
【０１２０】
この場合、正側抵抗５８には、正の第１電流値（＋Ｉ１）の電流が流れる。また、負側抵抗６０には、正の第２電流値（＋Ｉ２）の電流が流れる。なお、Ｇ１＞Ｇ２であるとする。従って、｜Ｉ１｜＞｜Ｉ２｜である。
【０１２１】
第ｉの入力値（ｘｉ）が＋１である場合、印加部３８は、切替部８２をストレート接続させる。従って、正側抵抗５８に流れる電流は、正側ビットライン３２に出力される。また、負側抵抗６０に流れる電流は、負側ビットライン３４に出力される。
【０１２２】
ここで、第ｉの係数（ｗｉ）に第ｉの入力値（ｘｉ）を乗じた値（ｗｉ・ｘｉ）の算出結果は、第ｉの係数記憶部３６−ｉから正側ビットライン３２に出力される電流（Ｉｐ＿ｉ）と、第ｉの係数記憶部３６−ｉから負側ビットライン３４に出力される電流（Ｉｎ＿ｉ）との電流差（Ｉｐ＿ｉ−Ｉｎ＿ｉ）で表される。
【０１２３】
このため、図１７の例では、Ｉｐ＿ｉ＝＋Ｉ１、Ｉｎ＿ｉ＝＋Ｉ２となり、電流差（Ｉｐ＿ｉ−Ｉｎ＿ｉ）は、正の値となる。従って、ｗｉ＝＋１、ｘｉ＝＋１の場合、変形例に係る演算部２０は、第ｉの係数（ｗｉ）に第ｉの入力値（ｘｉ）を乗じた値（ｗｉ・ｘｉ）として、＋１を算出することができる。
【０１２４】
図１８は、ｗｉ＝＋１、ｘｉ＝−１の場合、変形例に係る係数記憶部３６の動作を説明するための図である。第ｉの係数（ｗｉ）が＋１である場合、第ｉの係数記憶部３６−ｉに含まれる正側抵抗５８は、第１コンダクタンス（Ｇ１）に設定される。第ｉの係数（ｗｉ）が＋１である場合、第ｉの係数記憶部３６−ｉに含まれる負側抵抗６０は、第２コンダクタンス（Ｇ２）に設定される。
【０１２５】
第ｉの入力値（ｘｉ）が−１である場合、印加部３８は、切替部８２をクロス接続させる。従って、正側抵抗５８に流れる電流は、負側ビットライン３４に出力される。また、負側抵抗６０に流れる電流は、正側ビットライン３２に出力される。
【０１２６】
このため、図１８の例では、Ｉｐ＿ｉ＝Ｉ２、Ｉｎ＿ｉ＝Ｉ１となり、電流差（Ｉｐ＿ｉ−Ｉｎ＿ｉ）は、負の値となる。従って、ｗｉ＝＋１、ｘｉ＝−１の場合、変形例に係る演算部２０は、第ｉの係数（ｗｉ）に第ｉの入力値（ｘｉ）を乗じた値（ｗｉ・ｘｉ）として、−１を算出することができる。
【０１２７】
図１９は、ｗｉ＝−１、ｘｉ＝＋１の場合の、変形例に係る係数記憶部３６の動作を説明するための図である。第ｉの係数（ｗｉ）が−１である場合、第ｉの係数記憶部３６−ｉに含まれる正側抵抗５８は、第２コンダクタンス（Ｇ２）に設定される。第ｉの係数（ｗｉ）が−１である場合、第ｉの係数記憶部３６−ｉに含まれる負側抵抗６０は、第１コンダクタンス（Ｇ１）に設定される。
【０１２８】
この場合、正側抵抗５８には、正の第２電流値（＋Ｉ２）の電流が流れる。また、負側抵抗６０には、正の第１電流値（＋Ｉ１）の電流が流れる。
【０１２９】
第ｉの入力値（ｘｉ）が＋１である場合、印加部３８は、切替部８２をストレート接続させる。従って、正側抵抗５８に流れる電流は、正側ビットライン３２に出力される。また、負側抵抗６０に流れる電流は、負側ビットライン３４に出力される。
【０１３０】
このため、図１９の例では、Ｉｐ＿ｉ＝＋Ｉ２、Ｉｎ＿ｉ＝＋Ｉ１となり、電流差（Ｉｐ＿ｉ−Ｉｎ＿ｉ）は、負の値となる。従って、ｗｉ＝−１、ｘｉ＝＋１の場合、変形例に係る演算部２０は、第ｉの係数（ｗｉ）に第ｉの入力値（ｘｉ）を乗じた値（ｗｉ・ｘｉ）は、−１を算出することができる。
【０１３１】
図２０は、ｗｉ＝−１、ｘｉ＝−１の場合の、変形例に係る係数記憶部３６の動作を説明するための図である。第ｉの係数（ｗｉ）が−１である場合、第ｉの係数記憶部３６−ｉに含まれる正側抵抗５８は、第２コンダクタンス（Ｇ２）に設定される。第ｉの係数（ｗｉ）が−１である場合、第ｉの係数記憶部３６−ｉに含まれる負側抵抗６０は、第１コンダクタンス（Ｇ１）に設定される。
【０１３２】
第ｉの入力値（ｘｉ）が−１である場合、印加部３８は、切替部８２をクロス接続させる。従って、正側抵抗５８に流れる電流は、負側ビットライン３４に出力される。また、負側抵抗６０に流れる電流は、正側ビットライン３２に出力される。
【０１３３】
このため、図２０の例では、Ｉｐ＿ｉ＝−Ｉ２、Ｉｎ＿ｉ＝−Ｉ１となり、電流差（Ｉｐ＿ｉ−Ｉｎ＿ｉ）は、正の値となる。従って、ｗｉ＝−１、ｘｉ＝−１の場合、変形例に係る演算部２０は、第ｉの係数（ｗｉ）に第ｉの入力値（ｘｉ）を乗じた値（ｗｉ・ｘｉ）として、＋１を算出することができる。
【０１３４】
以上から、Ｍ個の係数記憶部３６に含まれるＭ個の正側抵抗５８に流れる電流の合計（Ｉｐ＿１＋Ｉｐ＿２＋…＋Ｉｐ＿Ｍ）と、Ｍ個の係数記憶部３６に含まれるＭ個の負側抵抗６０に流れる電流の合計（Ｉｎ＿１＋Ｉｎ＿２＋…＋Ｉｎ＿Ｍ）との差分値｛（Ｉｐ＿１＋Ｉｐ＿２＋…＋Ｉｐ＿Ｍ）−（Ｉｎ＿１＋Ｉｎ＿２＋…＋Ｉｎ＿Ｍ）｝は、Ｍ個の入力値とＭ個の係数との積和演算（乗累算）結果を表す。
【０１３５】
以上のように、変形例において、Ｍ個の印加部３８のそれぞれは、読出電圧を正側抵抗５８および負側抵抗６０に印加するとともに、対応する入力値に応じて、正側抵抗５８に流れる電流を正側電流とし且つ負側抵抗６０に流れる電流を負側電流として出力させるか、または、負側抵抗６０に流れる電流を正側電流とし且つ正側抵抗５８に流れる電流を負側電流として出力させるかを切り替える。このようにしても、Ｍ個の印加部３８のそれぞれは、対応する係数記憶部３６から出力される正側電流と負側電流との大小関係を、対応する入力値と対応する係数との乗算結果に応じて変更させることができる。
【０１３６】
本発明の実施形態および変形例を説明したが、これらの実施形態および変形例は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１３７】
１０  演算装置
２０  演算部
２２  設定部
３２  正側ビットライン
３４  負側ビットライン
３６  係数記憶部
３８  印加部
４０  検出部
４２  出力部
４４  正側電圧発生部
４６  負側電圧発生部
４８  制御部
５８  正側抵抗
６０  負側抵抗
６２  正側整流部
６４  負側整流部
７２  正側比較部
７４  負側比較部
７６  一致判定部
８２  切替部
【図１】
2020013398.tif 000006
【図２】
2020013398.tif 000007
【図３】
2020013398.tif 000008
【図４】
2020013398.tif 000009
【図５】
2020013398.tif 000010
【図６】
2020013398.tif 000011
【図７】
2020013398.tif 000012
【図８】
2020013398.tif 000013
【図９】
2020013398.tif 000014
【図１０】
2020013398.tif 000015
【図１１】
2020013398.tif 000016
【図１２】
2020013398.tif 000017
【図１３】
2020013398.tif 000018
【図１４】
2020013398.tif 000019
【図１５】
2020013398.tif 000020
【図１６】
2020013398.tif 000021
【図１７】
2020013398.tif 000022
【図１８】
2020013398.tif 000023
【図１９】
2020013398.tif 000024
【図２０】
2020013398.tif 000025