(57)【要約】【課題】  回路面積を縮小することが可能であり、また演算処理を高速化できる。【解決手段】  実施形態の演算装置は、演算回路１２と、変換回路２１と、積分器２２と、比較器２３とを含む。演算回路１２は、直列接続された複数の演算素子１３を含み、複数回の演算処理を順次実行する。演算素子１３は、第１及び第２時間信号を受け、第１及び第２時間信号を重み係数と入力データとに応じた時間だけ遅延させた第３及び第４時間信号を生成して出力する。変換回路２１は、複数回の演算処理ごとに、演算回路１２から出力される第３及び第４時間信号の差をアナログ信号又はデジタル信号に変換する。積分器２２は、変換回路２１により変換された複数のアナログ信号又は複数のデジタル信号を積分する。比較器２３は、積分器２２による積分結果を基準値と比較する。【選択図】  図４
2019168851.tif 000002
【特許請求の範囲】
【請求項１】
ニューラルネットワークに用いられる演算装置であって、
直列接続された複数の演算素子を含み、複数回の演算処理を順次実行し、前記複数の演算素子の各々は、第１及び第２時間信号を受け、前記第１及び第２時間信号を重み係数と入力データとに応じた時間だけ遅延させた第３及び第４時間信号を生成して出力する、演算回路と、
前記複数回の演算処理ごとに、前記演算回路から出力される前記第３及び第４時間信号の差をアナログ信号又はデジタル信号に変換する変換回路と、
前記変換回路により変換された複数のアナログ信号又は複数のデジタル信号を積分する積分器と、
前記積分器による積分結果を基準値と比較する比較器と、
を具備する演算装置。
【請求項２】
前記複数回の演算処理に対応した複数の重み係数を格納する第１記憶回路と、
前記複数回の演算処理に対応した複数の入力データを格納する第２記憶回路と、
前記複数回の演算処理ごとに、前記複数の重み係数と前記複数の入力データとを順次前記演算回路に入力する制御回路と
をさらに具備する
請求項１に記載の演算装置。
【請求項３】
前記変換回路は、前記第１時間信号が前記第２時間信号より速い場合に、前記アナログ信号の電圧レベルを上昇させ、前記第１時間信号が前記第２時間信号より遅い場合に、前記アナログ信号の電圧レベルを降下させる
請求項１又は２に記載の演算装置。
【請求項４】
前記変換回路は、
前記第３時間信号を第１時間ずつ遅延させる複数の第１遅延素子と、
前記第４時間信号を前記第１時間より長い第２時間だけ遅延させる第２遅延素子と、
前記第２遅延素子の出力がアサートされたことに応じて、前記複数の遅延素子の出力をそれぞれ保持する複数のフリップフロップと
を含む
請求項１又は２に記載の演算装置。
【請求項５】
前記演算素子は、前記重み係数に応じた時間だけ前記時間信号を遅延させる遅延回路を含む
請求項１乃至４のいずれかに記載の演算装置。
【請求項６】
前記演算素子は、前記入力データに応じて、前記第３時間信号と前記第４時間信号との経路を切り替える切替回路をさらに含む
請求項５に記載の演算装置。
【請求項７】
ニューラルネットワークに用いられる演算方法であって、
直列接続された複数の演算素子の各々により、第１及び第２時間信号を重み係数と入力データとに応じた時間だけ遅延させた第３及び第４時間信号を生成して出力し、
前記複数の演算素子を含む演算回路により複数回の演算処理を順次実行し、
前記複数回の演算処理ごとに、前記複数の演算素子の最終段の演算素子から出力される前記第３及び第４時間信号の差をアナログ信号又はデジタル信号に変換し、
前記変換された複数のアナログ信号又は複数のデジタル信号を積分し、
前記積分結果を基準値と比較する、
ことを具備する演算方法。
【請求項８】
前記複数回の演算処理に対応した複数の重み係数を格納し、
前記複数回の演算処理に対応した複数の入力データを格納し、
前記複数回の演算処理ごとに、前記複数の重み係数と前記複数の入力データとを前記演算回路に入力する、
ことをさらに具備する
請求項７に記載の演算方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、ニューラルネットワークに用いられる演算装置及び演算方法に関する。
【背景技術】
【０００２】
ニューラルネットワークは、脳のニューロンおよびシナプスを模して考えられたモデルであり、少なくとも学習および識別の２段階の処理を含む。学習段階では、多数の入力からその特徴を学習し、識別処理のためのニューラルネットワークを構築する。識別段階では、構築されたニューラルネットワークを用いて新たな入力が何であるかを識別する。
【０００３】
近年では、学習段階の技術が大きく発展しており、例えばディープラーニングにより、高い表現力を持った多層ニューラルネットワークを構築できるようになりつつある。
【０００４】
一方、識別段階の処理をソフトウェアで実装すると、処理に時間がかかったり、消費電力が大きくなったりするおそれがある。そこで、識別段階の処理をハードウェアで行うことが考えられる。しかしながら、多層ニューラルネットワークにおいては、パラメータ数や演算量が多いことから、ハードウェア構成が複雑になりかねない。
【０００５】
多層ニューラルネットワークでは、各層に対応する積和演算が繰り返される。また、多層ニューラルネットワークに含まれる少なくとも２つの層では、積和演算（ＭＡＣ：multiply and accumulate）の数が異なる。積和演算は、ハードウェアで構成された演算素子（ＰＥ：processing element）で行われる。積和演算を時間ドメインで行うことで高電力効率だが、１つの層の積和演算可能回数は、ＰＥ数に制約される。ＰＥ数を最大のＭＡＣ数に合わせると、実装面積が増えてしまい、ＭＡＣ数が少ない層では無駄が生じてしまう。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１５−５３００８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
実施形態は、回路面積を縮小することが可能であり、また演算処理を高速化できる演算装置及び演算方法を提供する。
【課題を解決するための手段】
【０００８】
実施形態に係る演算装置は、ニューラルネットワークに用いられる演算装置であって、直列接続された複数の演算素子を含み、複数回の演算処理を順次実行し、前記複数の演算素子の各々は、第１及び第２時間信号を受け、前記第１及び第２時間信号を重み係数と入力データとに応じた時間だけ遅延させた第３及び第４時間信号を生成して出力する、演算回路と、前記複数回の演算処理ごとに、前記演算回路から出力される前記第３及び第４時間信号の差をアナログ信号又はデジタル信号に変換する変換回路と、前記変換回路により変換された複数のアナログ信号又は複数のデジタル信号を積分する積分器と、前記積分器による積分結果を基準値と比較する比較器とを具備する。
【図面の簡単な説明】
【０００９】
【図１】第１実施形態に係る識別システムの概略構成を示すブロック図。
【図２】図１に示した識別装置の概略構成を示すブロック図。
【図３】第１実施形態に係る演算装置のブロック図。
【図４】図３に示した１つの演算部及び１つの機能回路を説明するブロック図。
【図５】図４に示した演算素子のブロック図。
【図６】図５に示した遅延回路及び切替回路の回路図。
【図７】切替回路２５の他の構成例を示す回路図。
【図８】図３に示した変換回路２０の回路図。
【図９】第１実施形態に係るＴＡＣ、積分器、及び比較器の回路図。
【図１０】第１実施形態に係る演算装置の積和演算を説明するフローチャート。
【図１１】第１実施形態に係る演算装置の積和演算を説明する模式図。
【図１２】第１実施形態に係るＴＡＣの動作を説明するタイミング図。
【図１３】第１実施形態に係る演算装置の積和演算を説明するタイミング図。
【図１４】第２実施形態に係るＴＤＣ、積分器、及び比較器の回路図。
【図１５】第２実施形態に係る演算装置の積和演算を説明するタイミング図。
【図１６】変形例に係る演算装置の積和演算を説明するタイミング図。
【図１７】第３実施形態に係る１つの演算部及び１つの機能回路を説明するブロック図。
【図１８】図１５に示した演算素子の回路図。
【図１９】第３実施形態に係る演算素子の動作を説明するタイミング図。
【図２０】第３実施形態に係るＴＡＣ、積分器、及び比較器の回路図。
【図２１】第３実施形態に係る演算装置の積和演算を説明するタイミング図。
【図２２】第４実施形態に係る信号生成回路の回路図。
【図２３】第４実施形態に係る演算装置の積和演算を説明するタイミング図。
【発明を実施するための形態】
【００１０】
以下、実施形態について図面を参照して説明する。以下に示す幾つかの実施形態は、本発明の技術思想を具体化するための装置および方法を例示したものであって、構成部品の形状、構造、配置等によって、本発明の技術思想が特定されるものではない。各機能ブロックは、ハードウェア及びソフトウェアのいずれかまたは両者を組み合わせたものとして実現することができる。各機能ブロックが以下の例のように区別されていることは必須ではない。例えば、一部の機能が例示の機能ブロックとは別の機能ブロックによって実行されてもよい。さらに、例示の機能ブロックがさらに細かい機能サブブロックに分割されていてもよい。なお、以下の説明において、同一の機能及び構成を有する要素については同一符号を付し、重複説明は必要な場合にのみ行う。
【００１１】
［１］  第１実施形態
［１−１］  識別システム１の構成
本実施形態では、多層ニューラルネットワークを利用した識別システムを想定している。本実施形態に係る識別システムでは、まず学習段階として、ニューラルネットワークを構築する。そして、ニューラルネットワークが構築されると、識別段階として、このニューラルネットワークを用いて新たな入力が何であるかを識別できる。以下では、入力が１桁の数字０〜９のいずれかが描かれた画像であり、画像に描かれた数字を識別する識別システムを例に挙げて説明する。
【００１２】
図１は、識別システム１の概略構成を示すブロック図である。識別システム１は、センサ２、学習装置３、識別装置４、及びアプリケーション部５を備える。
【００１３】
センサ２は、例えばイメージセンサであり、数字が描かれた画像から、当該画像に対応する入力データを生成する。図示のように入力データは、（ｎ＋１）個の画素から構成され、各画素の値Ａｋは、１または複数ビットのデジタル値であるものとする。
【００１４】
学習装置３は、センサ２が生成した多数の入力データからその特徴を学習し、ニューラルネットワークを構築する。後に詳述するが、構築されたニューラルネットワークは、識別装置４における各演算部で用いられる重み係数として表される。すなわち、学習装置３は、ある数字「Ｘ」が描かれた画像に対応する入力データが入力されたときに、入力データが「Ｘ」であることを出力するような重み係数を見出す。
【００１５】
識別システム１のユーザから多くの入力データを受信することで、ニューラルネットワークの精度を向上でき、データを収集するコストを低減できる。なお、本実施形態では、学習装置３は公知の手法によりニューラルネットワークを構築するものとする。
【００１６】
識別装置４は、学習装置３からニューラルネットワークにおける重み係数を取得する。学習装置３によりニューラルネットワークがアップデートされた場合、識別装置４は、新たなニューラルネットワークの重み係数を取得することで、識別の精度を向上させる。重み係数を取得した識別装置４は、センサ２が生成した識別対象の入力データを受け取る。そして、識別装置４は、重み係数を用いたニューラルネットワークに入力データを適用して、画像に描かれた数字が何であるかを識別する。
【００１７】
アプリケーション部５は、識別結果を利用して種々の処理を行う。
【００１８】
一旦、ニューラルネットワークのパラメータが学習装置３から取得されると、以降は、学習装置３を経由することなく、識別装置４が入力データを識別でき、その結果がアプリケーション部５により利用される。そのため、識別段階において、識別システム１は、極めて低消費電力で動作可能である。
【００１９】
図２は、図１に示した識別装置４の概略構成を示すブロック図であり、ニューラルネットワークを適用した構成を示している。識別装置４は、例えば１または複数の半導体集積回路により実装されてもよい。識別装置４は、入力層６と、１または複数の隠れ層７と、出力層８とを備える。隠れ層７および出力層８をまとめて演算層とも呼ぶ。図２では、識別装置４が２層の隠れ層７ａ、７ｂを含む例を示している。この場合、隠れ層７ａは初段の隠れ層とも言える。また、隠れ層７ｂは、前段の隠れ層７ａに引き続く隠れ層とも言えるし、最終段の隠れ層とも言える。
【００２０】
入力層６は、（ｎ＋１）個の入力部Ｉ０〜Ｉｎを有する。入力部Ｉ０〜Ｉｎの数（ｎ＋１）は、センサ２が生成する入力データの画素数と等しい。そして、入力データにおけるｋ番目の画素値Ａｋが入力部Ｉｋに設定される。
【００２１】
隠れ層７ａは、（ｐ＋１）個の演算部Ｐ１０〜Ｐ１ｐを有する。ｐは、１以上の任意の整数である。演算部Ｐ１０〜Ｐ１ｐの動作は同様であるので、以下代表して演算部Ｐ１ｋとして説明する。演算部Ｐ１ｋには、入力層６における入力部Ｉ０〜Ｉｎから（ｎ＋１）個の画素値Ａ０〜Ａｎが入力される。そして、演算部Ｐ１ｋは、画素値Ａ０〜Ａｎと、そのそれぞれに対応する重み係数Ｆｋ０〜Ｆｋｎとに対して所定の演算処理を行い、新たなデジタル値Ｂｋを生成する。デジタル値Ｂｋは１ビットであってもよいし複数ビットであってもよい。重み係数Ｆｋ０〜Ｆｋｎは、学習装置３から取得される。
【００２２】
隠れ層７ｂは、（ｑ＋１）個の演算部Ｐ２０〜Ｐ２ｑを有する。ｑは、１以上の任意の整数である。演算部Ｐ２０〜Ｐ２ｑの動作は同様であるので、以下代表して演算部Ｐ２ｋとして説明する。演算部Ｐ２ｋには、前段の隠れ層７ａにおける演算部Ｐ１０〜Ｐ１ｐから（ｐ＋１）個のデジタル値Ｂ０〜Ｂｐが入力される。そして、演算部Ｐ２ｋは、デジタル値Ｂ０〜Ｂｐと、そのそれぞれに対応する重み係数Ｇｋ０〜Ｇｋｐとに対して所定の演算処理を行い、新たなデジタル値Ｃｋを生成する。デジタル値Ｃｋは１ビットであってもよいし複数ビットであってもよい。重み係数Ｇｋ０〜Ｇｋｐは、学習装置３から取得される。
【００２３】
出力層８は、例えば１０個の演算部Ｐ３０〜Ｐ３９を有する。本実施形態では、あり得る識別結果の数が１０種類（すなわち１桁の数字０〜９）であるため、そのそれぞれに対応する演算部Ｐ３０〜Ｐ３９が設けられる。演算部Ｐ３０〜Ｐ３９の動作は同様であるので、以下代表して演算部Ｐ３ｋとして説明する。演算部Ｐ３ｋには、隠れ層７ｂにおける演算部Ｐ２０〜Ｐ２ｑから（ｑ＋１）個のデジタル値Ｃ０〜Ｃｑが入力される。そして、演算部Ｐ３ｋは、デジタル値Ｃ０〜Ｃｑと、そのそれぞれに対応する重み係数Ｈｋ０〜Ｈｋｑとに対して所定の演算処理を行い、新たなデジタル値Ｄｋを生成する。重み係数Ｈｋ０〜Ｈｋｎは、学習装置３から取得される。
【００２４】
好ましくは、デジタル値Ｄｋは１ビットであり、デジタル値Ｄ０〜Ｄ９のうちの１つのみが“１”となる。そして、例えばデジタル値Ｄ６が“１”である場合、画像には数字「６」が描かれている、という識別結果となる。
【００２５】
ここで、上記重み係数Ｆｋ０〜Ｆｋｎ、Ｇｋ０〜Ｇｋｐ、Ｈｋ０〜Ｈｋｑがニューラルネットワークにおける重要なパラメータであり、これらを適切に定めることで、入力データを正しく識別できる。
【００２６】
なお、図２では、２層の隠れ層を持つニューラルネットワークを例示しているが、隠れ層７ａ、７ｂ間にさらに１または複数の隠れ層７を設けてもよい。一般に、隠れ層の数が多いほど識別の精度が向上する。特に、多くの隠れ層についての重み係数を定めることを「ディープラーニング」ともいう。あるいは、隠れ層を１層のみとしてもよい。この場合、隠れ層７ｂが省略され、隠れ層７ａの出力が出力層８に入力される。
【００２７】
［１−２］  演算装置７の構成
本実施形態では、隠れ層７の演算処理をハードウェアで行う。以下では、ハードウェアで構成された隠れ層７を演算装置７と呼ぶ。
【００２８】
図３は、本実施形態に係る演算装置７のブロック図である。演算装置７は、演算素子アレイ１１、入力データ用のレジスタ群１４、入力データ用の記憶回路１５、変換回路２０、重み係数用の記憶回路１６、機能回路群１７、出力データ用のレジスタ群１８、及び制御回路１９を備える。
【００２９】
演算素子アレイ１１は、縦方向に並んだ複数の演算部（演算回路）１２−０〜１２−ｒを備える。ｒは、１以上の任意の整数である。演算部１２は、積和演算を行う。演算部１２は、積和演算部（ＭＡＣ部（multiply and accumulate unit））とも呼ばれる。演算部１２は、直列接続された複数の演算素子（ＰＥ（processing element））１３−０〜１３−ｓを備える。ｓは任意の整数である。演算部１２及び演算素子１３の具体的な構成については後述する。
【００３０】
入力データ用の記憶回路１５は、入力層６又は前段の演算装置（隠れ層）７（図２を参照）から送られる入力データを受けるとともに、この入力データを格納する。
【００３１】
入力データ用のレジスタ群１４は、複数のレジスタ（Ｒｅｇ．）１４−０〜１４−ｓを備える。複数のレジスタ１４−０〜１４−ｓはそれぞれ、複数の演算素子１３−０〜１３−ｓに対応して設けられる。レジスタ群１４は、記憶回路１５から送られる入力データを一時的に保持する。レジスタ群１４は、少なくとも（ｓ＋１）ビットの入力データを一時に保持可能である。
【００３２】
変換回路２０は、レジスタ群１４から入力された入力データを、演算部１２の回路構成に適した入力データに変換する。変換回路２０の具体的な構成については後述する。
【００３３】
重み係数用の記憶回路１６は、学習装置３から送られる重み係数を格納する。記憶回路１６に格納された重み係数は、演算素子アレイ１１に設定される。
【００３４】
機能回路群１７は、複数の機能回路１７−０〜１７−ｒを備える。複数の機能回路１７−０〜１７−ｒは、演算部１２−０〜１２−ｒに対応して設けられる。各機能回路１７は、時間振幅変換回路（ＴＡＣ：time-to-amplitude converter）、又は時間デジタル変換回路（ＴＤＣ：time-to-digital converter）と、積分器（Ｉｎｔｅｇ．）と、比較器（Ｃｏｍｐ．）とを備える。図３の機能回路１７は、複数の機能要素を便宜上纏めて表現したものであり、具体的な構成については後述する。
【００３５】
出力データ用のレジスタ群１８は、複数のレジスタ（Ｒｅｇ．）１８−０〜１８−ｒを備える。複数のレジスタ１８−０〜１８−ｒは、演算部１２−０〜１２−ｒに対応して設けられる。レジスタ群１８は、機能回路群１７から送られる出力データを一時的に保持する。レジスタ群１８は、少なくとも（ｒ＋１）ビットの出力データを一時に保持可能である。
【００３６】
制御回路１９は、演算装置７の動作を統括的に制御する。制御回路１９は、演算素子アレイ１１、レジスタ群１４、記憶回路１５、記憶回路１６、機能回路群１７、及びレジスタ群１８に、各種の制御信号を供給する。
【００３７】
［１−２−１］  演算部１２及び機能回路１７の構成
図４は、図３に示した１つの演算部１２及び１つの機能回路１７を説明するブロック図である。
【００３８】
演算部１２は、例えば６４個の演算素子１３−０〜１３−６３を備える。演算素子１３−０〜１３−６３にはそれぞれ、重み係数ｗ０〜ｗ６３が設定される。演算素子１３−０〜１３−６３はそれぞれ、変換回路２０から入力データｘ０´〜ｘ６３´を受ける。演算素子１３−０〜１３−６３はそれぞれ、遅延時間信号τ０〜τ６３を出力する。演算素子１３−０〜１３−６３は、直列に接続されており、任意の第１演算素子１３−ｉから出力された遅延時間信号が、この第１演算素子１３−ｉの後段の第２演算素子１３−（ｉ＋１）に入力される。遅延時間信号τは、第１時間信号と第２時間信号とからなる差動出力の時間的な差に対応する。
【００３９】
機能回路１７は、ＴＡＣ（又はＴＤＣ）２１、積分器２２、及び比較器２３を備える。第１実施形態では、ＴＡＣ２１の構成例について説明する。
【００４０】
ＴＡＣ２１は、演算部１２により演算された遅延時間を電圧信号（アナログ信号）に変換する。
【００４１】
積分器２２は、ＴＡＣ２１から出力される複数の出力信号（電圧信号）を積分する。本実施形態でいう積分とは、連続して入力される複数の信号を順次加算することを意味する。
【００４２】
比較器２３は、積分器２２により積分された電圧信号を基準電圧と比較する。電圧信号が基準電圧より高い場合、データ“１”、電圧信号が基準電圧以下である場合、データ“０”と判定される。そして、比較器２３は、比較結果を出力データＤｏｕｔとして出力する。
【００４３】
ＴＡＣ２１、積分器２２、及び比較器２３の具体的な回路構成については後述する。
【００４４】
［１−２−２］  演算素子１３の構成
図５は、図４に示した演算素子１３のブロック図である。図５には、任意のｉ番目の演算素子１３を示している。この演算素子１３は、入力データｘｉ´が１ビットである場合の回路例である。演算素子１３は、遅延回路２４、及び切替回路２５を備える。
【００４５】
遅延回路２４には、第１時間信号Ｖｐｉ−１、及び第２時間信号Ｖｎｉ−１が入力される。第１時間信号Ｖｐｉ−１、及び第２時間信号Ｖｎｉ−１はそれぞれ、ハイレベル（電源電圧ＶＤＤ）とローレベル（接地電圧ＶＳＳ）との間を遷移する電圧信号である。第１時間信号Ｖｐｉ−１と第２時間信号Ｖｎｉ−１との時間差が遅延時間信号τｉ−１である。
【００４６】
遅延回路２４は、重み係数ｗｉを有する。遅延回路２４は、重み係数ｗｉを用いて、第２時間信号Ｖｎｉ−１を、第１時間信号Ｖｐｉ−１から遅延時間信号τｉ−１に対応する時間だけ遅延させる。
【００４７】
切替回路２５は、遅延回路２４から２つの時間信号を受けるとともに、入力データｘｉ´を受ける。切替回路２５は、入力データｘｉ´を用いて、遅延回路２４からの２つの時間信号の経路を切り替えることが可能である。切替回路２５は、第３時間信号Ｖｐｉと第４時間信号Ｖｎｉとを出力する。第３時間信号Ｖｐｉと第４時間信号Ｖｎｉとの時間差が遅延時間信号τｉである。
【００４８】
図６は、図５に示した遅延回路２４及び切替回路２５の回路図である。
【００４９】
遅延回路２４は、４個のインバータ回路ＩＶ１〜ＩＶ４、可変抵抗素子Ｒ１、及び抵抗素子Ｒ２を備える。４個のインバータ回路ＩＶ１〜ＩＶ４はそれぞれ、遅延素子として機能する。
【００５０】
２個のインバータ回路ＩＶ１、ＩＶ２は、第１時間信号Ｖｐｉ−１が入力される信号線とノードＮｐとの間に直列接続される。
【００５１】
インバータ回路ＩＶ１は、直列接続されたＰＭＯＳトランジスタＱＰ１及びＮＭＯＳトランジスタＱＮ１を備える。ＰＭＯＳトランジスタＱＰ１のソースは、電源電圧ＶＤＤが供給される電源端子に接続され、そのゲートには、第１時間信号Ｖｐｉ−１が入力される。ＮＭＯＳトランジスタＱＮ１のゲートは、ＰＭＯＳトランジスタＱＰ１のゲートに接続され、そのソースは、可変抵抗素子Ｒ１を介して、接地電圧ＶＳＳが供給される接地端子に接続される。可変抵抗素子Ｒ１は、重み係数ｗｉに応じた時間だけ遅延させるように、その抵抗値が設定される。
【００５２】
インバータ回路ＩＶ２は、直列接続されたＰＭＯＳトランジスタＱＰ２及びＮＭＯＳトランジスタＱＮ２を備える。ＰＭＯＳトランジスタＱＰ２のソースは、電源端子ＶＤＤに接続され、そのゲートは、ＰＭＯＳトランジスタＱＰ１のドレインに接続される。ＮＭＯＳトランジスタＱＮ２のゲートは、ＰＭＯＳトランジスタＱＰ２のゲートに接続され、そのソースは、接地端子ＶＳＳに接続される。
【００５３】
２個のインバータ回路ＩＶ３、ＩＶ４は、第２時間信号Ｖｎｉ−１が入力される信号線とノードＮｎとの間に直列接続される。
【００５４】
インバータ回路ＩＶ３は、直列接続されたＰＭＯＳトランジスタＱＰ３及びＮＭＯＳトランジスタＱＮ３を備える。ＮＭＯＳトランジスタＱＮ３には、抵抗素子Ｒ２が接続される。インバータ回路ＩＶ４は、直列接続されたＰＭＯＳトランジスタＱＰ４及びＮＭＯＳトランジスタＱＮ４を備える。インバータ回路ＩＶ３、ＩＶ４に含まれる各トランジスタの接続関係は、インバータ回路ＩＶ１、ＩＶ２と同じである。
【００５５】
切替回路２５は、２個のＮＭＯＳトランジスタＱＮ５、ＱＮ６と、２個のＰＭＯＳトランジスタＱＰ５、ＱＰ６とを備える。
【００５６】
ＮＭＯＳトランジスタＱＮ５の一端は、ノードＮｐに接続され、その他端は、第３時間信号Ｖｐｉを出力する信号線に接続され、そのゲートには、入力データｘｉ´が入力される。ＰＭＯＳトランジスタＱＰ５の一端は、ノードＮｐに接続され、その他端は、第４時間信号Ｖｎｉを出力する信号線に接続され、そのゲートには、入力データｘｉ´が入力される。
【００５７】
ＰＭＯＳトランジスタＱＰ６の一端は、ノードＮｎに接続され、その他端は、第３時間信号Ｖｐｉを出力する信号線に接続され、そのゲートには、入力データｘｉ´が入力される。ＮＭＯＳトランジスタＱＮ６の一端は、ノードＮｎに接続され、その他端は、第４時間信号Ｖｎｉを出力する信号線に接続され、そのゲートには、入力データｘｉ´が入力される。
【００５８】
すなわち、切替回路２５は、入力データｘｉ´がデータ“１”である場合、ノードＮｐの信号を第３時間信号Ｖｐｉとして出力し、ノードＮｎの信号を第４時間信号Ｖｎｉとして出力する。また、切替回路２５は、入力データｘｉ´がデータ“０”である場合、ノードＮｐの信号を第４時間信号Ｖｎｉとして出力し、ノードＮｎの信号を第３時間信号Ｖｐｉとして出力する。
【００５９】
なお、演算素子１３の構成は、図５及び図６の構成に限定されるものではなく、時間信号を遅延させることが可能な他の演算素子を用いることができる。
【００６０】
図７は、切替回路２５の他の構成例を示す回路図である。切替回路２５は、４個のトランスファーゲートＴＲ１〜ＴＲ４を備える。トランスファーゲートＴＲ１〜ＴＲ４の各々は、並列接続されたＰＭＯＳトランジスタ及びＮＭＯＳトランジスタから構成される。
【００６１】
トランスファーゲートＴＲ１の一端は、ノードＮｐに接続され、その他端は、第３時間信号Ｖｐｉを出力する信号線に接続される。トランスファーゲートＴＲ１を構成するＮＭＯＳトランジスタ及びＰＭＯＳトランジスタのゲートにはそれぞれ、入力データｘｉ´及び入力データ／ｘｉ´が入力される。“／”は、反転信号を意味する。
【００６２】
トランスファーゲートＴＲ２の一端は、ノードＮｐに接続され、その他端は、第４時間信号Ｖｎｉを出力する信号線に接続される。トランスファーゲートＴＲ２を構成するＰＭＯＳトランジスタ及びＮＭＯＳトランジスタのゲートにはそれぞれ、入力データｘｉ´及び入力データ／ｘｉ´が入力される。
【００６３】
トランスファーゲートＴＲ３の一端は、ノードＮｎに接続され、その他端は、第３時間信号Ｖｐｉを出力する信号線に接続される。トランスファーゲートＴＲ３を構成するＰＭＯＳトランジスタ及びＮＭＯＳトランジスタのゲートにはそれぞれ、入力データｘｉ´及び入力データ／ｘｉ´が入力される。
【００６４】
トランスファーゲートＴＲ４の一端は、ノードＮｎに接続され、その他端は、第４時間信号Ｖｎｉを出力する信号線に接続される。トランスファーゲートＴＲ４を構成するＮＭＯＳトランジスタ及びＰＭＯＳトランジスタのゲートにはそれぞれ、入力データｘｉ´及び入力データ／ｘｉ´が入力される。
【００６５】
［１−２−３］  変換回路２０の構成
次に、変換回路２０の構成について説明する。図８は、図３に示した変換回路２０の回路図である。図８には、２つの実施例（図８（ａ）、図８（ｂ））に係る変換回路２０を示している。
【００６６】
図８（ａ）に示すように、変換回路２０は、レジスタ群１４から（ｓ＋１）ビットの入力データｘを受ける。変換回路２０は、（ｓ＋１）ビットの入力データｘ（ｘ０〜ｘｓ）を、（ｓ＋１）ビットの入力データｘ´（ｘ０´〜ｘｓ´）に変換する。図８（ａ）の変換回路２０は、（ｓ＋１）個のＸＯＲ回路７０−０〜７０−ｓを備える。ＸＯＲ回路７０−０は、入力データｘ０と入力データｘ１とのＸＯＲ演算により、入力データｘ０´を生成する。すなわち、ｉ番目のＸＯＲ回路７０−ｉは、入力データｘｉと入力データｘｉ＋１とのＸＯＲ演算により、入力データｘｉ´を生成し、演算素子１３−ｉの切替回路２５−ｉに出力する。最下位ビットに対応するｘｓ´を生成するＸＯＲ回路７０−ｓは、入力データｘｓとデータ“０”との演算がされる。
【００６７】
また、図８（ｂ）に示すように、データ“０”と入力データｘｓとをＸＯＲ回路に入力すると、ＸＯＲ回路の出力ｘｓ´は入力データｘｓと等しくなる。よって、ＸＯＲ回路７０−ｓは使わず、入力データｘｓ´として入力データｘｓを直接利用してもよい。
【００６８】
なお、演算素子１３が差動型でない場合は、変換回路２０は不要である。
【００６９】
［１−２−４］  ＴＡＣ２１、積分器２２、及び比較器２３の構成
次に、ＴＡＣ２１、積分器２２、及び比較器２３の具体的な構成について説明する。図９は、ＴＡＣ２１、積分器２２、及び比較器２３の回路図である。
【００７０】
ＴＡＣ２１は、フリップフロップ（Ｄフリップフロップ）３０、３１、ＮＡＮＤゲート３２、インバータ回路３３、定電流源３４、３７、ＰＭＯＳトランジスタ３５、及びＮＭＯＳトランジスタ３６を備える。
【００７１】
フリップフロップ３０の入力端子Ｄは、電源端子ＶＤＤに接続され、そのクロック端子には、演算部１２からの第１時間信号Ｖｐ（すなわち演算部１２に含まれる最終段の演算素子１３−Ｓの第１時間信号Ｖｐ）が入力される。フリップフロップ３０は、第１時間信号Ｖｐがハイレベルの場合に、ハイレベル（電圧ＶＤＤ）を出力端子Ｑから出力する。
【００７２】
フリップフロップ３１の入力端子Ｄは、電源端子ＶＤＤに接続され、そのクロック端子には、演算部１２からの第２時間信号Ｖｎ（すなわち演算部１２に含まれる最終段の演算素子１３−Ｓからの第２時間信号Ｖｎ）が入力される。フリップフロップ３１は、第２時間信号Ｖｎがハイレベルの場合に、ハイレベル（電圧ＶＤＤ）を出力端子Ｑから出力する。
【００７３】
ＮＡＮＤゲート３２の第１入力端子は、フリップフロップ３０の出力端子Ｑに接続され、その第２入力端子は、フリップフロップ３１の出力端子Ｑに接続される。ＮＡＮＤゲート３２の出力端子は、フリップフロップ３０、３１のリセット端子Ｒに接続される。ＮＡＮＤゲート３２は、フリップフロップ３０、３１の出力が共にハイレベルの場合に、ローレベルを出力してフリップフロップ３０、３１をリセットする。
【００７４】
インバータ回路３３の入力端子は、フリップフロップ３０の出力端子Ｑに接続される。ＰＭＯＳトランジスタ３５のソースは、定電流源３４に接続され、そのドレインは、ノードＮ１に接続され、そのゲートは、インバータ回路３３の出力端子に接続される。
【００７５】
ＮＭＯＳトランジスタ３６のドレインは、ノードＮ１に接続され、そのソースは、定電流源３７に接続され、そのゲートは、フリップフロップ３１の出力端子Ｑに接続される。ＴＡＣ２１は、ノードＮ１から電圧Ｖｉｎｃを出力する。
【００７６】
積分器２２は、キャパシタ２２で構成される。キャパシタ２２の第１電極は、ノードＮ１に接続され、その第２電極は、接地端子ＶＳＳに接続される。
【００７７】
比較器２３の第１入力端子は、ノードＮ１に接続され、その第２入力端子は、基準電圧Ｖｒｅｆが供給される電源端子に接続され、その制御端子には、制御回路１９から信号ＣＬＫ_compが入力される。基準電圧Ｖｒｅｆは、“ＶＤＤ＞Ｖｒｅｆ≧ＶＳＳ”の関係を有する。基準電圧Ｖｒｅｆは、任意に設定可能であり、例えばＶＤＤ／２である。比較器２３は、信号ＣＬＫ_compがアサートされた場合に、比較結果を出力データＤｏｕｔとして出力する。
【００７８】
また、ノードＮ１には、リセット回路３８が接続される。リセット回路３８は、ＮＭＯＳトランジスタ３８で構成される。ＮＭＯＳトランジスタ３８のドレインは、電源端子Ｖｒｅｆに接続され、そのソースは、ノードＮ１に接続され、そのゲートには、制御回路１９からリセット信号ＲＳＴが入力される。リセット回路３８は、ノードＮ１の電圧Ｖｉｎｃを基準電圧Ｖｒｅｆにリセットする。
【００７９】
［１−３］  演算装置７の動作
次に、上記のように構成された演算装置７の動作について説明する。
【００８０】
［１−３−１］  積和演算の全体的な流れ
演算装置７は、１層のニューラルネットワークに対応する積和演算をｊ回（ｊは１以上の整数）の積和演算に分割して実行する。また、演算装置７は、演算部１２ごとに、ｊ回（ｊは１以上の整数）の積和演算を実行する。そして、ｊ回の積和演算の演算結果を順次積分し、ｊ回の積和演算が全て終了した時点で、積分結果に基づいて出力データを出力するようにしている。ｊ回の積和演算Ｐの各々は、以下の式（１）で表される。
【００８１】
Ｐ＝Σ（ｗｉ＊ｘｉ）      ・・・（１）
ｘが入力データ、ｗが重み係数、例えばｉ＝０〜６３である。Σは、ｉ＝０〜６３までの総和を意味する。なお、前述したように、切替回路２５−ｉに直接入力される入力データは、入力データｘｉが変換回路２０によって変換された入力データｘｉ´であるが、演算部１２は、式（１）に相当する演算を行うことが可能である。
【００８２】
図１０は、演算装置７の積和演算を説明するフローチャートである。図１１は、演算装置７の積和演算を説明する模式図である。例えば、演算装置７は、１６個の演算部１２−０〜１２−１５を備え、各演算部１２は、６４個の演算素子１３−０〜１３−６３を備えているものとする。
【００８３】
制御回路１９は、記憶回路１６に重み係数ｗを格納する（Ｓ１００）。また、制御回路１９は、記憶回路１５に入力データｘを格納する（Ｓ１０１）。図１１の例では、入力データｘ０〜ｘ５１１、重み係数ｗ０_０〜ｗ１５_１２７である。各演算部１２が６４個の演算素子１３−０〜１３−６３を備えている場合、入力データｘ０〜ｘ６３、ｘ６４〜ｘ１２７、・・・、ｘ４４８〜ｘ５１１に対応する８回の積和演算が実行される。また、演算装置７が１６個の演算部１２−０〜１２−１５を備えている場合、８回の積和演算にはそれぞれ、重み係数ｗ０_０-６３〜ｗ１５_０-６３、ｗ０_６４-１２７〜ｗ１５_６４-１２７、・・・、ｗ０_４４８-５１１〜ｗ１５_４４８-５１１が用いられる。
【００８４】
続いて、制御回路１９は、内部カウンタ（図示せず）に“ｊ＝１”を設定する（Ｓ１０２）。
【００８５】
続いて、制御回路１９は、１回目の積和演算に必要な入力データｘ及び重み係数ｗを演算素子アレイ１１に入力する（Ｓ１０３）。具体的には、制御回路１９は、記憶回路１５に格納された入力データｘ０〜ｘ５１１のうち入力データｘ０〜ｘ６３を読み出し、この入力データｘ０〜ｘ６３をレジスタ群１４に一時的に保持する。レジスタ群１４に保持された入力データｘ０〜ｘ６３は、演算素子アレイ１１に入力される。また、制御回路１９は、記憶回路１６に格納された重み係数ｗ０_０〜ｗ１５_１２７のうち重み係数ｗ０_０-６３〜ｗ１５_０-６３を読み出し、この重み係数ｗ０_０-６３〜ｗ１５_０-６３を演算素子アレイ１１に入力する。
【００８６】
続いて、演算部１２−０〜１２−１５は、１回目の積和演算を実行する（Ｓ１０４）。
【００８７】
続いて、演算部１２−０〜１２−１５に対応し機能回路１７に含まれる１６個の積分器２２はそれぞれ、演算部１２−０〜１２−１５の演算結果を積分する（Ｓ１０５）。
【００８８】
続いて、制御回路１９は、積和演算の回数が規定回数（本実施形態では８回）に達したか否か、すなわち“ｊ＜８”であるか否かを判定する（Ｓ１０６）。積和演算の回数が規定回数に達していない場合（Ｓ１０６＝Ｙｅｓ）、制御回路１９は、内部カウンタに“ｊ＝ｊ＋１”を設定する（Ｓ１０７）。続いて、制御回路１９は、Ｓ１０３以降の処理を繰り返す。
【００８９】
積和演算の回数が規定回数に達した場合（Ｓ１０６＝Ｎｏ）、演算部１２−０〜１２−１５に対応し機能回路１７に含まれる１６個の比較器２３はそれぞれ、積分器２２による積分結果と基準電圧Ｖｒｅｆとを比較する（Ｓ１０８）。そして、１６個の比較器２３はそれぞれ、比較結果Ｃｏｍｐ（Σ（ｗ０_ｉ＊ｘｉ））〜Ｃｏｍｐ（Σ（ｗ１５_ｉ＊ｘｉ））を、出力データＤｏｕｔとして出力する。
【００９０】
［１−３−２］  ＴＡＣ２１の動作
次に、ＴＡＣ２１の動作について説明する。図１２は、ＴＡＣ２１の動作を説明するタイミング図である。
【００９１】
ＴＡＣ２１は、これに対応する演算部１２から第１時間信号Ｖｐ、及び第２時間信号Ｖｎを受ける。図１２には、２つの例（ａ）、（ｂ）を示している。例（ａ）は、第１時間信号Ｖｐが第２時間信号Ｖｎより速いケースであり、例（ｂ）は、第１時間信号Ｖｐが第２時間信号Ｖｎより遅いケースである。
【００９２】
例（ａ）では、時刻ｔ０において、第１時間信号Ｖｐがローレベルからハイレベルに遷移する。すると、図９に示すように、フリップフロップ３０がハイレベルを出力し、ＰＭＯＳトランジスタ３５がオンする。これにより、電圧Ｖｉｎｃが上昇する。時刻ｔ２において、第２時間信号Ｖｎがハイレベルに遷移する。すると、フリップフロップ３１がハイレベルを出力し、ＮＡＮＤゲート３２がローレベルを出力する。これにより、フリップフロップ３０、３１がリセットされ、ＰＭＯＳトランジスタ３５がオフする。時刻ｔ２以降は、積分器２２により電圧Ｖｉｎｃのレベルが維持される。
【００９３】
例（ｂ）では、時刻ｔ０において、第２時間信号Ｖｎがハイレベルに遷移する。すると、図９に示すように、フリップフロップ３１がハイレベルを出力し、ＮＭＯＳトランジスタ３６がオンする。これにより、電圧Ｖｉｎｃが降下する。時刻ｔ１において、第１時間信号Ｖｐがハイレベルに遷移する。すると、フリップフロップ３０がハイレベルを出力し、ＮＡＮＤゲート３２がローレベルを出力する。これにより、フリップフロップ３０、３１がリセットされ、ＮＭＯＳトランジスタ３６がオフする。時刻ｔ１以降は、積分器２２により電圧Ｖｉｎｃのレベルが維持される。
【００９４】
このように、ＴＡＣ２１は、第１時間信号Ｖｐと第２時間信号Ｖｎとの差である遅延時間τを電圧信号の振幅に変換できる。
【００９５】
［１−３−３］  積和演算の詳細
次に、演算装置７の積和演算の詳細について説明する。図１３は、演算装置７の積和演算を説明するタイミング図である。なお、図１３は、１つの演算部１２に関する積和演算の動作について示している。
【００９６】
時刻ｔ０において、制御回路１９は、１回目の積和演算に必要な入力データｘ０〜ｘ６３、及び重み係数ｗ０〜ｗ６３を記憶回路１５、１６から読み出すために、信号Read_data及び読み出し対象のデータを指定するアドレスを記憶回路１５、１６に送る。重み係数ｗ０〜ｗ６３は、１つの演算部１２で使用される重み係数を表しており、行の情報を省略している。記憶回路１５は、信号Read_dataに応答して、入力データｘ０〜ｘ６３を読み出し、レジスタ群１４に送る。レジスタ群１４は、入力データｘ０〜ｘ６３を演算部１２に送る。また、記憶回路１６は、信号Read_dataに応答して、重み係数ｗ０〜ｗ６３を読み出し、演算部１２に送る。
【００９７】
演算部１２は、入力データｘ０〜ｘ６３及び重み係数ｗ０〜ｗ６３を用いて、積和演算を実行する。そして、演算部１２は、第１時間信号Ｖｐ及び第２時間信号Ｖｎとして、遅延信号τ０を出力する。図１３の例では、時刻ｔ１において、第１時間信号Ｖｐがハイレベルに遷移し、時刻ｔ２において、第２時間信号Ｖｎがハイレベルに遷移する。１回目の積和演算が終了し、１回目の積和演算の結果が電圧Ｖｉｎｃとして積分器２２により積分される。また、ＴＡＣ２１のフリップフロップ３０、３１がリセットされる。時刻ｔ３において、Ｖｐ及びＶｎがローレベルにリセットされる。
【００９８】
時刻ｔ４において、制御回路１９は、２回目の積和演算に必要な入力データｘ６４〜ｘ１２７及び重み係数ｗ６４〜ｗ１２７を記憶回路１５、１６から読み出すために、信号Read_data及びアドレスを記憶回路１５、１６に送る。記憶回路１５は、信号Read_dataに応答して、入力データｘ６４〜ｘ１２７を読み出す。また、記憶回路１６は、信号Read_dataに応答して、重み係数ｗ６４〜ｗ１２７を読み出す。なお、連続する２つの信号Read_dataの間隔Ｔｉｎは、演算部１２に含まれる演算素子１３の数に応じて、適宜設定される。
【００９９】
演算部１２は、入力データｘ６４〜ｘ１２７及び重み係数ｗ６４〜ｗ１２７を用いて、積和演算を実行し遅延信号τ１を出力する。図１３の例では、時刻ｔ５において、第２時間信号Ｖｎがハイレベルに遷移し、時刻ｔ６において、第１時間信号Ｖｐがハイレベルに遷移する。２回目の積和演算が終了し、２回目の積和演算の結果が電圧Ｖｉｎｃとして積分器２２により積分される。以後、３回目〜７回目の積和演算が繰り返される。
【０１００】
時刻ｔ８において、制御回路１９は、８回目の積和演算に必要な入力データｘ４４８〜ｘ５１１及び重み係数ｗ４４８〜ｗ５１１を記憶回路１５、１６から読み出すために、信号Read_data及びアドレスを記憶回路１５、１６に送る。記憶回路１５は、信号Read_dataに応答して、入力データｘ４４８〜ｘ５１１を読み出す。また、記憶回路１６は、信号Read_dataに応答して、重み係数ｗ４４８〜ｗ５１１を読み出す。
【０１０１】
演算部１２は、入力データｘ４４８〜ｘ５１１及び重み係数ｗ４４８〜ｗ５１１を用いて、積和演算を実行し遅延信号τ６３を出力する。図１３の例では、時刻ｔ９において、第１時間信号Ｖｐがハイレベルに遷移し、時刻ｔ１０において、第２時間信号Ｖｎがハイレベルに遷移する。８回目の積和演算が終了し、８回目の積和演算の結果が電圧Ｖｉｎｃとして積分器２２により積分される。
【０１０２】
時刻ｔ１１において、制御回路１９は、信号ＣＬＫ_compをハイレベルにする。信号ＣＬＫ_compに応答して、比較器２３は、電圧Ｖｉｎｃと基準電圧Ｖｒｅｆとを比較する。比較器２３は、比較結果を出力データＤｏｕｔとして出力する。図１３の例では、出力データＤｏｕｔとして、データ“１”が出力される。
【０１０３】
時刻ｔ１２において、制御回路１９は、リセット信号ＲＳＴをハイレベルにする。リセット信号ＲＳＴに応答して、リセット回路３８は、電圧Ｖｉｎｃをリセットする。
【０１０４】
［１−４］  第１実施形態の効果
以上詳述したように第１実施形態では、演算装置７は、演算部（演算回路）１２と、ＴＡＣ２１と、積分器２２と、比較器２３とを備える。演算部１２は、直列接続された複数の演算素子１３を含み、複数回の積和演算処理を順次実行する。複数の演算素子１３の各々は、第１及び第２時間信号Ｖｐｉ−１、Ｖｎｉ−１を受け、第１及び第２時間信号Ｖｐｉ−１、Ｖｎｉ−１を重み係数ｗと入力データｘとに応じた時間だけ遅延させた第１及び第２時間信号Ｖｐｉ、Ｖｎｉを生成して出力する。ＴＡＣ２１は、複数回の演算処理ごとに、演算部１２から出力される第１及び第２時間信号Ｖｐ、Ｖｎの差を電圧信号（アナログ信号）に変換する。積分器２２は、ＴＡＣ２１により変換された複数の電圧信号を積分する。比較器２３は、積分器２２による積分結果を基準電圧Ｖｒｅｆと比較し、比較結果を出力データＤｏｕｔとして出力する。
【０１０５】
従って第１実施形態によれば、１層のニューラルネットワークに必要な積和演算を、演算部１２により複数回に分けて積和演算することができる。すなわち、積和演算の総数（ＭＡＣ数）より少ない演算素子１３を用いて、１層分の積和演算を実行することができる。本実施形態の例では、入力データｘ０〜ｘ５１１に対応する５１２回の積和演算を、６４個の演算素子（ＰＥ）１３で行うことができる。これにより、積和演算の上限がＰＥ数に依存しなくなり、多層ニューラルネットワークのうち最大のＭＡＣ数にＰＥ数を合わせる必要がない。この結果、演算装置７の回路面積を縮小することが可能となる。
【０１０６】
また、多層ニューラルネットワークのうち、ＭＡＣ数が少ない層では、演算処理を高速化できる。
【０１０７】
［２］  第２実施形態
第２実施形態は、第１実施形態で示したＴＡＣに替えて、ＴＤＣ（time-to-digital converter）を用いて演算装置７を構成している。
【０１０８】
［２−１］  ＴＤＣ２１、積分器２２、及び比較器２３の構成
図１４は、第２実施形態に係るＴＤＣ２１、積分器２２、及び比較器２３の回路図である。
【０１０９】
ＴＤＣ２１は、複数のフリップフロップ（Ｄフリップフロップ）４０を備える。図１４では、３個のフリップフロップ４０−１〜４０−３を一例として示している。フリップフロップ４０の数は、任意に設計可能である。さらに、ＴＤＣ２１は、フリップフロップ４０−１〜４０−３に対応した数の遅延素子４１−１〜４１−３と、例えば２個の遅延素子４２−１、４２−２と、thermo／binary（thermometer-to-binary）変換回路４３とを備える。
【０１１０】
遅延素子４１−１〜４１−３、４２−１、４２−２はそれぞれ、入力信号を所定時間だけ遅延させる。遅延素子４１−１〜４１−３は、直列接続される。遅延素子４１−１の入力端子には、演算部１２の第１時間信号Ｖｐ（すなわち演算部１２に含まれる最終段の演算素子１３の第１時間信号Ｖｐ）が入力される。遅延素子４１−１〜４１−３は、第１時間信号Ｖｐを順に遅延させる。
【０１１１】
遅延素子４２−１、４２−２は、直列接続される。遅延素子４２−１の入力端子には、演算部１２の第２時間信号Ｖｎ（すなわち演算部１２に含まれる最終段の演算素子１３の第２時間信号Ｖｎ）が入力される。遅延素子４２−１、４２−２は、遅延素子４１−１〜４１−３の各々の遅延時間と同じ遅延時間だけ第２時間信号Ｖｎを遅延させる。
【０１１２】
フリップフロップ４０−１の入力端子Ｄは、遅延素子４１−１の出力端子に接続され、その出力端子は、thermo／binary変換回路４３に接続され、そのクロック端子は、遅延素子４２−２の出力端子に接続される。
【０１１３】
フリップフロップ４０−２の入力端子Ｄは、遅延素子４１−２の出力端子に接続され、その出力端子は、thermo／binary変換回路４３に接続され、そのクロック端子は、遅延素子４２−２の出力端子に接続される。
【０１１４】
フリップフロップ４０−３の入力端子Ｄは、遅延素子４１−３の出力端子に接続され、その出力端子は、thermo／binary変換回路４３に接続され、そのクロック端子は、遅延素子４２−２の出力端子に接続される。
【０１１５】
thermo／binary変換回路４３は、温度計コード（サーモメーターコード）をバイナリコードに変換する。thermo／binary変換回路４３は、Ａ／Ｄ（analog to digital）コンバータの一種である。温度計コードとは、“０・・・００１１・・・１”のように、下位ビットから順にデータ“１”が増えていくコードであり、データ“１”の数で数値の大きさが表される。
【０１１６】
このように構成されたＴＤＣ２１において、フリップフロップ４０−１〜４０−３はそれぞれ、第２時間信号Ｖｎが遅延素子４２−１、４２−２によって遅延された信号がハイレベルになるタイミングで、入力信号を出力する。すなわち、フリップフロップ４０−１〜４０−３は、第１時間信号Ｖｐと第２時間信号Ｖｎとの差である遅延時間τを温度計コードとして出力する。例えば、温度計コードが３ｂｉｔ値であり第１時間信号Ｖｐが第２時間信号Ｖｎより速い場合、温度計コードは、“０１１”及び“１１１”のいずれかになり、第２時間信号Ｖｎが第１時間信号Ｖｐより速い場合、温度計コードは、“０００”及び“００１”のいずれかになる。
【０１１７】
積分器２２は、加算器４４、及び遅延回路（ｚ-１）４５を備える。加算器４４は、thermo／binary変換回路４３から出力されたバイナリデータと、遅延回路４５から出力されたバイナリデータとを加算する。遅延回路４５は、加算器４４から出力されたバイナリデータを所定時間だけ遅延させて加算器４４に出力する。これにより、加算器４４は、前回の演算結果に今回の演算結果を加算したバイナリデータを出力することができる。
【０１１８】
また、積分器２２は、制御回路１９からリセット信号ＲＳＴを受ける。積分器２２は、リセット信号ＲＳＴがアサートされた場合に、積分値をリセットする。
【０１１９】
比較器２３は、積分器２２から出力されたデータと、基準データとを比較する。基準データは、温度計コード“００１”と温度計コード“０１１”との中間の値、例えば“１．５”とすると、“１．５＊Ｎ”に設定される。Ｎは、積分回数である。基準データ“１．５＊Ｎ”を用いることで、例えば８回の積和演算が行われた場合、８回の積分がされた第１時間信号Ｖｐと第２時間信号Ｖｎとのどちらが速いかを判定できる。比較器２３は、比較結果を出力データＤｏｕｔとして出力する。
【０１２０】
［２−２］  演算装置７の動作
図１５は、第２実施形態に係る演算装置７の積和演算を説明するタイミング図である。信号Read_data、入力データｘ、重み係数ｗ、第１時間信号Ｖｐ、及び第２時間信号Ｖｎの波形は、第１実施形態で説明した図１３と同じである。
【０１２１】
時刻ｔ０において、１回目の積和演算用の入力データｘ０〜ｘ６３、及び重み係数ｗ０〜ｘ６３が演算部１２に入力される。時刻ｔ３において、ＴＤＣ２１は、１回目の積和演算の結果として、温度計コードを生成する。その後、積分器２２は、温度計コードのバイナリデータを積分する。
【０１２２】
時刻ｔ８において、ＴＤＣ２１は、２回目の積和演算の結果として、温度計コードを生成する。積分器２２は、温度計コードのバイナリデータを積分する。
【０１２３】
時刻ｔ１３において、ＴＤＣ２１は、８回目の積和演算の結果として、温度計コードを生成する。積分器２２は、温度計コードのバイナリデータを積分する。
【０１２４】
時刻１４において、制御回路１９は、信号ＣＬＫ_compをハイレベルにする。信号ＣＬＫ_compに応答して、比較器２３は、積分器２２の出力と、基準データＶｃｏｍとを比較する。比較器２３は、比較結果を出力データＤｏｕｔとして出力する。
【０１２５】
時刻ｔ１５において、制御回路１９は、リセット信号ＲＳＴをハイレベルにする。リセット信号ＲＳＴに応答して、積分器２２は、積分値をリセットする。
【０１２６】
［２−３］  変形例
thermo／binary変換回路４３は、実質的に負のバイナリデータを出力するようにしてもよい。負の値は、２の補数を用いて表現できる。これにより、積分器２２は、第１時間信号Ｖｐが第２時間信号Ｖｎより速い場合に、バイナリデータの足し算を実行し、第１時間信号Ｖｐが第２時間信号Ｖｎより遅い場合に、バイナリデータの引き算を実行することができる。
【０１２７】
図１６は、変形例に係る演算装置７の積和演算を説明するタイミング図である。
【０１２８】
２回目の積和演算では、第１時間信号Ｖｐが第２時間信号Ｖｎより遅い。この場合、thermo／binary変換回路４３は、負の値を表すバイナリデータを出力する。これにより、積分器２２による積分結果は、前回の積分結果より小さくなる。
【０１２９】
［２−４］  第２実施形態の効果
以上詳述したように第２実施形態によれば、ＴＤＣ２１を用いて、演算装置７を構成することができる。すなわち、デジタル信号を用いて、複数回の積和演算の結果を積分することができる。その他の効果は、第１実施形態と同じである。
【０１３０】
［３］  第３実施形態
第３実施形態は、第１実施形態と異なる演算素子（ＰＥ）１３を用いて、演算装置７を構成するようにしている。
【０１３１】
［３−１］  演算部１２の構成
図１７は、第３実施形態に係る１つの演算部１２及び１つの機能回路１７を説明するブロック図である。なお、第３実施形態では、第１実施形態で説明した変換回路２０は不要であり、レジスタ群１４に保持された入力データｘは、演算素子アレイ１１に入力される。
【０１３２】
演算部１２は、例えば６４個の演算素子１３−０〜１３−６３を備える。演算素子１３−０〜１３−６３にはそれぞれ、重み係数ｗ０〜ｗ６３が設定される。演算素子１３−０〜１３−６３はそれぞれ、レジスタ群１４から入力データｘ０〜ｘ６３を受ける。初段の演算素子１３−０には、制御回路１９から基準時間信号Ｔｒｅｆが入力される。基準時間信号Ｔｒｅｆは、ある基準時刻で且つ予め決められた周期で電圧レベルが遷移する信号である。
【０１３３】
演算素子１３−０〜１３−６３は、積和演算を実行する。演算素子１３−０〜１３−６３はそれぞれ、時間信号Ｔ０〜Ｔ６３を出力する。演算素子１３−０〜１３−６３は、直列に接続されており、任意の第１演算素子１３から出力された時間信号が、この第１演算素子１３の後段の第２演算素子１３に入力される。
【０１３４】
図１８は、図１７に示した演算素子１３の回路図である。図１８には、任意のｉ番目の演算素子１３を示している。この演算素子１３は、入力データｘｉが１ビットである場合の回路例である。
【０１３５】
演算素子１３は、ＮＯＲゲート５０、遅延素子５１、及びＮＯＲゲート５２、５３を備える。
【０１３６】
ＮＯＲゲート５０は、入力データｘｉの反転と時間信号Ｔｉ−１とのＮＯＲ演算により、信号Ａを生成する。遅延素子５１は、重み係数ｗｉに応じた時間Ｄｉだけ信号Ａを遅延させて信号Ｂを生成する。ＮＯＲゲート５２は、一方の入力はデータ“０”に固定されているため、時間信号Ｔｉ−１を反転して信号Ｃを生成する。ＮＯＲゲート５３は、信号Ｂと信号ＣとのＮＯＲ演算により、時間信号Ｔｉを生成する。
【０１３７】
図１９は、第３実施形態に係る演算素子１３の動作を説明するタイミング図である。図１９（ａ）は、入力データｘｉが“１”の場合のタイミング図であり、図１９（ｂ）は、入力データｘｉが“０”の場合のタイミング図である。なお、以下の説明では、特に断らない限り、ＮＯＲゲート５０、５２、５３の遅延時間は、遅延素子５１の遅延時間に比べて十分に小さいため無視する。
【０１３８】
時刻ｔ１において、時間信号Ｔｉ−１がローレベルからハイレベルに遷移するものとする。図１９（ａ）に示すように、入力データｘｉが“１”の場合、時間信号Ｔｉは、時刻ｔ０から重み係数ｗｉに応じた時間Ｄｉだけ経過した時刻ｔ２で“０”から“１”に遷移する信号となる。すなわち、時間信号Ｔｉは、時間信号Ｔｉ−１時間をＤｉだけ遅延させた信号となる。
【０１３９】
一方、図１９（ｂ）に示すように、入力データｘｉが“０”の場合、時間信号Ｔｉは、時刻ｔ１で“０”から“１”に遷移する信号となる。すなわち、時間信号Ｔｉは、時間信号時間信号Ｔｉ−１そのものである。
【０１４０】
［３−２］  ＴＡＣ２１、積分器２２、及び比較器２３の構成
図２０は、第３実施形態に係るＴＡＣ２１、積分器２２、及び比較器２３の回路図である。図２０では、ＴＡＣ２１に入力される信号が、第１実施形態で説明した図９と異なる。
【０１４１】
フリップフロップ３０のクロック端子には、演算部１２に含まれる最終段の演算素子１３−６３から時間信号Ｔ６３が入力される。
【０１４２】
制御回路１９は、時間閾値信号Ｔｈ０を生成し、ＴＡＣ２１に供給する。時間閾値信号Ｔｈ０は、ハイレベル（電源電圧ＶＤＤ）とローレベル（接地電圧ＶＳＳ）との間を遷移する電圧信号である。また、時間閾値信号Ｔｈ０は、ある基準時刻で且つ予め決められた周期（タイミング）でハイレベルになる。フリップフロップ３１のクロック端子には、制御回路１９から時間閾値信号Ｔｈ０が入力される。その他の構成は、第１実施形態で説明した図９と同じである。
【０１４３】
ＴＡＣ２１は、時間信号Ｔ６３が時間閾値信号Ｔｈ０より速い場合に、電圧Ｖｉｎｃを上昇させ、時間信号Ｔ６３が時間閾値信号Ｔｈ０より遅い場合に、電圧Ｖｉｎｃを降下させる。
【０１４４】
［３−３］  演算装置７の動作
図２１は、第３実施形態に係る演算装置７の積和演算を説明するタイミング図である。信号Read_data、入力データｘ、及び重み係数ｗの波形は、第１実施形態で説明した図１３と同じである。
【０１４５】
時刻ｔ０において、１回目の積和演算用の入力データｘ０〜ｘ６３、及び重み係数ｗ０〜ｘ６３が演算部１２に入力される。時刻ｔ１において、制御回路１９は、基準時間信号Ｔｒｅｆをハイレベルにする。基準時間信号Ｔｒｅｆは、演算部１２に含まれる初段の演算素子１３−０に入力される。演算部１２は、基準時間信号Ｔｒｅｆを用いて、１回目の積和演算を実行する。
【０１４６】
時刻ｔ２において、制御回路１９は、時間閾値信号Ｔｈ０をハイレベルにする。時間閾値信号Ｔｈ０は、１回目の積和演算として、ＴＡＣ２１に入力される。時刻ｔ３において、演算部１２に含まれる最終段の演算素子１３−６３は、時間信号Ｔ６３をハイレベルにする。そして、１回目の積和演算の結果が電圧Ｖｉｎｃとして積分器２２に積分される。
【０１４７】
時刻ｔ４において、２回目の積和演算が開始される。時刻ｔ５において基準時間信号Ｔｒｅｆがハイレベルになり、時刻ｔ６において時間信号Ｔ６３がハイレベルになり、時刻ｔ７において、２回目の積和演算として時間閾値信号Ｔｈ０がハイレベルになる。そして、２回目の積和演算の結果が電圧Ｖｉｎｃとして積分器２２に積分される。
【０１４８】
時刻ｔ８において、８回目の積和演算が開始される。時刻ｔ９において基準時間信号Ｔｒｅｆがハイレベルになり、時刻ｔ１０において時間信号Ｔ６３がハイレベルになり、時刻ｔ１１において、８回目の積和演算として時間閾値信号Ｔｈ０がハイレベルになる。そして、８回目の積和演算の結果が電圧Ｖｉｎｃとして積分器２２に積分される。
【０１４９】
時刻１２において、制御回路１９は、信号ＣＬＫ_compをハイレベルにする。信号ＣＬＫ_compに応答して、比較器２３は、電圧Ｖｉｎｃと基準電圧Ｖｒｅｆとを比較する。比較器２３は、比較結果を出力データＤｏｕｔとして出力する。
【０１５０】
時刻ｔ１３において、制御回路１９は、リセット信号ＲＳＴをハイレベルにする。リセット信号ＲＳＴに応答して、リセット回路３８は、電圧Ｖｉｎｃをリセットする。
【０１５１】
［３−４］  第３実施形態の効果
以上詳述したように第３実施形態では、単相入力、単相出力の演算素子１３を用いて積和演算を実行することができる。その他の効果は、第１実施形態と同じである。
【０１５２】
なお、第３実施形態の演算装置７に、第２実施形態のＴＤＣを適用することも可能である。
【０１５３】
［４］  第４実施形態
第４実施形態は、複数回の積和演算を開始するために使用される信号Read_dataの間隔Ｔｉｎを可変にするようにしている。
【０１５４】
演算装置７は、信号Read_dataのタイミングを制御するための信号Ｒｅａｄｙを生成する信号生成回路６０を備える。図２２は、第４実施形態に係る信号生成回路６０の回路図である。信号生成回路６０は、複数行の演算部１２の各々に対して１個設けられる。
【０１５５】
信号生成回路６０は、フリップフロップ６１〜６３、ＡＮＤゲート６４、及びインバータ回路６５を備える。
【０１５６】
フリップフロップ６１の入力端子Ｄは、電源端子ＶＤＤに接続され、そのクロック端子には、演算部１２に含まれる最終段の演算素子１３−６３から時間信号Ｔ６３が入力される。
【０１５７】
フリップフロップ６２の入力端子Ｄは、電源端子ＶＤＤに接続され、そのクロック端子には、演算部１２に含まれる最終段の演算素子１３−６３から時間信号Ｔ６３が入力される。
【０１５８】
ＡＮＤゲート６４の第１入力端子は、フリップフロップ６１の出力端子Ｑに接続され、その第２入力端子は、フリップフロップ６２の出力端子Ｑに接続される。
【０１５９】
フリップフロップ６３の入力端子Ｄは、ＡＮＤゲート６４の出力端子に接続され、そのクロック端子には、制御回路１９からクロック信号ＳＹＳ_ＣＬＫが供給される。クロック信号ＳＹＳ_ＣＬＫは、一定の周期でハイレベルとローレベルとを繰り返すシステムクロックである。フリップフロップ６３は、その出力端子Ｑから信号Ｒｅａｄｙを出力する。信号Ｒｅａｄｙは、制御回路１９に送られる。
【０１６０】
フリップフロップ６３の出力端子Ｑは、インバータ回路６５を介して、フリップフロップ６１、６２のリセット端子に接続される。
【０１６１】
図２３は、第４実施形態に係る演算装置７の積和演算を説明するタイミング図である。
【０１６２】
時刻ｔ２において時間閾値信号Ｔｈ０がハイレベルになり、時刻ｔ３において時間信号Ｔ６３がハイレベルになる。すると、フリップフロップ６３は、クロック信号ＳＹＳ_ＣＬＫに同期して、信号Ｒｅａｄｙをハイレベルにする。
【０１６３】
制御回路１９は、アサートされた信号Ｒｅａｄｙに応答して、信号Read_dataをアサートする。これにより、演算部１２には、２回目の積和演算用の入力データｘ６４〜ｘ１２７を読及び重み係数ｗ６４〜ｗ１２７が入力される。ｘ、ｗのセットから信号Ｒｅａｄｙの入力までの時間に上限を定めてもよい、これにより、Ｔ６３を待たずに次のｘ、ｗをセットできる。
【０１６４】
第４実施形態によれば、信号Read_dataをアサートするタイミングを最適に設定でき、２つの信号Read_dataの間隔Ｔｉｎを可変にできる。これにより、複数回の積和演算にかかる時間を短縮できる。
【０１６５】
上述した各実施形態では、画像に描かれた数字を識別する例を示した。しかしながら、各実施形態の用途に限定はなく、数字以外の画像を識別してもよい。また、画像以外に音声の識別を行ってもよい。この場合、センサ２は音声を入力データに変換すればよい。あるいは、化合物の活性予測などに適用してもよい。また、以上説明した「識別」は、数字が何であるかといった「認識」のみならず、分類や予測をも含む概念である。
【０１６６】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１６７】
１…識別システム、２…センサ、３…学習装置、４…識別装置、５…アプリケーション部、６…入力層、７…演算装置、８…出力層、１１…演算素子アレイ、１２…演算部、１３…演算素子、１４…レジスタ群、１５…記憶回路、１６…記憶回路、１７…機能回路群、１８…レジスタ群、１９…制御回路、２２…積分器、２３…比較器、２４…遅延回路、２５…切替回路、３８…リセット回路、４３…thermo／binary変換回路、４４…加算器、４５…遅延回路、６０…信号生成回路
【図１】
2019168851.tif 000003
【図２】
2019168851.tif 000004
【図３】
2019168851.tif 000005
【図４】
2019168851.tif 000006
【図５】
2019168851.tif 000007
【図６】
2019168851.tif 000008
【図７】
2019168851.tif 000009
【図８】
2019168851.tif 000010
【図９】
2019168851.tif 000011
【図１０】
2019168851.tif 000012
【図１１】
2019168851.tif 000013
【図１２】
2019168851.tif 000014
【図１３】
2019168851.tif 000015
【図１４】
2019168851.tif 000016
【図１５】
2019168851.tif 000017
【図１６】
2019168851.tif 000018
【図１７】
2019168851.tif 000019
【図１８】
2019168851.tif 000020
【図１９】
2019168851.tif 000021
【図２０】
2019168851.tif 000022
【図２１】
2019168851.tif 000023
【図２２】
2019168851.tif 000024
【図２３】
2019168851.tif 000025