(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2022189771
(43)【公開日】2022-12-22
(54)【発明の名称】半導体装置
(51)【国際特許分類】
G06N 3/063 20060101AFI20221215BHJP
G06T 1/40 20060101ALI20221215BHJP
【FI】
G06N3/063
G06T1/40
【審査請求】未請求
【請求項の数】10
【出願形態】OL
(21)【出願番号】P 2022092788
(22)【出願日】2022-06-08
(31)【優先権主張番号】17/345,368
(32)【優先日】2021-06-11
(33)【優先権主張国・地域又は機関】US
(71)【出願人】
【識別番号】302062931
【氏名又は名称】ルネサスエレクトロニクス株式会社
(74)【代理人】
【識別番号】110002066
【氏名又は名称】弁理士法人筒井国際特許事務所
(72)【発明者】
【氏名】寺島 和昭
(72)【発明者】
【氏名】永吉 功
(72)【発明者】
【氏名】中村 淳
【テーマコード(参考)】
5B057
【Fターム(参考)】
5B057CH09
5B057CH14
(57)【要約】
【課題】回路面積の低減を実現可能な半導体装置を提供する。
【解決手段】一実施の形態の半導体装置は、ニューラルネットワークの処理を実行するものである。メモリMEM1は、複数の画素値と、圧縮されたj個の重み係数とを保持する。伸張器DCMPは、圧縮されたj個の重み係数を、非圧縮のk(k≧j)個の重み係数に復元する。DMAコントローラDMAC1は、メモリMEM1から圧縮されたj個の重み係数を読み出して伸張器DCMPに転送する。アキュムレータユニットACCU内のn(n>k)個のアキュムレータは、複数の画素値と非圧縮のk個の重み係数とを乗算し、乗算結果を時系列に累積加算する。スイッチ回路SW1は、伸張器DCMPとアキュムレータユニットACCUとの間に設けられ、識別子が表す対応関係に基づいて、伸張器DCMPによって復元された非圧縮のk個の重み係数をn個のアキュムレータに伝送する。
【選択図】
図1
【特許請求の範囲】
【請求項1】
ニューラルネットワークの処理を実行する半導体装置であって、
複数の画素値と、圧縮されたj個の重み係数とを保持する単数または複数のメモリと、
前記圧縮されたj個の重み係数を、非圧縮のk(k≧j)個の重み係数に復元する伸張器と、
前記メモリから前記圧縮されたj個の重み係数を読み出して前記伸張器に転送する第1のDMA(Direct Memory Access)コントローラと、
前記複数の画素値と前記非圧縮のk個の重み係数とを乗算し、乗算結果を時系列に累積加算するn(n>k)個のアキュムレータと、
前記伸張器と前記n個のアキュムレータとの間に設けられ、第1の識別子が表す対応関係に基づいて、前記伸張器によって復元された前記非圧縮のk個の重み係数を前記n個のアキュムレータに伝送する第1のスイッチ回路と、
を有する、
半導体装置。
【請求項2】
請求項1記載の半導体装置において、
さらに、スイッチ制御回路を有し、
前記メモリは、前記圧縮されたj個の重み係数を、前記第1の識別子と共に重み係数データセットとして保持し、
前記第1のDMAコントローラは、前記メモリから前記重み係数データセットを読み出し、前記重み係数データセットに含まれる前記圧縮されたj個の重み係数を前記伸張器に転送し、
前記スイッチ制御回路は、前記第1のDMAコントローラによって読み出された前記重み係数データセットに含まれる前記第1の識別子に基づいて前記第1のスイッチ回路での前記対応関係を制御する、
半導体装置。
【請求項3】
請求項1記載の半導体装置において、
前記第1のスイッチ回路は、前記非圧縮のk個の重み係数の中の少なくとも一つを、前記n個のアキュムレータの中の2以上に伝送する、
半導体装置。
【請求項4】
請求項1記載の半導体装置において、さらに、
前記n個のアキュムレータの出力を前記メモリに転送する第2のDMAコントローラと、
前記n個のアキュムレータと前記第2のDMAコントローラとの間に設けられ、第2の識別子が表す対応関係に基づいて、前記n個のアキュムレータの出力を第2のDMAコントローラ内の複数のチャネルに伝送する第2のスイッチ回路と、
を有する、
半導体装置。
【請求項5】
請求項4記載の半導体装置において、
さらに、スイッチ制御回路を有し、
前記メモリは、前記圧縮されたj個の重み係数を、前記第1の識別子および前記第2の識別子と共に重み係数データセットとして保持し、
前記第1のDMAコントローラは、前記メモリから前記重み係数データセットを読み出し、前記重み係数データセットに含まれる前記圧縮されたj個の重み係数を前記伸張器に転送し、
前記スイッチ制御回路は、前記第1のDMAコントローラによって読み出された前記重み係数データセットに含まれる前記第1の識別子および前記第2の識別子に基づいて前記第1のスイッチ回路での前記対応関係および前記第2のスイッチ回路での前記対応関係をそれぞれ制御する、
半導体装置。
【請求項6】
請求項1記載の半導体装置において、
さらに、前記メモリから前記複数の画素値を読み出して前記n個のアキュムレータに転送する第3のDMAコントローラを有する、
半導体装置。
【請求項7】
一つの半導体チップで構成される半導体装置であって、
ニューラルネットワークの処理を実行するニューラルネットワークエンジンと、
複数の画素値と、圧縮されたj個の重み係数とを保持する単数または複数のメモリと、
プロセッサと、
前記ニューラルネットワークエンジン、前記メモリおよび前記プロセッサを互いに接続するバスと、
を備え、
前記ニューラルネットワークエンジンは、
前記圧縮されたj個の重み係数を、非圧縮のk(k≧j)個の重み係数に復元する伸張器と、
前記メモリから前記圧縮されたj個の重み係数を読み出して前記伸張器に転送する第1のDMA(Direct Memory Access)コントローラと、
前記複数の画素値と前記非圧縮のk個の重み係数とを乗算し、乗算結果を時系列に累積加算するn(n>k)個のアキュムレータと、
前記伸張器と前記n個のアキュムレータとの間に設けられ、第1の識別子が表す対応関係に基づいて、前記伸張器によって復元された前記非圧縮のk個の重み係数を前記n個のアキュムレータに伝送する第1のスイッチ回路と、
前記第1の識別子に基づいて前記第1のスイッチ回路での前記対応関係を制御するスイッチ制御回路と、
を有する、
半導体装置。
【請求項8】
請求項7記載の半導体装置において、
前記プロセッサは、前記第1のDMAコントローラが前記圧縮されたj個の重み係数を前記伸張器に転送する際に、前記スイッチ制御回路に前記第1の識別子を出力する、
半導体装置。
【請求項9】
請求項7記載の半導体装置において、
前記第1のスイッチ回路は、前記非圧縮のk個の重み係数の中の少なくとも一つを、前記n個のアキュムレータの中の2以上に伝送する、
半導体装置。
【請求項10】
請求項7記載の半導体装置において、
前記ニューラルネットワークエンジンは、さらに、
前記n個のアキュムレータの出力を前記メモリに転送する第2のDMAコントローラと、
前記n個のアキュムレータと前記第2のDMAコントローラとの間に設けられ、第2の識別子が表す対応関係に基づいて、前記n個のアキュムレータの出力を第2のDMAコントローラに伝送する第2のスイッチ回路と、
を有する、
半導体装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、半導体装置に関し、例えば、ニューラルネットワークの処理を実行する半導体装置に関する。
【背景技術】
【0002】
特許文献1(特開2019-40403号公報)には、CNN(Convolutional Neural Network)における畳み込み演算の演算量を低減するため、統合係数テーブルを用いて演算を行う畳み込み演算処理回路を有する画像認識装置が示される。統合係数テーブルは、N×Nのデータを保持し、N×Nのデータのそれぞれは、係数およびチャネル番号で構成される。畳み込み演算処理回路は、入力画像と係数とのN×Nの積演算を並列に実行する積演算回路と、当該積演算結果に対してチャネル番号毎の累積加算演算を行い、その加算演算結果をチャネル番号毎の出力レジスタに格納するチャネル選択回路と、を有する。
【先行技術文献】
【特許文献】
【0003】
【発明の概要】
【発明が解決しようとする課題】
【0004】
例えば、CNN等のニューラルネットワークの処理では、メモリに格納される画像データや重み係数データを複数のアキュムレータに伝送する際に、高速化のためDMA(Direct Memory Access)コントローラを用いることが望ましい。一方、特に、重み係数データのデータ量は、非常に大きくなる場合がある。そこで、メモリ上に予め圧縮された重み係数データを格納し、それを伸張器によって非圧縮の重み係数データに復元した上で複数のアキュムレータに伝送する方式が考えられる。
【0005】
この際には、伸張器の配置方法として、メモリとDMAコントローラとの間に配置する方法や、DMAコントローラと複数のアキュムレータとの間に配置する方法が考えられる。前者の方法では、複数のアキュムレータを十分に有効活用できない恐れがあった。後者の方法では、複数のアキュムレータのそれぞれに対して伸張器を設ける必要があるため、回路面積の増加や消費電力の増加が生じる恐れがあった。
【0006】
その他の課題と新規な特徴は、本明細書の記載および添付図面から明らかになるであろう。
【課題を解決するための手段】
【0007】
一実施の形態の半導体装置は、ニューラルネットワークの処理を実行するものであり、単数または複数のメモリと、伸張器と、第1のDMAコントローラと、アキュムレータユニットと、第1のスイッチ回路と、を有する。単数または複数のメモリは、複数の画素値と、圧縮されたj個の重み係数とを保持する。伸張器は、圧縮されたj個の重み係数を、非圧縮のk(k≧j)個の重み係数に復元する。第1のDMAコントローラは、メモリから圧縮されたj個の重み係数を読み出して伸張器に転送する。アキュムレータユニットは、n(n>k)個のアキュムレータを有し、複数の画素値と非圧縮のk個の重み係数とを乗算し、乗算結果を時系列に累積加算する。第1のスイッチ回路は、伸張器とアキュムレータユニットとの間に設けられ、第1の識別子が表す対応関係に基づいて、伸張器によって復元された非圧縮のk個の重み係数をn個のアキュムレータに伝送する。
【発明の効果】
【0008】
一実施の形態の半導体装置を用いることで、回路面積の低減が実現可能になる。
【図面の簡単な説明】
【0009】
【
図1】
図1は、本発明の実施の形態1による半導体装置において、主要部の構成例を示す概略図である。
【
図2】
図2は、
図1におけるニューラルネットワークエンジンの詳細な構成例を示す図である。
【
図3】
図3は、
図2における伸張器周りの動作例を示す図である。
【
図4】
図4は、
図2におけるスイッチ回路周りの構成例を示す図である。
【
図5】
図5は、CNNに含まれる畳み込み層での処理内容の一例を示す模式図である。
【
図6】
図6は、
図2のニューラルネットワークエンジンが
図5の処理を実行する場合の動作例を説明する模式図である。
【
図7】
図7は、
図1および
図2の半導体装置において、一部を抽出した構成例を示す概略図である。
【
図8】
図8は、本発明の実施の形態2による半導体装置において、ニューラルネットワークエンジン周りの一部の構成例を示す概略図である。
【
図9】
図9は、本発明の実施の形態3による半導体装置において、ニューラルネットワークエンジン周りの一部の構成例を示す概略図である。
【
図10】
図10は、本発明の実施の形態4による半導体装置において、ニューラルネットワークエンジンの詳細な構成例を示す図である。
【
図11A】
図11Aは、本発明の比較例となる半導体装置の構成例を示す概略図である。
【
図11B】
図11Bは、本発明の比較例となる半導体装置の構成例を示す概略図である。
【発明を実施するための形態】
【0010】
以下の実施の形態においては便宜上その必要があるときは、複数のセクションまたは実施の形態に分割して説明するが、特に明示した場合を除き、それらはお互いに無関係なものではなく、一方は他方の一部または全部の変形例、詳細、補足説明等の関係にある。また、以下の実施の形態において、要素の数等(個数、数値、量、範囲等を含む)に言及する場合、特に明示した場合および原理的に明らかに特定の数に限定される場合等を除き、その特定の数に限定されるものではなく、特定の数以上でも以下でもよい。さらに、以下の実施の形態において、その構成要素(要素ステップ等も含む)は、特に明示した場合および原理的に明らかに必須であると考えられる場合等を除き、必ずしも必須のものではないことは言うまでもない。同様に、以下の実施の形態において、構成要素等の形状、位置関係等に言及するときは、特に明示した場合および原理的に明らかにそうでないと考えられる場合等を除き、実質的にその形状等に近似または類似するもの等を含むものとする。このことは、上記数値および範囲についても同様である。
【0011】
以下、実施の形態を図面に基づいて詳細に説明する。なお、実施の形態を説明するための全図において、同一の機能を有する部材には同一の符号を付し、その繰り返しの説明は省略する。また、以下の実施の形態では、特に必要なとき以外は同一または同様な部分の説明を原則として繰り返さない。
【0012】
(実施の形態1)
<半導体装置の概略>
図1は、本発明の実施の形態1による半導体装置において、主要部の構成例を示す概略図である。
図1に示す半導体装置DEVは、例えば、一つの半導体チップで構成されるSoC(System on Chip)等である。当該半導体装置DEVは、代表的には、車両のECU(Electronic Control Unit)等に搭載され、ADAS(Advanced Driver Assistance System)の機能を提供する。
【0013】
図1に示す半導体装置DEVは、ニューラルネットワークエンジンNNEと、CPU(Central Processing Unit)等のプロセッサPRCと、単数または複数のメモリMEM1,MEM2と、システムバスSBUSとを有する。ニューラルネットワークエンジンNNEは、CNNを代表とするニューラルネットワークの処理を実行する。メモリMEM1はDRAM(Dynamic Random Access Memory)等であり、メモリMEM2はキャッシュ用のSRAM(Static Random Access Memory)等である。システムバスSBUSは、ニューラルネットワークエンジンNNE、メモリMEM1,MEM2およびプロセッサPRCを互いに接続する。
【0014】
メモリMEM1は、複数の画素値を含む画像データIMDと、圧縮された重み係数データWFDCとを保持する。ここで、重み係数データのデータ量は、非常に大きくなる場合がある。このため、非圧縮の重み係数データWFDは、予め圧縮ソフトウェア等を用いて圧縮された重み係数データWFDCに変換された上でメモリMEM1に格納される。メモリMEM2は、ニューラルネットワークエンジンNNEの高速キャッシュメモリとして用いられる。例えば、メモリMEM1内の画像データIMDは、予めメモリMEM2にコピーされる。
【0015】
ニューラルネットワークエンジンNNEは、複数のDMAコントローラDMAC1~DMAC3と、レジスタREGと、伸張器DCMPと、複数のスイッチ回路SW1,SW2と、スイッチ制御回路SWCTと、アキュムレータユニットACCUと、を備える。DMAコントローラDMAC1は、メモリMEM1から圧縮された重み係数データWFDCを読み出して伸張器DCMPに転送する。伸張器DCMPは、圧縮された重み係数データWFDCを、非圧縮の重み係数データWFDに復元する。
【0016】
スイッチ回路SW1は、伸張器DCMPとアキュムレータユニットACCUとの間に設けられる。詳細は後述するが、スイッチ回路SW1は、所定の対応関係に基づいて、伸張器DCMPによって復元された非圧縮の重み係数データWFDに含まれる複数の重み係数を、アキュムレータユニットACCU内の複数のアキュムレータに伝送する。DMAコントローラDMAC3は、メモリMEM2から画像データIMDを読み出してアキュムレータユニットACCUに転送する。
【0017】
アキュムレータユニットACCUは、積和演算を実行する複数のアキュムレータを含み、DMAコントローラDMAC3からの画像データIMDとスイッチ回路SW1からの非圧縮の重み係数データWFDとを積和演算する。スイッチ回路SW2は、アキュムレータユニットACCUとDMAコントローラDMAC2との間に設けられる。スイッチ回路SW2は、詳細は後述するが、所定の対応関係に基づいて、アキュムレータユニットACCU内の複数のアキュムレータからの出力をDMAコントローラDMAC2内の複数のチャネルに伝送する。
【0018】
スイッチ制御回路SWCTは、レジスタREGに格納される設定データに基づいて、スイッチ回路SW1,SW2を制御する。具体的には、スイッチ制御回路SWCTは、前述した各スイッチ回路SW1,SW2での対応関係を制御する。また、レジスタREGには、DMAコントローラDMAC1~DMAC3に対するアドレス範囲の設定データや、アキュムレータユニットACCUに対する設定データ等も格納される。
【0019】
<ニューラルネットワークエンジンの詳細>
図2は、
図1におけるニューラルネットワークエンジンの詳細な構成例を示す図である。
図3は、
図2における伸張器周りの動作例を示す図である。
図4は、
図2におけるスイッチ回路周りの構成例を示す図である。
図2において、DMAコントローラDMAC1は、予め設定された読み出しアドレス範囲に基づいて、制御サイクル毎に、メモリMEM1から
図3に示されるような重み係数データセットWFDSを読み出す。すなわち、
図1のメモリMEM1は、予め当該読み出しアドレス範囲の各アドレスに、
図3に示されるような重み係数データセットWFDSを保持する。
【0020】
図3に示す重み係数データセットWFDSは、圧縮された重み係数データWFDCと、ヘッダHDとを含む。重め係数データWFDCは、圧縮されたj個の重み係数P[1]~P[j]とマップデータMPDとを含む。ヘッダHDは、非圧縮である2個の識別子ID1,ID2を含む。一例として、重み係数P[1]~P[j]のそれぞれは、8ビットで構成され、“j”は11である。マップデータMPDは、28ビットで構成される。また、2個の識別子ID1,ID2のそれぞれは、6ビットで構成される。この場合、重め係数データセットWFDSは128ビットで構成される。
【0021】
DMAコントローラDMAC1は、
図2および
図3に示されるように、当該重み係数データセットWFDSに含まれる圧縮された重み係数データWFDC、すなわちマップデータMPDおよび圧縮されたj個の重み係数P[1]~P[j]を伸張器DCMPに転送する。また、
図2に示されるように、重み係数データセットWFDSに含まれるヘッダHD、すなわち識別子ID1,ID2はレジスタREGに格納される。
【0022】
伸張器DCMPは、
図2および
図3に示されるように、圧縮された重み係数データWFDCを非圧縮の重み係数データWFDに復元する。具体的には、重み係数データWFDCは、例えば、ゼロランレングス法等を用いた圧縮データとなっている。伸張器DCMPは、圧縮されたj個の重み係数P[1]~P[j]を、マップデータMPDが表す非ゼロ係数の場所に基づいて、非圧縮のk(k≧j)個の重み係数W[1]~W[k]に復元する。一例として、重み係数W[1]~W[k]のそれぞれは、8ビットで構成され、“k”は最大で28等である。
【0023】
図2において、スイッチ制御回路SWCTは、レジスタREGに格納されたヘッダHDに基づいて、スイッチ回路SW1,SW2を制御する。具体的には、スイッチ制御回路SWCTは、
図3の重み係数データセットWFDSに含まれる識別子ID1に基づいてスイッチ制御信号SS1を生成し、当該スイッチ制御信号SS1を用いてスイッチ回路SW1での対応関係を制御する。同様に、スイッチ制御回路SWCTは、重み係数データセットWFDSに含まれる識別子ID2に基づいてスイッチ制御信号SS2を生成し、当該スイッチ制御信号SS2を用いてスイッチ回路SW2での対応関係を制御する。
【0024】
スイッチ回路SW1は、
図2および
図4に示されるように、伸張器DCMPと、アキュムレータユニットに含まれるn(n>k)個のアキュムレータACC[1]~ACC[n]との間に設けられる。スイッチ回路SW1は、スイッチ制御信号SS1、ひいては識別子ID1が表す対応関係に基づいて、伸張器DCMPによって復元された非圧縮のk個の重み係数W[1]~W[k]をn個のアキュムレータACC[1]~ACC[n]に伝送する。
【0025】
スイッチ回路SW1は、例えば、
図4に示されるように、“k×n”個のスイッチS[1,1]~S[k,n]を含むクロスバースイッチ等で構成される。スイッチS[1,1]~S[k,n]は、k本の配線LNd[1]~LNd[k]と、n本の配線LNa[1]~LNa[n]との交点にそれぞれ設けられる。k本の配線LNd[1]~LNd[k]は、それぞれ、伸張器DCMPからのk個の重み係数W[1]~W[k]を伝送する。n本の配線LNa[1]~LNa[n]は、それぞれ、n個のアキュムレータACC[1]~ACC[n]に接続される。
【0026】
スイッチ制御回路SWCTには、予め、識別子ID1の値毎に、スイッチS[1,1]~S[k,n]に対するオン/オフの組み合わせが設定されている。スイッチ制御回路SWCTは、識別子ID1を受け、それに対応する“k×n”個のスイッチ制御信号SS[1,1]~SS[k,n]を生成することでスイッチS[1,1]~S[k,n]のオン・オフをそれぞれ制御する。なお、図示は省略されるが、
図2のスイッチ回路SW2も、例えば、
図4の場合と同様のクロスバースイッチ等で構成される。
【0027】
図2において、DMAコントローラDMAC3は、n個のチャネルCH[1]~CH[n]を備える。n個のチャネルCH[1]~CH[n]は、それぞれ、個々に設定された読み出しアドレス範囲に基づいて、制御サイクル毎に、
図1のメモリMEM2から画像データIMD内の画素値を読み出してn個のアキュムレータACC[1]~ACC[n]に転送する。
【0028】
n個のアキュムレータACC[1]~ACC[n]のそれぞれは、例えば、1個の乗算器と、1個の累積加算器とを有する。加えて、n個のアキュムレータACC[1]~ACC[n]のそれぞれは、例えば、ニューラルネットワークの処理で必要とされるバイアス加算器や活性化関数演算器を有してもよい。n個のアキュムレータACC[1]~ACC[n]は、それぞれ、制御サイクル毎に、DMAコントローラDMAC3からのn個の画素値と、スイッチ回路SW1から伝送された非圧縮のk個の重み係数W[1]~W[k]とを乗算する。
【0029】
ここで、n個のアキュムレータACC[1]~ACC[n]とk(k<n)個の重み係数W[1]~W[k]との対応関係は、スイッチ回路SW1によって定められる。この際に、スイッチ回路SW1は、k個の重み係数W[1]~W[k]の中の少なくとも一つを、n個のアキュムレータACC[1]~ACC[n]の中の2以上に並列に伝送する。そして、n個のアキュムレータACC[1]~ACC[n]のそれぞれは、このようにして得られた画素値と重み係数との乗算結果を、複数の制御サイクルで時系列に累積加算する。なお、一例として、k=28に対して、nは、数100~1000程度であってよい。
【0030】
DMAコントローラDMAC2は、m個のチャネルCH[1]~CH[m]を備える。m個のチャネルCH[1]~CH[m]は、それぞれ、個々に設定された書き込みアドレスに基づいて、制御サイクル毎に、n個のアキュムレータACC[1]~ACC[n]の出力をメモリ、例えば
図1のメモリMEM2の当該書き込みアドレスに転送する。
【0031】
スイッチ回路SW2は、n個のアキュムレータACC[1]~ACC[n]とDMAコントローラDMAC2との間に設けられる。スイッチ回路SW2は、スイッチ制御回路SWCTからのスイッチ制御信号SS2、ひいては識別子ID2が表す対応関係に基づいて、n個のアキュムレータACC[1]~ACC[n]の出力をDMAコントローラDMAC2内のm個のチャネルCH[1]~CH[m]に伝送する。
【0032】
<ニューラルネットワーク処理の具体例>
図5は、CNNに含まれる畳み込み層での処理内容の一例を示す模式図である。
図5において、画像データIMD内のある二次元領域Aは、i個の画素値Xa[1]~Xa[i]からなる画素値データXDaで構成される。同様に、画像データIMD内の別の二次元領域Bは、i個の画素値Xb[1]~Xb[i]からなる画素値データXDbで構成される。
【0033】
一方、CNNでは、k個の出力チャネルに応じて、カーネルとも呼ばれるk個の重み係数データWFD[1]~WFD[k]が用いられる。出力チャネル[1]の重み係数データWFD[1]は、i個の重み係数W[1,1]~W[1,i]で構成される。同様に、出力チャネル[k]の重み係数データWFD[k]も、i個の重み係数W[k,1]~W[k,i]で構成される。
【0034】
畳み込み層では、k個の出力チャネルに応じてk個の特徴マップFMP[1]~FMP[k]が生成される。出力チャネル[1]の特徴マップFMP[1]において、画像データIMD内の二次元領域Aに対応する画素の特徴量Va[1]は、画素値データXDaと出力チャネル[1]の重み係数データWFD[1]との積和演算で算出される。同様に、特徴マップFMP[1]において、画像データIMD内の二次元領域Bに対応する画素の特徴量Vb[1]は、画素値データXDbと出力チャネル[1]の重み係数データWFD[1]との積和演算で算出される。
【0035】
また、出力チャネル[k]の特徴マップFMP[k]において、画像データIMD内の二次元領域Aに対応する画素の特徴量Va[k]は、画素値データXDaと出力チャネル[k]の重み係数データWFD[k]との積和演算で算出される。同様に、特徴マップFMP[k]において、画像データIMD内の二次元領域Bに対応する画素の特徴量Vb[k]は、画素値データXDbと出力チャネル[k]の重み係数データWFD[k]との積和演算で算出される。なお、各特徴量は、このような積和演算結果に、出力チャネル毎のバイアス値を加算し、さらに活性化関数の演算を経て算出されてもよい。
【0036】
図6は、
図2のニューラルネットワークエンジンが
図5の処理を実行する場合の動作例を説明する模式図である。
図6の例では、アキュムレータACC[1],…,ACC[r],…,ACC[q],…は、それぞれ、
図5における特徴量Va[1],…,Vb[1],…,Va[k],…を算出する。
【0037】
この場合、スイッチ回路SW1は、複数のアキュムレータACC[1],…,ACC[r]に対して並列に、出力チャネル[1]内のi個の重み係数W[1,1]~W[1,i]をi回の制御サイクルで順に伝送する。同様に、スイッチ回路SW1は、複数のアキュムレータACC[q],…に対して並列に、出力チャネル[k]内のi個の重み係数W[k,1]~W[k,i]をi回の制御サイクルで順に伝送する。
【0038】
また、このような処理に先立って、伸張器DCMPは、例えば、1番目の制御サイクルで、圧縮されたj個の重み係数P[1,1]~P[j,1]を受け、それを伸張することでk個の出力チャネル分の重み係数W[1,1]~W[k,1]を出力する。この圧縮された重み係数P[1,1]~P[j,1]には、
図3に示したように、ヘッダHDが付加されている。スイッチ制御回路SWCTは、このヘッダHD内の識別子ID1に基づいてスイッチ制御信号SS1を生成する。
【0039】
スイッチ回路SW1は、伸張器DCMPからのk個の出力チャネル分の重み係数W[1,1]~W[k,1]を受け、スイッチ制御回路SWCTからのスイッチ制御信号SS1に基づいて、当該重み係数W[1,1]~W[k,1]のそれぞれを、複数のアキュムレータに並列に伝送する。すなわち、例えば、
図4において、スイッチ制御回路SWCTは、重み係数W[1]用の配線LNd[1]に接続される複数のスイッチS[1,1],S[1,2],…を共にオンにするようなスイッチ制御信号SS1を生成する。
【0040】
一方、DMAコントローラDMAC3において、チャネルCH[1],CH[q]は、それぞれ、i回の制御サイクルで、メモリMEM2からi個の画素値Xa[1]~Xa[i]を順に読み出してアキュムレータACC[1],ACC[q]に順に転送する。また、チャネルCH[r]は、i回の制御サイクルで、メモリMEM2からi個の画素値Xb[1]~Xb[i]を順に読み出してアキュムレータACC[r]に順に転送する。これにより、アキュムレータACC[1],…,ACC[r],…,ACC[q],…は、
図5に示したような積和演算が行う。
【0041】
DMAコントローラDMAC2内の各チャネルでは、予め、
図5に示したような出力チャネル分の特徴マップFMP[1]~FMP[k]と、メモリ、例えば、
図1のメモリMEM2に対する書き込みアドレスとの対応関係が定められる。スイッチ回路SW2は、アキュムレータACC[1],…,ACC[r],…,ACC[q],…の出力を、スイッチ制御回路SWCTからのスイッチ制御信号SS2、ひいては識別子ID2に基づいて、DMAコントローラDMAC2内の各チャネルへ伝送する。そして、DMAコントローラDMAC2内の各チャネルは、スイッチ回路SW2からの出力を、予め設定されたメモリの書き込みアドレスに書き込む。
【0042】
<実施の形態1の主要な効果>
図7は、
図1および
図2の半導体装置において、一部を抽出した構成例を示す概略図である。
図11Aおよび
図11Bは、本発明の比較例となる半導体装置の構成例を示す概略図である。
図7には、メモリMEM1と、ニューラルネットワークエンジンNNE内のDMAコントローラDMAC1、伸張器DCMP、スイッチ回路SW1、レジスタREG、スイッチ制御回路SWCTおよびアキュムレータユニットACCUとが示される。
【0043】
一方、
図11Aに示す比較例となる半導体装置は、アキュムレータユニットACCUおよびDMAコントローラDMAC1を含むニューラルネットワークエンジンNNE’aと、メモリMEM1とを備える。そして、DMAコントローラDMAC1とメモリMEM1との間に伸張器DCMPが設けられる。
【0044】
図11Aの構成例では、伸張器DCMPの入力と出力とでデータ数が変わるため、DMAコントローラDMAC1の制御が複雑化し得る。このため、アキュムレータユニットACCU内のn個のアキュムレータACC[1]~ACC[n]に対して伸張器DCMPからの非圧縮の重み係数を効率的に伝送できない場合がある。すなわち、n個のアキュムレータACC[1]~ACC[n]のリソースを十分に有効活用できない恐れがある。
【0045】
また、
図11Bに示す比較例となる半導体装置は、n個のアキュムレータACC[1]~ACC[n]、n個の伸張器DCMP[1]~DCMP[n]およびDMAコントローラDMAC1を含むニューラルネットワークエンジンNNE’bと、メモリMEM1とを備える。伸張器DCMP[1]~DCMP[n]は、
図7の場合と同様に、DMAコントローラDMAC1とアキュムレータユニットACCUとの間に設けられる。
【0046】
ただし、
図11Bの構成例では、n個のアキュムレータACC[1]~ACC[n]を有効活用するためn個の伸張器DCMP[1]~DCMP[n]が設けられる。そして、n個の伸張器DCMP[1]~DCMP[n]が、それぞれ、n個のアキュムレータACC[1]~ACC[n]に非圧縮の重み係数を伝送している。しかし、この場合、n個の伸張器DCMP[1]~DCMP[n]に伴い回路面積が増加し、ひいては、消費電力も増加し得る。
【0047】
一方、
図7の構成例は、
図11Bの構成例と異なり、アキュムレータユニットACCUと伸張器DCMPとの間にスイッチ回路SW1が設けられる。スイッチ回路SW1は、
図4および
図6等に示したように、伸張器DCMPからの1個の重み係数を複数のアキュムレータに伝送することができる。その結果、
図7の構成例では、1個の伸張器DCMPを設ければよいため、回路面積を低減することができ、ひいては、消費電力を低減することが可能になる。
【0048】
さらに、
図11Aの構成例と比較して、スイッチ回路SW1内の対応関係を
図3のヘッダHD内の識別子ID1によって適切に定めることで、n個のアキュムレータACC[1]~ACC[n]のリソースを十分に有効活用することができる。その結果、ニューラルネットワークの処理を高速化することが可能になる。また、別の観点では、予め識別子ID1を適切に定めた上で、
図3の重み係数データセットWFDSとしてメモリMEM1に格納しておくことで、様々な構成のニューラルネットワークに対して柔軟に対応することが可能になる。この柔軟性の効果は、識別子ID2に関しても同様である。
【0049】
(実施の形態2)
<ニューラルネットワークエンジン周りの構成>
図8は、本発明の実施の形態2による半導体装置において、ニューラルネットワークエンジン周りの一部の構成例を示す概略図である。
図8に示すニューラルネットワークエンジンNNEaは、
図7の構成例と異なり、伸張器DCMP、スイッチ回路SW1、スイッチ制御回路SWCTおよびアキュムレータユニットACCUを複数組備える。
【0050】
図7の構成例では、
図3に示したように、例えば、1個の伸張器DCMPは、最大28個となる非圧縮の重み係数W[1]~W[k]が出力する。そして、この重み係数W[1]~W[k]は、スイッチ回路SW1を介してアキュムレータユニットACCU内の数100~1000個程度といったアキュムレータACC[1]~ACC[n]に適宜伝送される。ただし、
図7の構成例では、例えば、出力チャネル数が28よりも多いような場合、処理を時分割で行う必要性が生じ得る。
【0051】
そこで、
図8のように複数組の伸張器DCMP、スイッチ回路SW1、スイッチ制御回路SWCTおよびアキュムレータユニットACCUを備えることで、出力チャネル数が多いような場合でも、多くの出力チャネルの処理を並列に実行することが可能になる。その結果、ニューラルネットワークの処理を高速化することが可能になる。なお、この場合、例えば、
図3の重み係数データセットWFDSのビット幅を複数倍に拡張するか、または、複数のDMAコントローラDMAC1を設けてもよい。
【0052】
(実施の形態3)
<ニューラルネットワークエンジン周りの構成>
図9は、本発明の実施の形態3による半導体装置において、ニューラルネットワークエンジン周りの一部の構成例を示す概略図である。
図9に示すニューラルネットワークエンジンNNEbは、
図7の構成例と比較して、DMAコントローラDMAC1からレジスタREGへのヘッダHDの出力経路が削除されている。その代わりに、プロセッサPRCからレジスタREGへのヘッダHDの出力経路が形成されている。
【0053】
すなわち、プロセッサPRCは、DMAコントローラDMAC1が
図3に示したような圧縮された重み係数データWFDCを伸張器DCMPに転送する際に、システムバスSBUSを介してレジスタREG、ひいてはスイッチ制御回路SWCTに識別子ID1を出力する。詳細には、プロセッサPRCは、ニューラルネットワークエンジンNNEbの処理に応じたタイミングで
図3のヘッダHDを生成し、当該ヘッダHDに含まれる識別子ID1,ID2をスイッチ制御回路SWCTに出力する。このような構成を用いることで、ヘッダHDに要するメモリMEM1の記憶容量を削減することが可能になる。
【0054】
(実施の形態4)
<ニューラルネットワークエンジンの詳細>
図10は、本発明の実施の形態4による半導体装置において、ニューラルネットワークエンジンの詳細な構成例を示す図である。
図10に示すニューラルネットワークエンジンは、
図2の構成例と比較して、DMAコントローラDMAC3と、アキュムレータユニットACCUとの間に伸張ユニットDU3が設けられる。
【0055】
伸張ユニットDU3は、前述した重み係数の処理に伴うスイッチ制御回路SWCT、伸張器DCMP、スイッチ回路SW1およびレジスタREGを伸張ユニットDU1として、当該伸張ユニットDU1と同様の構成を備える。すなわち、メモリMEM1は、予め圧縮された画像データを保持する。そして、伸張ユニットDU3は、当該圧縮された画像データを伸張しながらアキュムレータユニットACCUに伝送する。
【0056】
通常、画像データIMDは、重み係数データWFDと比べてデータ量が小さいため、非圧縮のデータとしてキャッシュ用のメモリMEM2に格納された状態で使用される。ただし、例えば、画像データIMDの入力チャネル数が増加すると、メモリMEM2において、画像データIMDに伴う記憶容量を十分に確保することが困難となる可能性がある。そこで、
図10のような構成例を用いることで、画像データIMDのデータ量が大きい場合であっても対応することが可能になる。
【0057】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は前記実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。
【符号の説明】
【0058】
ACC アキュムレータ
DCMP 伸張器
DEV 半導体装置
DMAC1~DMAC3 DMAコントローラ
MEM1,MEM2 メモリ
NNE ニューラルネットワークエンジン
PRC プロセッサ
SBUS システムバス
SW1,SW2 スイッチ回路
SWCT スイッチ制御回路
WFD 重み係数データ
WFDC 圧縮された重み係数データ