(57)【要約】【課題】ひとつの乗数に制限されずに一つの乗算器で複数の乗算を並列的に実行する。【解決手段】乗数Ａと、乗数Ｂと、被乗数ａ及び被乗数ｂを受け付ける受付部と、前記乗数Ａ及び前記乗数Ｂを含む乗数と、前記被乗数ａ及び前記被乗数ｂを含む被乗数との乗算を実行する乗算器と、前記乗算器の演算結果から複数の乗算結果を出力する出力部と、を有し、前記乗算器は、前記被乗数ａに対し、前記乗数Ａ及び前記乗数Ｂを乗ずる演算と、前記被乗数ｂに対し、前記乗数Ａまたは前記乗数Ｂを乗ずる演算を一括で実行する。【選択図】図３
2019079183.tif 000002
【特許請求の範囲】
【請求項１】
乗数Ａと、乗数Ｂと、被乗数ａ及び被乗数ｂを受け付ける受付部と、
前記乗数Ａ及び前記乗数Ｂを含む乗数と、前記被乗数ａ及び前記被乗数ｂを含む被乗数との乗算を実行する乗算器と、
前記乗算器の演算結果から複数の乗算結果を出力する出力部と、を有し、
前記乗算器は、
前記被乗数ａに対し、前記乗数Ａ及び前記乗数Ｂを乗ずる演算と、前記被乗数ｂに対し、前記乗数Ａまたは前記乗数Ｂを乗ずる演算を、一括で実行することを特徴とする演算装置。
【請求項２】
請求項１に記載の演算装置であって、
前記受付部は、
前記乗数Ａ及び前記乗数Ｂを乗算器の第１のレジスタに格納し、
前記被乗数ａ及び前記被乗数ｂを乗算器の第２のレジスタに格納し、
前記乗算器は、
前記第１のレジスタと第２のレジスタを用いて、複数の乗算を一括で実行することを特徴とする演算装置。
【請求項３】
請求項２に記載の演算装置であって、
前記受付部は、
前記第１のレジスタで前記乗数Ａ又は前記乗数Ｂが格納されているビット以外に０を格納し、前記第２のレジスタで前記被乗数ａ又は前記被乗数ｂが格納されているビット以外に０を配置することを特徴とする演算装置。
【請求項４】
請求項３に記載の演算装置であって、
前記乗数Ａ又は前記乗数Ｂと前記被乗数ａ又は前記被乗数ｂの長さがＸビットの場合、
前記受付部は、
前記第１のレジスタで前記乗数Ａを最下位ビットから格納し、前記乗数Ｂを最下位ビットから４Ｘ＋２ビットの位置から格納し、前記第２のレジスタで前記被乗数ｂを最下位ビットから格納し、前記被乗数ａを最下位ビットから２Ｘ＋１ビットの位置から格納することを特徴とする演算装置。
【請求項５】
請求項３に記載の演算装置であって、
前記乗数Ａ又は前記乗数Ｂと前記被乗数ａ又は前記被乗数ｂの長さがＸビットの場合、
前記受付部は、
前記第１のレジスタで前記乗数Ａを最下位ビットから格納し、前記乗数Ｂを最下位ビットから２Ｘ＋１ビットの位置から格納し、
前記受付部は、
前記第２のレジスタで前記被乗数ｂを最下位ビットから格納し、前記被乗数ａを最下位ビットから２Ｘ＋１ビットの位置から格納することを特徴とする演算装置。
【請求項６】
画像処理部からのデータを被乗数ａ及び被乗数ｂとして受け付け、フィルタの乗数Ａ及び乗数Ｂを受け付ける受付部と、
前記乗数Ａ及び前記乗数Ｂを含む乗数と、前記被乗数ａ及び前記被乗数ｂを含む被乗数との乗算を実行する乗算器と、
前記乗算器の演算結果から複数の乗算結果を出力する出力部と、を有し、
前記乗算器は、
前記被乗数ａに対し、前記乗数Ａ及び前記乗数Ｂを乗ずる演算と、前記被乗数ｂに対し、前記乗数Ａまたは前記乗数Ｂを乗ずる演算を、一括で実行することを特徴とする車載制御装置。
【請求項７】
請求項６に記載の車載制御装置であって、
前記受付部は、
前記乗数Ａ及び前記乗数Ｂを乗算器の第１のレジスタに格納し、
前記被乗数ａ及び前記被乗数ｂを乗算器の第２のレジスタに格納し、
前記乗算器は、
前記第１のレジスタと第２のレジスタを用いて、複数の乗算を一括で実行することを特徴とする車載制御装置。
【請求項８】
請求項７に記載の車載制御装置であって、
前記受付部は、
前記第１のレジスタで前記乗数Ａ又は前記乗数Ｂが格納されているビット以外に０を格納し、前記第２のレジスタで前記被乗数ａ又は前記被乗数ｂが格納されているビット以外に０を配置することを特徴とする車載制御装置。
【請求項９】
請求項８に記載の車載制御装置であって、
前記乗数Ａ又は前記乗数Ｂと前記被乗数ａ又は前記被乗数ｂの長さがＸビットの場合、
前記受付部は、
前記第１のレジスタで前記乗数Ａを最下位ビットから格納し、前記乗数Ｂを最下位ビットから４Ｘ＋２ビットの位置から格納し、前記第２のレジスタで前記被乗数ｂを最下位ビットから格納し、前記被乗数ａを最下位ビットから２Ｘ＋１ビットの位置から格納することを特徴とする車載制御装置。
【請求項１０】
請求項８に記載の車載制御装置であって、
前記乗数Ａ又は前記乗数Ｂと前記被乗数ａ又は前記被乗数ｂの長さがＸビットの場合、
前記受付部は、
前記第１のレジスタで前記乗数Ａを最下位ビットから格納し、前記乗数Ｂを最下位ビットから２Ｘ＋１ビットの位置から格納し、
前記受付部は、
前記第２のレジスタで前記被乗数ｂを最下位ビットから格納し、前記被乗数ａを最下位ビットから２Ｘ＋１ビットの位置から格納することを特徴とする車載制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、乗算器を含むプログラマブルロジックデバイスに関する。
【背景技術】
【０００２】
近年、機械学習による物体認識や行動予測を、車両の自動運転に適用する技術が進展している。物体認識等に適用する機械学習手法としては、Deep Neural Network（以下、ＤＮＮ）が知られている。
【０００３】
ＤＮＮでは畳み込み演算の演算量が大きいため、車両に搭載する演算装置では演算能力の増大が必要となる。畳み込み演算を高速に実行するためには、積和演算器を含む演算装置を採用して演算の並列度を向上させる必要がある。車載用の演算装置としては、消費電力当たりの演算性能が高いＦＰＧＡ（Field-Programmable Gate Array）等のプログラマブルロジックデバイスが好適である。
【０００４】
また、ＤＮＮの推論演算では、３２ｂｉｔや１６ｂｉｔ幅のデータではなく、低ビット幅（ＩＮＴ８、またはＩＮＴ８以下）の演算でも認識率の低下が少ないため、低ビット幅での演算が主流になりつつある。
【０００５】
演算装置の演算能力を増大させる技術としては、特許文献１や非特許文献１が知られている。特許文献１には、低ビット数の演算器を複数使用して乗算のパイプラインを実現する技術が開示されている。また、非特許文献１には、一つの積和演算器で２つの乗算を並列的に実現する技術が開示されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００３−３０３０９４号公報
【非特許文献】
【０００７】
【非特許文献１】“ザイリンクス デバイスでのINT8 に最適化したエンベデッド ビジョンの実装”、［online］、［平成29年10月3日検索］、インターネット＜https://japan.xilinx.com/support/documentation/white_papers/j_wp490-embedded-vision-int8.pdf＞
【発明の概要】
【発明が解決しようとする課題】
【０００８】
ＦＰＧＡの乗算器はハードウェアで作り込まれているため、乗算を低ビット化しても乗算器の演算能力は変わらず、また、消費電力の低下にも寄与しない。また、上記非特許文献１では、一つの乗算器で２つの乗算が可能となっているが、２つの被乗数ａ、ｂに対してひとつの乗数ｃを共用するという制限があり、乗算の並列化がａ×ｃ、ｂ×ｃに制限されてしまう、という問題があった。
【０００９】
そこで本発明は、上記問題点に鑑みてなされたもので、ひとつの乗数に制限されずに一つの乗算器で複数の乗算を並列的に実行することを目的とする。
【課題を解決するための手段】
【００１０】
本発明は、乗数Ａと、乗数Ｂと、被乗数ａ及び被乗数ｂを受け付ける受付部と、前記乗数Ａ及び前記乗数Ｂを含む乗数と、前記被乗数ａ及び前記被乗数ｂを含む被乗数との乗算を実行する乗算器と、前記乗算器の演算結果から複数の乗算結果を出力する出力部と、を有し、前記乗算器は、前記被乗数ａに対し、前記乗数Ａ及び前記乗数Ｂを乗ずる演算と、前記被乗数ｂに対し、前記乗数Ａまたは前記乗数Ｂを乗ずる演算を、一括で実行する。
【発明の効果】
【００１１】
したがって、本発明は、２つの被乗数ａ、ｂに対して２つの乗数Ａ、Ｂを用いて３つの乗算を並列的に実行することが可能となり、ひとつの乗算器の演算能力を向上させることが可能となる。これにより、ひとつの乗数に制限されずに一つの乗算器で複数の乗算を並列的に実行することが可能となる。
【図面の簡単な説明】
【００１２】
【図１】本発明の実施例１を示し、車載用の演算装置の一例を示すブロック図である。
【図２】本発明の実施例１を示し、乗算器の一例を示すブロック図である。
【図３】本発明の実施例１を示し、乗算器のレジスタの一例を示す図である。
【図４】本発明の実施例１を示し、乗数及び被乗数を格納する位置を示す図である。
【図５】本発明の実施例１を示し、乗算器を畳み込み演算に適用した例を示す図である。
【図６】本発明の実施例２を示し、車載用の演算装置の一例を示すブロック図である。
【図７】本発明の実施例２を示し、乗算器のレジスタの一例を示す図である。
【図８】本発明の実施例２を示し、乗算器を畳み込み演算に適用した例を示す図である。
【図９】本発明の実施例３を示し、車載用制御装置の一例を示すブロック図である。
【発明を実施するための形態】
【００１３】
以下、本発明の実施形態を添付図面に基づいて説明する。
【実施例１】
【００１４】
図１は、本発明の実施例１を示し、車載用の演算装置の一例を示すブロック図である。本実施例１では、車載用の演算装置１として、複数の乗算器を含むＦＰＧＡを採用した例を示す。
【００１５】
演算装置１は、演算対象の被乗数ａ、ｂと乗数Ａ、Ｂを受け付けるｎ個の受付部２−１〜２−ｎと、後述するように３つの乗算を並列実行するｎ個の乗算器３−１〜３−ｎと、乗算器３−１〜３−ｎの演算結果を出力する出力部４−１〜４−ｎとを含む。なお、以下の説明では、乗算器３−１〜３−ｎの全体について説明する際には「−」以降を省略した符号３を用いる。他の構成要素の符号についても同様である。
【００１６】
演算装置１は、ｎ個の乗算器３の他に、図示はしないが、プログラム可能な論理ブロックやメモリリソースを含む。受付部２や出力部４は、上記論理ブロック等によって構成することができる。
【００１７】
演算装置１は、被乗数ａ、ｂを格納するＢレジスタ３１と、乗数Ａ、Ｂを格納するＡＤレジスタ３５と、Ｂレジスタ３１とＡＤレジスタ３５の値を乗じる乗算部３６と、乗算結果を格納するＰレジスタ３９とを含む。
【００１８】
受付部２は、４ビットの被乗数ａ，ｂを、１８ビットのＢレジスタ３１の所定の位置（ビット）に格納する。また、受付部２は、後述する前置加算器３４を用いて、４ビットの乗数Ａ、Ｂを、２５ビットのＡＤレジスタ３５の所定の位置（ビット）に格納させる。
【００１９】
乗算部３６は、Ｂレジスタ３１の値にＡＤレジスタ３５の値を乗じて、演算結果を４５ビットのＰレジスタ３９に格納する。本実施例１では、受付部２が後述するように、被乗数ａ，ｂと乗数Ａ、Ｂの格納位置を調整することで、８ビット長の演算結果（ｂ×Ａ、ａ×Ａ、ｂ×Ｂ）を３つ含む乗算結果を１回の乗算で得ることができる。なお、演算結果には１ビットの符号ビットを加えた９ビットで扱うことができる。また、上位ビットの演算結果（ｂ×Ｂ）の符号ビットは、図中不定とした１９ビットの中に含めることができる。
【００２０】
出力部４は、Ｐレジスタ３９に格納された４５ビットの演算結果から、所定の位置に格納された８ビット長の３つの演算結果を選択して出力する。
【００２１】
図２は、乗算器３の詳細な構成の一例を示すブロック図である。１８ビットのＢレジスタ３１は乗算部３６に接続される。
【００２２】
図１に示したＡＤレジスタ３５の前段には、前置加算器３４とＡレジスタ３２とＤレジスタ３３が配置される。Ａレジスタ３２とＤレジスタ３３は、それぞれ２５ビットで構成される。前置加算器３４は、Ａレジスタ３２とＤレジスタ３３の加算結果を、２５ビットのＡＤレジスタ３５に格納する。
【００２３】
受付部２は、Ｂレジスタ３１に被乗数ａ、ｂを格納し、Ａレジスタ３２に定数Ｂを格納し、Ｄレジスタ３３に乗数Ｂを格納する。前置加算器３４は乗数Ａ、Ｂの加算結果をＡＤレジスタ３５に出力する。
【００２４】
乗算部３６は、Ｂレジスタ３１の値にＡＤレジスタ３５の値を乗じた結果をＭレジスタ３７に格納する。Ｍレジスタ３７はＡＬＵ３８を介してＰレジスタ３９に接続される。本実施例１では、ＡＬＵ３８はＭレジスタ３７の内容をそのままＰレジスタ３９に出力する。なお、本実施例１では、Ｍレジスタ３７と、Ｐレジスタ３９の幅は４５ビットとする。
【００２５】
図示の例では、受付部２は、被乗数ａ、ｂをＢレジスタ３１の所定の位置に格納する。また、受付部２は、乗数ＢをＡレジスタ３２の所定の位置に格納し、乗数ＡをＤレジスタ３３の所定の位置に格納する。
【００２６】
乗算器３はＡレジスタ３２とＤレジスタ３３に値が設定されると、前置加算器３４で加算させる。前置加算器３４は、Ａレジスタ３２とＤレジスタ３３の加算結果を２５ビット幅のＡＤレジスタ３５に格納する。
【００２７】
図３は、乗算器３の各レジスタの一例を示す図である。図中左側がＭＳＢ（Most Significant Bit）を示し、図中右側がＬＳＢ（Least Significant Bit）を示す。
【００２８】
受付部２は、４ビットの被乗数ｂをＢレジスタ３１のＬＳＢ側の０〜３ビットに格納する。さらに、受付部２は、４ビットの被乗数ａをＢレジスタ３１のＭＳＢ側の９〜１２ビットに格納する。なお、受付部２は、被乗数ａ，ｂを格納したビットを除くＢレジスタ３１の他のビット（４〜８、１３〜１７）には０を設定する。
【００２９】
受付部２は、４ビットの乗数ＡをＤレジスタ３３のＬＳＢ側の０〜３ビットに格納する。さらに、受付部２は、４ビットの乗数ＢをＡレジスタ３２のＭＳＢ側の１８〜２１ビットに格納する。なお、受付部２は、乗数Ａを格納したビットを除くＤレジスタ３３の他のビット（４〜２４）には０を設定する。また、受付部２は、乗数Ｂを格納したビットを除くＡレジスタ３２の他のビット（０〜１７、２２〜２４）には０を設定する。
【００３０】
前置加算器３４による加算結果は、ＡＤレジスタ３５のＬＳＢ側の０〜３ビットに乗数Ａが格納され、ＡＤレジスタ３５のＭＳＢ側の１８〜２１ビットに乗数Ｂが格納される。また、ＡＤレジスタ３５の乗数Ａ、Ｂを格納したビット以外の他のビット（４〜１７、２２〜２４）には０が設定される。
【００３１】
乗算部３６による乗数結果は、Ｐレジスタ３９の０〜２６ビットに格納される。Ｐレジスタ３９の０〜７ビットには、被乗数ｂ×乗数Ａの値が格納される。Ｐレジスタ３９の８ビットは、ｂ×Ａの乗算結果の符号ビットとして用いることができる。
【００３２】
Ｐレジスタ３９の９〜１６ビットには、被乗数ａ×乗数Ａの値が格納される。Ｐレジスタ３９の１７ビットは、ａ×Ａの乗算結果の符号ビットとして用いることができる。Ｐレジスタ３９の１８〜２５ビットには、被乗数ｂ×乗数Ｂの値が格納される。Ｐレジスタ３９の２６ビットは、ｂ×Ｂの乗算結果の符号ビットとして用いることができる。
【００３３】
被乗数ａ、ｂと乗数Ａ、Ｂを図示のように、Ａレジスタ３２、Ｂレジスタ３１、Ｄレジスタ３３の所定の位置に設定することで、乗算部３６は、一回の乗算で、ｂ×Ａとａ×Ａ及びｂ×Ｂの３つの演算結果を得ることができる。
【００３４】
出力部４は、Ｐレジスタ３９の０〜７ビットをｂ×Ａの演算結果として選択し、９〜１６ビットをａ×Ａの演算結果として選択し、１８〜２５ビットをｂ×Ｂの乗算結果として選択して出力することができる。
【００３５】
本実施例１の演算装置１によれば、被乗数ａ、ｂと乗数Ａ、Ｂの４つの値から、３つの乗算結果（ｂ×Ａ、ａ×Ａ、ｂ×Ｂ）を１回の乗算で得ることが可能となる。このように、本実施例１では、前記従来例のようにひとつの乗数ｃに制限されることなく所望の乗数Ａ、Ｂで３つの乗算結果を並列的に算出することが可能となる。
【００３６】
図４は、乗算器３の各レジスタに乗数及び被乗数を格納する位置を示す図である。図３の例では、被乗数と乗数が４ビットの例を示したが、図４は、被乗数と乗数のビット数をＸビットとした場合に、Ｄレジスタ３３、Ａレジスタ３２、Ｂレジスタ３１に被乗数と乗数を設定する位置を示す。なお、以下の例では、各レジスタの長さ（ビット数）に制限がないと仮定した場合を示す。
【００３７】
Ｄレジスタ３３には、受付部２が乗数Ａを、ＬＳＢ側の０〜Ｘ−１ビットに設定する。Ａレジスタ３２には、受付部２が乗数Ｂを、ＭＳＢ側の２×（２Ｘ＋１）ビットから設定する。
【００３８】
Ｂレジスタ３１には、受付部２が被乗数ｂを、ＬＳＢ側の０〜Ｘ−１ビットに設定し、被乗数ａを、ＭＳＢ側の２Ｘ＋１ビットから設定する。
【００３９】
乗算結果を格納するＰレジスタ３９には、ＬＳＢ側の０〜２Ｘビットにｂ×Ａと符号ビットが格納され、９〜２×（２Ｘビット＋１）−１にａ×Ａと符号ビットが格納され、２×（２Ｘビット＋１）〜３×（２Ｘビット＋１）−１にｂ×Ｂと符号ビットが格納される。
【００４０】
換言すれば、受付部２は、ＡＤレジスタ３５（第１のレジスタ）で乗数Ａを最下位ビットから格納し、乗数Ｂを最下位ビットから４Ｘ＋２ビットの位置から格納し、Ｂレジスタ３１（第２のレジスタ）で被乗数ｂを最下位ビットから格納し、被乗数ａを最下位ビットから２Ｘ＋１ビットの位置から格納する。
【００４１】
なお、図示はしないが、Ｄレジスタ３３またはＡレジスタ３２のいずれか一方に、乗数Ａ、Ｂを設定するようにしてもよい。
【００４２】
図５は、乗算器３を畳み込み演算に適用した例を示す図である。図示の例では、スライディングウィンドウで画像とフィルタの乗算を行う例を示す。スライド前の画像ａ、ｂとフィルタの乗数Ａ、Ｂを乗算器３−１で演算し、スライド後の画像ｃ、ｄとフィルタの乗数Ｂ、Ｃを乗算器３−２で演算する。そして、乗算器３の後段に配置した加算器５−１、５−２でスライド前の結果と、スライド後の結果を出力する例を示す。なお、加算器５−１、５−２は、出力部４に含まれる例を示す。
【００４３】
乗算器３−１は、画像ａ、ｂを被乗数として受け付けて、フィルタＡ、Ｂを乗数として受け付けて乗算を実行する。前記図３と同様に、乗算器３−１は、乗算結果としてａ×Ａ、ｂ×Ｂ及びｂ×Ａを算出する。
【００４４】
乗算器３−２は、画像ｃ、ｄを被乗数として受け付けて、フィルタＢ、Ｃを乗数として受け付けて乗算を実行する。乗算器３−２は、乗算結果としてｃ×Ｂ、ｄ×Ｃ及びｃ×Ｃを算出する。
【００４５】
乗算器３−１は、加算器５−１にａ×Ａ、ｂ×Ｂを出力する。乗算器３−２は、加算器５−１にｃ×Ｃを出力する。加算器５−１は、スライド前の畳み込み演算の結果（ａ×Ａ、ｂ×Ａ、ｃ×Ｃ）を出力する。
【００４６】
乗算器３−２は、加算器５−２にｃ×Ｂ、ｄ×Ｃを出力する。乗算器３−１は、加算器５−２にｂ×Ａを出力する。加算器５−２は、スライド後の畳み込み演算の結果（ｂ×Ａ、ｃ×Ｂ、ｄ×Ｃ）を出力する。
【００４７】
本実施例１では、乗算器３を複数使用することで、畳み込み演算を効率よく実行することができる。そして、一つの乗算器で３つの乗算結果を並列的に算出することが可能なるので、畳み込み演算を実行する演算装置１で使用する乗算器３の数を低減でき、消費電力の削減も実現することができる。
【００４８】
なお、上記実施例１では、乗数Ａ、Ｂを格納するＡレジスタ３２とＤレジスタ３３の値を前置加算器３４が加算してＡＤレジスタ３５に格納してから、乗算部３６がＢレジスタ３１との乗算を行う例を示したが、これに限定されるものではない。前置加算器３４を用いない場合では、受付部２がＡＤレジスタ３５に直接アクセスして乗数Ａ、Ｂを上述のように格納し、被乗数ａ，ｂを格納するＢレジスタ３１と、乗数Ａ、Ｂを格納するＡＤレジスタ３５の積を乗算部３６が演算すれば良い。
【００４９】
以上のように、乗算器３は、前記被乗数ａに対して乗数Ａを乗ずる演算と、被乗数ｂに対して前記乗数Ａ及び乗数Ｂを乗ずる演算を一括して実行することで、３つの乗算結果（ｂ×Ａ、ａ×Ａ、ｂ×Ｂ）を得ることができ、ひとつの乗数に制限されずに一つの乗算器で複数の乗算を並列的に実行することが可能となる。
【実施例２】
【００５０】
図６、図７は、本発明の実施例２を示し、車載用の演算装置１の一例を示すブロック図である。本実施例２では、Ａレジスタ３２（ＡＤレジスタ３５）への乗数Ｂの格納位置を前記実施例１とは異なる位置に格納するもので、その他の構成は前記実施例１と同様である。
【００５１】
本実施例２の受付部２は、図７で示すように、Ａレジスタ３２のＬＳＢ側の９ビット目（２Ｘ＋１）から乗数Ｂを格納する。前置加算器３４はＡレジスタ３２とＤレジスタ３３を加算して図６のようにＡＤレジスタ３５に演算結果を格納する。
【００５２】
乗算部３６は、前記実施例１と同様にＢレジスタ３１とＡＤレジスタ３５の積を算出してＭレジスタ３７を介してＰレジスタ３９に演算結果を格納する。本実施例２では、前記実施例１のａ×Ａに代わって、ｂ×Ａ＋ｃ×Ｂを算出できる点が実施例１と相違する。
【００５３】
本実施例２では図７で示すように、受付部２が被乗数ｂ、ｃをＢレジスタ３１に設定し、乗数ＢをＡレジスタ３２に設定し、乗数ＡをＤレジスタ３３に設定する。
【００５４】
すなわち、受付部２は、４ビットの被乗数ｃをＢレジスタ３１のＬＳＢ側の０〜３ビットに格納する。さらに、受付部２は、前記実施例１と同様に、４ビットの被乗数ｂをＢレジスタ３１のＭＳＢ側の９〜１２ビットに格納する。なお、受付部２は、被乗数ｂ、ｃを格納したビットを除くＢレジスタ３１の他のビット（４〜８、１３〜１７）には０を設定する。
【００５５】
また、受付部２は、４ビットの乗数ＡをＤレジスタ３３のＬＳＢ側の０〜３ビットに格納する。さらに、受付部２は、４ビットの乗数ＢをＡレジスタ３２のＬＳＢ側から９〜１２ビットに格納する。なお、受付部２は、乗数Ａを格納したビットを除くＤレジスタ３３の他のビット（４〜２４）には０を設定する。また、受付部２は、乗数Ｂを格納したビットを除くＡレジスタ３２の他のビット（０〜８、１３〜２４）には０を設定する。
【００５６】
前置加算器３４による加算結果は、ＡＤレジスタ３５のＬＳＢ側の０〜３ビットに乗数Ａが格納され、ＡＤレジスタ３５の９〜１２ビットに乗数Ｂが格納される。
【００５７】
換言すれば、受付部２は、ＡＤレジスタ３５（第１のレジスタ）で乗数Ａを最下位ビットから格納し、乗数Ｂを最下位ビットから２Ｘ＋１ビットの位置から格納し、Ｂレジスタ３１（第２のレジスタ）で被乗数ｂを最下位ビットから格納し、被乗数ａを最下位ビットから２Ｘ＋１ビットの位置から格納する。
【００５８】
乗算部３６による乗数結果は、Ｐレジスタ３９の０〜２６ビットに格納される。Ｐレジスタ３９の０〜７ビットには、被乗数ｃ×乗数Ａの値が格納される。Ｐレジスタ３９の８ビットは、ｂ×Ａの乗算結果の符号ビットとして用いることができる。
【００５９】
Ｐレジスタ３９の９〜１６ビットには、被乗数ｂ×乗数Ａ＋被乗数ｃ×乗数Ｂの値が格納される。Ｐレジスタ３９の１７ビットは、ｂ×Ａ＋ｃ×Ｂの乗算結果の符号ビットとして用いることができる。Ｐレジスタ３９の１８〜２５ビットには、被乗数ｂ×乗数Ｂの値が格納される。Ｐレジスタ３９の２６ビットは、ｂ×Ｂの乗算結果の符号ビットとして用いることができる。
【００６０】
被乗数ｂ，ｃと乗数Ａ、Ｂを図示のように、Ａレジスタ３２、Ｂレジスタ３１、Ｄレジスタ３３の所定の位置に設定することで、乗算部３６は、一回の乗算で、ｃ×Ａとｂ×Ａ＋ｃ×Ｂ及びｂ×Ｂの３つの乗算結果を得ることができる。
【００６１】
出力部４は、Ｐレジスタ３９の０〜７ビットをｃ×Ａの演算結果として選択し、９〜１６ビットをｂ×Ａ＋ｃ×Ｂの演算結果として選択し、１８〜２５ビットをｂ×Ｂの乗算結果として選択して出力することができる。
【００６２】
本実施例２の演算装置１によれば、被乗数ｂ、ｂと乗数Ａ、Ｂの４つの値から、３つの乗算結果を１回で得ることが可能となる。このように、本実施例２においても、前記従来例のようにひとつの乗数ｃに制限されることなく所望の乗数Ａ、Ｂで３つの乗算結果を並列的に算出することが可能となる。
【００６３】
図８は、本実施例２の乗算器３を畳み込み演算に適用した例を示す図である。図示の例では、スライディングウィンドウで画像とフィルタの乗算を行う例を示す。スライド前の画像ｂ、ｃとフィルタの乗数Ａ、Ｂを乗算器３−１で演算し、スライド後の画像ｄ、ｅとフィルタの乗数Ｂ、Ａを乗算器３−２で演算する。そして、乗算器３の後段に配置した加算器５−１、５−２、５−３、５−４でスライド前の結果と、スライド後１、スライド後２、スライド後３の結果を出力する例を示す。なお、加算器５−１〜５−４は、出力部４に含まれる例を示す。
【００６４】
乗算器３−１は、画像ｂ、ｃを被乗数として受け付けて、フィルタＡ、Ｂを乗数として受け付けて乗算を実行する。図７で示したように乗算器３−１は、乗算結果としてｃ×Ａ、ｂ×Ａ＋ｃ×Ｂ及びｂ×Ｂを算出する。
【００６５】
乗算器３−２は、画像ｄ、ｅを被乗数として受け付けて、フィルタＢ、Ａを乗数として受け付けて乗算を実行する。乗算器３−２は、乗算結果としてｄ×Ａ、ｄ×Ｂ＋ｅ×Ａ及びｅ×Ｂを算出する。
【００６６】
乗算器３−１は、加算器５−１にｃ×Ａ、ｂ×Ｂを出力し、加算器５−２にｂ×Ａ＋ｃ×Ｂを出力し、加算器５−３にｃ×Ａを出力する。加算器５−１は、スライド前の畳み込み演算の結果（ｂ×Ｂ、ｃ×Ａ）を出力する。
【００６７】
乗算器３−２は、加算器５−２にｄ×Ａを出力し、加算器５−３にｄ×Ｂ＋ｅ×Ａを出力し、加算器５−４にｄ×Ａ、ｅ×Ｂを出力する。
【００６８】
加算器５−２は、スライド後１の畳み込み演算の結果（ｂ×Ａ、ｃ×Ｂ、ｄ×Ａ）を出力する。加算器５−３は、スライド後２の畳み込み演算の結果（ｃ×Ａ、ｄ×Ｂ、ｅ×Ａ）を出力する。加算器５−４は、スライド後３の畳み込み演算の結果（ｄ×Ａ、ｅ×Ｂ）を出力する。
【００６９】
本実施例２では、前記実施例１と同様に、乗算器３を複数使用することで、畳み込み演算を効率よく実行することができる。そして、一つの乗算器で３つの乗算結果を並列的に算出することが可能なるので、畳み込み演算を実行する演算装置１で使用する乗算器３の数を低減でき、消費電力の削減も実現することができる。
【００７０】
なお、上記実施例２では、乗数Ａ、Ｂを格納するＡレジスタ３２とＤレジスタ３３の値を前置加算器３４が加算してＡＤレジスタ３５に格納してから、乗算部３６がＢレジスタ３１との乗算を行う例を示したが、これに限定されるものではない。前置加算器３４を用いない場合では、受付部２がＡＤレジスタ３５に直接アクセスして乗数Ａ、Ｂを上述のように格納し、被乗数ｂ、ｃを格納するＢレジスタ３１と、乗数Ａ、Ｂを格納するＡＤレジスタ３５の積を乗算部３６が演算すれば良い。
【００７１】
また、上記実施例２では、被乗数ｂ、ｃを用いる例を示したが、前記実施例１の図３と同様に被乗数ａ、ｂをＢレジスタ３１に設定した場合、乗算結果は、ｂ×Ａ、ａ×Ａ＋ｂ×Ｂ、ａ×Ｂとなる。すなわち、乗算器３は、被乗数ａに対して乗数Ａ及び乗数Ｂを乗ずる演算と、被乗数ｂに対して乗数Ａ及び乗数Ｂを乗ずる演算を一括して実行することで、３つの乗算結果（ｂ×Ａ、ａ×Ａ＋ｂ×Ｂ、ａ×Ｂ）を得ることができ、ひとつの乗数に制限されずに一つの乗算器で複数の乗算を並列的に実行することが可能となる。
【実施例３】
【００７２】
図９は、本発明の実施例３を示し、前記実施例１または実施例２の車載用の演算装置１を採用した車載制御装置１００の一例を示すブロック図である。
【００７３】
車載制御装置１００には、画像を取得するカメラ１１０と、車両の制御対象となるアクチュエータ１４０が接続される。車載制御装置１００は、カメラ１１０が取得した画像を所定の形式で出力する画像処理部１２０と、画像処理部１２０からのデータを受け付けてＤＮＮの畳み込み演算を実施する演算装置１と、演算装置１の演算結果に基づいてアクチュエータ１４０を制御する駆動部１３０を含む。
【００７４】
演算装置１は前記実施例１または前記実施例２と同様であり、ＤＮＮの畳み込み演算を実行して車両の制御を行う。演算装置１は、画像処理部１２０が出力したデータを被乗数として受け付けて、予め設定されたフィルタの乗数Ａ、Ｂで乗算を含む演算を実施する。なお、演算装置１は、フィルタの乗数Ａ、Ｂを外部から受け付けてもよい。
【００７５】
アクチュエータ１４０は、例えば、操舵装置や制動装置あるいは駆動力制御装置を構成する。なお、駆動部１３０は、アクチュエータ１４０に代わってインバータなどの電子機器を制御しても良い。
【００７６】
演算装置１は、前記実施例１または実施例２と同様に１つの乗算器３で３つの乗算を一括して実行することができる。このため、ＤＮＮの畳み込み演算のように多数の乗算を実行する場合には、演算装置１で稼働する乗算器３の数を低減でき、消費電力の削減も実現することができる。
【００７７】
なお、上記実施例１、２、３では、演算装置１にＦＰＧＡを採用する例を示したが、これに限定されるものではなく、乗算器３を含むＤＳＰ（Digital Signal Processor）やＡＳＩＣ（Application Specific Integrated Circuit）あるいは他のプログラマブルロジックデバイスを採用することができる。
【００７８】
また、上記実施例１の乗算器３は、被乗数ａに対して乗数Ａを乗ずる演算と、被乗数ｂに対して乗数Ａ及び乗数Ｂを乗ずる演算を一括して実行する例を示し、上記実施例２の乗算器３は、被乗数ａに対して乗数Ａ及び乗数Ｂを乗ずる演算と、被乗数ｂに対して乗数Ａ及び乗数Ｂを乗ずる演算を一括して実行する例を示したが、これに限定されるものではない。例えば、被乗数ａに対して乗数Ａ及び乗数Ｂを乗ずる演算と、被乗数ｂに対して乗数Ａまたは乗数Ｂを乗ずる演算を一括して実行しても良い。
【００７９】
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に記載したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加、削除、又は置換のいずれもが、単独で、又は組み合わせても適用可能である。
【００８０】
また、上記の各構成、機能、処理部、及び処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、及び機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等の記録装置、または、ＩＣカード、ＳＤカード、ＤＶＤ等の記録媒体に置くことができる。
【００８１】
また、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。実際には殆ど全ての構成が相互に接続されていると考えてもよい。
【符号の説明】
【００８２】
１  演算装置
２  受付部
３  乗算器
４  出力部
３１  Ｂレジスタ
３２  Ａレジスタ
３３  Ｄレジスタ
３４  前置加算器
３５  ＡＤレジスタ
３６  乗算部３６
３７  Ｍレジスタ３７
３８  ＡＬＵ
３９  Ｐレジスタ
１００  車載制御装置
１１０  カメラ
１２０  画像処理部
【図１】
2019079183.tif 000003
【図２】
2019079183.tif 000004
【図３】
2019079183.tif 000005
【図４】
2019079183.tif 000006
【図５】
2019079183.tif 000007
【図６】
2019079183.tif 000008
【図７】
2019079183.tif 000009
【図８】
2019079183.tif 000010
【図９】
2019079183.tif 000011