(57)【要約】【課題】畳み込み演算器でのオーバーフローの発生を未然に抑制すること。【解決手段】ニューラルネットワークを構成する複数の畳み込み層の各々でフィルタと前記フィルタのサイズ分の対象データとの畳み込み演算を畳み込み演算器で実行する演算装置は、前記畳み込み層ごとに、前記対象データの最下位ビットから第１ビット数分のビット列を削減し、前記フィルタの要素である重みの最下位ビットから第２ビット数分のビット列を削減するビット削減部と、前記ビット削減部による削減後の前記対象データおよび前記重みが前記畳み込み演算器に入力されたことにより前記畳み込み演算器から出力された畳み込み演算結果の最下位ビットに、前記第１ビット数および前記第２ビット数を合計した第３ビット数分のビット列を追加するビット追加部と、を有する。【選択図】図１
2020187608.tif 000002
【特許請求の範囲】
【請求項１】
ニューラルネットワークを構成する複数の畳み込み層の各々でフィルタと前記フィルタのサイズ分の対象データとの畳み込み演算を畳み込み演算器で実行する演算装置であって、
前記畳み込み層ごとに、前記対象データの最下位ビットから第１ビット数分のビット列を削減し、前記フィルタの要素である重みの最下位ビットから第２ビット数分のビット列を削減するビット削減部と、
前記ビット削減部による削減後の前記対象データおよび前記重みが前記畳み込み演算器に入力されたことにより前記畳み込み演算器から出力された畳み込み演算結果の最下位ビットに、前記第１ビット数および前記第２ビット数を合計した第３ビット数分のビット列を追加するビット追加部と、
を有することを特徴とする演算装置。
【請求項２】
請求項１に記載の演算装置であって、
前記畳み込み層ごとに、前記畳み込み演算器でオーバーフローが発生するか否かを判定する判定器を有し、
前記ビット削減部は、前記判定器による判定結果に基づいて、前記対象データの最下位ビットから前記第１ビット数分のビット列を削減し、前記重みの最下位ビットから前記第２ビット数分のビット列を削減し、
前記ビット追加部は、前記判定器による判定結果に基づいて、前記畳み込み演算結果の最下位ビットに、前記第３ビット数分のビット列を追加する、
ことを特徴とする演算装置。
【請求項３】
請求項２に記載の演算装置であって、
前記畳み込み層ごとに、前記フィルタのサイズと、前記対象データのビット数と、前記フィルタ内の要素である重みのビット数と、を格納する格納部を有し、
前記判定器は、畳み込み演算対象の畳み込み層における、前記フィルタのサイズと、前記対象データのビット数と、前記フィルタ内の要素である重みのビット数と、を前記格納部から取得して、前記畳み込み演算器でオーバーフローが発生しない第４ビット数を算出し、前記第４ビット数と前記畳み込み演算器内の加算器のビット数とに基づいて、前記畳み込み演算器でオーバーフローが発生するか否かを判定する、
ことを特徴とする演算装置。
【請求項４】
請求項１に記載の演算装置であって、
畳み込み演算対象の畳み込み層における、前記フィルタのサイズ、前記対象データのビット数、および前記フィルタ内の要素である重みのビット数と、前記畳み込み演算器内の加算器のビット数とに基づいて、前記第３ビット数を算出し、前記第３ビット数に基づいて前記第１ビット数および前記第２ビット数を決定する削減ビット数計算器を有し、
前記ビット削減部は、前記対象データの最下位ビットから前記削減ビット数計算器によって決定された第１ビット数分のビット列を削減し、前記重みの最下位ビットから前記削減ビット数計算器によって決定された第２ビット数分のビット列を削減し、
前記ビット追加部は、前記畳み込み演算結果の最下位ビットに、前記削減ビット数計算器によって算出された第３ビット数分のビット列を追加する、
ことを特徴とする演算装置。
【請求項５】
請求項４に記載の演算装置であって、
前記削減ビット数計算器は、さらに、前記対象データの値および前記重みの値の少なくとも一方に基づいて、前記第３ビット数を算出する、
ことを特徴とする演算装置。
【請求項６】
請求項５に記載の演算装置であって、
前記削減ビット数計算器は、前記対象データの最上位ビットの値および前記重みの最上位ビットの値の少なくとも一方が０となる畳み込み演算の回数に基づいて、前記第３ビット数を算出する、
ことを特徴とする演算装置。
【請求項７】
請求項５に記載の演算装置であって、
前記削減ビット数計算器は、前記対象データの最上位ビットから０の値が連続するビット数および前記重みの最上位ビットから０の値が連続するビット数に基づいて、前記第３ビット数を算出する、
ことを特徴とする演算装置。
【請求項８】
請求項１に記載の演算装置であって、
前記畳み込み層ごとに、前記第１ビット数と、前記第２ビット数と、を格納する格納部を有し、
前記ビット削減部は、前記畳み込み層ごとに、前記第１ビット数および前記第２ビット数を取得して、前記対象データの最下位ビットから前記第１ビット数分のビット列を削減し、前記重みの最下位ビットから前記第２ビット数分のビット列を削減する、
ことを特徴とする演算装置。
【請求項９】
請求項８に記載の演算装置であって、
前記格納部は、前記畳み込み層ごとに、さらに、前記第３ビット数を格納し、
前記ビット追加部は、前記畳み込み層ごとに、前記第３ビット数を前記格納部から取得して、前記畳み込み演算結果の最下位ビットに、前記第３ビット数分のビット列を追加する、
ことを特徴とする演算装置。
【請求項１０】
ニューラルネットワークを構成する複数の畳み込み層の各々でフィルタと前記フィルタのサイズ分の対象データとの畳み込み演算を畳み込み演算器で実行する演算装置による演算方法であって、
前記演算装置が、
前記畳み込み層ごとに、前記対象データの最下位ビットから第１ビット数分のビット列を削減し、前記重みの最下位ビットから第２ビット数分のビット列を削減し、
削減後の前記対象データおよび前記フィルタの要素である重みが前記畳み込み演算器に入力されたことにより前記畳み込み演算器から出力された畳み込み演算結果の最下位ビットに、前記第１ビット数および前記第２ビット数を合計した第３ビット数分のビット列を追加する、
ことを特徴とする演算方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、畳み込み演算を実行する演算装置および演算方法に関する。
【背景技術】
【０００２】
ＤＮＮ（Ｄｅｅｐ  Ｎｅｕｒａｌ  Ｎｅｔｗｏｒｋ）を用いた物体認識や行動予測等の自動運転への適用が進展している。ＤＮＮを車載用ＥＣＵ（Ｅｌｅｃｔｒｏｎｉｃ  Ｃｏｎｔｒｏｌ  Ｕｎｉｔ）に実装する際には回路実装規模の削減が必要となる。回路実装規模の制約からＤＮＮの実装は層ごとに行われ、層ごとに入力パラメータを変更することで同一回路で畳み込み演算が実行される。ＤＮＮの畳み込み演算ではオーバーフローが発生する可能性があり、その対策に畳み込み演算器のビット数および回路実装規模を増加する必要がある。ＤＮＮのオーバーフローの判定結果は層ごとに異なるため、最適な畳み込み演算器のビット数は層ごとに異なる。回路実装上は、一番条件が厳しい層に合わせて回路実装規模を選択する必要がある。
【０００３】
特許文献１の回路設計方法は、所望のデジタル信号処理に関してオーバーフロー判定する対象演算にディレクティブを付加しつつプログラムを作成し、このプログラムに基づいて動作合成を行い、ディレクティブが付加された対象演算に対してオーバーフロー検出回路を付加してＲＴＬ回路を生成する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００９‐４８３６７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
上述した特許文献１の回路設計方法は、回路設計時にオーバーフロー判定回路を付与し実際に演算を行った後にオーバーフローを判定する。したがって、演算を行うまでオーバーフローが発生するかがわからず、回路実装後にオーバーフローが発生する場合は対策することができない。また、特許文献１の回路設計方法は、オーバーフローの判定を行い、判定結果に基づいて演算器のビット数を増加させる。したがって、畳み込み演算器の回路規模が増加する。
【０００６】
本発明は、畳み込み演算装置でのオーバーフローの発生を未然に抑制することを目的とする。
【課題を解決するための手段】
【０００７】
本願において開示される発明の一側面となる演算装置は、ニューラルネットワークを構成する複数の畳み込み層の各々でフィルタと前記フィルタのサイズ分の対象データとの畳み込み演算を畳み込み演算器で実行する演算装置であって、前記畳み込み層ごとに、前記対象データの最下位ビットから第１ビット数分のビット列を削減し、前記フィルタの要素である重みの最下位ビットから第２ビット数分のビット列を削減するビット削減部と、前記ビット削減部による削減後の前記対象データおよび前記重みが前記畳み込み演算器に入力されたことにより前記畳み込み演算器から出力された畳み込み演算結果の最下位ビットに、前記第１ビット数および前記第２ビット数を合計した第３ビット数分のビット列を追加するビット追加部と、を有することを特徴とする。
【発明の効果】
【０００８】
本発明の代表的な実施の形態によれば、畳み込み演算器でのオーバーフローの発生を未然に抑制することができる。前述した以外の課題、構成及び効果は、以下の実施例の説明により明らかにされる。
【図面の簡単な説明】
【０００９】
【図１】図１は、外界認識をするためのＣＮＮを示す説明図である。
【図２】図２は、図１に示した畳み込み演算例を示す説明図である。
【図３】図３は、図２の部分拡大図である。
【図４】図４は、ビットシフト例を示す説明図である。
【図５】図５は、実施例１にかかる演算装置の構成例を示すブロック図である。
【図６】図６は、実施例１にかかる演算装置の演算処理手順例を示すフローチャートである。
【図７】図７は、実施例２にかかるビットシフト例を示す説明図である。
【図８】図８は、ビット列の探索例を示す説明図である。
【図９】図９は、実施例４にかかる演算装置の構成例を示すブロック図である。
【図１０】図１０は、オーバーフロー判定結果テーブルの一例を示す説明図である。
【図１１】図１１は、実施例４にかかる演算装置の演算処理手順例を示すフローチャートである。
【発明を実施するための形態】
【実施例１】
【００１０】
＜ＣＮＮ＞
図１は、外界認識をするためのＣＮＮ（Ｃｏｎｖｏｌｕｔｉｏｎａｌ  Ｎｅｕｒａｌ  Ｎｅｔｗｏｒｋ）を示す説明図である。ＣＮＮ１００は、Ｌ個（Ｌは２以上の整数）の畳み込み層を含む畳み込みニューラルネットワークである。図１では畳み込み層以外のプーリング層や全結合層、出力層は省略する。ＣＮＮ１００は、たとえば、画像データ１０２が入力されると、Ｌ個の畳み込み層Ｃ１〜ＣＬにより順次畳み込み演算を実行して、画像データ１０２に表示されている物体の認識結果１０５を出力する。任意の層番号ｊである第ｊ層の畳み込み層を、第ｊ畳み込み層Ｃｉ（１≦ｊ≦Ｌ）または畳み込み層Ｃｊと称す。
【００１１】
ここで、第１畳み込み層Ｃ１（ｊ＝１）を例に挙げて畳み込み演算を説明する。ＣＮＮ１００は、第１畳み込み層Ｃ１に対応する重みフィルタ１１０を学習済みモデル１０１から取得する。学習済みモデル１０１は、畳み込み層Ｃｉごとに異なる重みフィルタ１１０を有する。重みフィルタ１１０は、たとえば、ｎ×ｎ（ｎは１以上の整数）の重み行列Ｗで表現される。ｎ×ｎは、畳み込み演算での積和演算での加算回数となる。図１では、例としてｎ＝３とし、９個の要素である重みｗａ〜ｗｉを含む。
する。
【００１２】
ＣＮＮ１００は、畳み込み演算器１０３により、画像データ１０２内の重み行列Ｗと同じｎ×ｎである対象領域１２０の画素ａ〜ｉと、重み行列Ｗと、を用いて、畳み込み演算を実行し、対象領域１２０の畳み込み演算結果１４０を出力する。ＣＮＮ１００は、畳み込み演算器１０３により、重み行列Ｗを画像データ１０２内でラスタスキャンしながら対象領域１２０ごとに畳み込み演算結果１４０を出力することで、畳み込み演算結果１０４を後段の第２畳み込み層Ｃ２に出力する。ＣＮＮ１００の計算量は膨大になるため、ＣＮＮ１００は、各対象領域１２０で積和演算する際に、ＣＮＮ１００内の加算器にオーバーフローが発生することがある。
【００１３】
＜畳み込み演算例＞
図２は、図１に示した畳み込み演算例を示す説明図である。図３は、図２の部分拡大図である。図２および図３において、（Ａ）は、画素および重みを示す各ビット列に対してビットシフトおよびビット逆シフトをしない場合の畳み込み演算例を示し、（Ｂ）は、画素および重みを示す各ビット列に対してビットシフトおよびビット逆シフトをする場合の畳み込み演算例を示す。
【００１４】
画素ａ〜ｉの値を表現するためのビット幅である各ビット数ｐｉは同一ビット数とは限らないが、本例では、便宜上、いずれの画素ａ〜ｉのビット数もｐｉと表記する。同様に、重みｗａ〜ｗｉの値を表現するためのビット幅である各ビット数ｐｗも同一ビット数とは限らないが、本例では、便宜上、いずれの重みｗａ〜ｗｉのビット数もｐｗと表記する。
【００１５】
図２（Ａ）において、畳み込み演算器１０３は、第ｊ畳み込み層Ｃｊにおいて、積和演算器で畳み込み演算の乗算と加算を逐次演算する。畳み込み演算器１０３は、乗算器２０１と、加算器２０２と、格納レジスタ２０３と、出力レジスタ２０４と、を有する。乗算器２０１は、２入力１出力の回路である。乗算器２０１は、（１）対象領域１２０からのビット数ｐｉの画素（たとえば、画素ｂ）と、（２）当該画素に対応する重み行列Ｗの要素であるビット数ｐｗの重み（たとえば、重みｗｂ）と、を入力して、（３）ビット数（ｐｉ＋ｐｗ）の乗算結果（たとえば、ｂ×ｗｂ）を出力する。
【００１６】
加算器２０２は、（３）乗算結果（たとえば、ｂ×ｗｂ）と、（４）１画素前の累積加算結果（たとえば、ａ×ｗａ）と、を加算して、（５）最新の累積加算結果（たとえば、ａ×ｗａ＋ｂ×ｗｂ）を格納レジスタ２０３に出力する。加算器２０２の最大ビット数をＭビットとする。Ｍは１以上の整数である。累積加算結果のビット数は、２ｋ回目（ｋ＝１，２，３，…）の加算ごとに繰り上がる。
【００１７】
格納レジスタ２０３は、（５）最新の累積加算結果を格納する。出力レジスタ２０４は、加算回数ｎ×ｎの加算の終了時、すなわち、対象領域１２０での畳み込み演算の終了時での最新の累積加算結果を格納レジスタ２０３から取得して、出力データ格納レジスタ２０５に出力する。
【００１８】
畳み込み演算前、すなわち、０回目の加算では、（１）のビット数ｐｉ、（２）のビット数ｐｗ、（３）のビット数（ｐｉ＋ｐｗ）、（４）の１画素前の累積加算結果のビット数、および（５）の加算累積結果のビット数は、いずれも０ビットである。
【００１９】
加算回数ｎ×ｎ＝１回目の演算では、畳み込み演算器１０３は、（１）ビット数ｐｉの画素ａと（２）ビット数ｐｗの重みｗａとの（３）乗算結果ａ×ｗａ（ビット数（ｐｉ＋ｐｗ））を出力する。（４）対象領域１２０の最初の画素ａであるため、１画素前の加算累積結果は存在しない。このため、（５）最新の加算累積結果は、ビット数（ｐｉ＋ｐｗ）の乗算結果ａ×ｗａとなる。
【００２０】
加算回数ｎ×ｎ＝２回目の演算では、畳み込み演算器１０３は、（１）ビット数ｐｉの画素ｂと（２）ビット数ｐｗの重みｗｂとの（３）乗算結果ｂ×ｗｂ（ビット数（ｐｉ＋ｐｗ））を出力する。（４）１画素前の加算累積結果は、ビット数（ｐｉ＋ｐｗ）の乗算結果ａ×ｗａである。このため、（５）最新の加算累積結果は、ビット数（ｐｉ＋ｐｗ＋１）の乗算結果（ａ×ｗａ＋ｂ×ｗｂ）となる。図３の（Ａ）に示すように、このような処理を、畳み込み演算器１０３は、画素ｉまで実行する。
【００２１】
このように、畳み込み演算器１０３は、畳み込み演算を加算回数ｎ×ｎ回目まで繰り返す。この場合、ｎ×ｎ回目の加算終了時の（５）加算累積結果のビット数Ｎｍａｘが加算器２０２のビット数Ｍよりも大きくなると、オーバーフローが発生し、計算精度が低下する。オーバーフロー分のビット数をｓ（ｓは、ｓ＞０を満たす整数）とすると、オーバーフローの発生を防止するためには、畳み込み演算器１０３の加算器２０２のビット数Ｍを、ＭビットからＭ＋ｓビットに変更しなければならない。
【００２２】
より具体的には、畳み込み層Ｃｊごとにオーバーフローの発生条件（加算回数ｎ×ｎ、画素や重みの入力ビット数）が異なる。したがって、全畳み込み層Ｃ１〜ＣＬの中でオーバーフローの条件が一番厳しい畳み込み層Ｃｊに合わせて加算器２０２のビット数Ｍを調整する必要がある。これにより、回路規模が増大する。具体的には、たとえば、各畳み込み層Ｃｊのオーバーフロー分のビット数をｓｊ（１≦ｊ≦Ｌ）とした場合に、オーバーフロー分のビット数ｓ１〜ｓＬのうち最大のビット数をｓとする。この場合、オーバーフローの発生を防止するためには、畳み込み演算器１０３の加算器２０２のビット数Ｍを、ＭビットからＭ＋ｓビットに変更しなければならない。
【００２３】
図２の（Ｂ）において、畳み込み演算器１０３の前段にビットシフト器２１１ｉ，２１１ｗが設けられ、畳み込み演算器１０３の後段にビット逆シフト器２１２が設けられる。ビットシフト器２１１ｉは、ｓｉビット数分、画素のビット数ｐｉをシフトする。ビットシフト器２１１ｗは、ｓｗビット数分、重みのビット数ｐｗをシフトする。なお、ビット数ｓｉ，ｓｗの関係は、下記式（１）を充足すればよい。
【００２４】
ｓ＝ｓｉ＋ｓｗ＞０・・・（１）
【００２５】
図４は、ビットシフト例を示す説明図である。第１ビットシフト器２１１ｉは、最上位ビットＭＳＢ（Ｍｏｓｔ  Ｓｉｇｎｉｆｉｃａｎｔ  Ｂｉｔ）から最下位ビットＬＳＢ（Ｌｅａｓｔ  Ｓｉｇｎｉｆｉｃａｎｔ  ｂｉｔ）への方向に画素のビット列をｓｉビット分シフトすることにより、画素の下位ｓｉビットを削減する。第２ビットシフト器２１１ｗは、重みのビット数ｐｗを最上位ビットＭＳＢから最下位ビットＬＳＢへの方向にｓｗビット分シフトすることにより、重みの下位ｓｗビットを削減する。
【００２６】
これにより、図２（Ｂ）に示したように、（１）´第１ビットシフト器２１１ｉはビット数（ｐｉ−ｓｉ）またはビット数ｐｉの画素を乗算器２０１に出力し、（２）´第２ビットシフト器２１１ｗはビット数（ｐｗ−ｓｗ）またはビット数ｐｗの重みを乗算器２０１に出力する。
【００２７】
加算回数ｎ×ｎ＝１回目の演算では、畳み込み演算器１０３は、（１）´ビット数ｐｉ−ｓｉの画素ａと（２）´ビット数ｐｗ−ｓｗの重みｗａとの（３）乗算結果ａ×ｗａ（ビット数（ｐｉ＋ｐｗ−ｓ））を出力する。（４）対象領域１２０の最初の画素ａであるため、１画素前の加算累積結果は存在しない。このため、（５）最新の加算累積結果は、ビット数（ｐｉ＋ｐｗ−ｓ）の乗算結果ａ×ｗａとなる。
【００２８】
加算回数ｎ×ｎ＝２回目の演算では、畳み込み演算器１０３は、（１）´ビット数ｐｉ−ｓｉの画素ｂと（２）´ビット数ｐｗ−ｓｗの重みｗｂとの（３）乗算結果ｂ×ｗｂ（ビット数（ｐｉ＋ｐｗ−ｓ））を出力する。（４）１画素前の加算累積結果は、ビット数（ｐｉ＋ｐｗ−ｓ）の乗算結果ａ×ｗａである。このため、（５）最新の加算累積結果は、ビット数（ｐｉ＋ｐｗ−ｓ＋１）の乗算結果（ａ×ｗａ＋ｂ×ｗｂ）となる。図３の（Ｂ）に示すように、このような処理を、畳み込み演算器１０３は、画素ｉまで実行する。
【００２９】
このように、畳み込み演算器１０３は、畳み込み演算を加算回数ｎ×ｎ回目まで繰り返す。この場合、ｎ×ｎ回目の加算終了時の（５）加算累積結果のビット数Ｎｍａｘが加算器２０２のビット数Ｍよりも大きくなると、オーバーフローが発生し、計算精度が低下するが、各加算回において、シフトする累積削減ビット数ｓ（＝ｓｉ＋ｓｗ）が、下記式（２）の条件を充足すれば、オーバーフローが発生しない。
【００３０】
ｓ＝Ｎｍａｘ−Ｍ・・・（２）
【００３１】
Ｎｍａｘは、（５）加算累積結果のビット数である。上記式（２）を充足するように、第１ビットシフト器２１１ｉ，第２ビットシフト器２１１ｗで画素および重みの各ビット列をビットシフトすることにより、オーバーフローを回避することができる。このあと、ＣＮＮ１００は、ビット逆シフト器２１２で、加算回ごとに（５）加算累積結果のビット列をビット数ｓ分、逆シフトする。逆シフトとは、（５）加算累積結果のビット列を、最下位ビットＬＳＢから最上位ビットＭＳＢへの方向にｓビット分シフトすることである。
【００３２】
これにより、（５）加算累積結果のビット列に、ｓビット分の下位ビットが追加される。この追加されたｓビット分の下位ビットの値は任意に設定される。このように、画素および重みについて畳み込み演算に先立ってビット数削減することで、畳み込み演算器１０３のオーバーフローを回避することができる。これにより、畳み込み演算器１０３の計算精度の低下を抑制し、畳み込み演算器１０３の回路規模を削減することができる。
【００３３】
より具体的には、畳み込み層Ｃｊごとにオーバーフローの発生条件（加算回数ｎ×ｎ、画素や重みの入力ビット幅）が異なる場合でも、全畳み込み層Ｃ１〜ＣＬの中でオーバーフローの条件が一番厳しい畳み込み層Ｃｊに合わせて加算器２０２のビット数Ｍを調整する必要はなく、シフトする累積削減ビット数ｓを層ｊごとに動的に変化させればよい。
【００３４】
＜演算装置の構成例＞
図５は、実施例１にかかる演算装置の構成例を示すブロック図である。演算装置５００は、データ入力部５０１と、フィルタ格納部５０２と、判定器５０３と、削減ビット数計算器５０４と、ビット削減部５０５と、畳み込み演算器１０３と、ビット逆シフト器２１２と、出力加算器５０６と、出力データ格納レジスタ２０５と、を有する。データ入力部５０１、フィルタ格納部５０２、判定器５０３、削減ビット数計算器５０４、ビット削減部５０５、畳み込み演算器１０３、ビット逆シフト器２１２、出力加算器５０６、および出力データ格納レジスタ２０５は、具体的には、たとえば、ＬＳＩ（Ｌａｒｇｅ−ｓｃａｌｅ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）またはメモリにより実現される。
【００３５】
データ入力部５０１は、データの入力を受け付ける。データ入力部５０１に入力されたデータを「入力データ」と称す。たとえば、データ入力部５０１は、演算装置５００に接続されたカメラ（不図示）から出力された画像データ１０２の入力を受け付ける。この場合、画像データ１０２は入力データである。また、データ入力部５０１は、出力データ格納レジスタ２０５に格納されている最新の加算累積結果（図２（Ｂ）の（５）を参照）の入力も受け付ける。この最新の加算累積結果も入力データである。
【００３６】
データ入力部５０１は、入力データ分岐器５１１と、入力データ格納レジスタ５１２と、を有する。入力データ分岐器５１１は、ＣＮＮ１００の層番号ｊに基づいて、入力データ格納レジスタ５１２に出力する入力データを、画像データ１０２または最新の加算累積結果のいずれかに切り替える。具体的には、たとえば、畳み込み層Ｃｊの層番号ｊがｊ＝１であれば、入力データ分岐器５１１は、画像データ１０２を入力データ格納レジスタ５１２に出力し、層番号ｊがｊ≧２であれば、入力データ分岐器５１１は、最新の加算累積結果を入力データ格納レジスタ５１２に出力する。なお、層番号ｊは、入力データの畳み込み演算が完了するとインクリメントされる。
【００３７】
入力データ格納レジスタ５１２は、入力データ分岐器５１１からの入力データを格納する。入力データ格納レジスタ５１２は、パラメータ格納レジスタ５２２からの現在の層番号ｊに対応する重みサイズｎ×ｎに応じて、重みフィルタ１１０との畳み込み対象となる対象領域１２０を選択して、判定器５０３および第２ビットシフト器２１１ｉに出力する。
【００３８】
フィルタ格納部５０２は、畳み込み層Ｃｊごとの重みフィルタ１１０を格納する。具体的には、たとえば、フィルタ格納部５０２は、アドレスデコーダ５２１と、パラメータ格納レジスタ５２２と、を有する。アドレスデコーダ５２１は、畳み込み層Ｃｊの層番号ｊに対応するアドレス情報ａｄｊをパラメータ格納レジスタ５２２に出力する。パラメータ格納レジスタ５２２は、畳み込み演算器１０３内の加算器２０２のビット数Ｍを格納する。また、パラメータ格納レジスタ５２２は、アドレス情報ａｄｊごとに、画素のビット数ｐｉと、重みのビット数ｐｗと、重み行列Ｗと、重みサイズｎ×ｎと、を格納する。
【００３９】
判定器５０３は、対象領域１２０の畳み込み演算において、畳み込み演算器１０３でオーバーフローを発生させないために必要な加算器２０２のビット数Ｎｍａｘを算出する。ビット数Ｎｍａｘは、たとえば、下記式（３）により算出される。
【００４０】
Ｎｍａｘ＝（ｐｉ＋ｐｗ）＋ｌｏｇ２（ｎ２）・・・（３）
【００４１】
そして、判定器５０３は、上記式（３）で算出したビット数Ｎｍａｘと加算器２０２のビット数Ｍとに基づいて、下記式（４）により、畳み込み演算器１０３でオーバーフローが発生するか否かを事前に判定する。
【００４２】
Ｍ＜Ｎｍａｘ・・・（４）
【００４３】
判定器５０３は、Ｍ＜Ｎｍａｘである場合、対象領域１２０の畳み込み演算において、畳み込み演算器１０３でオーバーフローが発生すると判定し、Ｍ＜Ｎｍａｘでない場合、対象領域１２０の畳み込み演算において、畳み込み演算器１０３でオーバーフローが発生しないと判定する。
【００４４】
削減ビット数計算器５０４は、累積削減ビット数ｓを計算して、ビット逆シフト器２１２に出力する。累積削減ビット数ｓとは、画素削減ビット数ｓｉと重み削減ビット数ｓｗとの合計値である（ｓ＝ｓｉ＋ｓｗ）。画素削減ビット数ｓｉとは、ビット数ｐｉの画素のビット列を、最上位ビットＭＳＢから最下位ビットＬＳＢへの方向にシフトするビット数である。最下位ビットＬＳＢからあふれた画素削減ビット数ｓｉ分のビット列が、ビット数ｐｉの画素のビット列から削減される。
【００４５】
重み削減ビット数ｓｗとは、ビット数ｐｗの重みを、最上位ビットＭＳＢから最下位ビットＬＳＢへの方向にシフトするビット数である。最下位ビットＬＳＢからあふれた重み削減ビット数ｓｗ分のビット列が、ビット数ｐｗの重みのビット列から削減される。累積削減ビット数ｓに占める画素削減ビット数ｓｉおよび重み削減ビット数ｓｗの割合は、任意に設定される。画素削減ビット数ｓｉおよび重み削減ビット数ｓｗのいずれか一方が０でもよい。
【００４６】
具体的には、たとえば、削減ビット数計算器５０４は、判定器５０３によってＭ＜Ｎｍａｘでないと判定された場合、累積削減ビット数ｓを０ビットに設定する。一方、削減ビット数計算器５０４は、判定器５０３によってＭ＜Ｎｍａｘであると判定された場合、下記式（５）により、累積削減ビット数ｓを算出する。
【００４７】
ｓ＝ｌｏｇ２（｜ｎ２−２（Ｍ−（ｐｉ＋ｐｗ））｜）・・・（５）
【００４８】
右辺の「２（Ｍ−（ｐｉ＋ｐｗ）」は、Ｍビットの加算器２０２で画素と重みの乗算結果（ビット数ｐｉ＋ｐｗ）が何回累積加算可能かを示す。すなわち、「Ｍ−（ｐｉ＋ｐｗ）」は、Ｍｂｉｔの加算器２０２で乗算結果（ビット数ｐｉ＋ｐｗ）を累積加算するときのオーバーフローまでのビット余裕（図２の（Ｂ）の（１）および（２）を参照）を示す。上記式（５）の累積削減ビット数ｓの計算結果が整数であれば、そのまま採用される。上記式（５）の累積削減ビット数ｓの計算結果が小数を含む場合は、切り上げ後の値が累積削減ビット数ｓとして採用される。たとえば、上記式（５）の算出結果が「５．４」であれば、切り上げ後の値である「６」が累積削減ビット数ｓとして採用される。
【００４９】
また、削減ビット数計算器５０４は、画素削減ビット数ｓｉを第１ビットシフト器２１１ｉに出力し、重み削減ビットｓｗを第２ビットシフト器２１１ｗに出力する。
【００５０】
ビット削減部５０５は、第１ビットシフト器２１１ｉと第２ビットシフト器２１１ｗとを有する。第１ビットシフト器２１１ｉは、対象領域１２０の画素を順次受け付け、当該画素を、画素削減ビット数ｓｉ分最上位ビットＭＳＢから最下位ビットＬＳＢへの方向にシフトする。
【００５１】
第１ビットシフト器２１１ｉは、ビットシフト後のビット数（ｐｉ−ｓｉ）の画素を畳み込み演算器１０３に出力する。第２ビットシフト器２１１ｗは、重み行列Ｗの要素である重みｗａ〜ｗｉを順次受け付け、当該重みを、重み削減ビット数ｓｗ分最上位ビットＭＳＢから最下位ビットＬＳＢへの方向にシフトする。第２ビットシフト器２１１ｗは、ビットシフト後のビット数（ｐｗ−ｓｗ）の重みを畳み込み演算器１０３に出力する。
【００５２】
畳み込み演算器１０３は、図２の（Ｂ）に示したように、第１ビットシフト器２１１ｉからの画素と第２ビットシフト器２１１ｗからの重みとを順次受け付けて畳み込み演算を実行する。畳み込み演算器１０３は、対象領域１２０の畳み込み演算結果を加算器２０２およびビット逆シフト器２１２に出力する。
【００５３】
ビット逆シフト器２１２は、畳み込み演算器１０３からの対象領域１２０の加算累積結果を、累積削減ビット数ｓ分、最下位ビットＬＳＢから最上位ビットＭＳＢへの方向に逆シフトする。ビット逆シフト後の最下位ビットＬＳＢからの累積削減ビット数ｓ分の空白ビット列には、所定の値（たとえば、０）がパディングされる。このように、ビット逆シフト器２１２は、累積削減ビット数ｓ分のビット列を追加するビット追加部として機能する。
【００５４】
出力加算器５０６は、ビット逆シフト後の対象領域１２０の加算累積結果を、出力データ格納レジスタ２０５に格納されている最新の加算累積結果に加算する。出力データ格納レジスタ２０５は、最新の加算累積結果を格納する。最新の加算累積結果は、出力加算器５０６により対象領域１２０の加算累積結果が加算されることで更新される。出力データ格納レジスタ２０５は、層番号ｊが更新されるとリセットされる。
【００５５】
＜演算装置５００の演算処理手順例＞
図６は、実施例１にかかる演算装置５００の演算処理手順例を示すフローチャートである。演算装置５００は、第ｊ畳み込み層Ｃｊの畳み込み演算を開始する（ステップＳ６００）。なお、層番号ｊの初期値は、ｊ＝１である。演算装置５００は、フィルタ格納部５０２から層番号ｊに対応するパラメータとして、加算器２０２のビット数Ｍと、画素のビット数ｐｉと、重みのビット数ｐｗと、重み行列Ｗと、重みサイズｎ２と、を取得する（ステップＳ６０１）。
【００５６】
演算装置５００は、データ入力部５０１により、入力データ内の対象領域１２０の画素群を取得する（ステップＳ６０２）。層番号ｊ＝１の時の入力データは画像データ１０２であり、ｊ≧２の時の入力データは、出力データ格納レジスタ２０５に格納されている第ｊ−１畳み込み層Ｃｊでの畳み込み演算結果１０４である。対象領域１２０の初期位置は、入力データの左上隅である。対象領域１２０は、対象領域１２０での積和演算が終了する都度、所定のストライドで右方向に移動し、右端に到達すると所定のストライドで下方向に移動し、再度方向に移動する。
【００５７】
演算装置５００は、判定器５０３により、上記式（３）を用いて、畳み込み演算でオーバーフローを起こさないために必要な加算器２０２のビット数Ｎｍａｘを算出する（ステップＳ６０３）。そして、演算装置５００は、判定器５０３により、上記式（４）を用いて、加算器２０２のビット数Ｍが、ステップＳ６０３で算出したビット数Ｎｍａｘよりも大きいか否かを判断する（ステップＳ６０４）。
【００５８】
加算器２０２のビット数Ｍがビット数Ｎｍａｘよりも大きい場合（ステップＳ６０４：Ｙｅｓ）、ステップＳ６０５に移行し、加算器２０２のビット数Ｍがビット数Ｎｍａｘよりも大きくない場合（ステップＳ６０４：Ｎｏ）、ステップＳ６０７に移行する。
【００５９】
ステップＳ６０５において、演算装置５００は、削減ビット数計算器５０４により、上記式（５）を用いて、対象領域１２０内の画素削減ビット数ｓｉおよび重み削減ビット数ｓｗを求める（ステップＳ６０５）。そして、演算装置５００は、ビット削減部５０５により、対象領域１２０内の画素のビット数ｐｉを画素削減ビット数ｓｉ分シフトし、重みのビット数ｐｗを重み削減ビット数ｓｗ分シフトする（ステップＳ６０６）。これにより、画素のビット数ｓｉ分の下位ビットが画素のビット列から削減され、重みのビット数ｓｗ分の下位ビットが重みのビット列から削減される。
【００６０】
ステップＳ６０７において、演算装置５００は、畳み込み演算器１０３により、畳み込み演算を実行する（ステップＳ６０７）。演算装置５００は、ビット逆シフト器２１２により、ステップＳ６０７の対象領域１２０の畳み込み演算結果を累積削減ビット数ｓ分逆シフトする（ステップＳ６０８）。なお、ステップＳ６０４：Ｎｏの場合は、累積削減ビット数ｓ＝０に設定されるため、０ビット分逆シフト、すなわち、逆シフトされない。
【００６１】
演算装置５００は、入力データ全域の演算が終了したか否かを判断する（ステップＳ６０９）。終了していない場合（ステップＳ６０９：Ｎｏ）、演算装置５００は対象領域１２０をストライドしてステップＳ６０２に戻る。入力データ全域の演算が終了した場合（ステップＳ６０９：Ｙｅｓ）、演算装置５００は、第ｊ畳み込み層Ｃｊの演算を終了する（ステップＳ６１１）。そして、演算装置５００は、層番号ｊをインクリメントしてステップＳ６００に戻る。層番号ｊがｊ＝Ｌの場合は、演算装置５００は、演算処理を終了する。
【００６２】
このように、実施例１にかかる演算装置５００は、畳み込み層Ｃｊごとにオーバーフロー判定を行い、オーバーフローが発生すると事前に判定されると、画素のビット数ｐｉおよび重みのビット数ｐｗを削減して、加算器２０２における加算回数のマージンを動的に確保する。これにより、畳み込み演算の回路規模の低減化を図ることができる。
【００６３】
また、ビット削減部５０５からの出力を監視することで、畳み込み演算器１０３に入力される画素および重みについてビットシフトされているか否かを確認することができる。また、出力データ格納レジスタ２０５に格納されている最新の加算累積結果の削減ビット数ｓ分の下位ビットの値が、パディングされた値と一致するか否かを監視することで、ビット逆シフトがされているか否かを確認することができる。
【実施例２】
【００６４】
つぎに、実施例２について説明する。実施例１の演算装置５００は、加算回数ｎ×ｎを元に累積削減ビット数ｓを決定した（上記式（５）を参照）。実施例２の演算装置５００は、入力データの内容に応じて累積削減ビット数ｓを決定する。具体的には、たとえば、画素や重みのビット列の最上位ビットＭＳＢの値が０であれば、そのビット列の加算では、繰り上がりに必要なビットは削減されているとみなす。画素や重みのビット列の最上位ビットＭＳＢを判定ビットと称す。なお、実施例１と共通部分については同一符号を付し、その説明を省略する。
【００６５】
図７は、実施例２にかかるビットシフト例を示す説明図である。図７では、画素ビット数ｐｉがｐｉ＝８ビットの画素のビット列の例を示す。（Ａ）において、（例１）および（例２）のビット列の判定ビット（ＭＳＢ）はいずれも「０」である。したがって、加算回数ｎ×ｎから１減算される。（例３）および（例４）のビット列の判定ビット（ＭＳＢ）はいずれも「１」である。したがって、加算回数ｎ×ｎから減算されない。
【００６６】
実施例２の削減ビット数計算器５０４は、判定器５０３によってＭ＜Ｎｍａｘであると判定された場合、下記式（６）により、累積削減ビット数ｓを算出する。
【００６７】
【数１】
2020187608.tif 000003
【００６８】
Ｂｉｋは、画素のビット列の最上位ビットＭＳＢの値が「１」であれば「０」、「０」であれば「１」となる。同様に、Ｂｗｋは、重みのビット列の最上位ビットＭＳＢの値が「１」であれば「０」、「０」であれば「１」となる。Ｘｋは、ＢｉｋとＢｗｋの論理和である。すなわち、画素のビット列および重みのビット列のうち少なくとも一方の最上位ビットＭＳＢの値が「０」であれば、Ｘｋは「１」となる。
【００６９】
Ｘｋの総和は、Ｍビットの加算器２０２に乗算器２０１からの出力が入力された時のオーバーフローまでのビット余裕（最上位ビットＭＳＢからの空きビット数）を示す。図７の（Ｂ）で、Ｂｉｋの決定例を示す。判定ビットが「０」であれば、Ｂｉｋ＝１となり、判定ビットが「１」であれば、Ｂｉｋ＝０となる。図示はしないが、Ｂｗｋについても同様である。
【００７０】
このように、実施例２にかかる演算装置５００は、実施例１と同様、畳み込み層Ｃｊごとにオーバーフロー判定を行い、オーバーフローが発生すると事前に判定されると、画素のビット数ｐｉおよび重みのビット数ｐｗを削減して、加算器２０２における加算回数のマージンを動的に確保する。これにより、畳み込み演算の回路規模の低減化を図ることができる。
【００７１】
また、累積削減ビット数ｓを実施例１よりも小さくすることができるため、ビット列の削減幅が実施例１よりも小さい。したがって、実施例１よりも畳み込み演算器１０３の演算精度の向上を図ることができる。
【実施例３】
【００７２】
つぎに、実施例３について説明する。実施例１の演算装置５００は、加算回数ｎ×ｎを元に累積削減ビット数ｓを決定した（上記式（５）を参照）。実施例３の演算装置５００は、実施例２と同様、入力データの内容に応じて累積削減ビット数ｓを決定する。具体的には、たとえば、判定器５０３は、画素や重みのビット列において最上位ビットＭＳＢから最下位ビットＬＳＢの方向に探索し、１の値が最初に出現する桁の位置を特定する。なお、実施例１と共通部分については同一符号を付し、その説明を省略する。
【００７３】
図８は、ビット列の探索例を示す説明図である。（例１）のビット列の場合、最上位ビットＭＳＢから２ビットが「００」であり、３ビット目で「１」が出現する。したがって、最上位ビットＭＳＢからの２ビットが削減される。（例２）のビット列の場合、最上位ビットＭＳＢから３ビットが「０００」であり、４ビット目で「１」が出現する。したがって、最上位ビットＭＳＢから３ビットが削減される。（例３）のビット列の場合、最上位ビットＭＳＢで「１」が出現する。したがって、最上位ビットＭＳＢから０ビットが削減される。（例４）のビット列の場合、最上位ビットＭＳＢから１ビットが「０」であり、２ビット目で「１」が出現する。したがって、最上位ビットＭＳＢから１ビットが削減される。
【００７４】
実施例３の削減ビット数計算器５０４は、判定器５０３によってＭ＜Ｎｍａｘであると判定された場合、下記式（７）により、累積削減ビット数ｓを算出する。
【００７５】
【数２】
2020187608.tif 000004
【００７６】
Ｗｋは、ｋ回目の加算で使用する重みのうち乗算器２０１の最大ビットからビット値が「１」の位置が何ビット小さい位置にあるか、換言すれば、値があらかじめ何ビット分削減されているとみなすかを示す値である。図８の例で、画素のビット列が（例１）の場合、Ｗｋ＝２である。
【００７７】
Ｉｋは、ｋ回目の加算で使用する画素のうち乗算器２０１の最大ビットからビット値が「１」の位置が何ビット小さい位置にあるか、換言すれば、値があらかじめ何ビット分削減されているとみなすかを示す値である。図８の例で、重みのビット列が（例２）の場合、Ｗｋ＝３である。
【００７８】
このように、実施例３にかかる演算装置５００は、実施例１と同様、畳み込み層Ｃｊごとにオーバーフロー判定を行い、オーバーフローが発生すると事前に判定されると、画素のビット数ｐｉおよび重みのビット数ｐｗを削減して、加算器２０２における加算回数のマージンを動的に確保する。これにより、畳み込み演算の回路規模の低減化を図ることができる。
【００７９】
また、ビット列から値に影響がない上位ビットを削減することにより、累積削減ビット数ｓを実施例１よりも小さくし、かつ、実施例２よりも畳み込み演算器１０３の演算精度の向上を図ることができる。
【実施例４】
【００８０】
つぎに、実施例４について説明する。実施例１では、演算装置５００内で畳み込み演算に先立って加算器２０２がオーバーフローするか否かを事前判定し、オーバーフローが生じないように累積削減ビット数ｓを計算して、画素や重みのビット列のビット数を削減した。実施例４では、あらかじめ演算装置５００の外部のコンピュータが実施例１の演算装置５００のように判定器５０３によるオーバーフロー判定と、削減ビット数計算器５０４による累積削減ビット数ｓの算出と、を実行し、オーバーフロー判定結果テーブルを作成する。オーバーフロー判定結果テーブルは、実施例４の演算装置５００に実装される。なお、実施例１と共通部分については同一符号を付し、その説明を省略する。
【００８１】
＜演算装置５００の構成例＞
図９は、実施例４にかかる演算装置５００の構成例を示すブロック図である。実施例４の演算装置５００は、実施例１の判定器５０３および削減ビット数計算器５０４に替え、オーバーフロー判定結果テーブル９００を有する。
【００８２】
図１０は、オーバーフロー判定結果テーブル９００の一例を示す説明図である。オーバーフロー判定結果テーブル９００は、アドレス情報フィールド１００１と、画素削減ビット数フィールド１００２と、重み削減ビット数フィールド１００３と、累積削減ビット数フィールド１００４と、を有する。同一行の各フィールドの値が第ｊ畳み込み層Ｃｊでのオーバーフロー判定結果を示すエントリを構成する。なお、フィールドの値の符号の末尾のｊは層番号ｊを意味する。たとえば、画素削減ビット数ｓｉｊは、第ｊ畳み込み層Ｃｊの画素削減ビット数ｓｉを意味する。
【００８３】
アドレス情報フィールド１００１は、アドレス情報ａｄｊを格納するフィールドである。アドレス情報ａｄｊは、層番号ｊに対応する情報である。画素削減ビット数フィールド１００２は、画素削減ビット数ｓｉｊを格納するフィールドである。重み削減ビット数フィールド１００３は、重み削減ビット数ｓｗｊを格納するフィールドである。累積削減ビット数フィールド１００４は、累積削減ビット数ｓｊ（＝ｓｉｊ＋ｓｗｊ）を格納するフィールドである。
【００８４】
第ｊ畳み込み層Ｃｊについて畳み込み演算を実行する場合、演算装置５００は、アドレスデコーダ５２１からアドレス情報ａｄｊを読み出してオーバーフロー判定結果テーブル９００に出力する。演算装置５００は、オーバーフロー判定結果テーブル９００において、アドレス情報ａｄｊのエントリに含まれる画素削減ビット数ｓｉｊ、重み削減ビット数ｓｗｊおよび累積削減ビット数ｓｊを特定する。
【００８５】
そして、演算装置５００は、画素削減ビット数ｓｉｊをオーバーフロー判定結果テーブル９００から第１ビットシフト器２１１ｉに出力し、重み削減ビット数ｓｉｗをオーバーフロー判定結果テーブル９００から第２ビットシフト器２１１ｗに出力し、累積削減ビット数ｓｊをオーバーフロー判定結果テーブル９００からビット逆シフト器２１２に出力する。なお、ビットシフトしないと加算器２０２でオーバーフローが発生する畳み込み層Ｃｊでは、累積削減ビット数ｓｊはｓｊ＞０となり、ビットシフトしなくても加算器２０２でオーバーフローが発生しない畳み込み層Ｃｊでは、累積削減ビット数ｓｊはｓｊ＝０となる。
【００８６】
なお、オーバーフロー判定結果テーブル９００は、累積削減ビット数フィールド１００４の列を格納しなくてもよい。この場合、ビット逆シフト器２１２が、累積削減ビット数ｓｊ（＝ｓｉｊ＋ｓｗｊ）を算出することになる。
【００８７】
＜演算装置５００の演算処理手順例＞
図１１は、実施例４にかかる演算装置５００の演算処理手順例を示すフローチャートである。図６と相違は、図１１では、演算装置５００は、ステップＳ６０５を実行しない点である。
【００８８】
なお、オーバーフロー判定結果テーブル９００の値は、更新されてもよい。具体的には、たとえば、演算装置５００は、図示しない管理サーバと通信可能に接続されているものとする。管理サーバは、訓練データとなる画像データ１０２を用いて、実施例１〜実施例３の演算装置５００のように、畳み込み層Ｃｊごとに画素削減ビット数ｓｉｊ、重み削減ビット数ｓｗｊおよび累積削減ビット数ｓｊを算出する。そして、管理サーバは、畳み込み層Ｃｊごとに画素削減ビット数ｓｉｊ、重み削減ビット数ｓｗｊおよび累積削減ビット数ｓｊを演算装置５００に送信する。
【００８９】
このようにして、演算装置５００は、管理サーバからの畳み込み層Ｃｊごとに画素削減ビット数ｓｉｊ、重み削減ビット数ｓｗｊおよび累積削減ビット数ｓｊでオーバーフロー判定結果テーブル９００を更新することができる。
【００９０】
たとえば、演算装置５００が複数の自動車の各々のＥＣＵに実装されているものとする。管理サーバは、特定の時間帯、たとえば、複数の自動車において相対的または絶対的に夜間の走行頻度が高い自動車から、当該自動車が撮影した画像データを受信し、受信した画像データを訓練データとして、畳み込み層Ｃｊごとに画素削減ビット数ｓｉｊ、重み削減ビット数ｓｗｊおよび累積削減ビット数ｓｊを再算出する。
【００９１】
そして、管理サーバは、畳み込み層Ｃｊごとに再算出した画素削減ビット数ｓｉｊ、重み削減ビット数ｓｗｊおよび累積削減ビット数ｓｊを、当該夜間の走行頻度が高い自動車の演算装置５００に送信する。これにより、オーバーフロー判定結果テーブル９００の内容を、演算装置５００のユーザに特化した値に更新することができ、演算精度の向上を図ることができる。上述した例では、夜間の走行頻度について説明したが、降雨や降雪時などの悪天候時の走行頻度でもよい。
【００９２】
このように、実施例４にかかる演算装置５００は、画素のビット数ｐｉｊおよび重みのビット数ｐｗｊを削減して、加算器２０２における加算回数のマージンを動的に確保する。これにより、畳み込み演算の回路規模の低減化を図ることができる。また、演算装置５００に判定器５０３および削減ビット数計算器５０４が実装されていないため、回路規模の低減化を図ることができる。また、演算装置５００に判定器５０３および削減ビット数計算器５０４が実装されていないため、判定器５０３および削減ビット数計算器５０４で処理が実行されない。したがって、低消費電力化を図ることができる。
【００９３】
以上説明したように、上述した実施例では、ＤＮＮのオーバーフローおよびこれに伴う回路実装規模の増加を抑制することができる。
【００９４】
なお、本発明は前述した実施例に限定されるものではなく、添付した特許請求の範囲の趣旨内における様々な変形例及び同等の構成が含まれる。例えば、前述した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに本発明は限定されない。また、ある実施例の構成の一部を他の実施例の構成に置き換えてもよい。また、ある実施例の構成に他の実施例の構成を加えてもよい。また、各実施例の構成の一部について、他の構成の追加、削除、または置換をしてもよい。
【００９５】
また、前述した各構成、機能、処理部、処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等により、ハードウェアで実現してもよく、プロセッサがそれぞれの機能を実現するプログラムを解釈し実行することにより、ソフトウェアで実現してもよい。
【００９６】
各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリ、ハードディスク、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等の記憶装置、又は、ＩＣ（Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）カード、ＳＤカード、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｃ）の記録媒体に格納することができる。
【００９７】
また、制御線や情報線は説明上必要と考えられるものを示しており、実装上必要な全ての制御線や情報線を示しているとは限らない。実際には、ほとんど全ての構成が相互に接続されていると考えてよい。
【符号の説明】
【００９８】
２０１  乗算器
２０２  加算器
２１１ｉ  第１ビットシフト器
２１１ｗ  第２ビットシフト器
２１２  ビット逆シフト器
５００  演算装置
５０１  データ入力部
５０２  フィルタ格納部
５０３  判定器
５０４  削減ビット数計算器
５０５  ビット削減部
５０６  出力加算器
５１１  入力データ分岐器
５１２  入力データ格納レジスタ
５２１  アドレスデコーダ
５２２  パラメータ格納レジスタ
９００  オーバーフロー判定結果テーブル
【図１】
2020187608.tif 000005
【図２】
2020187608.tif 000006
【図３】
2020187608.tif 000007
【図４】
2020187608.tif 000008
【図５】
2020187608.tif 000009
【図６】
2020187608.tif 000010
【図７】
2020187608.tif 000011
【図８】
2020187608.tif 000012
【図９】
2020187608.tif 000013
【図１０】
2020187608.tif 000014
【図１１】
2020187608.tif 000015