(57)【要約】新規な構成のニューラルネットワーク回路を提供すること。レジスタ、メモリ、乗算回路および加算回路を有する複数の演算回路を複数設ける。メモリは、コンテキスト信号の切り替えに応じて異なる重みデータを出力する。乗算回路は、重みデータと、レジスタに保持される入力データと、の乗算データとを出力する。加算回路は、別の演算回路における加算回路で得られた積和演算で得られるデータに、得られた乗算データを加算することで積和演算を行う。得られた積和演算のデータは、別の演算回路における加算回路に出力することで、異なる重みデータおよび入力データの積和演算を行う構成とする。
2018189620.tif 000002
【特許請求の範囲】
【請求項１】
第１乃至第３の演算回路を有し、
前記第１乃至第３の演算回路はそれぞれ、第１のレジスタ、メモリ、乗算回路、および加算回路を有し、
前記第１のレジスタは、入力データを保持する機能を有し、
前記メモリは、重みデータを記憶する機能を有し、
前記メモリは、入力されるコンテキスト信号の切り替えに応じて異なる重みデータを出力する機能を有し、
前記第１の演算回路が有する乗算回路は、前記重みデータと前記入力データとの積に応じた乗算データを出力する機能を有し、
前記第１の演算回路が有する加算回路は、第１の加算データを出力する機能を有し、
前記第１の加算データは、前記乗算データと、前記第２の演算回路が有する加算回路が出力する第２の加算データとの和に応じたデータであり、
前記第１の加算データは、前記第３の演算回路が有する加算回路に出力されるデータである、ことを特徴とするニューラルネットワーク回路。
【請求項２】
請求項１において、
前記第１の演算回路と前記第２の演算回路との間、および前記第２の演算回路と前記第３の演算回路との間にプログラマブルスイッチエレメントを有し、
前記プログラマブルスイッチエレメントは、前記コンテキスト信号の切り替えによって前記第１乃至第３の演算回路間の電気的な接続を切り替える機能を有することを特徴とするニューラルネットワーク回路。
【請求項３】
請求項１において、
前記メモリはトランジスタを有し、
前記トランジスタは、チャネル形成領域に酸化物半導体を有するトランジスタであることを特徴とするニューラルネットワーク回路。
【請求項４】
請求項１において、
前記第１乃至第３の加算データは、畳み込み演算処理または全結合演算処理に用いられるデータであることを特徴とするニューラルネットワーク回路。
【請求項５】
請求項１において、
前記第１の演算回路は、第２のレジスタを有し、
前記第２のレジスタは、前記第１の加算データまたは前記乗算データを保持する機能を有することを特徴とするニューラルネットワーク回路。
【請求項６】
請求項１に記載の前記ニューラルネットワーク回路は、
活性化関数処理を行う回路、およびプーリング演算処理を行う回路を有することを特徴とするニューラルネットワーク回路。
【請求項７】
第１乃至第３の演算回路を有し、
前記第１の演算回路は、第１のレジスタ、第１のメモリ、第１の乗算回路、および第１の加算回路を有し、
前記第２の演算回路は、第２のレジスタ、第２のメモリ、第２の乗算回路、および第２の加算回路を有し、
前記第３の演算回路は、第３のレジスタ、第３のメモリ、第３の乗算回路、および第３の加算回路を有し、
前記第１乃至第３のレジスタは、それぞれに第１乃至第３の入力データを保持する機能を有し、
前記第１乃至第３のメモリは、それぞれ重みデータを記憶する機能を有し、
前記第１乃至第３のメモリは、それぞれに入力されるコンテキスト信号の切り替えに応じて異なる第１乃至第３の重みデータを出力する機能を有し、
前記第１の乗算回路は、前記第１の重みデータと前記第１の入力データとの積に応じた第１の乗算データを出力する機能を有し、
前記第２の乗算回路は、前記第２の重みデータと前記第２の入力データとの積に応じた第２の乗算データを出力する機能を有し、
前記第３の乗算回路は、前記第３の重みデータと前記第３の入力データとの積に応じた第３の乗算データを出力する機能を有し、
前記第１の加算回路は、第１の加算データを出力する機能を有し、
前記第２の加算回路は、第２の加算データを出力する機能を有し、
前記第３の加算回路は、第３の加算データを出力する機能を有し、
前記第２の加算データは、前記第２の乗算データと、前記第１の加算データとの和に応じたデータであり、
前記第１の加算データは、前記第１の乗算データと、前記第３の加算データを含むデータであることを特徴とするニューラルネットワーク回路。
【請求項８】
請求項７において、
前記第１乃至第３の演算回路間にプログラマブルスイッチエレメントを有し、
前記プログラマブルスイッチエレメントは、前記コンテキスト信号の切り替えによって前記第１乃至第３の演算回路間の電気的な接続を切り替える機能を有することを特徴とするニューラルネットワーク回路。
【請求項９】
請求項７において、
前記第１乃至第３のメモリはそれぞれトランジスタを有し、
前記トランジスタは、チャネル形成領域に酸化物半導体を有するトランジスタであることを特徴とするニューラルネットワーク回路。
【請求項１０】
請求項７において、
前記第１乃至第３の加算データは、畳み込み演算処理または全結合演算処理に用いられるデータであることを特徴とするニューラルネットワーク回路。
【請求項１１】
請求項７において、
前記第１の演算回路は、第４のレジスタを有し、
前記第２の演算回路は、第５のレジスタを有し、
前記第３の演算回路は、第６のレジスタを有し、
前記第４のレジスタは、前記第１の加算データまたは前記第１の乗算データを保持する機能を有し、
前記第５のレジスタは、前記第２の加算データまたは前記第２の乗算データを保持する機能を有し、
前記第６のレジスタは、前記第３の加算データまたは前記第３の乗算データを保持する機能を有することを特徴とするニューラルネットワーク回路。
【請求項１２】
請求項７に記載の前記ニューラルネットワーク回路は、
活性化関数処理を行う回路、およびプーリング演算処理を行う回路を有することを特徴とするニューラルネットワーク回路。
【発明の詳細な説明】
【技術分野】
【０００１】  本発明の一態様は、ニューラルネットワーク回路に関する。
【背景技術】
【０００２】  コンピュータの処理能力は、素子の微細化の進化に伴い、近年目覚ましく向上している。コンピュータの基本構成としてノイマン型コンピュータが知られている。ノイマン型コンピュータではストアドプログラム方式、つまりメモリに記憶した命令（プログラム）およびデータを順に実行すること、で情報処理（逐次処理方式）を行う。しかしながら命令の実行による情報処理では、人間精神と同じレベルで学習や推論をすることが難しい。そのため、生体の神経回路網の情報処理方式を見倣ったアプローチである人工ニューラルネットワーク（以下ニューラルネットワークという）が注目されている。【０００３】  ニューラルネットワークは入力層、中間層、出力層といった複数の層によって構成される。入力層、中間層、出力層は、それぞれの層で複数のニューロンをもつ。入力層から中間層、および中間層から出力層へは、処理によって得られるデータが出力される。ニューラルネットワークでは、入力層にある複数のニューロンに対してデータを並列で入力し、中間層、出力層の順にデータを処理することで情報処理（並列処理方式）を行う。ニューラルネットワークの情報処理はノイマン型コンピュータを用いるソフトウェア処理にてニューロンの機能を実現できる。しかし入力されるデータ数が増加するにしたがって、複数のニューロンにおける処理をプロセッサが時分割で実行することになり、並列処理方式が難しくなる。そのため、ハードウェアを用いてニューロンを構成し集積回路（ニューラルネットワーク回路）化する構成が提案されている（例えば特許文献１を参照）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１６−２１９０１１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】  ニューラルネットワーク回路を用いて畳み込みニューラルネットワークのようなデータ処理を行う場合、認識精度を高めるために中間層の層数を増やす、所謂ディープラーニングが有効である。しかしながら深い中間層をハードウェアで構成する場合、回路規模が大きくなるといった虞がある。また回路規模が大きくなると、消費電力が増大する虞がある。【０００６】  ニューラルネットワークでは、積和演算が演算の大部分を占める。従ってニューラルネットワーク回路において回路規模の大型化を解消するためには、積和演算を如何に効率よく行うかが重要となる。また同じ回路を用いて異なる処理の積和演算を行う構成とすることで、回路リソースの有効活用を行うかが重要となる。【０００７】  本発明の一態様は、新規な構成のニューラルネットワーク回路を提供することを課題の一とする。または本発明の一態様は、回路規模の増大を抑制できる、新規なニューラルネットワーク回路を提供することを課題の一とする。または本発明の一態様は、同じ回路を用いて異なる処理の積和演算を行うことができる、新規なニューラルネットワーク回路を提供することを課題の一とする。【０００８】  なお、これらの課題の記載は、他の課題の存在を妨げるものではない。なお、本発明の一態様は、これらの課題の全てを解決する必要はないものとする。なお、これら以外の課題は、明細書、図面、請求項などの記載から、自ずと明らかとなるものであり、明細書、図面、請求項などの記載から、これら以外の課題を抽出することが可能である。
【課題を解決するための手段】
【０００９】  本発明の一態様は、第１乃至第３の演算回路を有し、第１乃至第３の演算回路はそれぞれ、第１のレジスタ、メモリ、乗算回路、および加算回路を有し、第１のレジスタは、入力データを保持する機能を有し、メモリは、重みデータを記憶する機能を有し、メモリは、入力されるコンテキスト信号の切り替えに応じて異なる重みデータを出力する機能を有し、第１の演算回路が有する乗算回路は、重みデータと入力データとの積に応じた乗算データを出力する機能を有し、第１の演算回路が有する加算回路は、第１の加算データを出力する機能を有し、第１の加算データは、乗算データと、第２の演算回路が有する加算回路が出力する第２の加算データとの和に応じたデータであり、第１の加算データは、第３の演算回路が有する加算回路に出力されるデータであるニューラルネットワーク回路である。【００１０】  本発明の一態様において、第１乃至第３の演算回路間にプログラマブルスイッチエレメントを有し、プログラマブルスイッチエレメントは、コンテキスト信号の切り替えによって第１乃至第３の演算回路間の電気的な接続を切り替える機能を有するニューラルネットワーク回路が好ましい。【００１１】  本発明の一態様において、メモリはトランジスタを有し、トランジスタは、チャネル形成領域に酸化物半導体を有するトランジスタであるニューラルネットワーク回路が好ましい。【００１２】  本発明の一態様において、第１乃至第３の加算データは、畳み込み演算処理または全結合演算処理に用いられるデータであるニューラルネットワーク回路が好ましい。【００１３】  本発明の一態様において、第１の演算回路は、第２のレジスタを有し、第２のレジスタは、第１の加算データまたは乗算データを保持する機能を有するニューラルネットワーク回路が好ましい。【００１４】  本発明の一態様のニューラルネットワーク回路は、活性化関数処理を行う回路、およびプーリング演算処理を行う回路を有するニューラルネットワーク回路が好ましい。【００１５】  本発明の一態様は、第１乃至第３の演算回路を有し、第１の演算回路は、第１のレジスタ、第１のメモリ、第１の乗算回路、および第１の加算回路を有し、第２の演算回路は、第２のレジスタ、第２のメモリ、第２の乗算回路、および第２の加算回路を有し、第３の演算回路は、第３のレジスタ、第３のメモリ、第３の乗算回路、および第３の加算回路を有し、第１乃至第３のレジスタは、それぞれに第１乃至第３の入力データを保持する機能を有し、第１乃至第３のメモリは、それぞれ重みデータを記憶する機能を有し、第１乃至第３のメモリは、それぞれに入力されるコンテキスト信号の切り替えに応じて異なる第１乃至第３の重みデータを出力する機能を有し、第１の乗算回路は、第１の重みデータと第１の入力データとの積に応じた第１の乗算データを出力する機能を有し、第２の乗算回路は、第２の重みデータと第２の入力データとの積に応じた第２の乗算データを出力する機能を有し、第３の乗算回路は、第３の重みデータと第３の入力データとの積に応じた第３の乗算データを出力する機能を有し、第１の加算回路は、第１の加算データを出力する機能を有し、第２の加算回路は、第２の加算データを出力する機能���有し、第３の加算回路は、第３の加算データを出力する機能を有し、第２の加算データは、第２の乗算データと、第１の加算データとの和に応じたデータであり、第１の加算データは、第１の乗算データと、第３の加算データを含むデータであるニューラルネットワーク回路である。【００１６】  本発明の一態様において、第１乃至第３の演算回路間にプログラマブルスイッチエレメントを有し、プログラマブルスイッチエレメントは、コンテキスト信号の切り替えによって第１乃至第３の演算回路間の電気的な接続を切り替える機能を有するニューラルネットワーク回路が好ましい。【００１７】  本発明の一態様において、第１乃至第３のメモリはそれぞれトランジスタを有し、トランジスタは、チャネル形成領域に酸化物半導体を有するトランジスタであるニューラルネットワーク回路が好ましい。【００１８】  本発明の一態様において、第１乃至第３の加算データは、畳み込み演算処理または全結合演算処理に用いられるデータであるニューラルネットワーク回路が好ましい。【００１９】  本発明の一態様において、第１の演算回路は、第４のレジスタを有し、第２の演算回路は、第５のレジスタを有し、第３の演算回路は、第６のレジスタを有し、第４のレジスタは、第１の加算データまたは第１の乗算データを保持する機能を有し、第５のレジスタは、第２の加算データまたは第２の乗算データを保持する機能を有し、第６のレジスタは、第３の加算データまたは第３の乗算データを保持する機能を有するニューラルネットワーク回路が好ましい。【００２０】  本発明の一態様のニューラルネットワーク回路は、活性化関数処理を行う回路、およびプーリング演算処理を行う回路を有するニューラルネットワーク回路が好ましい。【００２１】  なおその他の本発明の一態様については、以下で述べる実施の形態における説明、および図面に記載されている。
【発明の効果】
【００２２】  本発明の一態様は、新規な構成のニューラルネットワーク回路を提供することができる。または本発明の一態様は、回路規模の増大を抑制できる、新規なニューラルネットワーク回路を提供することができる。または本発明の一態様は、同じ回路を用いて異なる処理の積和演算を行うことができる、新規なニューラルネットワーク回路を提供することができる。【００２３】  なお、これらの効果の記載は、他の効果の存在を妨げるものではない。なお、本発明の一態様は、これらの効果の全てを有する必要はない。なお、これら以外の効果は、明細書、図面、請求項などの記載から、自ずと明らかとなるものであり、明細書、図面、請求項などの記載から、これら以外の効果を抽出することが可能である。
【図面の簡単な説明】
【００２４】
【図１】ニューラルネットワーク回路を説明するためのブロック図。
【図２】ニューラルネットワーク回路を説明するためのブロック図。
【図３】ニューラルネットワーク回路を説明するためのブロック図。
【図４】ニューラルネットワーク回路を説明するためのブロック図。
【図５】ニューラルネットワーク回路を説明するためのブロック図。
【図６】ニューラルネットワーク回路を説明するためのブロック図。
【図７】ニューラルネットワーク回路を説明するためのブロック図。
【図８】ニューラルネットワーク回路を説明するためのブロック図。
【図９】ニューラルネットワーク回路を説明するためのブロック図。
【図１０】ニューラルネットワーク回路を説明するためのブロック図。
【図１１】ニューラルネットワーク回路を説明するためのブロック図。
【図１２】ニューラルネットワーク回路を説明するためのブロック図。
【図１３】ニューラルネットワーク回路を説明するためのブロック図。
【図１４】ニューラルネットワーク回路を説明するためのブロック図。
【図１５】ニューラルネットワーク回路を説明するためのブロック図。
【図１６】ニューラルネットワーク回路を説明するためのブロック図。
【図１７】ニューラルネットワーク回路を説明するためのブロック図。
【図１８】ニューラルネットワーク回路を説明するためのブロック図。
【図１９】ニューラルネットワーク回路を説明するためのブロック図。
【図２０】ニューラルネットワーク回路を説明するためのブロック図。
【図２１】ニューラルネットワーク回路を説明するためのブロック図。
【図２２】ニューラルネットワーク回路を説明するためのブロック図。
【図２３】ニューラルネットワーク回路を説明するためのブロック図。
【図２４】ニューラルネットワーク回路を説明するためのブロック図。
【図２５】ニューラルネットワーク回路を説明するためのブロック図。
【図２６】ニューラルネットワーク回路を説明するためのブロック図。
【図２７】ニューラルネットワークシステムを組み込んだＩＣの構成例を示す斜視模式図。
【図２８】Ａ：ＤＯＳＲＡＭの構成例を示す機能ブロック図。Ｂ：メモリセルアレイの構成例を示す図。Ｃ：メモリセルの構成例を示す回路図。
【図２９】ＮＯＳＲＡＭの構成例を示す機能ブロック図。
【図３０】Ａ−Ｅ：メモリセルの構成例を示す回路図。
【発明を実施するための形態】
【００２５】  以下、実施の形態について図面を参照しながら説明する。但し、実施の形態は多くの異なる態様で実施することが可能であり、趣旨およびその範囲から逸脱することなくその形態および詳細を様々に変更し得ることは当業者であれば容易に理解される。従って、本発明は、以下の実施の形態の記載内容に限定して解釈されるものではない。
【００２６】  なお本明細書等において、「第１」、「第２」、「第３」という序数詞は、構成要素の混同を避けるために付したものである。従って、構成要素の数を限定するものではない。また、構成要素の順序を限定するものではない。また例えば、本明細書等の実施の形態の一において「第１」に言及された構成要素が、他の実施の形態、あるいは特許請求の範囲において「第２」に言及された構成要素とすることもありうる。また例えば、本明細書等の実施の形態の一において「第１」に言及された構成要素を、他の実施の形態、あるいは特許請求の範囲において省略することもありうる。
【００２７】  なお図面において、同一の要素または同様な機能を有する要素、同一の材質の要素、あるいは同時に形成される要素等には同一の符号を付す場合があり、その繰り返しの説明は省略する場合がある。
【００２８】  なお、本明細書においてニューラルネットワークとは、生物の神経回路網を模し、学習によってニューロンどうしの結合強度を決定し、問題解決能力を持たせるモデル全般を指す。ニューラルネットワークは入力層、中間層（隠れ層ともいう）、出力層を有する。ニューラルネットワークのうち、２層以上の中間層を有するものをディープニューラルネットワークと呼称する。ディープニューラルネットワークによる学習を「ディープラーニング」と呼称する。またニューラルネットワークをハードウェアで実行可能な回路をニューラルネットワーク回路という。
【００２９】  また、本明細書において、ニューラルネットワークについて述べる際に、既にある情報からニューロンとニューロンの結合強度（重み係数とも言う）を決定することを「学習」と呼ぶ場合がある。
【００３０】  また、本明細書において、学習によって得られた結合強度を用いてニューラルネットワークを構成し、そこから新たな結論を導くことを「推論」と呼ぶ場合がある。
【００３１】（実施の形態１）
本実施の形態では、ニューラルネットワークの機能をハードウェアで実現可能なニューラルネットワーク回路の構成について説明する。本発明の一態様であるニューラルネットワーク回路は、積和演算を効率よく行うことができる。そのため、積和演算の頻度が高い畳み込みニューラルネットワークへの応用が非常に有効である。以下、具体的な構成例を示して説明する。なお積和演算は、乗算によって得られたデータ同士を加算して足し合わせる演算である。
【００３２】  図１は、ニューラルネットワーク回路を備えたデータ処理回路１０のブロック図である。データ処理回路１０は、インターフェース１１、クロック生成回路１２、マスターコントローラ１３、データドライバ１４、ワードドライバ１５およびニューラルネットワーク回路２０を有する。
【００３３】  ニューラルネットワーク回路２０は、メモリコントローラ２１、メモリ２２、演算ユニット２３、データ入出力回路２４、および演算部３０を有する。
【００３４】  演算部３０は、レジスタ回路３１および積和演算回路４０を有する。積和演算回路４０は、複数の演算回路５０、および加算回路４１を有する。なお図１では図示しないが、複数の演算回路間には、当該演算回路間の電気的な接続を切り替えるためのプログラマブルスイッチエレメント（ＰＳＥ）が設けられる。
【００３５】  マスターコントローラ１３は、データ処理回路１０の外部より制御信号ｃｏｎｔｒｏｌ  ｓｉｇｎａｌを受信し、データ処理回路１０の全体を制御する機能を有する。具体的には、データドライバ１４およびワードドライバ１５の動作制御、メモリコントローラ２１の制御、ニューラルネットワーク回路２０におけるコンテキスト切り替え等の制御を行う。
【００３６】  クロック生成回路１２は、インターフェース１１で受信した基準クロック信号ｃｌｋをもとに、マスターコントローラ１３等の回路動作に用いるクロック信号を生成する。
【００３７】  インターフェース１１は、データ処理回路１０の外部から、基準クロック信号ｃｌｋ、データ信号ｄａｔａを受信する機能を有する。インターフェース１１は、送受信に即した信号を変換する機能を有する。インターフェース１１としては、ＬＶＤＳ（Ｌｏｗ  Ｖｏｌｔａｇｅ  Ｄｉｆｆｅｒｅｎｔｉａｌ  Ｓｉｇｎａｌｉｎｇ）、ＭＩＰＩ（Ｍｏｂｉｌｅ  Ｉｎｄｕｓｔｒｙ  Ｐｒｏｃｅｓｓｏｒ  Ｉｎｔｅｒｆａｃｅ）などのインターフェースを用いることができる。
【００３８】  データドライバ１４は、演算回路５０のメモリに書き込むためのデータ信号を生成する機能を有する。ワードドライバ１５は、演算回路５０のメモリにデータを書き込むための制御信号（例えばワード信号）を生成する機能を有する。
【００３９】  積和演算回路４０は、積和演算を行う回路である。また、積和演算回路４０はマスターコントローラ１３の制御により複数種類の演算処理を切り替えることができる。そのため同じ回路リソースを用いながらも、入力データに応じた最適な演算処理を選択して演算することができる。積和演算回路４０における演算処理の切り替えについては、図９乃至図２６で詳細に説明する。
【００４０】  インターフェース１１を介して入力されたデータ信号ｄａｔａは、レジスタ回路３１で保持される。レジスタ回路３１に格納されたデータは、所望のタイミングにて、メモリ２２に保存することができる。ニューラルネットワーク回路２０における演算途中で得られたデータは、メモリ２２に保存することができる。メモリ２２は、一例として、ＳＲＡＭ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）を用いることができる。
【００４１】  レジスタ回路３１に格納されたデータは、所望のタイミングにて、ニューラルネットワーク回路２０で演算に用いることができる。またレジスタ回路３１に格納されたデータは、所望のタイミングにて、演算ユニット２３にて、所望の処理を行うことができる。演算ユニット２３は、畳み込みニューラルネットワークによる演算処理を行う場合、プーリング演算処理および活性化関数による演算を行う回路である。活性化関数には、例えばシグモイド（ｓｉｇｍｏｉｄ）関数や、正規化線形関数（Ｒｅｃｔｉｆｉｅｄ  Ｌｉｎｅａｒ  Ｕｎｉｔ、以下、ＲｅＬＵ）、ハイパボリックタンジェント（ｔａｎｈ）関数、ステップ関数を適用することができる。
【００４２】  データ入出力回路２４は、データ処理回路１０での演算によって得られた演算結果をデータ処理回路１０の外部にデータｏｕｔとして出力する回路である。
【００４３】  ニューラルネットワーク回路２０が有する積和演算回路４０の機能について説明する。
【００４４】  積和演算回路４０が有する複数の演算回路５０はそれぞれ、入力されるデータを保持するレジスタ回路を有する。また複数の演算回路はそれぞれ、結合強度（重み係数とも言う）に相当する重みデータを記憶するメモリを有する。重みデータは、コンテキストを切り替えるためのコンテキスト信号に応じて切り替えることができる。重みデータを記憶するメモリは、コンテキスト信号をデコードすることで対応する重みデータを出力することができる。積和演算回路４０が有する複数の演算回路５０はそれぞれ、重みデータと、入力データの積に応じた乗算データを生成する乗算回路を有する。乗算回路では乗算データが得られる。積和演算回路４０が有する複数の演算回路５０はそれぞれ、加算回路を有する。加算回路は、別の演算回路５０で得られたデータに乗算回路で得られた乗算データを加算することで加算データを得ることができる。積和演算回路４０が有する複数の演算回路５０はそれぞれ、乗算データ、加算データを保持するためのレジスタを有する。当該レジスタに保持されたデータは、所定のタイミングで別の演算回路５０に出力される。
【００４５】  積和演算回路４０は、上述した演算回路間でのデータの入出力を切り替えることで、演算回路５０毎に異なる重み係数と入力データの積を実行させるとともに、別の演算回路５０で得られた加算データと、先に得られた乗算データとを足し合わせることで、積和演算を実行させることができる。そして演算回路５０を複数直列に配置し、得られるデータを次々にシフトさせることで膨大な数の積和演算を効率よく行うことができる。演算回路５０を有する積和演算回路４０では、複数の演算回路５０に保持された入力データにおいて、乗算データと加算データを、プロセッサのパイプライン処理のように演算回路５０間で同時に処理するとともに、複数の演算回路５０間で乗算データおよび加算データをシフトさせることで積和演算を実行することができる。そのため、限られたハードウェアで積和演算による演算処理を行う際、少ない回路リソースで超並列のデータ処理を効率よく実行することができる。
【００４６】  図２（Ａ）は、積和演算回路４０が有する演算回路５０の一例を示すためのブロック図である。演算回路は、一例として、入力レジスタ５１、メモリ５２、乗算回路５３、加算回路５４、出力レジスタ５５Ａおよび出力レジスタ５５Ｂを有する。
【００４７】  入力レジスタ５１には、入力信号ｓｉｎが入力される。入力レジスタ５１は、出力信号ｓｏｕｔを出力する。入力レジスタ５１は、乗算回路５３に入力データｓｄａｔａを出力する。
【００４８】  メモリ５２は、コンテキスト信号ｃｏｎｔｅｘｔが入力される。メモリ５２は、コンテキストに応じたデータセットを有する。データセットは、積和演算処理に用いる複数の重みデータに相当するデータである。メモリは、コンテキスト信号に応じてコンテキストに応じた複数の重みデータの中から一つの重みデータを重みデータｃｍｏｕｔとして出力する。メモリ５２に格納した複数の重みデータは、例えば、畳み込み演算処理で用いるフィルタ数が多い場合などコンテキストを変更しながら演算する際に有効である。コンテキストを変更しながら演算することで、１つの乗算回路を使って様々な条件での乗算を行うことができる。
【００４９】  乗算回路５３は、入力データｓｄａｔａと重みデータｃｍｏｕｔとの乗算によって乗算データｍｏｕｔを生成する。乗算データｍｏｕｔは、加算回路５４に出力される。出力レジスタ５５Ａに保持された乗算データｍｏｕｔは、別の演算回路５０に出力信号ｏｕｔ１として出力される。出力レジスタ５５Ａを介して乗算データｍｏｕｔを出力する構成とし、乗算を行った次のタイミングで、別の演算回路５０に乗算データｍｏｕｔを送信できる。また、信号の遅延によって演算結果に誤りがあることを防ぐことができる。
【００５０】  出力信号ｏｕｔ１は、別の演算回路５０で入力加算データａｉｎとして入力される。信号の入出力の切り替えは、演算回路５０間にプログラマブルスイッチエレメントを配置することによって実現可能である。当該プログラマブルスイッチエレメントを制御することにより、所望のタイミングにて、所望の配線を接続し、演算回路間の信号の入出力を行うことができる。
【００５１】  加算回路５４は、入力加算データａｉｎに乗算データｍｏｕｔを加算することによって加算データａｏｕｔを生成する。加算データａｏｕｔは、出力レジスタ５５Ｂに出力される。出力レジスタ５５Ｂに保持された加算データａｏｕｔは、別の演算回路５０に出力信号ｏｕｔ２として出力される。出力レジスタ５５Ｂを介して加算データａｏｕｔを出力する構成とすることで、信号の遅延によって演算結果に誤りがあることを防ぐことができる。
【００５２】  出力信号ｏｕｔ２は、別の演算回路５０で入力加算データａｉｎとして入力される。信号の入出力の切り替えは、演算回路５０間にプログラマブルスイッチエレメントを配置することによって実現可能である。当該プログラマブルスイッチエレメントを制御することにより、所望のタイミングにて、所望の配線を接続し、演算回路間の信号の入出力を行うことができる。
【００５３】  メモリ５２は不揮発性メモリを用いる。メモリ５２としては、酸化物半導体（Ｏｘｉｄｅ  Ｓｅｍｉｃｏｎｄｕｃｔｏｒ：ＯＳ）をチャネル形成領域に有するトランジスタ（ＯＳトランジスタ）を用いたＯＳメモリが有効である。ＯＳメモリの一例としては、ＤＯＳＲＡＭおよびＮＯＳＲＡＭがある。メモリ５２を演算回路５０毎に設けることで、積和演算回路４０外部に設ける場合と比べて、より高速且つ低消費電力に上記重みデータへのアクセス（読み出しおよび書き込み）をすることができる。
【００５４】  なお、ＤＯＳＲＡＭ（登録商標）とは、「Ｄｙｎａｍｉｃ  Ｏｘｉｄｅ  Ｓｅｍｉｃｏｎｄｕｃｔｏｒ  ＲＡＭ」の略称であり、１Ｔ（トランジスタ）１Ｃ（容量）型のメモリセルを有するＲＡＭを指す。ＤＯＳＲＡＭは、ＯＳトランジスタのオフ電流が低いことを利用したメモリである。ＤＯＳＲＡＭは、ＯＳトランジスタを用いて形成されたＤＲＡＭである。ＤＯＳＲＡＭは、ＯＳトランジスタを含むメモリセルと、Ｓｉトランジスタを含む読み出し回路部を有する。上記メモリセルと読み出し回路部は、積層された異なる層に設けることができるため、ＤＯＳＲＡＭは、全体の回路面積を小さくすることができる。なお、ＤＯＳＲＡＭの詳細は後述する実施の形態３で説明を行う。
【００５５】  ニューラルネットワークを用いた大規模並列計算は、入力データ数およびフィルタ数が１０００を超えることがある。上記入力データをＳＲＡＭに格納する場合、ＳＲＡＭはバス幅や回路面積に制限があり、記憶容量が小さいため、上記入力データを小分けにして格納せざるを得ない。ＤＯＳＲＡＭは、限られた回路面積でも積層することが可能であるため、メモリセルを高集積に配置することが可能である。
【００５６】  また、ＮＯＳＲＡＭ（登録商標）とは「Ｎｏｎｖｏｌａｔｉｌｅ  Ｏｘｉｄｅ  Ｓｅｍｉｃｏｎｄｕｃｔｏｒ  ＲＡＭ」の略称であり、ゲインセル型（２Ｔ型、３Ｔ型）のメモリセルを有するＲＡＭを指す。ＮＯＳＲＡＭは、ＯＳトランジスタのオフ電流が低いことを利用したメモリである。
【００５７】  ＮＯＳＲＡＭはＯＳトランジスタを用いたメモリである。ＮＯＳＲＡＭは、フラッシュメモリや、ＲｅＲＡＭ（Ｒｅｓｉｓｔｉｖｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＭＲＡＭ（Ｍａｇｎｅｔｏｒｅｓｉｓｔｉｖｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）などの他の不揮発性メモリと比べて、データを書き込む際の消費電力が小さい。また、フラッシュメモリやＲｅＲＡＭのように、データを書き込む際に素子が劣化することもなく、データの書き込み可能回数に制限が無い。また、フラッシュメモリやＲｅＲＡＭのように、素子が劣化することに伴うセル間のばらつきの問題もない。また、フラッシュメモリやＲｅＲＡＭのような２端子のメモリとは異なり、書き込みおよび読み出しのための回路が複雑にならない。なお、ＮＯＳＲＡＭの詳細は後述する実施の形態３で説明を行う。
【００５８】  また、ＮＯＳＲＡＭは、１ビットの２値データの他に、２ビット以上の多値データを保持することができる。ＮＯＳＲＡＭは多値データを保持することで、１ビット当たりのメモリセル面積を小さくすることができる。また、ＮＯＳＲＡＭは、デジタルデータの他にアナログデータを保持することができる。ＮＯＳＲＡＭは、アナログデータのまま保持することができるため、Ｄ／Ａ変換回路やＡ／Ｄ変換回路が不要である。そのため、ＮＯＳＲＡＭは周辺回路の面積を小さくすることができる。
【００５９】  なお演算回路５０は、図２（Ａ）の構成に限らない。図２（Ｂ）の構成とすることもできる。図２（Ｂ）に図示する演算回路５０は、図２（Ａ）の構成において出力レジスタ５５Ａ、５５Ｂを統合して出力レジスタ５５としている。また、出力レジスタ５５と、乗算回路５３および加算回路５４との間に、切り替え回路５６（マルチプレクサともいう）を有する。図２（Ｂ）の構成とすることで、加算データａｏｕｔまたは乗算データｍｏｕｔを切り替えて、出力信号ｏｕｔとして出力することができる。
【００６０】  図３（Ａ）では、図２（Ａ）、（Ｂ）で説明した演算回路５０のブロック図についてさらに詳細に図示する。図３（Ａ）に示す演算回路５０では、図２（Ａ）、（Ｂ）で説明した構成に加えて、切り替え回路５６Ａ、メモリ回路５７Ａ、切り替え回路５６Ｂおよびメモリ回路５７Ｂを図示している。
【００６１】  切り替え回路５６Ａは、入力データｓｄａｔａとして、入力信号ｓｉｎをそのまま乗算回路５３として出力するか、入力レジスタ５１に保持されたデータを出力するかを制御するための回路である。メモリ回路５７Ａは、コンテキスト信号ｃｏｎｔｅｘｔの切り替えに応じて、切り替え回路５６Ａ内の電気的な接続を切り替える機能を有する。また切り替え回路５６Ｂは、出力信号ｏｕｔ１またはｏｕｔ２として、乗算データｍｏｕｔ、加算データａｏｕｔ、あるいは入力加算データａｉｎを出力するかを制御するための回路である。メモリ回路５７Ｂは、コンテキスト信号ｃｏｎｔｅｘｔの切り替えに応じて、切り替え回路５６Ｂ内の電気的な接続を切り替える機能を有する。
【００６２】  図３（Ａ）では、入力レジスタ５１、出力レジスタ５５Ａ、および出力レジスタ５５Ｂを制御するセット信号ｓｅｔおよびリセット信号ｒｅｓｅｔを図示している。セット信号ｓｅｔおよびリセット信号ｒｅｓｅｔによる制御に応じて乗算データｍｏｕｔまたは加算データａｏｕｔなどを所定のタイミングで出力する構成とするができるため、信号の遅延によって演算結果に誤りがあることを防ぐことができる。
【００６３】  また図３（Ａ）では、メモリ５２に保持する重みデータの書き込みを制御するコンフィギュレーションデータｃｏｎｆｉｇｕｒａｔｉｏｎ  ｄａｔａおよびワード信号ｗｏｒｄを図示している。コンフィギュレーションデータｃｏｎｆｉｇｕｒａｔｉｏｎ  ｄａｔａおよびワード信号ｗｏｒｄを演算回路５０毎に別々に制御することで、演算回路５０ごとに設定した重みデータを個別に書き換え可能な構成とすることができる。
【００６４】  図３（Ｂ）では、図３（Ａ）で説明した演算回路５０のブロック図についてさらに詳細に図示する。図３（Ｂ）に示す演算回路５０では、図３（Ａ）で説明した構成に加えて、パワースイッチ（ＰＳ）５８、メモリ回路５７Ｃを図示している。メモリ回路５７Ｃはコンテキスト信号ｃｏｎｔｅｘｔの切り替えに応じて、パワースイッチ５８のオンまたはオフを切り替えることができる。演算処理に使用しない演算回路５０でのパワースイッチ５８をオフにできる構成とすることで、多数の演算回路５０のうち、使用しない演算回路５０に関しては、リーク電流による消費電力を削減することができる。
【００６５】図４にメモリ回路５７Ａの構成例を示す。メモリ回路５７Ａは、メモリセル９６＿０、９６＿１、トランジスタ９７＿０、９７＿１、９８を有する。メモリ回路５７Ａには、コンフィギュレーションデータ、切替え信号ｃｏｎｔｅｘｔ＿Ａ０、ｃｏｎｔｅｘｔ＿Ａ１、信号ｗｏｒｄＡ０、ｗｏｒｄＢ０、ｗｏｒｄＡ１、ｗｏｒｄＢ１が入力される。
【００６６】メモリセル９６＿０、９６＿１は、それぞれ、ＮＯＳＲＡＭとして機能する２個のメモリ回路で構成される。メモリセル９６＿０にコンフィギュレーションデータ“１”を書き込む場合は、信号ｗｏｒｄＡ０を“Ｈ”にし、信号ｗｏｒｄＢ０、ｗｏｒｄＡ１およびｗｏｒｄＢ１を“Ｌ”にする。メモリセル９６＿１にコンフィギュレーションデータ“０”を書き込む場合は、信号ｗｏｒｄＢ０を“Ｈ”にし、信号ｗｏｒｄＡ０、ｗｏｒｄＡ１、ｗｏｒｄＢ１を“Ｌ”にする。
【００６７】切り替え回路５６Ａへ制御信号を出力する間は、トランジスタ９８はオフ状態である。切替え信号ｃｏｎｔｅｘｔ＿Ａ０、ｃｏｎｔｅｘｔ＿Ａ１により、トランジスタ９７＿０、９７＿１の何れか一方がオン状態になる。例えば、トランジスタ９７＿０がオンになると、メモリセル９６＿０の保持データに応じた論理の制御信号が、切り替え回路５６Ａに出力される。
【００６８】メモリ回路５７Ｂ、５７Ｃは、メモリ回路５７Ａと同じ回路構成をもつ。
【００６９】  また図５（Ａ）では、図２で説明した演算回路５０のブロック図において図示した乗算データｍｏｕｔを入力データｓｄａｔａと重みデータｃｍｏｕｔとの乗算で得られるデータであることを明示するため、「ｓｄａｔａ＊ｃｍｏｕｔ」として図示している。同様に、図５（Ａ）では、図２で説明した演算回路５０のブロック図において図示した加算データａｏｕｔを入力加算データａｉｎに乗算データｍｏｕｔを加算して得られるデータであることを明示するため、「ａｉｎ＋（ｓｄａｔａ＊ｃｍｏｕｔ）」として図示している。
【００７０】  また図５（Ｂ）には、演算回路５０を略記して図示する場合のシンボルを図示している。図５（Ｂ）に図示するように演算回路５０に向いた矢印は演算回路５０に入力されるデータ、つまり入力信号ｓｉｎ（または入力データｓｄａｔａでもよい）、入力加算データａｉｎを表している。また、図５（Ｂ）に図示するように演算回路５０から逆に向いた矢印は演算回路５０から出力されるデータ、つまり出力信号ｏｕｔ１、ｏｕｔ２（または乗算データｍｏｕｔ、加算データａｏｕｔでもよい）、出力信号ｓｏｕｔを表している。
【００７１】  図５（Ｂ）での表記について図６乃至図８を用いてさらに詳細に説明する。
【００７２】  図６（Ａ）は、図５（Ｂ）のシンボルとして図示した演算回路５０＿１乃至５０＿ｎ（ｎは２以上の自然数）を水平方向（行方向ともいう）に複数配置する場合を示す図である。また図６（Ｂ）は、図６（Ａ）のように配置する場合を、図３（Ａ）に図示した演算回路５０の切り替え回路５５Ａ、５５Ｂおよび出力レジスタ５５Ａ、５５Ｂの構成を簡略化したものを用いて説明する図である。図６（Ａ）、（Ｂ）で示す図は、乗算データの生成、および加算データの生成を、複数の演算回路５０＿１乃至５０＿ｎ内で並列に処理する場合の動作を表している。
【００７３】  具体的には演算回路間を入出力されるデータを図６（Ｂ）の矢印のように表している。隣接する演算回路、例えば演算回路５０＿１と演算回路５０＿２との間では、演算回路５０＿１が出力する出力データは、演算回路５０＿２の入力加算データとして入力される。また演算回路５０＿２と演算回路５０＿３との間では、演算回路５０＿２が出力する出力データは、演算回路５０＿３の入力加算データとして入力される。また演算回路５０＿１と演算回路５０＿ｎとの間では、演算回路５０＿ｎが出力する出力データは、演算回路５０＿１の入力加算データとして入力される。つまり演算回路毎に異なる入力データと異なる重みデータとの乗算データを生成するとともに、前段の演算回路より入力される入力加算データに当該乗算データを加える演算処理を、複数の演算回路５０＿１乃至５０＿ｎで並列に処理することができる。
【００７４】  また図７（Ａ）は、図５（Ｂ）のシンボルとして図示した演算回路５０＿１乃至５０＿３を垂直方向（列方向ともいう）に複数配置する場合を示す図である。また図７（Ｂ）は、図７（Ａ）のように配置する場合を、図３（Ａ）に図示した演算回路５０の切り替え回路５５Ａ、５５Ｂおよび出力レジスタ５５Ａ、５５Ｂの構成を簡略化したものを用いて説明する図である。図７（Ａ）、（Ｂ）で示す図は、各演算回路５０＿１乃至５０＿３の入力レジスタ回路への入力データの書き込みを、他の演算回路を介して行う場合の動作を表している。
【００７５】  具体的には演算回路間を入出力されるデータを図７（Ｂ）の矢印のように表している。隣接する演算回路、例えば演算回路５０＿１と演算回路５０＿２との間では、演算回路５０＿１が出力する出力信号ｓｏｕｔは、演算回路５０＿２の入力信号ｓｉｎとして入力される。また演算回路５０＿２と演算回路５０＿３との間では、演算回路５０＿２が出力する出力信号ｓｏｕｔは、演算回路５０＿３の入力信号ｓｉｎとして入力される。つまり演算回路を介して電気的に接続された演算回路に信号を入力することができる。
【００７６】  また図８（Ａ）は、図７（Ａ）と同様に、図５（Ｂ）のシンボルとして図示した演算回路５０＿１乃至５０＿３を垂直方向（列方向ともいう）に複数配置する場合を示す図である。また図８（Ｂ）は、図８（Ａ）のように配置する場合を、図３（Ａ）に図示した演算回路５０の切り替え回路５５Ａ、５５Ｂおよび出力レジスタ５５Ａ、５５Ｂの構成を簡略化したものを用いて説明する図である。図８（Ａ）、（Ｂ）で示す図は、図７（Ａ）、（Ｂ）で図示した乗算データの生成および加算データの生成による積和演算データの加算回路４１への出力を、他の演算回路を介して行う場合の動作を表している。
【００７７】  具体的には演算回路間を入出力されるデータを図８（Ｂ）の矢印のように表している。隣接する演算回路、例えば演算回路５０＿１と演算回路５０＿２との間では、演算回路５０＿１が出力する出力信号ｏｕｔ１、ｏｕｔ２は、切り替え回路５６の切り替えによって加算回路５４を介することなく、演算回路５０＿２の入力加算データ信号ａｉｎとして入力される。また演算回路５０＿２と演算回路５０＿３との間では、演算回路５０＿２が出力する出力信号ｏｕｔ１、ｏｕｔ２は、切り替え回路５６の切り替えによって加算回路５４を介することなく、演算回路５０＿３の入力加算データ信号ａｉｎとして入力される。つまり演算回路を介して電気的に接続された演算回路に信号を転送することができる。
【００７８】  次いで図９乃至図２６では、上記ニューラルネットワーク回路の動作を説明する。具体的には、畳み込みニューラルネットワークの演算処理を行う際のニューラルネットワーク回路の動作、特に演算回路間での積和演算処理について詳述する。
【００７９】  まず以下の動作の説明で行う畳み込みニューラルネットワークの演算処理の流れについて説明する。図９（Ａ）には、畳み込みニューラルネットワークの演算処理の流れを示す。
【００８０】  図９（Ａ）では、入力層６１、中間層６２（隠れ層ともいう）、出力層６３を図示している。入力層６１では、入力データの入力処理７０（図中、Ｉｎｐｕｔと図示）を図示している。中間層６２では、畳み込み演算処理７２、７３、７５（図中、Ｃｏｎｖと図示）、複数のプーリング演算処理７４、７６（図中、Ｐｏｏｌ．と図示）を図示している。出力層６３では、全結合演算処理７７（図中、Ｆｕｌｌと図示）を図示している。入力層６１、中間層６２、出力層６３における演算処理の流れは一例であり、実際の畳み込みニューラルネットワークの演算処理では、ソフトマックス演算などの他の演算処理を行うことがあり得る。
【００８１】  図９（Ａ）に図示する畳み込みニューラルネットワークを、図１のデータ処理回路１０を用いて行う際の演算処理について図９（Ｂ）に可視化して図示する。
【００８２】  図９（Ｂ）に図示するように、図１のデータ処理回路１０を用いて行う演算処理は、まず入力データ７１をフィルタ８２と積和演算して畳み込む（畳み込み演算処理７２）を行う。
【００８３】  なお入力データ７１は、２０（縦方向）×２０（横方向）でチャンネル方向（奥行き方向）が１のデータを一例として図示している。図１のデータ処理回路１０を用いて行う際の演算処理は、入力データ７１としてＭＮＩＳＴ（Ｍｉｘｅｄ  Ｎａｔｉｏｎａｌ  Ｉｎｓｔｉｔｕｔｅ  ｏｆ  Ｓｔａｎｄａｒｄｓ  ａｎｄ  Ｔｅｃｈｎｏｌｏｇｙ  ｄａｔａｂａｓｅ：手書きの数字「０乃至９」に正解ラベルが与えられているデータセット）を用いて行う、畳み込みニューラルネットワーク（ＣＮＮ）を想定している。なお図中、シンボル８１は積和演算、ここでは入力データ７１とフィルタ８２との積和演算を表している。また畳み込み演算処理７２を行うためのフィルタ８２は、３×３の９つのフィルタ（図中、３×３  Ｆｉｌ．９と図示）で構成され、ストライドは１とする。また、ゼロパディングは行わない。
【００８４】  入力データ７１とフィルタ８２との積和演算を行ったデータは、積和演算回路４０の外部にある演算ユニット２３にて、ＲｅＬＵによる処理を行うことでデータ８４を得る。データ８４は、畳み込み演算処理７２によって、１８×１８で９チャンネルのデータとなる。なお図中、シンボル８３は活性化関数である正規化線形関数（Ｒｅｃｔｉｆｉｅｄ  Ｌｉｎｅａｒ  Ｕｎｉｔ）による処理、ここでは積和演算によって得られたデータに対してＲｅＬＵによる処理を行うことを表している。
【００８５】  データ８４は、フィルタ８５と積和演算して畳み込み演算処理７３を行う。畳み込み演算処理７３を行うためのフィルタ８５は、３×３の８１のフィルタ（図中、３×３  Ｆｉｌ．８１と図示）で構成される。データ８４とフィルタ８２との積和演算を行ったデータは、積和演算回路４０の外部にある演算ユニット２３にて、ＲｅＬＵによる処理を行うことでデータ８６を得る。データ８６は、畳み込み演算処理７３によって、１６×１６で９チャンネルのデータとなる。
【００８６】  データ８６は、積和演算回路４０の外部にある演算ユニット２３にて、プーリング演算処理７４を行う。プーリング演算処理７４では、一例としてｍａｘ  ｐｏｏｌｉｎｇを行う。プーリング演算処理７４は、２×２のサイズのフィルタで行う。プーリング演算処理されたデータをデータ８７とする。データ８７は、プーリング演算処理７４によって、８×８で９チャンネルのデータとなる。
【００８７】  データ８７は、フィルタ８８と積和演算して畳み込み演算処理７５を行う。畳み込み演算処理７５を行うためのフィルタ８８は、３×３の８１のフィルタ（図中、３×３  Ｆｉｌ．８１と図示）で構成される。フィルタ８８は入力の各チャンネルに対して、それぞれ９種類のフィルタを有するため、合計８１の異なるフィルタとなる。データ８７とフィルタ８８との積和演算を行ったデータは、積和演算回路４０の外部にある演算ユニット２３にて、ＲｅＬＵによる処理を行うことでデータ８９を得る。データ８９は、畳み込み演算処理７５によって、６×６で９チャンネルのデータとなる。
【００８８】  データ８９は、積和演算回路４０の外部にある演算ユニット２３にて、プーリング演算処理７６を行う。プーリング演算処理７６では、一例としてｍａｘ  ｐｏｏｌｉｎｇを行う。プーリング演算処理７６は、２×２のサイズのフィルタで行う。プーリング演算処理されたデータをデータ９０とする。データ９０は、プーリング演算処理７６によって、３×３で９チャンネルのデータ、８１個のデータとなる。
【００８９】  データ９０は、重みパラメータ９１と積和演算して全結合演算処理７７を行う。全結合演算処理７７を行うための重みパラメータ９１は、入力数が８１個、出力数は１０個であることから、８１０種類ある。全結合演算処理７７したデータをデータ９２とする。データ９２は、全結合演算処理７７によって、１０個のデータとなる。
【００９０】  次いで図１０乃至図２６を用いて、図１で示した、積和演算回路４０を有するデータ処理回路１０が図９（Ｂ）に図示する演算処理を行う際の動作について説明する。
【００９１】  図１０（Ａ）は、図１でも示した、積和演算回路４０を図示している。図１０（Ａ）では、畳み込み演算処理７２、７３および７５を行う際に必要な演算回路５０をマトリクス状に図示している。また図１０（Ａ）は、加算回路４１を併せて図示している。
【００９２】  なお演算回路５０間の電気的な接続は、上述したようにプログラマブルスイッチエレメントによって切り替えることができる。図１０（Ｂ）には、演算回路５０間のプログラマブルスイッチエレメントＰＳＥについて図示している。プログラマブルスイッチエレメントＰＳＥは、コンフィギュレーションメモリおよびスイッチを組み合わせて構成すればよい。コンフィギュレーションメモリは、ＳＲＡＭあるいはＯＳトランジスタを用いたメモリを用いることができる。ＯＳトランジスタを用いたプログラマブルスイッチエレメントは、トランジスタ等の素子を積層して設けることができるため、集積化の点で有利である。
【００９３】  次いで図１１（Ａ）では、図９（Ｂ）で説明した畳み込み演算処理７２を抜き出したものである。
【００９４】  図１１（Ｂ）は、入力データ７１を可視化した図である。Ｄ１１乃至Ｄ１ｋを行方向（横方向）のデータ、Ｄ１１乃至Ｄｋ１を列方向（縦方向）のデータとして図示している。図１１（Ｂ）中太線で囲ったデータＤ１１乃至Ｄ３３（つまり、Ｄ１１，Ｄ１２，Ｄ１３，Ｄ２１，Ｄ２２，Ｄ２３，Ｄ３１，Ｄ３２，Ｄ３３の９つ）は、３×３のフィルタとの間で積和演算を行うデータを表している。
【００９５】  なお入力データ７１に限らず、図９（Ｂ）で説明したデータ８４、８６、８７および８９等の入力データに畳み込み演算処理を行い得られるデータについても、図１１（Ｂ）に表す入力データ７１と同様に図示することができる。そのためデータ８４、８６、８７および８９を、入力データという場合もある。
【００９６】  また図１１（Ｃ）は、フィルタ８２で用いられるフィルタを可視化した図である。９つのチャンネルは、図１１（Ｃ）のように３×３のフィルタである、フィルタ８２＿１乃至８２＿９（Ｆ１乃至Ｆ９）で表すことができる。例えばフィルタ８２＿１は、３×３で重みデータを有する。図１１（Ｃ）では重みデータｗ１乃至ｗ９を図示している。
【００９７】  なおフィルタ８２に限らず、図９（Ｂ）で説明したフィルタ８５、８８および９１等のその他の畳み込み演算処理および全結合演算処理等に用いられるフィルタについても、図１１（Ｃ）に表すフィルタ８２と同様に図示することができる。
【００９８】  図１２乃至図１５は、図１０（Ａ）で示した積和演算回路４０による、図１１（Ｂ）、（Ｃ）に示す入力データ７１およびフィルタ８２を用いた畳み込み演算処理７２を行う際の動作を説明するための図である。
【００９９】  畳み込み演算処理７２は、図１２（Ａ）に図示するように、図１０（Ａ）で示した積和演算回路４０における９×９の演算回路５０を用いて行う。図１２（Ａ）では、演算回路５０を縦横に配置するとともに、行（ｒｏｗ）方向および列（ｃｏｌｕｍｎ）方向を併せて図示している。行方向は、入力データである画像データのシフト（ｐｉｘｅｌ  ｄａｔａ  ｓｈｉｆｔ）方向となる。また列方向は、入力データと重みデータとの乗算で得られる乗算データのシフト（ｍｕｌｔｉｐｌｙ  ｄａｔａ  ｓｈｉｆｔ）方向となる。
【０１００】  また図１２（Ａ）において、行方向の１行目の演算回路５０には、それぞれフィルタＦ１、つまりフィルタ８２＿１の重みデータｗ１乃至ｗ９を列毎にセットする。例えば１行１列目の演算回路５０にｗ１、１行２列目の演算回路５０にｗ２、１行３列目の演算回路５０にｗ３のように順に重みデータをセットする。セットは、コンテキスト信号によるコンテキストの切り替えで行うことができる。
【０１０１】  次いで、行方向の２行目の演算回路５０には、フィルタＦ２をセットする。同様に行方向の３乃至９行目の演算回路５０には、フィルタＦ３乃至Ｆ９の重みデータをセットする。
【０１０２】  コンテキスト「１」で上記の重みデータのセットとなるようにする。１行１列の演算回路５０にて、乗算結果であるＤ１１×Ｗ１ができる。それを順に列方向にシフトしていく。また、１行１列目の入力データＤ１１は、次のタイミングで行方向にシフトさせる。そして１行目と同様に列方向に乗算データをシフトさせる。２行目の演算回路５０にはフィルタＦ２、つまりフィルタ８２＿２の重みデータがセットされており、フィルタＦ２の各重みデータと入力データの乗算データが列方向にシフトするようになる。
【０１０３】  ２行目以降にも入力データがシフトし、セットされたフィルタＦ３乃至Ｆ９、つまりフィルタ８２＿３乃至８２＿９の重みデータと入力データとの乗算データを生成し、列方向にシフトするようにする。１乃至９行目の９列目の演算回路５０は、各フィルタ（Ｆ１乃至Ｆ９）のいずれか一つと入力データの積和演算に相当する出力データが得られる。１乃至９行目の９列目の端子は、ｏｕｔ１乃至ｏｕｔ９として図示している。
【０１０４】  図１２（Ａ）の動作をまとめると、図１２（Ｂ）のように表すことができる。畳み込み演算処理７２を行う際、コンテキストで固定するため、コンテキスト信号ｃｏｎｔｅｘｔは１である。時刻Ｔ０から開始して、時刻Ｔ８以降において、１行目の９列目の演算回路５０で３×３の入力データＤ１１乃至Ｄ３３（図１１（Ｂ）中太線で囲ったデータ）とフィルタＦ１との積和演算（Ｉｎ×Ｆ１）がｏｕｔ１で得られる。行方向にデータをシフトさせるため、１行目の９列目の演算回路５０で３×３の入力データＤ１１乃至Ｄ３３（図１１（Ｂ）中太線で囲ったデータ）とフィルタＦ２乃至Ｆ９のいずれか１つとの積和演算がｏｕｔ２乃至ｏｕｔ９も得られる。入力データ７１は、行方向に入力データＤ１２乃至Ｄ１４、入力データＤ２２乃至Ｄ２４、および入力データＤ２２乃至Ｄ２４（つまり、Ｄ１２，Ｄ１３，Ｄ１４，Ｄ２２，Ｄ２３，Ｄ２４，Ｄ３２，Ｄ３３，Ｄ３４の９つ）としてシフトさせることで、フィルタＦ１乃至Ｆ９との乗算データを入力データ７１の全座標との間で得ることができる。
【０１０５】  より具体的な例について図１３乃至図１５で説明する。
【０１０６】  図１３（Ａ）は時刻Ｔ０での演算回路５０に保持された入力データを可視化した図である。行方向の矢印は、入力データのシフト方向を表している。列方向の矢印は、乗算データのシフト方向を表している。なお図中に付した「ＢＬ」は、入力データが入力された演算回路の入力データのシフト方向にある演算回路５０を表している。なお図中、空白として図示している演算回路５０は、前行の演算回路５０からの入力データのシフトがない演算回路５０であり、パワーゲーティング可能な演算回路５０である。図１３（Ａ）に示すように時刻Ｔ０では、１行１列目の演算回路５０に入力データであるＤ１１が入力される。そして１行１列目の演算回路５０では、コンテキスト切り替えによって保持される重みデータｗ１との乗算データを生成する。
【０１０７】  図１３（Ｂ）は時刻Ｔ１での演算回路５０に保持された入力データを可視化した図である。図１３（Ａ）に示すように時刻Ｔ１では、１行１列目の入力データＤ１１がシフトして２行１列目の演算回路５０に入力される。また１行１列目および１行２列目の演算回路５０に入力データＤ１２が入力される。そして入力データＤ１２とコンテキスト切り替えによって保持される重みデータｗ１との乗算データ、入力データＤ１２とコンテキスト切り替えによって保持される重みデータｗ２との乗算データ、を生成する。同時に入力データＤ１１とフィルタＦ２の重みデータとの乗算データの生成が行われる。なお時刻Ｔ１において、１行２列目の演算回路５０では、時刻Ｔ０で生成された入力データＤ１１と重みデータｗ１との乗算データに、時刻Ｔ１で得られた入力データＤ１２と重みデータｗ１との乗算データが加算された加算データが列方向にシフトする。
【０１０８】  図１４（Ａ）は時刻Ｔ２での演算回路５０に保持された入力データを可視化した図である。図１４（Ａ）に示すように時刻Ｔ２では、２行１列目の入力データＤ１１がシフトして３行１列目の演算回路５０に入力される。また１行１列目の入力データＤ１２、および１行２列目の入力データＤ１２がシフトして２行１列目の演算回路５０、２行２列目の演算回路５０にそれぞれ入力される。また１行１列目、１行２列目、および１行３列目の演算回路５０に入力データＤ１３が入力される。そして入力データＤ１３とコンテキスト切り替えによって保持される重みデータｗ１との乗算データ、入力データＤ１３とコンテキスト切り替えによって保持される重みデータｗ２との乗算データ、および入力データＤ１３とコンテキスト切り替えによって保持される重みデータｗ３との乗算データ、を生成する。同時に入力データＤ１１とフィルタＦ３の重みデータとの乗算データの生成、入力データＤ１２とフィルタＦ２の重みデータとの乗算データの生成が行われる。なお時刻Ｔ２において、１行３列目の演算回路５０では、時刻Ｔ２で生成された加算データに、時刻Ｔ２で得られた入力データＤ１３と重みデータｗ３との乗算データが加算された加算データが列方向にシフトする。
【０１０９】  図１４（Ｂ）は時刻Ｔ３での演算回路５０に保持された入力データを可視化した図である。図１４（Ｂ）に示すように時刻Ｔ３では、３行１列目の入力データＤ１１がシフトして４行１列目の演算回路５０に入力される。また２行１列目の入力データＤ１２、および２行２列目の入力データＤ１２がシフトして３行１列目の演算回路５０、３行２列目の演算回路５０にそれぞれ入力される。また１行１列目のＤ１３、１行２列目の入力データＤ１３、および１行３列目の入力データＤ１３がシフトして２行１列目の演算回路５０、２行２列目の演算回路５０、２行３列目の演算回路５０にそれぞれ入力される。また１行１列目、１行２列目、および１行３列目の演算回路５０に入力データである入力データＤ１４が、１行４列目の演算回路５０にＤ２１が入力される。そして入力データＤ１４とコンテキスト切り替えによって保持される重みデータｗ１との乗算データ、入力データＤ１４とコンテキスト切り替えによって保持される重みデータｗ２との乗算データ、入力データＤ１４とコンテキスト切り替えによって保持される重みデータｗ３との乗算データ、および入力データＤ２１とコンテキスト切り替えによって保持される重みデータｗ４との乗算データを生成する。同時に入力データＤ１１とフィルタＦ４の重みデータとの乗算データの生成、入力データＤ１２とフィルタＦ３の重みデータとの乗算データ、および入力データＤ１３とフィルタＦ２の重みデータとの乗算データの生成が行われる。なお時刻Ｔ３において、１行４列目の演算回路５０では、時刻Ｔ３で生成された加算データに、時刻Ｔ３で得られた入力データＤ２１とｗ４との乗算データが加算された加算データが列方向にシフトする。
【０１１０】  時刻Ｔ４乃至Ｔ７においても入力データのシフトおよび乗算データと加算データとを加算したデータのシフトによって図１５（Ａ）に図示する時刻Ｔ８の状態となる。
【０１１１】  図１５（Ａ）に示す時刻Ｔ８では、入力データＤ１１が９行１列目までシフトし、１行９列目に入力データＤ３３が入力され、重みデータｗ９との乗算データが生成されるともに、１行８列目で生成された積和演算結果である加算データと加算して得られる加算データを生成する。この加算データは、ｏｕｔ１から出力される。この加算データは、３×３の入力データＤ１１乃至Ｄ３３と、フィルタＦ１の重みデータｗ１乃至ｗ９の積和演算、すなわちＤ１１・ｗ１＋（略）＋Ｄ３３・ｗ９である。この演算結果は、図１１（Ｂ）の太線で囲った入力データと、フィルタＦ１との積和演算の一部に相当する。
【０１１２】  図１５（Ｂ）に示す時刻Ｔ９では、入力データＤ１２が９行１列目までシフトし、２行９列目に入力データＤ３３が入力され、重みデータｗ９との乗算データが生成されるともに、１行８列目で生成された積和演算結果である加算データと加算して得られる加算データを生成する。この加算データは、ｏｕｔ２から出力される。この加算データは、入力データＤ１１乃至Ｄ３３とフィルタＦ２の重みデータの積和演算である。この演算結果は、図１１（Ｂ）の太線で囲った入力データと、フィルタＦ２との積和演算に相当する。
【０１１３】  本実施の形態のニューラルネットワーク回路の構成では、各演算回路において乗算データおよび加算データを効率よく生成し、積和演算を効率よく行うことができる。そのため、ニューラルネットワーク回路において入力データおよび重みデータ等の増大に伴って、回路規模の大型化が問題となるが、この問題を解消することができる。つまり、同じ回路を用いて異なる処理の積和演算を行う構成とすることができるため、回路リソースの有効活用を図ることができる。
【０１１４】  図１６乃至図２１は、図１１（Ｂ）、（Ｃ）に示す各データを用いて図１０（Ａ）で示した積和演算回路４０による畳み込み演算処理７３、７５を行う際の動作を説明するための図である。
【０１１５】  図１６（Ａ）、（Ｂ）は、図９（Ｂ）で説明した畳み込み演算処理７３、７５を抜き出したものである。畳み込み演算処理７３、７５は、図１０で示した積和演算回路４０における９×９の演算回路５０を用いて行う。図１６（Ｃ）では、図１２（Ａ）と同様に演算回路５０を縦横に配置するとともに、行（ｒｏｗ）方向および列（ｃｏｌｕｍｎ）方向を図示している。列方向は、入力データ（データ８４または８７に相当）と重みデータ（フィルタ８５またはフィルタ８８が有する重みデータ）とによって得られる積和演算データのシフト（ＭＡＣ  ｄａｔａ  ｓｈｉｆｔ）方向となる。
【０１１６】  図１６（Ｃ）において、１列目の演算回路５０には入力データＤ１１（以下、Ｄ１１のように略記）、２列目の演算回路５０にはＤ１２といったように入力データを列毎にセットする。この入力データのセットは、１行目からデータをシフトさせて全行に書き込んでセットしておく。その結果図１６（Ｃ）に図示するように各列にＤ１１乃至Ｄ３３がセットされる。ただし、演算回路５０は、行方向で各入力チャンネルにおける積和演算処理を行うとする。従って、１行目は入力チャンネル１に対応するデータ、２行目は入力チャンネル２に対応するデータとし、９行目は入力チャンネル９に対応するデータとする。また図１６（Ｃ）において、行方向の１行目の演算回路５０には、入力チャンネル１に対して演算するための９種類のフィルタＦ１０乃至Ｆ１８（以下、Ｆ１０乃至Ｆ１８のように略記））の重みデータを列毎にセットする。コンテキストのセット、つまりフィルタのセットと、先にセットされたＤ１１乃至Ｄ３３との乗算によって乗算データを得て、乗算結果を次列の演算回路５０に加算データとして出力して、積和演算を実行する構成とする。例えばコンテキスト２で１行１列目の演算回路５０にＦ１０の重みデータ、１行２列目の演算回路５０にＦ１１の重みデータ、１行３列目の演算回路５０にＦ１２の重みデータのように重みデータをセットする。コンテキスト３以降は演算回路５０に対応するフィルタを列方向にシフトさせる。９列目の演算回路５０に対応していたフィルタは、１列目に戻る。例えばコンテキスト３で１行１列目の演算回路５０にＦ１８の重みデータ、１行２列目の演算回路５０にＦ１０の重みデータ、１行３列目の演算回路５０にＦ１１の重みデータのように重みデータをセットする。セットした重みデータは、コンテキストの切り替えで別のフィルタの重みデータに切り替えることができる。
【０１１７】  同時に２行目以降の演算回路５０でも、フィルタに応じた重みデータをセットする。例えばコンテキスト２で２行１列目の演算回路５０にＦ１９の重みデータ、２行２列目の演算回路５０にＦ２０の重みデータ、２行３列目の演算回路５０にＦ２１の重みデータのように重みデータをセットする。コンテキスト３以降は演算回路５０に対応するフィルタを列方向にシフトさせる。９列目の演算回路５０に対応していたフィルタは、１列目に戻る。例えばコンテキスト３で２行１列目の演算回路５０にＦ２７の重みデータ、２行２列目の演算回路５０にＦ１９の重みデータ、２行３列目の演算回路５０にＦ２０の重みデータのように重みデータをセットする。セットした重みデータは、コンテキストの切り替えで別のフィルタの重みデータに切り替えることができる。コンテキストの切り替えが、フィルタのシフトを演算回路９列分を一巡りするまで行う。つまりコンテキスト２からコンテキスト１０まで切り替える。
【０１１８】  積和演算結果のシフトによって得られた積和演算データは、加算回路４１に読み出される。加算回路４１では、同じ列での積和演算データを足しあわせる。そして得られるデータを、積和演算回路４０の外部にある演算ユニット２３にて、ＲｅＬＵによる処理を行うことで得られるデータが畳み込み演算処理後のデータに相当する。
【０１１９】  上述した図１６（Ｃ）の動作をまとめると、図１６（Ｄ）のように表すことができる。畳み込み演算処理７３、７５を行う際、Ｄ１１乃至Ｄ３３と異なるフィルタとの積和演算を実行するため、コンテキスト信号ｃｏｎｔｅｘｔを２乃至１０に切り替える。時刻Ｔｗｒｉｔｅ１でＤ１１乃至Ｄ３３を演算回路５０にセットした後、時刻Ｔ１０乃至Ｔ１８でコンテキスト信号を２乃至１０を切り替える。３×３の入力データであるＤ１１乃至Ｄ３３と９つのフィルタとの積和演算が各行各列の演算回路５０で得られた後、時刻Ｔｒｅａｄ１で加算回路４１に読み出し、畳み込み演算処理を行ったデータ（ＣＨ１−９  Ｄ１１−Ｄ３３）を得る。そして各演算回路５０に次の入力データとしてＤ１２乃至Ｄ３４をセットし（時刻Ｔｗｒｉｔｅ２）、コンテキスト２乃至１０を切り替えて各行において積和演算を実行する。
【０１２０】  より具体的な例について図１７乃至図２０で説明する。
【０１２１】  図１７（Ａ）は時刻Ｔｗｒｉｔｅ１での演算回路５０に保持された入力データを可視化した図である。
【０１２２】  図１７（Ａ）に図示するように、各列にＤ１１乃至Ｄ３３をセットする。なお演算回路５０内のメモリ５２には、重みデータのセットが書き込まれている。重みデータのセットは、コンテキストの切り替えに対応して切り替えられる。
【０１２３】  図１７（Ｂ）は時刻Ｔ１０での演算回路５０に保持された入力データを可視化した図である。
【０１２４】  時刻Ｔ１０では、コンテキスト信号の切り替えにより、コンテキスト「２」として、乗算するためのフィルタを図１７（Ｂ）に図示するよう演算回路５０にセットする。図１７（Ｂ）において列方向の矢印は、乗算データ、あるいは乗算データに前列の加算データを加算した加算データのシフト方向を表している。同じ行にある演算回路５０間に付した「Ｆ１０」等は、フィルタＦ１０との積和演算するためのフィルタである。演算で得られるデータは、前列の加算データを加算して、データのシフト方向にある演算回路５０に加算データとして出力される。
【０１２５】  例えば１行目の演算回路５０での動作に着目して説明すると、Ｄ１１が保持された１列目の演算回路５０は、フィルタＦ１０との演算を行う。得られたデータを２列目の演算回路５０に出力する。同時に、Ｄ１２が保持された２列目の演算回路５０は、フィルタＦ１１との演算を行う。得られたデータを３列目の演算回路５０に出力する。３列目乃至８列目の演算回路５０においても、それぞれフィルタＦ１２乃至Ｆ１７との演算を行い、得られたデータを演算回路５０に出力する。同時に、Ｄ３３が保持された９列目の演算回路５０は、フィルタＦ１８との演算を行う。得られたデータを１列目の演算回路５０に出力する。２行目以降も保持している入力データとフィルタとの演算を行い、演算回路５０に出力する。
【０１２６】  図１８（Ａ）は時刻Ｔ１１での演算回路５０に保持された入力データを可視化した図である。
【０１２７】  時刻Ｔ１１では、コンテキスト信号の切り替えにより、コンテキスト「３」として、乗算するためのフィルタを図１８（Ａ）に図示するように演算回路５０にセットする。例えば１行目の演算回路５０での動作に着目して説明すると、Ｄ１１が保持された１列目の演算回路５０は、フィルタＦ１８との演算を行う。得られたデータを９列目の演算回路５０から出力されたデータに加算して２列目の演算回路５０に出力する。同時に、Ｄ１２が保持された２列目の演算回路５０は、フィルタＦ１０との演算を行う。得られたデータを１列目の演算回路５０から出力されたデータに加算して３列目の演算回路５０に出力する。３列目乃至８列目の演算回路５０においても、それぞれフィルタＦ１１乃至Ｆ１６との演算を行い、得られたデータを演算回路５０に出力する。同時に、Ｄ３３が保持された９列目の演算回路５０は、フィルタＦ１７との演算を行う。得られたデータを８列目の演算回路５０から出力されたデータに加算して１列目の演算回路５０に出力する。２行目以降も保持しているデータとフィルタとの演算を行い、演算回路５０に出力する。時刻Ｔ１２乃至時刻Ｔ１７においても、コンテキスト信号の切り替えにより、コンテキスト「３乃至９」として、下記演算回路５０で乗算するための重みデータをセットし、保持している入力データとフィルタとの演算を行い、演算回路５０に出力することを行う。
【０１２８】  図１８（Ｂ）は時刻Ｔ１８での演算回路５０に保持された入力データを可視化した図である。
【０１２９】  時刻Ｔ１８では、コンテキスト信号の切り替えにより、コンテキスト「１０」として、下記演算回路５０で乗算するためのフィルタを図１８（Ｂ）に図示するようにセットする。例えば１行目の演算回路５０での動作に着目して説明すると、Ｄ１１が保持された１列目の演算回路５０は、フィルタＦ１１との演算を行う。得られたデータを９列目の演算回路５０から出力されたデータに加算して２列目の演算回路５０に出力する。ここで２列目の演算回路５０に出力されるデータは、１列目、および３乃至９列目の演算回路５０で乗算されたデータを加算して得られた積和演算のデータである。同時に、Ｄ１２が保持された２列目の演算回路５０は、フィルタＦ１２との演算を行う。得られたデータを１列目の演算回路５０から出力されたデータに加算して３列目の演算回路５０に出力する。ここで３列目の演算回路５０に出力されるデータは、１列目、２列目、および４乃至９列目の演算回路５０で乗算されたデータを加算して得られた積和演算のデータである。３列目乃至８列目の演算回路５０においても、それぞれフィルタＦ１３乃至Ｆ１８との演算を行い、得られたデータを演算回路５０に出力する。同時に、Ｄ３３が保持された９列目の演算回路５０は、フィルタＦ１０との演算を行う。得られたデータを８列目の演算回路５０から出力されたデータに加算して１列目の演算回路５０に出力する。ここで１列目の演算回路５０に出力されるデータは、２乃至９列目の演算回路５０で乗算されたデータを加算して得られた積和演算のデータである。２行目以降も保持している入力データとフィルタとの積和演算を行い、演算回路５０に出力する。つまり時刻Ｔ１８の状態で各演算回路５０には、Ｄ１１乃至Ｄ３３と各行の複数のフィルタとの積和演算によるデータが保持されていることになる。
【０１３０】  図１９（Ａ）は時刻Ｔｒｅａｄ１での動作を可視化した図である。
【０１３１】  行方向の矢印は、Ｔ１０乃至Ｔ１８で得られた積和演算によるデータのシフト方向を表している。図１９（Ａ）に示すように時刻Ｔｒｅａｄ１では、１乃至９行目に保持された積和演算によるデータを順に加算回路４１にシフトさせて、得られたデータの和を列毎に得る。加算回路４１で得られたデータは、積和演算回路４０の外部にある演算ユニット２３にて、ＲｅＬＵによる処理を行うことでＤ１１乃至Ｄ３３に畳み込み演算処理を行ったデータを得る。
【０１３２】  図１９（Ｂ）は時刻Ｔｗｒｉｔｅ２での演算回路５０に保持された入力データを可視化した図である。
【０１３３】  図１９（Ｂ）に図示するように、各列にＤ１２乃至Ｄ３４をセットする。
【０１３４】  図２０は時刻Ｔ１９での演算回路５０に保持された入力データを可視化した図である。
【０１３５】  時刻Ｔ１９では、コンテキスト信号の切り替えにより、コンテキスト「２」として、下記演算回路５０で乗算するためのフィルタを図２０に図示するようにセットする。例えば１行目の演算回路５０での動作に着目して説明すると、Ｄ１２が保持された１列目の演算回路５０は、フィルタＦ１０との演算を行う。得られたデータを２列目の演算回路５０に出力する。同時に、Ｄ１３が保持された２列目の演算回路５０は、フィルタＦ１１との演算を行う。得られたデータを３列目の演算回路５０に出力する。３列目乃至８列目の演算回路５０においても、それぞれフィルタＦ１２乃至Ｆ１７との演算を行い、得られたデータを演算回路５０に出力する。同時に、Ｄ３４が保持された９列目の演算回路５０は、フィルタＦ１８との演算を行う。得られたデータを１列目の演算回路５０に出力する。２行目以降も保持している入力データとフィルタとの演算を行い、演算回路５０に出力する。
【０１３６】  以降演算回路５０に保持する入力データ、コンテキストを切り替えて乗算データを加算していき、畳み込み演算処理に応じた演算を実行する。
【０１３７】  本実施の形態のニューラルネットワーク回路の構成では、各演算回路において乗算データおよび加算データを効率よく生成し、コンテキストの切り替えと組み合わせることで、異なるフィルタを用いた演算処理に基づく積和演算を効率よく行うことができる。そのため、ニューラルネットワーク回路において入力データおよび重みデータ等の増大に伴って、回路規模の大型化が問題となるが、この問題を解消することができる。つまり、同じ回路を用いて異なる処理の積和演算を行う構成とすることができるため、回路リソースの有効活用を図ることができる。
【０１３８】  ここで図１６乃至図２０で図示して説明した積和演算の演算モデルについて、図２１（Ａ）乃至（Ｆ）を用いて説明する。
【０１３９】  図２１（Ａ）乃至（Ｆ）の説明では、異なる４種類の重みデータを有するフィルタ（Ｗ１１，Ｗ１２，Ｗ１３，Ｗ１４）、（Ｗ２１，Ｗ２２，Ｗ２３，Ｗ２４）、（Ｗ３１，Ｗ３２，Ｗ３３，Ｗ３４）、（Ｗ４１，Ｗ４２，Ｗ４３，Ｗ４４）と、入力データ（Ｉ１，Ｉ２，Ｉ３，Ｉ４）の積和演算を行う場合について説明する。上記図１６乃至図２０で説明した演算処理の手法を用いることで、複数の演算回路で得られたデータをループさせながら積和演算を並行して進めることが可能である。
【０１４０】  複数のフィルタによる積和演算（畳み込み演算）は、式（１）に図示するように、行列−ベクトル積で表すことができる。
【０１４１】
2018189620.tif 000003
【０１４２】  Ｗで構成される４×４の行列は、重みデータ（各行の要素が各フィルタの成分に相当）に相当する。Ｉで構成される１×４の行列は、入力データに相当する。Ｙ（Ｙ１乃至Ｙ４）で構成される１×４の行列は、積和演算によって得られるデータに相当する。
【０１４３】  式（１）の行列−ベクトル積は、上述した演算回路５０を用いて積和演算を行う演算モデルに当てはめると、図２１（Ａ）のように図示することができる。つまり入力データＩ１乃至Ｉ４は、各演算回路５０＿Ａの入力データ９３として保持される。またフィルタ（Ｗ１１，Ｗ１２，Ｗ１３，Ｗ１４）、（Ｗ２１，Ｗ２２，Ｗ２３，Ｗ２４）、（Ｗ３１，Ｗ３２，Ｗ３３，Ｗ３４）、（Ｗ４１，Ｗ４２，Ｗ４３，Ｗ４４）の重みデータは、各演算回路５０Ａのメモリに書き込まれ、コンテキストの切り替えに応じて、異なる重みデータ９４＿１乃至９４＿４として用いて乗算データの生成を行うことができる。以下、１クロック（１ｃｌｋ）ごとに演算処理が進むものとして説明する。
【０１４４】  演算回路５０＿Ａに入力データを書き込んで１ｃｌｋ後、重みデータのセットから任意の重みデータがコンテキストの切り替えによって設定される。具体的には、図２１（Ｂ）に図示する下線を付した重みデータ（Ｗ１１，Ｗ２２，Ｗ３３，Ｗ４４）が設定され、各演算回路５０＿Ａでは保持している入力データ（Ｉ１，Ｉ２，Ｉ３，Ｉ４）との乗算データを生成する。各演算回路５０＿Ａでは、入力データ９３と重みデータ９４＿１との乗算データ（Ｗ１１・Ｉ１，Ｗ２２・Ｉ２，Ｗ３３・Ｉ３，Ｗ４４・Ｉ４）を生成する。
【０１４５】  次いで図２１（Ｂ）の状態から１ｃｌｋ後の図２１（Ｃ）では、図２１（Ｂ）とは異なるコンテキストの重みデータによって設定される。具体的には、図２１（Ｃ）に図示する下線を付した重みデータ（Ｗ４１，Ｗ１２，Ｗ２３，Ｗ３４）が設定され、各演算回路５０＿Ａでは保持している入力データ（Ｉ１，Ｉ２，Ｉ３，Ｉ４）との乗算データを生成する。各演算回路５０＿Ａでは、入力データ９３と重みデータ９４＿２との乗算データ（Ｗ４１・Ｉ１，Ｗ１２・Ｉ２，Ｗ２３・Ｉ３，Ｗ３４・Ｉ４）を生成する。さらに、各演算回路９０＿Ａでは、図２１（Ｂ）の状態で生成した乗算データ（Ｗ１１・Ｉ１，Ｗ２２・Ｉ２，Ｗ３３・Ｉ３，Ｗ４４・Ｉ４）を次列の加算データとして次列の演算回路５０＿Ａに出力する。
【０１４６】  次いで図２１（Ｃ）の状態から１ｃｌｋ後の図２１（Ｄ）では、図２１（Ｃ）とは異なるコンテキストの重みデータによって設定される。具体的には、図２１（Ｄ）に図示する下線を付した重みデータ（Ｗ３１，Ｗ４２，Ｗ１３，Ｗ２４）が設定され、各演算回路５０＿Ａでは保持している入力データ（Ｉ１，Ｉ２，Ｉ３，Ｉ４）との乗算データを生成する。例えば、各演算回路５０＿Ａでは、入力データ９３と重みデータ９４＿３との乗算データ（Ｗ３１・Ｉ１，Ｗ４２・Ｉ２，Ｗ１３・Ｉ３，Ｗ２４・Ｉ４）を生成する。さらに、各演算回路９０＿Ａでは、乗算データ（Ｗ４１・Ｉ１，Ｗ１２・Ｉ２，Ｗ２３・Ｉ３，Ｗ３４・Ｉ４）を、図２１（Ｃ）で出力された加算データ（Ｗ１１・Ｉ１，Ｗ２２・Ｉ２，Ｗ３３・Ｉ３，Ｗ４４・Ｉ４）に加算した積和演算データ（Ｗ１２・Ｉ２＋Ｗ１１・Ｉ１，Ｗ２３・Ｉ３＋Ｗ２２・Ｉ２，Ｗ３４・Ｉ４＋Ｗ３３・Ｉ３，Ｗ４１・Ｉ１＋Ｗ４４・Ｉ４）を次列の加算データとして次列の演算回路５０＿Ａに出力する。
【０１４７】  次いで図２１（Ｄ）の状態から１ｃｌｋ後の図２１（Ｅ）では、図２１（Ｄ）とは異なるコンテキストの重みデータによって設定される。具体的には、図２１（Ｅ）に図示する下線を付した重みデータ（Ｗ２１，Ｗ３２，Ｗ４３，Ｗ１４）が設定され、各演算回路５０＿Ａでは保持している入力データ（Ｉ１，Ｉ２，Ｉ３，Ｉ４）との乗算データを生成する。例えば、各演算回路５０＿Ａでは、入力データ９３と重みデータ９４＿４との乗算データ（Ｗ２１・Ｉ１，Ｗ３２・Ｉ２，Ｗ４３・Ｉ３，Ｗ１４・Ｉ４）を生成する。さらに、各演算回路９０＿Ａでは、乗算データ（Ｗ３１・Ｉ１，Ｗ４２・Ｉ２，Ｗ１３・Ｉ３，Ｗ２４・Ｉ４）を、図２１（Ｄ）で出力された加算データ（Ｗ１２・Ｉ２＋Ｗ１１・Ｉ１，Ｗ２３・Ｉ３＋Ｗ２２・Ｉ２，Ｗ３４・Ｉ４＋Ｗ３３・Ｉ３，Ｗ４１・Ｉ１＋Ｗ４４・Ｉ４）に加算した積和演算データ（Ｗ１３・Ｉ３＋Ｗ１２・Ｉ２＋Ｗ１１・Ｉ１，Ｗ２４・Ｉ４＋Ｗ２３・Ｉ３＋Ｗ２２・Ｉ２，Ｗ３１・Ｉ１＋Ｗ３４・Ｉ４＋Ｗ３３・Ｉ３，Ｗ４２・Ｉ２＋Ｗ４１・Ｉ１＋Ｗ４４・Ｉ４）を次列の加算データとして次列の演算回路５０＿Ａに出力する。
【０１４８】  次いで図２１（Ｄ）の状態から１ｃｌｋ後の図２１（Ｅ）において各演算回路９０＿Ａでは、図２１（Ｅ）で出力された加算データ（Ｗ１３・Ｉ３＋Ｗ１２・Ｉ２＋Ｗ１１・Ｉ１，Ｗ２４・Ｉ４＋Ｗ２３・Ｉ３＋Ｗ２２・Ｉ２，Ｗ３１・Ｉ１＋Ｗ３４・Ｉ４＋Ｗ３３・Ｉ３，Ｗ４２・Ｉ２＋Ｗ４１・Ｉ１＋Ｗ４４・Ｉ４）に乗算データ（Ｗ３１・Ｉ１，Ｗ４２・Ｉ２，Ｗ１３・Ｉ３，Ｗ２４・Ｉ４）を加算した積和演算データが得られる。図２１（Ｆ）に示すように、各演算回路では、積和演算データ９５＿２（Ｗ２１・Ｉ１＋Ｗ２４・Ｉ４＋Ｗ２３・Ｉ３＋Ｗ２２・Ｉ２，Ｗ３１・Ｉ１）、積和演算データ９５＿３（Ｗ３２・Ｉ２＋Ｗ３１・Ｉ１＋Ｗ３４・Ｉ４＋Ｗ３３・Ｉ３）、積和演算データ９５＿４（Ｗ４３・Ｉ３＋Ｗ４２・Ｉ２＋Ｗ４１・Ｉ１＋Ｗ４４・Ｉ４）、積和演算データ９５＿１（Ｗ１４・Ｉ４＋Ｗ１３・Ｉ３＋Ｗ１２・Ｉ２＋Ｗ１１・Ｉ１）を得ることができる。得られた積和演算データは、行列−ベクトル積で表したＹ（Ｙ１乃至Ｙ４）に相当する。
【０１４９】  図２１（Ａ）乃至（Ｆ）の構成では、演算途中で外部メモリへのデータアクセスが必要なく、また、全ての演算回路でデータの受け渡しを並列に行いながら積和演算データを効率よく得ることができる。そのため、ニューラルネットワーク回路において入力データおよび重みデータ等の増大に伴って、回路規模の大型化が問題となるが、この問題を解消することができる。
【０１５０】  次いで図２２乃至図２６は、図１１（Ｂ）、（Ｃ）に示す各データを用いて図１０で示した積和演算回路４０による全結合演算処理７７を行う際の動作を説明するための図である。
【０１５１】  図２２（Ａ）は、図９（Ｂ）で説明した全結合演算処理７７を抜き出したものである。また図２２（Ｂ）では、全結合演算処理７７ではデータ９０の８１個のデータが、判定するラベルの数、ここではチャンネル数が１０のデータ９２となる畳み込み演算処理を説明するための図である。
【０１５２】  図２２（Ｂ）では、データ９２の一つのラベルに対して、８１個のデータのそれぞれに対して重みパラメータとの積和演算を行い、さらに得られた値を足し合わせる演算処理を行う様子を図示している。全結合演算処理では、フィルタを用いないが、前述した畳み込み演算処理の回路リソースを利用して全結合演算処理を行うため、畳み込み演算処理と類似の回路規模にて演算を行う。従って、８１個の入力データを９個ずつに分割し積和演算を行うことが有効である。また、９個の入力データ毎に積和演算を行うが、入力データの番号１乃至９（図２２（Ｂ）中、データ９０に付した番号）までの９個のデータと、出力データの番号１（図２２（Ｂ）中、データ９２に付した番号）との間で行われる積和演算に用いる重みパラメータ群をＦ９１と呼ぶ。また、入力データの番号１乃至９までの９個のデータと、出力データの番号２乃至１０（図２２（Ｂ）中、データ９２に付した番号）との間で行われる積和演算に用いる重みパラメータ群をそれぞれ、Ｆ９２乃至Ｆ１００と呼ぶ。同様にして、入力データの番号１０乃至１８（図２２（Ｂ）中、データ９０に付した番号）までの９個のデータと、出力データの番号１乃至１０（図２２（Ｂ）中、データ９２に付した番号）との間で行われる積和演算に用いる重みパラメータ群をそれぞれ、Ｆ１０１乃至Ｆ１１０、Ｆ１１１乃至Ｆ１２０、Ｆ１２１乃至Ｆ１３０、Ｆ１３１乃至Ｆ１４０、Ｆ１４１乃至Ｆ１５０、Ｆ１５１乃至Ｆ１６０、Ｆ１６１乃至Ｆ１７０、Ｆ１７１乃至Ｆ１８０とする。
【０１５３】  図２２（Ａ）、（Ｂ）に示す全結合演算処理７７は、図１０で示した積和演算回路４０における９×１０の演算回路５０を用いて行う。図２３（Ａ）では、９×１０の演算回路５０を縦横に配置するとともに、行（ｒｏｗ）方向および列（ｃｏｌｕｍｎ）方向を図示している。列方向は、入力データと重みデータとによって得られる積和演算データのシフト（ＭＡＣ  ｄａｔａ  ｓｈｉｆｔ）方向となる。また図２３（Ａ）では、加算回路４１を図示している。
【０１５４】  図２３（Ａ）において、各演算回路５０には、データ９０の８１個のデータを別々にセットする。つまり図２３（Ａ）において、９行目の各列の演算回路５０にはデータ「１」乃至「９」、８行目の各列の演算回路５０には「１０」乃至「１８」といったようにデータをセットする。各行の１０列目の演算回路５０にはデータをセットしない（「０」をセットするでもよい）。つまり、乗算データがゼロで、入力される加算データへの加算分もゼロである。
【０１５５】  また図２３（Ａ）において、行方向の１行目の演算回路５０には、それぞれＦ１７１乃至Ｆ１８０の重みデータ群を列毎にセットする。同様に図２３（Ａ）において、行方向の２行目の演算回路５０には、それぞれＦ１６１乃至Ｆ１７０の重みデータ群を列毎にセットする。３行目以降の演算回路５０においても、それぞれＦ１６１乃至Ｆ１７０の重みデータ群を列毎にセットする。１０列目の演算回路５０は、ブランクデータとしてデータ、フィルタともにデータを与えない。
【０１５６】  なおＦ９１乃至Ｆ１８０は、図２２（Ｂ）に図示するように、全結合演算処理を行う際に１つのチャンネルにつき９つの重みデータ群（例えば、＜Ｆ９１、Ｆ１０１、（略）、Ｆ１７１＞、＜Ｆ９２、Ｆ１０２、（略）、Ｆ１７２＞、＜Ｆ１００、Ｆ１１０、（略）、Ｆ１８０＞）が必要になる。図２３（Ａ）の構成では、複数の重みデータ群を用いて積和演算を行い、あとで得られたデータを加算することで全結合演算処理を行う構成とする。少ない演算回路数で、超並列の全結合演算処理を効率よく行うことができる。
【０１５７】  例えばコンテキスト「１１」で１行１列目の演算回路５０にＦ１７１の重みデータ、１行２列目の演算回路５０にＦ１７２の重みデータ、１行３列目の演算回路５０にＦ１７３の重みデータのように重みデータ群をセットする。１行９列目の演算回路５０にはＦ１７９の重みデータのように重みデータ群をセットし、１行１０列目にはデータおよび重みデータ群をセットしないが、Ｆ１８０を対応させておく。コンテキスト「１２」以降は演算回路５０に対応する重みデータ群を列方向にシフトさせる。１０列目の演算回路５０に対応していた重みデータ群は、１列目に戻る。例えばコンテキスト「１２」で１行１列目の演算回路５０にＦ１８０の重みデータ、１行２列目の演算回路５０にＦ１７１の重みデータ、１行３列目の演算回路５０にＦ１７２の重みデータのように重みデータ群をセットする。１行９列目の演算回路５０にはＦ１７８の重みデータのように重みデータ群をセットし、１行１０列目にはデータおよび重みデータ群をセットしないが、Ｆ１７９を対応させておく。
【０１５８】  セットした重みデータは、コンテキストの切り替えで別の重みデータ群の重みデータに切り替えることができる。コンテキストの切り替えは、演算回路１０列分を重みデータ群のシフトが一巡りするまで行う。つまりコンテキストをコンテキスト「１１」から「２０」に順に切り替える。
【０１５９】  演算結果のデータをシフトすることによって得られた積和演算データは、加算回路４１に読み出される。加算回路４１では、同じ列での積和演算データを足しあわせる。そして得られるデータが全結合演算処理後のデータに相当する。
【０１６０】  上述した図２３（Ａ）の動作をまとめると、図２３（Ｂ）のように表すことができる。
【０１６１】  全結合演算処理７７を行う際、８１個のデータ「１」乃至「８１」と異なる重みデータ群との積和演算を実行するため、コンテキスト信号ｃｏｎｔｅｘｔはコンテキストをコンテキスト「１１」から「２０」に順に切り替える。時刻Ｔｗｒｉｔｅ３でデータ「１」乃至「８１」を演算回路５０にセットした後、時刻Ｔ２０乃至Ｔ２９でコンテキストをコンテキスト「１１」から「２０」に順に切り替える。８１個のデータ「１」乃至「８１」と９つの重みデータ群との積和演算がそれぞれの演算回路５０で得られた後、時刻Ｔｒｅａｄ２で加算回路４１に読み出し、積和演算処理を行ったデータ（ＣＨ１０  １×１）を得る。
【０１６２】  より具体的な例について図２４乃至図２６で説明する。
【０１６３】  図２４（Ａ）は時刻Ｔｗｒｉｔｅ３での演算回路５０に保持された入力データを可視化した図である。図２４（Ａ）に図示するように、各行各列の演算回路５０に８１個のデータ「１」乃至「８１」をセットする。各行１０列目の演算回路５０には、空のデータとして「０」を図示している。なお演算回路５０内のメモリ５２には、重みデータのセットが書き込まれている。重みデータのセットは、コンテキストの切り替えに対応して切り替えられる。
【０１６４】  図２４（Ｂ）は時刻Ｔ２０での演算回路５０に保持されたデータを可視化した図である。時刻Ｔ２０では、コンテキスト信号の切り替えにより、コンテキスト「１１」として、下記演算回路５０で乗算するための重みデータ群を図２４（Ｂ）に図示するようにセットする。列方向の矢印は、乗算データ、あるいは乗算データに前列の加算データを加算した加算データのシフト方向を表している。同じ行にある演算回路５０間に付した「Ｆ１７１」等は、Ｆ１７１との積和演算するための重みデータ群である。演算で得られるデータは、前列の加算データを加算して、データのシフト方向にある演算回路５０に加算データとして出力される。
【０１６５】  例えば１行目の演算回路５０での動作に着目して説明すると、データ「７３」が保持された１列目の演算回路５０は、Ｆ１７１との演算を行う。得られたデータを１０列目の演算回路５０から出力されたデータ（この場合０）に加算して２列目の演算回路５０に出力する。同時に、データ「７４」が保持された２列目の演算回路５０は、Ｆ１７２との演算を行う。得られたデータを１列目の演算回路５０から出力されたデータに加算して３列目の演算回路５０に出力する。３列目乃至８列目の演算回路５０においても、それぞれデータとＦ１７３乃至Ｆ１７８との演算を行い、得られたデータを演算回路５０に出力する。同時に、データ「８１」が保持された９列目の演算回路５０は、Ｆ１７９との演算を行う。得られたデータを８列目の演算回路５０から出力されたデータに加算して１０列目の演算回路５０に出力する。同時に、データが保持されていない１０列目の演算回路５０は、空のデータであるため乗算データが得られない。つまり１０列目の演算回路５０から出力される加算データは、９列目の演算回路５０から出力された加算データのままとなる。
【０１６６】  図２５（Ａ）は時刻Ｔ２１での演算回路５０に保持された入力データを可視化した図である。時刻Ｔ２１では、コンテキスト信号の切り替えにより、コンテキスト「１２」として、下記演算回路５０で乗算するための重みデータ群を図２５（Ａ）に図示するようにセットする。
【０１６７】  例えば１行目の演算回路５０での動作に着目して説明すると、データ「７３」が保持された１列目の演算回路５０は、Ｆ１８０との演算を行う。得られたデータを１０列目の演算回路５０から出力されたデータ（この場合０）に加算して２列目の演算回路５０に出力する。同時に、データ「７４」が保持された２列目の演算回路５０は、Ｆ１７１との演算を行う。得られたデータを１列目の演算回路５０から出力されたデータ（この場合、時刻Ｔ２１で行ったデータ「７３」とＦ１７１の乗算データ）に加算して３列目の演算回路５０に出力する。３列目乃至８列目の演算回路５０においても、それぞれデータとＦ１７２乃至Ｆ１７７との演算を行い、得られたデータを演算回路５０に出力する。同時に、データ「８１」が保持された９列目の演算回路５０は、Ｆ１７８との演算を行う。得られたデータを８列目の演算回路５０から出力されたデータ（この場合、時刻Ｔ２１で行ったデータ「８０」とＦ１７８の乗算データ）に加算して１０列目の演算回路５０に出力する。同時に、データが保持されていない１０列目の演算回路５０は、空のデータであるため乗算データが得られない。つまり１０列目の演算回路５０から出力されるデータは、９列目の演算回路５０から出力されたデータ（この場合、時刻Ｔ２１で行ったデータ「８１」とＦ１７９の乗算データ）のままとなる。
【０１６８】  時刻Ｔ２２乃至時刻Ｔ２８においても、コンテキスト信号の切り替えにより、コンテキスト「１３」乃至「１９」として、下記演算回路５０で乗算するための重みデータをセットし、保持しているデータと重みデータ群との演算を行い、演算回路５０に出力することを行う。
【０１６９】  図２５（Ｂ）は時刻Ｔ２９での演算回路５０に保持された入力データを可視化した図である。時刻Ｔ２９では、コンテキスト信号の切り替えにより、コンテキスト「２０」として、下記演算回路５０で乗算するための重みデータ群を図２５（Ｂ）に図示するようにセットする。
【０１７０】  例えば１行目の演算回路５０での動作に着目して説明すると、データ「７３」が保持された１列目の演算回路５０は、Ｆ１７２との演算を行う。得られたデータを１０列目の演算回路５０から出力されたデータ（この場合データ「７４」乃至「８１」とＦ１７１、Ｆ１７３乃至Ｆ１８０との組み合わせの積和演算）に加算して２列目の演算回路５０に出力する。同時に、データ「７４」が保持された２列目の演算回路５０は、Ｆ１７３との演算を行う。得られたデータを１列目の演算回路５０から出力されたデータ（この場合、データ「７３」、データ「７５」乃至「８１」とＦ１７１、Ｆ１７２、Ｆ１７４乃至Ｆ１８０との組み合わせの積和演算）に加算して３列目の演算回路５０に出力する。３列目乃至８列目の演算回路５０においても、それぞれデータと、Ｆ１７４乃至Ｆ１７８との演算を行い、得られたデータを演算回路５０に出力する。同時に、データ「８１」が保持された９列目の演算回路５０は、Ｆ１８０との演算を行う。得られたデータを８列目の演算回路５０から出力されたデータ（この場合、データ「７３」乃至「８０」とＦ１７１乃至Ｆ１７９との組み合わせの積和演算）に加算して１０列目の演算回路５０に出力する。同時に、データが保持されていない１０列目の演算回路５０は、空のデータであるため乗算データが得られない。つまり１０列目の演算回路５０から出力されるデータは、９列目の演算回路５０から出力されたデータ（この場合、データ「７３」乃至「８１」とＦ１７１乃至Ｆ１７９との組み合わせの積和演算）のままとなる。
【０１７１】  ２行目乃至９列目の演算回路５０においても、それぞれＦ９１乃至Ｆ１７０との演算を行い、得られたデータを演算回路５０に出力する。つまり時刻Ｔ２９の状態で各演算回路５０には、各行に保持したデータと、各行に保持してコンテキスト信号を切り替えることで得られた重みデータ群との積和演算の結果が保持されていることになる。
【０１７２】  図２６は時刻Ｔｒｅａｄ２での動作を可視化した図である。行方向の矢印は、Ｔ２０乃至Ｔ２９で得られた積和演算によるデータのシフト方向を表している。図２６に示すように時刻Ｔｒｅａｄ２では、１乃至９行目に保持された積和演算によるデータを順に加算回路４１にシフトさせて、得られたデータの和を列毎に得る。得られたデータは積和演算回路４０の外部にある演算ユニット２３にて、ＲｅＬＵによる処理を行うことで全結合したデータを得る。
【０１７３】  本実施の形態のニューラルネットワーク回路の構成では、入力されるデータの構成、およびフィルタおよび重みデータ群の構成等に応じて動作を切り替えることで、各演算回路において乗算データおよび加算データを効率よく生成し、積和演算を効率よく行うことができる。そのため、ニューラルネットワーク回路において入力データおよび重みデータ等の増大に伴って、回路規模の大型化が問題となるが、この問題を解消することができる。つまり、同じ回路を用いて異なる処理の積和演算を行う構成とすることができるため、回路リソースの有効活用を図ることができる。
【０１７４】（実施の形態２）
本実施の形態は、上記実施の形態に示すニューラルネットワーク回路が組み込まれたＩＣ（ニューラルネットワークシステムＩＣ）の一例を示す。
【０１７５】  上記実施の形態に示すニューラルネットワーク回路は、Ｓｉトランジスタでなる乗算回路および加算回路を有する演算回路５０と、ＯＳトランジスタを用いたメモリ回路と、１のダイに集積することができる。
【０１７６】  図２７に、ニューラルネットワーク回路を組み込んだＩＣの一例を示す。図２７に示すニューラルネットワークシステムＩＣ７０００は、リード７００１及び回路部７００３を有する。回路部７００３には、上記実施の形態で示した各種の回路が１のダイに設けられている。回路部７００３は積層構造をもち、Ｓｉトランジスタ層７０３１、配線層７０３２、ＯＳトランジスタ層７０３３に大別される。ＯＳトランジスタ層７０３３をＳｉトランジスタ層７０３１に積層して設けることができるため、ニューラルネットワークシステムＩＣ７０００の小型化が容易である。
【０１７７】  図２７では、ニューラルネットワークシステムＩＣ７０００のパッケージにＱＦＰ（Ｑｕａｄ  Ｆｌａｔ  Ｐａｃｋａｇｅ）を適用しているが、パッケージの態様はこれに限定されない。
【０１７８】  Ｓｉトランジスタでなる演算回路５０と、ＯＳトランジスタを有するメモリ回路は、全て、Ｓｉトランジスタ層７０３１、配線層７０３２およびＯＳトランジスタ層７０３３に形成することができる。すなわち、上記ニューラルネットワーク回路を構成する素子は、同一の製造プロセスで形成することが可能である。そのため、本実施の形態に示すＩＣは、構成する素子が増えても製造プロセスを増やす必要がなく、上記ニューラルネットワーク回路を低コストで組み込むことができる。
【０１７９】（実施の形態３）
本実施の形態では、上記実施の形態に示すニューラルネットワーク回路のメモリ回路に搭載可能なＯＳメモリについて説明する。本実施の形態では、ＯＳメモリの一例として、ＤＯＳＲＡＭおよびＮＯＳＲＡＭについて説明する。
【０１８０】＜＜ＤＯＳＲＡＭ１４００＞＞
図２８（Ａ）−図２８（Ｃ）を参照して、ＤＯＳＲＡＭについて説明する。
【０１８１】  図２８（Ａ）に示すＤＯＳＲＡＭ１４００は、コントローラ１４０５、行回路１４１０、列回路１４１５、ＭＣ−ＳＡアレイ１４２０を有する。行回路１４１０はデコーダ１４１１、ワード線ドライバ１４１２、列セレクタ１４１３、センスアンプドライバ１４１４を有する。列回路１４１５はグローバルセンスアンプアレイ１４１６、入出力回路１４１７を有する。グローバルセンスアンプアレイ１４１６は複数のグローバルセンスアンプ１４４７を有する。ＭＣ−ＳＡアレイ１４２０はメモリセルアレイ１４２２、センスアンプアレイ１４２３、グローバルビット線ＧＢＬＬ、ＧＢＬＲを有する。
【０１８２】＜ＭＣ−ＳＡアレイ１４２０＞
ＭＣ−ＳＡアレイ１４２０は、メモリセルアレイ１４２２をセンスアンプアレイ１４２３上に積層した積層構造をもつ。グローバルビット線ＧＢＬＬ、ＧＢＬＲはメモリセルアレイ１４２２上に積層されている。ＤＯＳＲＡＭ１４００では、ビット線の構造に、ローカルビット線とグローバルビット線とで階層化された階層ビット線構造が採用されている。
【０１８３】  メモリセルアレイ１４２２は、Ｎ個（Ｎは２以上の整数）のローカルメモリセルアレイ１４２５＜０＞−４２５＜Ｎ−１＞を有する。図２８（Ｂ）に示すように、ローカルメモリセルアレイ１４２５は、複数のメモリセル１４４５、複数のワード線ＷＬ、複数のビット線ＢＬＬ、ＢＬＲを有する。図２８（Ｂ）の例では、ローカルメモリセルアレイ１４２５の構造はオープンビット線型であるが、フォールデッドビット線型であってもよい。
【０１８４】  図２８（Ａ）に示すメモリセル１４４５は、ＯＳトランジスタＭＯ４５、容量素子Ｃ４５を有する。ＯＳトランジスタＭＯ４５は容量素子Ｃ４５の充放電を制御する機能をもつ。ＯＳトランジスタＭＯ４５のゲートはワード線に電気的に接続され、バックゲートは配線ＢＧＬに電気的に接続され、第１端子はビット線ＢＬＬまたはＢＬＲに電気的に接続され、第２端子は容量素子Ｃ４５の第１端子に電気的に接続されている。容量素子Ｃ４５の第２端子は配線ＰＣＬに電気的に接続されている。配線ＣＳＬ、ＢＧＬは電圧を供給するための電源線である。
【０１８５】  配線ＢＧＬの電圧によって、ＯＳトランジスタＭＯ４５の閾値電圧を変更することができる。例えば、端子Ｂ２の電圧は固定電圧（例えば、負の定電圧）であってもよいし、ＤＯＳＲＡＭ１４００の動作に応じて、端子Ｂ２の電圧を変化させてもよい。
【０１８６】  ＯＳトランジスタＭＯ４５のバックゲートをＯＳトランジスタＭＯ４５のゲート、ソース、またはドレインに電気的に接続してもよい。あるいは、ＯＳトランジスタＭＯ４５にバックゲートを設けなくてもよい。
【０１８７】  センスアンプアレイ１４２３は、Ｎ個のローカルセンスアンプアレイ１４２６＜０＞−４２６＜Ｎ−１＞を有する。ローカルセンスアンプアレイ１４２６は、１のスイッチアレイ１４４４、複数のセンスアンプ１４４６を有する。センスアンプ１４４６には、ビット線対が電気的に接続されている。センスアンプ１４４６は、ビット線対をプリチャージする機能、ビット線対の電圧差を増幅する機能、この電圧差を保持する機能を有する。スイッチアレイ１４４４は、ビット線対を選択し、選択したビット線対とグローバルビット線対と間を導通状態にする機能を有する。
【０１８８】  ここで、ビット線対とは、センスアンプによって、同時に比較される２本のビット線のことをいう。グローバルビット線対とは、グローバルセンスアンプによって、同時に比較される２本のグローバルビット線のことをいう。ビット線対を一対のビット線と呼ぶことができ、グローバルビット線対を一対のグローバルビット線と呼ぶことができる。ここでは、ビット線ＢＬＬとビット線ＢＬＲが１組のビット線対を成す。グローバルビット線ＧＢＬＬとグローバルビット線ＧＢＬＲとが１組のグローバルビット線対をなす。以下、ビット線対（ＢＬＬ，ＢＬＲ）、グローバルビット線対（ＧＢＬＬ，ＧＢＬＲ）とも表す。
【０１８９】＜コントローラ１４０５＞
コントローラ１４０５は、ＤＯＳＲＡＭ１４００の動作全般を制御する機能を有する。コントローラ１４０５は、外部からの入力されるコマンド信号を論理演算して、動作モードを決定する機能、決定した動作モードが実行されるように、行回路１４１０および列回路１４１５の制御信号を生成する機能、外部から入力されるアドレス信号を保持する機能、内部アドレス信号を生成する機能を有する。
【０１９０】＜行回路１４１０＞
行回路１４１０は、ＭＣ−ＳＡアレイ１４２０を駆動する機能を有する。デコーダ１４１１はアドレス信号をデコードする機能を有する。ワード線ドライバ１４１２は、アクセス対象行のワード線ＷＬを選択する選択信号を生成する。
【０１９１】  列セレクタ１４１３、センスアンプドライバ１４１４はセンスアンプアレイ１４２３を駆動するための回路である。列セレクタ１４１３は、アクセス対象列のビット線を選択するための選択信号を生成する機能をもつ。列セレクタ１４１３の選択信号によって、各ローカルセンスアンプアレイ１４２６のスイッチアレイ１４４４が制御される。センスアンプドライバ１４１４の制御信号によって、複数のローカルセンスアンプアレイ１４２６は独立して駆動される。
【０１９２】＜列回路１４１５＞
列回路１４１５は、データ信号ＷＤＡ［３１：０］の入力を制御する機能、データ信号ＲＤＡ［３１：０］の出力を制御する機能を有する。データ信号ＷＤＡ［３１：０］は書き込みデータ信号であり、データ信号ＲＤＡ［３１：０］は読み出しデータ信号である。
【０１９３】  グローバルセンスアンプ１４４７はグローバルビット線対（ＧＢＬＬ，ＧＢＬＲ）に電気的に接続されている。グローバルセンスアンプ１４４７はグローバルビット線対（ＧＢＬＬ，ＧＢＬＲ）間の電圧差を増幅する機能、この電圧差を保持する機能を有する。グローバルビット線対（ＧＢＬＬ，ＧＢＬＲ）へのデータの書き込み、および読み出しは、入出力回路１４１７によって行われる。
【０１９４】  ＤＯＳＲＡＭ１４００の書き込み動作の概要を説明する。入出力回路１４１７によって、データがグローバルビット線対に書き込まれる。グローバルビット線対のデータは、グローバルセンスアンプアレイ１４１６によって保持される。アドレスが指定するローカルセンスアンプアレイ１４２６のスイッチアレイ１４４４によって、グローバルビット線対のデータが、対象列のビット線対に書き込まれる。ローカルセンスアンプアレイ１４２６は、書き込まれたデータを増幅し、保持する。指定されたローカルメモリセルアレイ１４２５において、行回路１４１０によって、対象行のワード線ＷＬが選択され、選択行のメモリセル１４４５にローカルセンスアンプアレイ１４２６の保持データが書き込まれる。
【０１９５】  ＤＯＳＲＡＭ１４００の読み出し動作の概要を説明する。アドレス信号によって、ローカルメモリセルアレイ１４２５の１行が指定される。指定されたローカルメモリセルアレイ１４２５において、対象行のワード線ＷＬが選択状態となり、メモリセル１４４５のデータがビット線に書き込まれる。ローカルセンスアンプアレイ１４２６によって、各列のビット線対の電圧差がデータとして検出され、かつ保持される。スイッチアレイ１４４４によって、ローカルセンスアンプアレイ１４２６の保持データの内、アドレスが指定する列のデータが、グローバルビット線対に書き込まれる。グローバルセンスアンプアレイ１４１６は、グローバルビット線対のデータを検出し、保持する。グローバルセンスアンプアレイ１４１６の保持データは入出力回路１４１７に出力される。以上で、読み出し動作が完了する。
【０１９６】  容量素子Ｃ４５の充放電によってデータを書き換えるため、ＤＯＳＲＡＭ１４００は原理的には書き換え回数に制約はなく、かつ、低エネルギーで、データの書き込みおよび読み出しが可能である。また、メモリセル１４４５の回路構成が単純であるため、大容量化が容易である。よって、ＤＯＳＲＡＭ１４００は大容量のデータを高頻度で書き換えるメモリ装置、例えば、画像処理に利用されるフレームメモリに好適である。
【０１９７】  ＯＳトランジスタＭＯ４５はＯＳトランジスタである。ＯＳトランジスタはオフ電流が極めて小さいため、容量素子Ｃ４５から電荷がリークすることを抑えることができるので、ＤＯＳＲＡＭ１４００は保持時間がＤＲＡＭに比べて非常に長いため、リフレッシュレート頻度を低減できる。従って、ＤＯＳＲＡＭ１４００はフレッシュ動作に要する電力を削減できる。
【０１９８】  ＭＣ−ＳＡアレイ１４２０が積層構造であることよって、ローカルセンスアンプアレイ１４２６の長さと同程度の長さにビット線を短くすることができる。ビット線を短くすることで、ビット線容量が小さくなり、メモリセル１４４５の保持容量を低減することができる。また、ローカルセンスアンプアレイ１４２６にスイッチアレイ１４４４を設けることで、長いビット線の本数を減らすことができる。以上の理由から、ＤＯＳＲＡＭ１４００のアクセス時に駆動する負荷が低減される。
【０１９９】  以上のことから、ＤＯＳＲＡＭ１４００を上記実施の形態に示すメモリ５２に用いることで、ニューラルネットワークシステムの消費電力を低減することができる。
【０２００】＜＜ＮＯＳＲＡＭ＞＞
図２９および図３０を参照してＮＯＳＲＡＭについて説明する。ここでは、１のメモリセルで多値データを記憶する多値ＮＯＳＲＡＭについて説明する。
【０２０１】  図２９に示すＮＯＳＲＡＭ１６００は、メモリセルアレイ１６１０、コントローラ１６４０、行ドライバ１６５０、列ドライバ１６６０、出力ドライバ１６７０を有する。
【０２０２】  メモリセルアレイ１６１０は複数のメモリセル１６１１、複数のワード線ＷＷＬ、ＲＷＬ、ビット線ＢＬ、ソース線ＳＬを有する。ワード線ＷＷＬは書き込みワード線であり、ワード線ＲＷＬは読み出しワード線である。ＮＯＳＲＡＭ１６００では、１のメモリセル１６１１で３ビット（８値）のデータを記憶する。
【０２０３】  コントローラ１６４０は、ＮＯＳＲＡＭ１６００全体を統括的に制御し、データＷＤＡ［３１：０］の書き込み、データＲＤＡ［３１：０］の読み出しを行う。コントローラ１６４０は、外部からのコマンド信号（例えば、チップイネーブル信号、書き込みイネーブル信号など）を処理して、行ドライバ１６５０、列ドライバ１６６０および出力ドライバ１６７０の制御信号を生成する。
【０２０４】  行ドライバ１６５０は、アクセスする行を選択する機能を有する。行ドライバ１６５０は、行デコーダ１６５１、およびワード線ドライバ１６５２を有する。
【０２０５】  列ドライバ１６６０は、ソース線ＳＬおよびビット線ＢＬを駆動する。列ドライバ１６６０は、列デコーダ１６６１、書き込みドライバ１６６２、ＤＡＣ（デジタル−アナログ変換回路）１６６３を有する。
【０２０６】  ＤＡＣ１６６３は３ビットのデジタルデータをアナログ電圧に変換する。ＤＡＣ１６６３は３２ビットのデータＷＤＡ［３１：０］を３ビットごとに、アナログ電圧に変換する。
【０２０７】  書き込みドライバ１６６２は、ソース線ＳＬをプリチャージする機能、ソース線ＳＬを電気的に浮遊状態にする機能、ソース線ＳＬを選択する機能、選択されたソース線ＳＬにＤＡＣ１６６３で生成した書き込み電圧を入力する機能、ビット線ＢＬをプリチャージする機能、ビット線ＢＬを電気的に浮遊状態にする機能等を有する。
【０２０８】  出力ドライバ１６７０は、セレクタ１６７１、ＡＤＣ（アナログ−デジタル変換回路）１６７２、出力バッファ１６７３を有する。セレクタ１６７１は、アクセスするソース線ＳＬを選択し、選択されたソース線ＳＬの電圧をＡＤＣ１６７２に送信する。ＡＤＣ１６７２は、アナログ電圧を３ビットのデジタルデータに変換する機能を持つ。ソース線ＳＬの電圧はＡＤＣ１６７２において、３ビットのデータに変換され、出力バッファ１６７３はＡＤＣ１６７２から出力されるデータを保持する。
【０２０９】＜メモリセル＞
図３０（Ａ）はメモリセル１６１１の構成例を示す回路図である。メモリセル１６１１は２Ｔ型のゲインセルであり、メモリセル１６１はワード線ＷＷＬ、ＲＷＬ、ビット線ＢＬ、ソース線ＳＬ、配線ＢＧＬに電気的に接続されている。メモリセル１６１１は、ノードＳＮ、ＯＳトランジスタＭＯ６１、トランジスタＭＰ６１、容量素子Ｃ６１を有する。ＯＳトランジスタＭＯ６１は書き込みトランジスタである。トランジスタＭＰ６１は読み出しトランジスタであり、例えばｐチャネル型Ｓｉトランジスタで構成される。容量素子Ｃ６１はノードＳＮの電圧を保持するための保持容量である。ノードＳＮはデータの保持ノードであり、ここではトランジスタＭＰ６１のゲートに相当する。
【０２１０】  メモリセル１６１１の書き込みトランジスタがＯＳトランジスタＭＯ６１で構成されているため、ＮＯＳＲＡＭ１６００は長時間データを保持することが可能である。
【０２１１】  図３０（Ａ）の例では、ビット線は、書き込みと読み出しで共通のビット線であるが、図３０（Ｂ）に示すように、書き込みビット線ＷＢＬと、読み出しビット線ＲＢＬとを設けてもよい。
【０２１２】  図３０（Ｃ）−図３０（Ｅ）にメモリセルの他の構成例を示す。図３０（Ｃ）−図３０（Ｅ）には、書き込み用ビット線と読み出し用ビット線を設けた例を示しているが、図３０（Ａ）のように書き込みと読み出しで共有されるビット線を設けてもよい。
【０２１３】  図３０（Ｃ）に示すメモリセル１６１２は、メモリセル１６１１の変形例であり、読み出しトランジスタをｎチャネル型トランジスタ（ＭＮ６１）に変更したものである。トランジスタＭＮ６１はＯＳトランジスタであってもよいし、Ｓｉトランジスタであってもよい。
【０２１４】  メモリセル１６１１、１６１２において、ＯＳトランジスタＭＯ６１はバックゲートの無いＯＳトランジスタであってもよい。
【０２１５】  図３０（Ｄ）に示すメモリセル１６１３は、３Ｔ型ゲインセルであり、ワード線ＷＷＬ、ＲＷＬ、ビット線ＷＢＬ、ＲＢＬ、ソース線ＳＬ、配線ＢＧＬ、ＰＣＬに電気的に接続されている。メモリセル１６１３は、ノードＳＮ、ＯＳトランジスタＭＯ６２、トランジスタＭＰ６２、トランジスタＭＰ６３、容量素子Ｃ６２を有する。ＯＳトランジスタＭＯ６２は書き込みトランジスタである。トランジスタＭＰ６２は読み出しトランジスタであり、トランジスタＭＰ６３は選択トランジスタである。
【０２１６】  図３０（Ｅ）に示すメモリセル１６１４は、メモリセル１６１３の変形例であり、読み出しトランジスタおよび選択トランジスタをｎチャネル型トランジスタ（ＭＮ６２、ＭＮ６３）に変更したものである。トランジスタＭＮ６２、ＭＮ６３はＯＳトランジスタであってもよいし、Ｓｉトランジスタであってもよい。
【０２１７】  メモリセル１６１１−１６１４に設けられるＯＳトランジスタは、バックゲートの無いトランジスタでもよいし、バックゲートが有るトランジスタであってもよい。
【０２１８】  容量素子Ｃ６１の充放電によってデータを書き換えるため、ＮＯＳＲＡＭ１６００は原理的には書き換え回数に制約はなく、かつ、低エネルギーで、データの書き込みおよび読み出しが可能である。また、長時間データを保持することが可能であるので、リフレッシュ頻度を低減できる。よって、ＤＯＳＲＡＭ１４００は大容量のデータを高頻度で書き換えるメモリ装置、例えば、画像処理に利用されるフレームメモリに好適である。
【０２１９】  ＮＯＳＲＡＭ１６００を上記実施の形態に示すメモリ５２に用いることで、ニューラルネットワーク回路の消費電力を低減することができる。
【０２２０】（本明細書等の記載に関する付記）
以上の実施の形態、及び実施の形態における各構成の説明について、以下に付記する。
【０２２１】  各実施の形態に示す構成は、他の実施の形態に示す構成と適宜組み合わせて、本発明の一態様とすることができる。また、１つの実施の形態の中に、複数の構成例が示される場合は、互いに構成例を適宜組み合わせることが可能である。
【０２２２】  なお、ある一つの実施の形態の中で述べる内容（一部の内容でもよい）は、その実施の形態で述べる別の内容（一部の内容でもよい）、及び／又は、一つ若しくは複数の別の実施の形態で述べる内容（一部の内容でもよい）に対して、適用、組み合わせ、又は置き換えなどを行うことが出来る。
【０２２３】  なお、実施の形態の中で述べる内容とは、各々の実施の形態において、様々な図を用いて述べる内容、又は明細書に記載される文章を用いて述べる内容のことである。
【０２２４】  なお、ある一つの実施の形態において述べる図（一部でもよい）は、その図の別の部分、その実施の形態において述べる別の図（一部でもよい）、及び／又は、一つ若しくは複数の別の実施の形態において述べる図（一部でもよい）に対して、組み合わせることにより、さらに多くの図を構成させることが出来る。
【０２２５】  また本明細書等において、ブロック図では、構成要素を機能毎に分類し、互いに独立したブロックとして示している。しかしながら実際の回路等においては、構成要素を機能毎に切り分けることが難しく、一つの回路に複数の機能が係わる場合や、複数の回路にわたって一つの機能が関わる場合があり得る。そのため、ブロック図のブロックは、明細書で説明した構成要素に限定されず、状況に応じて適切に言い換えることができる。
【０２２６】  また、図面において、大きさ、層の厚さ、又は領域は、説明の便宜上任意の大きさに示したものである。よって、必ずしもそのスケールに限定されない。なお図面は明確性を期すために模式的に示したものであり、図面に示す形状又は値などに限定されない。例えば、ノイズによる信号、電圧、若しくは電流のばらつき、又は、タイミングのずれによる信号、電圧、若しくは電流のばらつきなどを含むことが可能である。
【０２２７】  本明細書等において、トランジスタの接続関係を説明する際、ソースとドレインとの一方を、「ソース又はドレインの一方」（又は第１電極、又は第１端子）と表記し、ソースとドレインとの他方を「ソース又はドレインの他方」（又は第２電極、又は第２端子）と表記している。これは、トランジスタのソースとドレインは、トランジスタの構造又は動作条件等によって変わるためである。なおトランジスタのソースとドレインの呼称については、ソース（ドレイン）端子や、ソース（ドレイン）電極等、状況に応じて適切に言い換えることができる。
【０２２８】  また、本明細書等において「電極」や「配線」の用語は、これらの構成要素を機能的に限定するものではない。例えば、「電極」は「配線」の一部として用いられることがあり、その逆もまた同様である。さらに、「電極」や「配線」の用語は、複数の「電極」や「配線」が一体となって形成されている場合なども含む。
【０２２９】  また、本明細書等において、電圧と電位は、適宜言い換えることができる。電圧は、基準となる電位からの電位差のことであり、例えば基準となる電位をグラウンド電圧（接地電圧）とすると、電圧を電位に言い換えることができる。グラウンド電位は必ずしも０Ｖを意味するとは限らない。なお電位は相対的なものであり、基準となる電位によっては、配線等に与える電位を変化させる場合がある。
【０２３０】  なお本明細書等において、「膜」、「層」などの語句は、場合によっては、または、状況に応じて、互いに入れ替えることが可能である。例えば、「導電層」という用語を、「導電膜」という用語に変更することが可能な場合がある。または、例えば、「絶縁膜」という用語を、「絶縁層」という用語に変更することが可能な場合がある。
【０２３１】  本明細書等において、スイッチとは、導通状態（オン状態）、または、非導通状態（オフ状態）になり、電流を流すか流さないかを制御する機能を有するものをいう。または、スイッチとは、電流を流す経路を選択して切り替える機能を有するものをいう。
【０２３２】  一例としては、電気的スイッチ又は機械的なスイッチなどを用いることができる。つまり、スイッチは、電流を制御できるものであればよく、特定のものに限定されない。
【０２３３】  電気的なスイッチの一例としては、トランジスタ（例えば、バイポーラトランジスタ、ＭＯＳトランジスタなど）、ダイオード（例えば、ＰＮダイオード、ＰＩＮダイオード、ショットキーダイオード、ＭＩＭ（Ｍｅｔａｌ  Ｉｎｓｕｌａｔｏｒ  Ｍｅｔａｌ）ダイオード、ＭＩＳ（Ｍｅｔａｌ  Ｉｎｓｕｌａｔｏｒ  Ｓｅｍｉｃｏｎｄｕｃｔｏｒ）ダイオード、ダイオード接続のトランジスタなど）、又はこれらを組み合わせた論理回路などがある。
【０２３４】  なお、スイッチとしてトランジスタを用いる場合、トランジスタの「導通状態」とは、トランジスタのソースとドレインが電気的に短絡されているとみなせる状態をいう。また、トランジスタの「非導通状態」とは、トランジスタのソースとドレインが電気的に遮断されているとみなせる状態をいう。なおトランジスタを単なるスイッチとして動作させる場合には、トランジスタの極性（導電型）は特に限定されない。
【０２３５】  機械的なスイッチの一例としては、デジタルマイクロミラーデバイス（ＤＭＤ）のように、ＭＥＭＳ（マイクロ・エレクトロ・メカニカル・システム）技術を用いたスイッチがある。そのスイッチは、機械的に動かすことが可能な電極を有し、その電極が動くことによって、導通と非導通とを制御して動作する。
【０２３６】  本明細書等において、チャネル長とは、例えば、トランジスタの上面図において、半導体（またはトランジスタがオン状態のときに半導体の中で電流の流れる部分）とゲートとが重なる領域、またはチャネルが形成される領域における、ソースとドレインとの間の距離をいう。
【０２３７】  本明細書等において、チャネル幅とは、例えば、半導体（またはトランジスタがオン状態のときに半導体の中で電流の流れる部分）とゲート電極とが重なる領域、またはチャネルが形成される領域における、ソースとドレインとが向かい合っている部分の長さをいう。
【０２３８】  本明細書等において、ＡとＢとが接続されている、とは、ＡとＢとが直接接続されているものの他、電気的に接続されているものを含むものとする。ここで、ＡとＢとが電気的に接続されているとは、ＡとＢとの間で、何らかの電気的作用を有する対象物が存在するとき、ＡとＢとの電気信号の授受を可能とするものをいう。
【符号の説明】
【０２３９】  Ｃ４５  容量素子
Ｃ６１  容量素子
Ｃ６２  容量素子
ＭＮ６１  トランジスタ
ＭＮ６２  トランジスタ
ＭＯ４５  ＯＳトランジスタ
ＭＯ６１  ＯＳトランジスタ
ＭＯ６２  ＯＳトランジスタ
ＭＰ６１  トランジスタ
ＭＰ６２  トランジスタ
ＭＰ６３  トランジスタ
Ｔ０  時刻
Ｔ１  時刻
Ｔ２  時刻
Ｔ３  時刻
Ｔ４  時刻
Ｔ７  時刻
Ｔ８  時刻
Ｔ１０  時刻
Ｔ１１  時刻
Ｔ１２  時刻
Ｔ１７  時刻
Ｔ１８  時刻
Ｔ１９  時刻
Ｔ２０  時刻
Ｔ２１  時刻
Ｔ２２  時刻
Ｔ２８  時刻
Ｔ２９  時刻
Ｔｗｒｉｔｅ２  時刻
１０  データ処理回路
１１  インターフェース
１２  クロック生成回路
１３  マスターコントローラ
１４  データドライバ
１５  ワードドライバ
２０  ニューラルネットワーク回路
２１  メモリコントローラ
２２  メモリ
２３  演算ユニット
２４  データ入出力回路
３０  演算部
３１  レジスタ回路
４０  積和演算回路
４１  加算回路
５０  演算回路
５０＿Ａ  演算回路
５０＿ｎ  演算回路
５０＿１  演算回路
５０＿２  演算回路
５０＿３  演算回路
５０Ａ  演算回路
５１  入力レジスタ
５２  メモリ
５３  乗算回路
５４  加算回路
５５Ａ  出力レジスタ
５５Ｂ  出力レジスタ
５６Ａ  切り替え回路
５６Ｂ  切り替え回路
５７Ａ  メモリ素子
５７Ｂ  メモリ素子
５７Ｃ  メモリ素子
５８  パワースイッチ
６１  入力層
６２  中間層
６３  出力層
７０  入力処理
７１  入力データ
７２  演算処理
７３  演算処理
７４  プーリング演算処理
７５  演算処理
７６  プーリング演算処理
７７  全結合演算処理
８１  フィルタ
８２  フィルタ
８２＿１  フィルタ
８２＿２  フィルタ
８２＿３  フィルタ
８２＿９  フィルタ
８３  シンボル
８４  データ
８５  フィルタ
８６  データ
８７  データ
８８  フィルタ
８９  データ
９０  データ
９０＿Ａ  演算回路
９１  フィルタ
９２  データ
９３  入力データ
９４＿１  データ
９４＿２  データ
９４＿３  データ
９４＿４  データ
９５＿１  積和演算データ
９５＿２  積和演算データ
９５＿３  積和演算データ
９５＿４  積和演算データ
９６  メモリセル
９７  トランジスタ
９８  トランジスタ
１６１  メモリセル
１４００  ＤＯＳＲＡＭ
１４０５  コントローラ
１４１０  行回路
１４１１  デコーダ
１４１２  ワード線ドライバ
１４１３  列セレクタ
１４１４  センスアンプドライバ
１４１５  列回路
１４１６  グローバルセンスアンプアレイ
１４１７  入出力回路
１４２０  ＭＣ−ＳＡアレイ
１４２２  メモリセルアレイ
１４２３  センスアンプアレイ
１４２５  ローカルメモリセルアレイ
１４２６  ローカルセンスアンプアレイ
１４４４  スイッチアレイ
１４４５  メモリセル
１４４６  センスアンプ
１４４７  グローバルセンスアンプ
１６００  ＮＯＳＲＡＭ
１６１０  メモリセルアレイ
１６１１  メモリセル
１６１１−１６１４  メモリセル
１６１２  メモリセル
１６１３  メモリセル
１６１４  メモリセル
１６４０  コントローラ
１６５０  行ドライバ
１６５１  行デコーダ
１６５２  ワード線ドライバ
１６６０  列ドライバ
１６６１  列デコーダ
１６６２  ドライバ
１６６３  ＤＡＣ
１６７０  出力ドライバ
１６７１  セレクタ
１６７２  ＡＤＣ
１６７３  出力バッファ
７０００  ニューラルネットワークシステムＩＣ
７００１  リード
７００３  回路部
７０３１  Ｓｉトランジスタ層
７０３２  配線層
７０３３  ＯＳトランジスタ層
【図１】
2018189620.tif 000004
【図２】
2018189620.tif 000005
【図３】
2018189620.tif 000006
【図４】
2018189620.tif 000007
【図５】
2018189620.tif 000008
【図６】
2018189620.tif 000009
【図７】
2018189620.tif 000010
【図８】
2018189620.tif 000011
【図９】
2018189620.tif 000012
【図１０】
2018189620.tif 000013
【図１１】
2018189620.tif 000014
【図１２】
2018189620.tif 000015
【図１３】
2018189620.tif 000016
【図１４】
2018189620.tif 000017
【図１５】
2018189620.tif 000018
【図１６】
2018189620.tif 000019
【図１７】
2018189620.tif 000020
【図１８】
2018189620.tif 000021
【図１９】
2018189620.tif 000022
【図２０】
2018189620.tif 000023
【図２１】
2018189620.tif 000024
【図２２】
2018189620.tif 000025
【図２３】
2018189620.tif 000026
【図２４】
2018189620.tif 000027
【図２５】
2018189620.tif 000028
【図２６】
2018189620.tif 000029
【図２７】
2018189620.tif 000030
【図２８】
2018189620.tif 000031
【図２９】
2018189620.tif 000032
【図３０】
2018189620.tif 000033
【国際調査報告】
2018189620.tif 000034
2018189620.tif 000035
2018189620.tif 000036
2018189620.tif 000037