(57)【特許請求の範囲】
【請求項１】
Ｎ（Ｎ≧２）個の要素を有する第１の値を保持する第１のレジスターと、
Ｎ個の要素を有する第２の値を保持する第２のレジスターと、
前記第１の値と前記第２の値とが積和演算された積和演算値を保持する出力レジスターと、
第１のフェーズでは、前記第１、２の値の前記Ｎ個の要素を、前記要素が対になるように順次、選択して出力し、前記第１のフェーズの後続の第２のフェーズでは、入力された前記第１の値の１つの前記要素を示す入力要素に対応する前記第１のレジスター内の第１の値の要素を選択して出力するとともに、前記入力要素に対応する前記第２のレジスター内の第２の値の要素を選択して出力する第１の選択器と、
前記入力要素から前記第１の選択器が出力する前記入力要素に対応する前記第１の値の要素を減算する第１の減算器と、
乗算器と、
前記乗算器の出力と、前記出力レジスターの前記積和演算値とを加算して前記出力レジスターに出力する加算器と、を有し、
前記第１のフェーズでは、前記乗算器は、前記第１の選択器が順次出力する、前記第１の値のＮ個の要素と当該第１の値の要素と対となる前記第２の値のＮ個の要素とを、順次乗算して前記加算器に出力し、前記加算器は前記乗算器の出力と前記出力レジスターの出力をＮ回加算して、前記第１の値と前記第２の値との積和演算値を前記出力レジスターに出力し、
前記第２のフェーズでは、前記乗算器は、前記第１の減算器の出力と、前記第１の選択器が出力する前記入力要素に対応する前記第２の値の要素とを乗算して前記加算器に出力し、前記加算器は前記乗算器の出力と前記出力レジスターの出力を１回加算して、前記入力要素が更新された前記第１の値と、前記第２の値との積和演算値を前記出力レジスターに出力する、ことを特徴とする演算回路。
【請求項２】
請求項１において、
前記第１の選択器は、前記第２のフェーズに、入力された前記第２の値の１つの前記要素を示す入力要素に対応する前記第２のレジスター内の第２の値の要素を選択して出力するとともに、当該入力要素に対応する前記第１のレジスター内の第１の値の要素を選択して出力し、
前記入力された前記第２の値の１つの前記要素を示す入力要素から前記第１の選択器が出力する当該入力要素に対応する前記第２の値の要素を減算する第２の減算器を、さらに有し、
前記第２のフェーズでは、前記乗算器は、前記第２の減算器の出力と、前記第１の選択器が出力する前記入力要素に対応する前記第１の値の要素とを乗算して前記加算器に出力し、前記加算器は前記乗算器の出力と前記出力レジスターの出力を１回加算して、前記第１の値と、前記入力要素が更新された前記第２の値との積和演算値を前記出力レジスターに出力する、ことを特徴とする演算回路。
【請求項３】
Ｎ（Ｎ≧２）個の要素を有する第１の値を保持する第１のレジスターと、
Ｎ個の要素を有する第２の値を保持する第２のレジスターと、
前記第１の値と前記第２の値とが積和演算された積和演算値を保持する出力レジスターと、
入力された前記第１の値の１つの前記要素を示す第１の入力要素に対応する前記第１のレジスター内の第１の値の要素を選択して出力するとともに、前記第１の入力要素に対応し、入力された前記第２の値の１つの前記要素を示す第２の入力要素に対応する前記第２のレジスター内の第２の値の要素を選択して出力する第１の選択器と、
前記第１の入力要素と前記第２の入力要素とを乗算する第１の乗算器と、
前記第１の選択器が出力する前記第１の入力要素に対応する前記第１の値の要素と、前記第１の選択器が出力する前記第２の入力要素に対応する前記第２の値の要素とを乗算する第２の乗算器と、
前記第１の乗算器の出力から前記第２の乗算器の出力を減算する減算器と、
前記減算器の出力と、前記出力レジスターの前記積和演算値とを１回加算して、前記第１の値と前記第２の値との積和演算値を前記出力レジスターに出力する加算器と、
を有することを特徴とする演算回路。
【請求項４】
Ｎ（Ｎ≧２）個の要素を有する第１の値を保持する第１のレジスターと、
Ｎ個の要素を有する第２の値を保持する第２のレジスターと、
前記第１の値と前記第２の値とに対して第１演算したＮ個の第１演算値を、さらに第２演算した演算結果値を保持する出力レジスターと、
第１のフェーズでは、前記第１、２の値の前記Ｎ個の要素を、前記要素が対になるように順次、選択して出力し、前記第１のフェーズの後続の第２のフェーズでは、入力された前記第１の値の１つの前記要素を示す入力要素に対応する前記第１のレジスター内の第１の値の要素を選択して出力するとともに、前記入力要素に対応する前記第２のレジスター内の第２の値の要素を選択して出力する第１の選択器と、
前記入力要素と、前記第１の選択器が出力する前記入力要素に対応する前記第１の値の要素とに対して前記第２演算を行う第１の演算器と、
第２の演算器と、
前記第２の演算器の出力と、前記出力レジスターの前記演算結果値とに対して前記第２演算を行って前記出力レジスターに出力する第３の演算器と、
を有し、
前記第２の演算器による演算は、前記入力された第１の値の要素に対応する前記第１のレジスター内の第１の値の要素と、当該要素に対応する前記第２のレジスター内の第２の値の要素とに対する前記第１演算の結果を前記第２演算に基づいて打ち消す値と、前記入力された第１の値の要素と、当該要素に対応する前記第２のレジスター内の第２の値の要素とに対する前記第１演算の結果と、に対する前記第２演算について分配法則を満たし、
前記第１のフェーズでは、前記第２の演算器は、前記第１の選択器が順次出力する、前記第１の値のＮ個の要素と当該第１の値の要素と対となる前記第２の値のＮ個の要素とに対して、順次、第１演算を行い前記第３の演算器に出力し、前記第３の演算器は前記第２の演算器の出力と前記出力レジスターの出力とに対してＮ回、前記第２演算を行って、前記第１の値と前記第２の値との前記演算結果値を前記出力レジスターに出力し、
前記第２のフェーズでは、前記第２の演算器は、前記第１の演算器の出力と、前記第１の選択器が出力する前記入力要素に対応する前記第２の値の要素とに対して第１演算を行い前記第３の演算器に出力し、前記第３の演算器は前記第２の演算器の出力と前記出力レジスターの出力とに対して１回、前記第２演算を行って、前記入力要素が更新された前記第１の値と前記第２の値との前記演算結果値を前記出力レジスターに出力する、ことを特徴とする演算回路。
【請求項５】
請求項１において、さらに、
Ｎ個の要素を有する第３の値を保持する第３のレジスターを有し、
前記出力レジスターは、前記第１の値と前記第２の値とに加えて、前記第３の値とが積和演算された積和演算値を保持し、
前記第１の選択器は、前記第１のフェーズでは、前記第１、２、３の値の前記Ｎ個の要素を、前記要素が対になるように順次、選択して出力し、前記第２のフェーズでは、前記入力要素に対応する前記第１、２の値の要素に加えて、前記入力要素に対応する前記第３のレジスター内の第３の値の要素を選択して出力し、
前記第１のフェーズでは、前記乗算器は、前記第１の選択器が順次出力する、前記第１の値のＮ個の要素と、当該第１の値の要素と対となる前記第２、３の値のＮ個の要素とを、順次乗算して前記加算器に出力し、前記加算器は前記乗算器の出力と前記出力レジスターの出力をＮ回加算して、前記第１の値と前記第２の値と前記第３の値との積和演算値を前記出力レジスターに出力し、
前記第２のフェーズでは、前記乗算器は、前記第１の減算器の出力と、前記第１の選択器が出力する前記入力要素に対応する前記第２、３の値の要素とを乗算して前記加算器に出力し、前記加算器は前記乗算器の出力と前記出力レジスターの出力を１回加算して、前記入力要素が更新された前記第１の値と、前記第２の値と前記第３の値との積和演算値を前記出力レジスターに出力する、ことを特徴とする演算回路。
【請求項６】
請求項１において、
前記第１のレジスターは、前記第１の値を複数セット保持し、
前記第２のレジスターは、前記第２の値を前記複数セット保持し、
前記出力レジスターは、前記複数セットそれぞれの前記第１、第２の値の前記積和演算値を保持し、
前記第１の選択器は、第１のフェーズでは、前記複数セットそれぞれについて、前記第１、２の値の前記Ｎ個の要素を、前記要素が対になるように順次、選択して出力し、前記第２のフェーズでは、前記入力要素に対応する対象セットの前記第１のレジスター内の第１の値の要素を選択して出力するとともに、前記入力要素に対応する前記対象セットの前記第２のレジスター内の第２の値の要素を選択して出力し、
前記第１の減算器は、前記入力要素から、前記第１の選択器が出力する前記対象セットの前記第１の値の要素を減算し、
前記第１のフェーズでは、前記乗算器は、前記複数セットそれぞれについて、前記第１の値と前記第２の値との積和演算値を前記出力レジスターに出力し、
前記第２のフェーズでは、前記乗算器は、前記第１の減算器の出力と、前記第１の選択器が出力する前記入力要素に対応する前記対象セットの前記第２の値の要素とを乗算して前記加算器に出力し、前記加算器は前記乗算器の出力と前記対象セットの前記出力レジスターの出力を１回加算して、前記入力要素が更新された前記対象セットの前記第１の値と、前記対象セットの前記第２の値との積和演算値を前記対象セットの前記出力レジスターに出力する、ことを特徴とする演算回路。
【請求項７】
請求項１において
前記第２のレジスターは、前記第２の値を複数セット保持し、
前記出力レジスターは、第１の値と、前記複数セットそれぞれの第２の値との前記積和演算値を保持し、
前記第１の選択器は、第１のフェーズでは、前記第１の値の前記Ｎ個の要素と、前記複数セットそれぞれの前記第２の値の前記Ｎ個の要素を、前記要素が対になるように順次、選択して出力し、前記第２のフェーズでは、前記入力要素に対応する前記第１のレジスター内の第１の値の要素を選択して出力するとともに、前記複数セットそれぞれの前記入力要素に対応する前記第２のレジスター内の第２の値の要素を選択して出力し、
前記第１のフェーズでは、前記乗算器は、前記第１の選択器が順次出力する、前記第１の値のＮ個の要素と、前記複数セットそれぞれの、当該第１の値の要素と対となる前記第２の値のＮ個の要素とを、順次乗算して前記加算器に出力し、前記加算器は、前記複数セットそれぞれについて、前記乗算器の出力と前記出力レジスターの出力とをＮ回加算して、前記第１の値と、前記複数セットそれぞれの前記第２の値との積和演算値を前記出力レジスターに出力し、
前記第２のフェーズでは、前記乗算器は、前記第１の減算器の出力と、前記第１の選択器が出力する、前記複数セットそれぞれの前記入力要素に対応する前記第２の値の要素とを乗算して前記加算器に出力し、前記加算器は、前記複数セットそれぞれについて、前記乗算器の出力と前記出力レジスターの出力とを１回加算して、前記入力要素が更新された前記第１の値と、前記複数セットそれぞれの前記第２の値との積和演算値を前記出力レジスターに出力する、ことを特徴とする演算回路。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算回路に関する。
【背景技術】
【０００２】
近年、画像の描画時に行われる座標変換におけるベクトル演算処理や、音声データ等のデジタル・フィルタ処理等において、積和演算が頻繁に用いられる。積和演算とは、積の和を求める演算、つまり乗算の結果を順次加算する演算である。例えば、デジタル・フィルタ処理の演算であるＦＩＲ（有限インパルス応答）フィルタの演算において、画像、音声データと係数とを乗算し累積加算する処理として積和演算が用いられる。このようなデジタル・フィルタ処理では、積和演算の処理速度を向上することにより、処理全体の速度を向上することが図られる。
【０００３】
上記のようなデジタル・フィルタ処理では、画像、音声データの値の一部が更新され、係数については更新されない。従って、演算回路は、全ての入力データについて、積和演算をし直す必要はない。しかし、従来の演算回路は、全ての入力データに基づいて積和演算することにより、積和演算処理に時間を要していた。そこで、例えば、特許文献１のような演算回路が提案されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特許第２５３０９１６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、特許文献１の演算回路では、入力データのうち固定のデータが更新された場合の積和演算値を得ることはできるものの、任意のデータが更新された場合の積和演算値を得ることはできない。
【０００６】
また、プロセッサーは、積和演算に限らず、加減算、乗算、論理積、論理和演算等の組合せによる様々な演算を行う。そのような他の組合せ演算回路においても同様にして、入力データ内の任意の値が更新された場合に、全ての入力データについて演算し直すことにより、演算に時間を要していた。
【０００７】
そこで、本発明では、任意の値が更新された入力データに対応する演算結果を少ない処理サイクルで高速に算出可能な演算回路を提供することを目的とする。
【課題を解決するための手段】
【０００８】
第１の側面は、Ｎ個の要素を有する第１の値を保持する第１のレジスターと、
Ｎ個の要素を有する第２の値を保持する第２のレジスターと、
前記第１の値と前記第２の値とが積和演算された積和演算値を保持する出力レジスターと、
入力された前記第１の値の１つの前記要素から、当該要素に対応する前記第１のレジスター内の前記第１の値の前記要素を減算する第１の減算器と、
前記第１の減算器の出力と、前記入力された第１の値の要素に対応する前記第２のレジスター内の前記第２の値の前記要素とを乗算する乗算器と、
前記乗算器の出力と、前記出力レジスターの前記積和演算値とを加算して前記出力レジスターに出力する加算器と、を有する。
【発明の効果】
【０００９】
第１の側面によれば、任意の値が更新された入力データに対応する演算結果を少ない処理サイクルで高速に算出可能となる。
【図面の簡単な説明】
【００１０】
【図１】専用の積和演算回路を有するシステムの一例である。
【図２】式１における積和演算器の一例を表す図である。
【図３】図２の積和演算器をバスに接続する回路の一例を表す図である。
【図４】ａ０〜ａ７が更新される場合の積和演算器における動作波形を表す図である。
【図５】ａ２のみが更新される場合の積和演算回路における動作波形を表す図である。
【図６】式２における本実施の形態例における積和演算器の一例を表す図である。
【図７】図６の積和演算器をバスに接続する回路を表す図である。
【図８】ａ０〜ａ７が更新される場合の図６の積和演算器における動作波形を表す図である。
【図９】ａ２のみが更新された場合の図６の積和演算器における動作波形を表す図である。
【図１０】式３における本実施の形態例における積和演算器の一例を表す図である。
【図１１】式４における本実施の形態例における積和演算器の一例を表す図である。
【図１２】第４の実施の形態例における積和演算器の一例を表す図である。
【図１３】第５の実施の形態例における第１の演算回路である。
【図１４】第５の実施の形態例における第２の演算回路である。
【図１５】図１３及び図１４の回路をバスに接続する回路を表す図である。
【図１６】式７における本実施の形態例における回路の一例を表す図である。
【発明を実施するための形態】
【００１１】
以下、図面にしたがって本発明の実施の形態について説明する。ただし、本発明の技術的範囲はこれらの実施の形態に限定されず、特許請求の範囲に記載された事項とその均等物まで及ぶものである。
【００１２】
図１は、専用の積和演算回路を有するシステム１０の一例である。同図のシステム１０は、ＣＰＵ１１とＤＭＡＣ１２、メモリ１３、専用の積和演算回路１４（以下、積和演算器）、その他のハードウェア１５を有する。ＣＰＵ１１は、メモリ１３から読み出した命令をバス１６を介して積和演算回路１４に送り、積和演算回路はバス１６を介して演算結果をＣＰＵ１１に送る。ＤＭＡＣ１２は、その他のハードウェア１５とメモリ１３間等のＣＰＵ１１を介さないデータ転送を制御する。
【００１３】
具体的に、ＣＰＵ１１は、積和演算器１４とのデータのやり取りを、積和演算器１４に割り振られたアドレスに対する読み出し及び書き込み処理によって行う。例えば、ＣＰＵ１１から積和演算器１４にデータを書き込む場合、ＣＰＵ１１は、バス１６に対して積和演算器１４のアドレス、書き込みデータ、タイミング信号、書き込みモード信号を発行する。積和演算器１４は、これらの信号を検出して発行されたアドレスが積和演算器１４のアドレスであることを判定し、バス１６からデータを取り込む。一方、積和演算器１４からデータを出力する場合、ＣＰＵ１１は、バス１６に対して、積和演算器１４のアドレス及びタイミング信号を発行し、積和演算器１４から供給されたデータをバス１６から取り込む。
【００１４】
積和演算回路１４は、一般的に、次の式１に基づいて積和演算値を算出する。式１において、積和演算値「Ｓ」は、値「ａ」「ｂ」の積和演算値である。
【００１５】
【数１】
0005668391.tif 000002
【００１６】
値「ａ」は、ｎ個の要素「ａ０，ａ１，…，ａｎ−１」、値「ｂ」はｎ個の要素「ｂ０，ｂ１，…，ｂｎ−１」をそれぞれ有する。式１では、各値のｉ（０≦ｉ≦ｎ−１）番目の要素同士の組の乗算値「ａｉ×ｂｉ」が順次加算されることにより、積和演算値「Ｓ」が算出される。
【００１７】
図２は、式１において「ｎ＝８」とした場合の積和演算器の一例を表す図である。同図の積和演算器において、値「ａ」の各要素ａ０〜ａ７はレジスターＲ００〜Ｒ０７に入力され、値「ｂ」の各要素ｂ０〜ｂ７はレジスターＲ１０〜Ｒ１７に入力される。同図の積和演算器では、値「ａ」「ｂ」の全てまたは一部の要素が入力信号inputとして入力され、対応するレジスターに書き込まれる。続いて、レジスターに保持された全ての値「ａ」「ｂ」の要素データを用いて演算が行われ、出力レジスターＯＵＴに積和演算値「Ｓ」が出力される。
【００１８】
図２の積和演算器において、まず、演算対象の各要素データ（入力更新データ）が入力信号inputとして入力され、入力更新データに対応するレジスターがライト信号write_0_0〜write_1_7に応答し、当該レジスターに入力更新データが書き込まれる。全ての入力更新データが書き込まれると、入力信号startがカウンターＣＮＴと遅延器ＤＥＬＡに入力される。カウンターＣＮＴは入力信号startに応答して、クロックの立ち上がり毎に０から順にインクリメントした信号を、比較器ＣＯＭと選択器ＳＥＬＡ、ＳＥＬＢに出力する。
【００１９】
選択器ＳＥＬＡ、ＳＥＬＢは、それぞれ、カウンターＣＮＴからのセレクト信号select1（０〜７）に応答して、当該セレクト信号select1に対応するレジスターが保持するデータを乗算器ＭＵＬへ出力する。具体的に、例えば、セレクト信号select1が「０」の場合、選択器ＳＥＬＡはレジスターＲ００のデータ、選択器ＳＥＬＢはレジスターＲ１０のデータを乗算器ＭＵＬに出力する。乗算器ＭＵＬは同時に入力された値「ａ」「ｂ」の対応する要素の組の各データを乗算して加算器ＡＤＤに順次出力し、加算器ＡＤＤは出力された乗算値と、前回の加算器ＡＤＤの出力とを順次加算する。
【００２０】
一方、比較器ＣＯＭはカウンターＣＮＴからのセレクト信号select1が「７」の場合、遅延器ＤＥＬＢに信号を出力する。遅延器ＤＥＬＢは、比較器ＣＯＭからの出力信号を全組の乗算結果が加算されるタイミングに遅延させて、出力レジスターＯＵＴへ書き込み信号writeを出力する。なお、遅延器ＤＥＬＡは、入力信号startを初めの組の乗算値が加算される直前に合わせて遅延させ、加算器ＡＤＤにリセット信号resetを出力し予め「０」で初期化しておく。
【００２１】
図３は、図２の積和演算器をバスに接続する回路の一例を表す図である。同図において、図１のバス１６が、制御バスＣＢ、データバスＤＢ、アドレスバスＡＢを有する。図２の積和演算器にアクセスが発生すると、積和演算器に割り振られたアドレスがアドレスバスＡＢに、有効なアドレスが流れたタイミングを表す信号が制御バスＣＢに出力される。
【００２２】
そして、ゲートＧ１は有効アドレスを検出し、比較器Ｃ００〜Ｃ１７は、それぞれ検出アドレスと対応するレジスター（レジスターＲ００〜Ｒ０７）に割り振られたアドレスとを比較し、一致した場合に、当該アドレスに対応するライト信号write_*_*（write_0_0〜write_1_7）を図２の積和演算器に送る。また、比較器Ｃ２０は、検出アドレスと入力信号startを発行するためのアドレスとを比較し、一致した場合に、図２の積和演算器に入力信号startを送る。
【００２３】
また、ゲートＧ４は、データバスＤＢから送信されるデータと、有効なデータが検出されたタイミングを表す信号を制御バスＣＢから検出し、データバスＤＢの入力データを入力信号inputとして出力する。また、ゲートＧ２は有効アドレスを検出し、比較器Ｃ３０は、検出アドレスと積和演算器の出力レジスターＯＵＴのアドレスとを比較し、一致した場合に、出力レジスターＯＵＴの出力値outputをゲートＧ３からデータバスＤＢに出力する。
【００２４】
図４は、「ａ０〜ａ７」が更新される場合の図２の積和演算器における動作波形を表す図である。この例において、レジスターＲ１０〜Ｒ１７には「ｂ０〜ｂ７」が予め保持されている。また、「ｐｉ」は各組の要素の乗算値「ａｉ×ｂｉ」であり、「Ｓｉ」はｉ番目の組までの積和演算値を表す。
【００２５】
図４の動作波形図において、まず、入力信号inputとして「ａ０」が入力されると共に、ライト信号write_0_0に応答して、次のクロックの立ち上がりタイミングでレジスターＲ００に「ａ０」が書き込まれる。同様にして、入力信号inputとして「ａ１〜ａ７」が順次入力され、「ａ１〜ａ７」がレジスターＲ０１〜レジスターＲ０７に書き込まれる。そして、「ａ７」の入力の次のクロックの立ち上がりタイミングで、入力信号startがカウンターＣＮＴに出力される。
【００２６】
カウンターＣＮＴは入力信号startに応答して、クロックの立ち上がりタイミング毎に０から順に７までインクリメントした各信号を選択器ＳＥＬＡ、ＳＥＬＢと比較器ＣＯＭに出力する。最初、セレクト信号select1「０」に応答して、選択器ＳＥＬＡはレジスターＲ００のデータ「ａ０」を、選択器ＳＥＬＢはレジスターＲ１０のデータ「ｂ０」を選択し乗算器ＭＵＬに出力する。続いて、次のクロックの立ち上がりタイミングで、乗算器ＭＵＬは、「ａ０」「ｂ０」を乗算し、乗算値「ｐ０＝ａ０×ｂ０」を加算器ＡＤＤに出力する。
【００２７】
また、遅延器ＤＥＬＡはスタート信号startに応答して加算器ＡＤＤにリセット信号resetを出力し、最初の組の乗算値「ｐ０」が入力される前に加算器ＡＤＤを「０」に初期化しておく。従って、加算器ＡＤＤは、最初、初期値「０」と乗算器ＭＵＬから出力された乗算値「ｐ０」との加算値「Ｓ０＝０＋ｐ０」を出力する。同様にして、次のクロックで、加算器ＡＤＤは、乗算器ＭＵＬからの出力「ｐｉ＝ａｉ×ｂｉ」と、１つ前のクロックの加算器ＡＤＤからの出力値「ｐｉ−１」とを加算した値「Ｓｉ＝ｐｉ−１＋ｐｉ」を出力する。また、比較器ＣＯＭは、カウンターＣＮＴの出力信号が７になると遅延器ＤＥＬＢに比較信号を出力し、遅延器ＤＥＬＢは、全ての組の乗算結果「ｐ０〜ｐ７」が加算されたタイミングに、出力レジスターへの書き込み信号writeを出力する。
【００２８】
上記のように、図２の積和演算器は、全ての入力更新データ「ａ０〜ａ７」がレジスターに蓄えられてから積和演算を開始するため、演算結果が得られるまで時間がかかっていた。これにより、図２の積和演算器は、データ「ａ０〜ａ７」が入力され始めてから積和演算値「Ｓ７」が算出されるまで２０サイクル要していた。続いて、「ａ０〜ａ７」のうちひとつのデータのみが更新された場合について述べる。
【００２９】
図５は、「ａ０〜ａ７」のうち「ａ２」のみが更新される場合の図２の積和演算回路における動作波形を表す図である。この例において、レジスターＲ１０〜Ｒ１７に「ｂ０〜ｂ７」が、レジスターＲ０２を除くレジスターＲ００〜Ｒ０７に、「ａ2」を除く「ａ０〜ａ７」が予め保持されている。なお、「ｐｉ」、「Ｓｉ」については図４の動作波形図と同様である。
【００３０】
図５の動作波形図において、まず、入力信号inputとして「ａ２」が入力されると共に、ライト信号write_0_2に応答して、次のクロックの立ち上がりタイミングでレジスターＲ０２に「ａ２」が書き込まれる。そして、「ａ２」の入力のつぎのクロックの立ち上がりタイミングで、入力信号startがカウンターＣＮＴに出力され、カウンターＣＮＴは、０から順にインクリメントした信号を選択器ＳＥＬＡ、ＳＥＬＢと比較器ＣＯＭとに出力する。そして、図４と同様にして、選択器ＳＥＬＡ、ＳＥＬＢは、「０〜７」のセレクト信号select1に対応するレジスターが保持するデータの組を選択して順次乗算器ＭＵＬに出力し、乗算器ＭＵＬは各組のデータの乗算値「ｐｉ（＝ａｉ×ｂｉ）」を順次加算器ＡＤＤに出力する。加算器ＡＤＤは、全ての組の乗算値「ｐｉ」を順次加算し、積和演算値「Ｓ７」を出力レジスターＯＵＴに出力する。
【００３１】
このように、図２の積和演算器は、例え「ａ０〜ａ７」のうち「ａ２」のみが更新される場合であっても、レジスターに保持された全てのデータについて積和演算し直していた。また、図２の積和演算器は、演算対象の全てのデータについて積和演算し直すため、全てのデータがレジスターに書き込まれてから演算を開始していた。
【００３２】
これにより、図２の積和演算器は、レジスターに保持された全てのデータを、当該全てのデータがレジスターに格納されてから積和演算し直すため、全ての入力更新データがレジスターに蓄えられるまでのデータ転送時間と、乗算と加算の全てのデータの演算時間とを要し、積和演算値が得られるまで時間を要していた。このため、図２の積和演算器では、「ａ2」のみが更新される場合であっても、データ「ａ2」が入力され始めてから積和演算値「Ｓ７」が算出されるまで１３サイクル要していた。
【００３３】
＜第１の実施の形態例＞
そこで、本実施の形態例の演算回路は、Ｎ個の要素を有する第１の値を保持する第１のレジスターと、Ｎ個の要素を有する第２の値を保持する第２のレジスターと、第１、第２の値が積和演算された積和演算値を保持する出力レジスターとを有する。そして、本実施の形態例の演算回路は、入力された第１の値の１つの要素から、当該要素に対応する第１のレジスター内の第１の値の要素を減算する減算器と、減算器の出力と入力された第１の値の要素に対応する第２のレジスター内の第２の値の要素とを乗算する乗算器と、乗算器の出力と出力レジスターの積和演算値とを加算して前記出力レジスターに出力する加算器とを有する。
【００３４】
本実施の形態例の積和演算器は、次の式２に基づいて積和演算値を算出する。式２において、値「ａ´＝（ａ０´，ａ１´，ａ２´，…，ａｎ−１´）」は、前回積和演算された古い値「ａ＝（ａ０，ａ１，ａ２，…，ａｎ−１）」である前回データに対してｊ番目の要素が更新されているものとする。なお、値「ａ」「ａ´」のｊ番目以外の要素は変更なく同一である。そして、「Ｓ」は「ａ」と「ｂ」の積和演算値（以下、前回の積和演算値）であり、「Ｓ´」は「ａ´」と「ｂ」の積和演算値（以下、更新後の積和演算値）を表す。
【００３５】
【数２】
0005668391.tif 000003
【００３６】
式２では、更新後の積和演算値「Ｓ´」を、前回の積和演算値「Ｓ」に、「Ｓ´」と「Ｓ」の差分値を加算することによって求める。具体的に、更新後の積和演算値「Ｓ´」は、前回の積和演算値「Ｓ」から値「ａ」「ｂ」のｊ番目の要素の乗算値「ａｊ×ｂｊ」を減算し、値「ａ´」「ｂ」のｊ番目の要素の乗算値「ａｊ´×ｂｊ」を加算した値（Ｓ´＝Ｓ−（ａｊ×ｂｊ）＋（ａｊ´×ｂｊ））である。この演算式は「Ｓ´＝Ｓ＋（ａｊ´−ａｊ）×ｂｊ」のようにまとめられる。従って、更新後の積和演算値「Ｓ´」は、前回の積和演算値「Ｓ」に差分値「（ａｊ´−ａｊ）×ｂｊ」が加算されることにより算出される。
【００３７】
式１と式２とを比較すると、値の一部の要素が更新される場合、式１に対して式２の演算量は少ない。従って、式２は、式１に対してより少ない処理サイクルで更新後の積和演算値「Ｓ」を算出することができる。
【００３８】
図６は、式２において「ｎ＝８」とした場合の本実施の形態例における積和演算器の一例を表す図である。図２の積和演算値と同様に、図６の積和演算器において、値「ａ´」の各要素ａ０´〜ａ７´はレジスターＲ００〜Ｒ０７に、値「ｂ」の各要素ｂ０〜ｂ７はレジスターＲ１０〜Ｒ１７に格納される。また、本実施の形態例における積和演算器は、レジスターＲ００〜Ｒ１７に前回データ「ａ０〜ａ７、ｂ０〜ｂ７」を、出力レジスターに前回の積和演算値「Ｓ」を保持する。
【００３９】
また、図６の積和演算器において、updateする組の番号s10は、入力信号inputとして入力される入力更新データに対応する組を表す。そして、write_0_0からwrite_0_7の論理和s0はレジスターＲ００〜Ｒ０７のいずれかに格納される入力更新データの有無を表し、write_0_0からwrite_0_7の論理和s0がＨレベルの場合、入力更新データがレジスターＲ００〜Ｒ０７のいずれかに格納されることを、Ｌレベルの場合はいずれにも格納されないことを示す。同様に、write_1_0からwrite_1_7の論理和s1は、レジスターＲ１０〜Ｒ１７のいずれかに格納される入力更新データの有無を表す。
【００４０】
図６の積和演算器において、値「ａ」または値「ｂ」いずれかの入力更新データが入力信号inputとして入力される。そして、入力更新データinputと、入力更新データに基づく前回データの差分値が演算され、当該差分値が前回の積和演算値に加算されることによって更新後の積和演算値が算出される。
【００４１】
まず、入力信号inputとしてデータが入力されると、入力更新データを書き込む前に、updateする組の番号s10に対応するレジスターが予め保持する前回データを、選択器ＳＥＬ１は遅延器ＤＥＬ２と減算器ＳＵＢ１に、選択器ＳＥＬ２は遅延器ＤＥＬ３と減算器ＳＵＢ２にそれぞれ出力する。同時に、入力更新データに対応するレジスターがライト信号write_0_0〜write_1_7に応答し、当該レジスターに入力更新データが書き込まれる。
【００４２】
続いて、減算器ＳＵＢ１は、入力更新データinputから、選択器ＳＥＬ１から出力された前回データを減算した減算値を選択器ＳＥＬ３に出力する。また、遅延器ＤＥＬ２は、選択器ＳＥＬ１から出力された前回データを減算器ＳＵＢ１の出力に合わせて遅延させ、選択器ＳＥＬ３に出力する。また、遅延器ＤＥＬ１は、write_0_0からwrite_0_7の論理和s0を減算器ＳＵＢ１の出力に合わせて遅延させ、セレクト信号select3として選択器ＳＥＬ３に出力する。そして、選択器ＳＥＬ３は、セレクト信号select3がＨレベルの場合は減算器ＳＵＢ１からの出力を、セレクト信号select3がＬレベルの場合は遅延器ＤＥＬ２から出力された入力更新データの組の前回データを、乗算器ＭＵＬ１に出力する。選択器ＳＥＬ４についても同様である。
【００４３】
前述したとおり、値「ａ」または値「ｂ」いずれかのデータが入力されるため、例えば、値「ａ」のデータが更新される場合、write_0_0からwrite_0_7の論理和s0はＨレベル、write_1_0からwrite_1_7の論理和s1はＬレベルとなる。この場合、乗算器ＭＵＬ１は、値「ａ」に係る選択器ＳＥＬ３による減算器ＳＵＢ１からの減算値（ａｊ´−ａｊ）と、値「ｂ」に係る選択器ＳＥＬ４による遅延器ＤＥＬ３からの前回データ（ｂｊ）とを乗算する。一方、値「ｂ」のデータが更新される場合、write_0_0からwrite_0_7の論理和s0はＬレベル、write_1_0からwrite_1_7の論理和s1はＨレベルとなり、乗算器ＭＵＬ1は、値「ａ」に係る選択器ＳＥＬ３による遅延器ＤＥＬ２からの前回データ（ａｊ）と、値「ｂ」に係る選択器ＳＥＬ４による減算器ＳＵＢ２からの減算値（ｂｊ´−ｂｊ）とを乗算する。
【００４４】
そして、乗算器ＭＵＬ１は、乗算結果を前回の積和演算値からの差分値として加算器ＡＤＤ１に出力する。この差分値は、上述した式２における「（ａｊ´−ａｊ）×ｂｊ」（値「ａ」のデータが更新される場合）に対応する。続いて、加算器ＡＤＤ１は、当該差分値と、出力レジスターＯＵＴが保持する前回の積和演算値とを加算して、出力レジスターＯＵＴに出力する。ただし、連続するクロックサイクルで入力更新データが入力される場合、前回の積和演算値を出力レジスターから入力すると、次の加算器ＡＤＤ１の演算に間に合わない。そこで、連続するクロックサイクルで更新データが入力される場合、選択器ＳＥＬ５は、出力レジスターＯＵＴではなく加算器ＡＤＤ１からの出力を直接加算器ＡＤＤ１に入力する。
【００４５】
点線で囲んだ連続入力検出回路ＥＣ１は、連続するクロックサイクルで入力更新データが発生したか否かを判定する回路である。連続入力検出回路ＥＣ１は、遅延器ＤＥＬ６及び論理積器ＡＮＤ１によって、Ｈレベルのwrite_0_0からwrite_0_7の論理s0またはwrite_1_0からwrite_1_7の論理和s1が連続することが検出されると、Ｈレベルのセレクト信号select5を出力する。つまり、連続するクロックサイクルで入力更新データが発生する場合はＨレベルのセレクト信号select5を、そうでない場合はＬレベルのセレクト信号select5を選択器ＳＥＬ５に出力する。そして、選択器ＳＥＬ５は、セレクト信号select5がＨレベルの場合は加算器ＡＤＤ１からの前回の出力を、セレクト信号select5がＬレベルの場合は出力レジスターＯＵＴからの出力を加算器ＡＤＤ１に入力する。
【００４６】
そして、遅延器ＤＥＬ５は、データが入力されたことを表す論理和器ＬＤ１のＨレベルの信号を積和演算値が算出されるタイミングに遅延させ、出力レジスターＯＵＴに書き込み信号writeを出力する。なお、図６の積和演算器において、入力レジスター（レジスターＲ００〜Ｒ１７）と出力レジスターＯＵＴは、初期状態では「０」に初期化されているものとする。そして、これらのレジスターが一旦初期化された後、入力レジスターが保持する各データの積和演算値が出力レジスターに保持される間は、再度初期化が行われる必要はない。
【００４７】
このように、図６の積和演算器は、前回の積和演算値に対して、更新された任意の要素データ（入力更新データ）に基づいて前回の積和演算値との差分値（（ａｊ´−ａｊ）×ｂｊ）を加算することによって、更新後の積和演算値を算出する。このため、図６の積和演算器は、演算対象の全ての値の要素データを積和演算し直す必要がなく、また、全ての入力更新データが対応するレジスターに蓄えられるのを待たずに演算を開始することができる。これにより、図６の積和演算器は、図２の積和演算器に対して、少ない処理サイクルで積和演算値を算出することができる。
【００４８】
ところで、図６の積和演算器は、図２の積和演算器と同様に、入力レジスター及び出力レジスターを有する。ただし、図２の積和演算器は、入力レジスター及び出力レジスターがない場合でも演算可能であるのに対し、本実施の形態例の積和演算器は、入力レジスター及び出力レジスターがない場合は演算できない。というのも、図２の積和演算器では、入力更新データは入力レジスターを介さずに選択器ＳＥＬＡ、ＳＥＬＢに出力されてもよく、加算器ＡＤＤの出力は出力レジスターＯＵＴを介さずに出力されてもよい。それに対し、本実施の形態例の積和演算器は、前回データ及び前回の積和演算値を演算に用いるため、それらのデータを予め保持しておく入力レジスター及び出力レジスターは必要不可欠である。
【００４９】
図７は、図６の積和演算器をバスに接続する回路を表す図である。同図において、図３のバス接続回路と同じ部分については、同じ引用番号が付与されている。本実施の形態例における積和演算器のバス接続回路は、さらに、３つの信号（ライト信号write_0_0〜write_0_7s0、write_1_0からwrite_1_7の論理和s1、updateする組の番号s10）を生成して図６の演算回路に出力する。
【００５０】
図７のバス接続回路において、論理和器Ｌ１０は、ライト信号write_0_0〜write_0_7の論理和に基づいてwrite_0_0からwrite_0_7の論理和s0を生成する。具体的に、ライト信号write_0_0〜write_0_7のいずれかの信号がＨレベルの場合、write_0_0からwrite_0_7の論理和s0はＨレベルとなる。同様にして、論理和器Ｌ２０は、ライト信号write_１_0〜write_１_7の論理和に基づいてwrite_1_0からwrite_1_7の論理和s1を生成する。また、論理和器Ｌ００〜Ｌ０７は、各論理和器に対応する組の信号（例えば、論理和器Ｌ００の場合、write_0_0、write_1_0）の論理和をそれぞれエンコーダーＥ１に出力する。エンコーダーＥ１は、Ｈレベルの信号を出力する論理和器を、updateする組の番号s10として数値化し、図６の積和演算器に出力する。
【００５１】
図８は、入力更新データとして「ａ０´〜ａ７´」が更新される場合の図６の積和演算器における動作波形を表す図である。ここでは入力更新データ「ａ０´〜ａ７´」と前回データである「ｂ０〜ｂ７」との積和演算が行われる。同図の例において、レジスターＲ００〜Ｒ０７には前回データ「ａ０〜ａ７」が、レジスターＲ１０〜Ｒ１７には前回データ「ｂ０〜ｂ７」が、出力レジスターには前回の積和演算値「Ｓ７８」が予め保持される。また、「ｄｉ」は入力更新データ「ａｉ´」から当該入力更新データに対応する前回データ「ａｉ」の減算値「ｄｉ（＝ａｉ´−ａｉ）」であり、「ｑｉ」は入力更新データに対応する組の値「ｂｉ」の要素データと減算値「ｄｉ」との乗算値「ｑｉ（＝ｄｉ（＝ａｉ´−ａｉ）×ｂｉ）」である。そして、「Ｓ７８−ｉ」は、「ｉ」番目の組までの積和演算値を表す。
【００５２】
レジスターＲ００には、予め前回データ「ａ０」が保持される。そして、入力信号inputとして「ａ０´」が入力されると、選択器ＳＥＬ１は、入力更新データ「ａ０」に対応するupdateする組の番号s10（＝０）に基づいて、レジスターＲ００が予め保持する前回データ「ａ０」を次のクロックの立ち上がりタイミングで遅延器ＤＥＬ２と減算器ＳＵＢ１に出力する。同時に、ライト信号write_0_0に応答して、レジスターＲ００に「ａ０´」が書き込まれる。
【００５３】
減算器ＳＵＢ１は、入力更新データ「ａ０´」から、選択器ＳＥＬ１から出力された前回データ「ａ０」を減算し、減算値「ｄ０（＝ａ０´−ａ０）」を選択器ＳＥＬ３に出力する。また、入力更新データ「ａ０´」はレジスターＲ００に対応するためwrite_0_0からwrite_0_7の論理和s0はＨレベルとなり、遅延器ＤＥＬ１はＨレベルのセレクト信号select1を選択器ＳＥＬ３に出力する。そのため、選択器ＳＥＬ３は、Ｈレベルのセレクト信号select1に基づいて、減算器ＳＵＢ１からの出力「ｄ０」を選択し乗算器ＭＵＬ１に出力する。
【００５４】
一方、選択器ＳＥＬ２は、updateする組の番号s10（＝０）に基づいて、レジスターＲ１０に保持された前回データ「ｂ０」を選択して減算器ＳＵＢ２と遅延器ＤＥＬ３に出力する。この場合、入力更新データ「ａ０´」はレジスターＲ１０〜Ｒ１７には対応しないため、選択器ＳＥＬ４にＬレベルのセレクト信号select4が出力され、選択器ＳＥＬ４は、セレクト信号select4に基づいて遅延器ＤＥＬ３からの前回データ「ｂ０」を選択し乗算器ＭＵＬ１に出力する。
【００５５】
そして、次のクロックの立ち上がりタイミングで、乗算器ＭＵＬ１は、選択器ＳＥＬ３から出力された減算値「ｄ０」と、選択器ＳＥＬ４から出力された前回データ「ｂ０」とを乗算し、乗算した値「ｑ０（＝ｄ０（＝ａ０´−ａ０）×ｂ０）」を加算器ＡＤＤ１に出力する。この例では複数のデータａ０´〜ａ７´が連続するクロックサイクルで入力されるものの入力更新データ「ａ０´」は最初の入力である。そのため、連続入力検出回路ＥＣ１はＬレベルのセレクト信号select5を選択器ＳＥＬ５に出力し、選択器ＳＥＬ５は、出力レジスターＯＵＴから出力される前回の積和演算値「Ｓ７８」を加算器ＡＤＤ１に入力する。
【００５６】
次のクロックの立ち上がりタイミングで、加算器ＡＤＤ１は、乗算器ＭＵＬ１から入力された前回の積和演算結果からの差分値「ｑ０」と前回の積和演算値「Ｓ７８」とを加算し、加算値「Ｓ７７（＝Ｓ７８＋ｑ０）」を出力レジスターＯＵＴに出力する。これにより、出力レジスターＯＵＴに入力更新データ「ａ０´」が反映された積和演算値「Ｓ７７」が書き込まれる。
【００５７】
「ａ０´」に続いて入力される入力更新データ「ａ１´〜ａ７´」についても同様である。ただし、「ａ１´〜ａ７´」の演算時は、連続クロックサイクルで入力更新データが発生する場合に該当するため、加算器ＡＤＤ１は、入力更新データ「ａｉ´（ｉ＝１〜７）」に基づく差分値「ｑｉ」と、加算器ＡＤＤ１から出力された前回の積和演算値「Ｓ７８−ｉ」とを加算し、出力レジスターＯＵＴに出力する。そして、遅延器ＤＥＬ５は、それぞれの入力更新データが反映された積和演算値が出力レジスターＯＵＴに出力される都度、出力レジスターＯＵＴに書き込み信号writeを出力する。
【００５８】
このように、本実施の形態例の積和演算器は、複数のデータを連続して入力する場合であっても、入力と演算のパイプライン処理によりそれぞれの入力更新データに基づく差分値を前回の積和演算値に順次加算することによって、それぞれ入力更新データに対応する更新後の積和演算値をその都度算出する。このため、本実施の形態例の積和演算値は、複数の入力更新データ「ａ０´〜ａ７´」がレジスターに蓄えられるのを待たずに演算を開始することができ、全ての入力更新データがレジスターに蓄えられるまでのデータ転送時間を要しない。これにより、図２の積和演算器が、積和演算値の演算にデータ「ａ０´〜ａ７´」が入力され始めてから２０サイクル要するのに対し、本実施の形態例における積和演算器は１２サイクルで積和演算値を算出することができる。
【００５９】
図９は、入力更新データとして「ａ２´」のみが更新される場合の図６の積和演算器における動作波形を表す図である。図８と同様にして、レジスターＲ００〜Ｒ０７には前回データ「ａ０〜ａ７」が、レジスターＲ１０〜Ｒ１７には前回データ「ｂ０〜ｂ７」が、出力レジスターには前回の積和演算値「Ｓ７」が予め保持される。「ｄｉ」、「ｑｉ」については図８と同様であり、「Ｓ７」は前回の積和演算値を、「Ｓ７´」は更新後の積和演算値を表す。
【００６０】
入力信号inputとして「ａ２´」が入力されると、選択器ＳＥＬ１は、入力更新データ「ａ２´」に対応するupdateする組の番号s10（＝２）に基づいて、レジスターＲ０２が予め保持する前回データ「ａ２」を次のクロックの立ち上がりタイミングで遅延器ＤＥＬ２と減算器ＳＵＢ１に出力する。同時に、ライト信号write_０_２に応答して、レジスターＲ０２に「ａ２´」が書き込まれる。
【００６１】
減算器ＳＵＢ１は、入力更新データ「ａ２´」から、選択器ＳＥＬ１から出力された前回データ「ａ２」を減算し、減算値「ｄ２（＝ａ２´−ａ２）」を選択器ＳＥＬ３に出力する。そして、選択器ＳＥＬ３は、遅延器ＤＥＬ１からのＨレベルのセレクト信号select3に基づいて、減算器ＳＵＢ１からの出力「ｄ２」を選択し乗算器ＭＵＬ１に出力する。一方、選択器ＳＥＬ４は、遅延器ＤＥＬ４からのＬレベルのセレクト信号select4に基づいて、遅延器ＤＥＬ３からの前回データ「ｂ２」を選択し乗算器ＭＵＬ１に出力する。
【００６２】
そして、次のクロックの立ち上がりタイミングで、乗算器ＭＵＬ１は、選択器ＳＥＬ３から出力された減算値「ｄ２」と、選択器ＳＥＬ４から出力された前回データ「ｂ２」とを乗算し、乗算値「ｑ２（＝（ｄ２（＝ａ２´−ａ２）×ｂ２）」を加算器ＡＤＤ１に出力する。この例は、連続するクロックサイクルで入力更新データが発生しない場合に該当するため、選択器ＳＥＬ５は出力レジスターＯＵＴから出力される前回の積和演算値「Ｓ７」を加算器ＡＤＤ１に入力する。そして、加算器ＡＤＤ１は、次のクロックの立ち上がりタイミングで、前回の積和演算値「Ｓ７」と乗算器ＭＵＬ１からの出力「ｑ２」とを加算し、加算値「Ｓ７´（＝Ｓ７＋ｑ２）」を出力レジスターＯＵＴに出力する。
【００６３】
このように、本実施の形態例の積和演算器は、演算対象の全ての値の要素データを積和演算し直す必要がなく、入力更新データ「ａ２´」がレジスターＲ０２に蓄えられるのを待たずに演算を開始することができるため、特に、一部の要素「ａ2´」だけが更新された場合に、より少ない処理サイクルで積和演算値を算出することができる。これにより、図２の積和演算器が積和演算値の演算にデータ「ａ２´」が入力され始めてから１３サイクル要していたのに対し、本実施の形態例における積和演算器は５サイクルで積和演算値を算出することができる。
【００６４】
従って、本実施の形態例の積和演算器は、演算対象の全ての要素データがレジスターに蓄えられるまでのデータ転送時間、及び、全ての要素データの演算時間を要しないことにより、図２の積和演算器に対してより少ない処理サイクルで積和演算値を算出することができる。
【００６５】
＜第２の実施の形態例＞
第１の実施の形態例では、２つの値「ａ」「ｂ」の積和演算値を算出する積和演算器について述べたが、第２の実施の形態例では、さらに、値「ｃ」を加えた値「ａ」「ｂ」「ｃ」の積和演算値を演算する積和演算器について述べる。第２の実施の形態例の積和演算器は、次の式３に基づいて積和演算値を算出する。
【００６６】
【数３】
0005668391.tif 000004
【００６７】
式３における、値「ａ」、値「ａ´」及び、値「ｂ」については、式２と同様である。ただし、式３において、「Ｓ」は「ａ」と「ｂ」と「ｃ」の積和演算値（以下、前回の積和演算値）であり、「Ｓ´」は「ａ´」と「ｂ」と「ｃ」との積和演算値（以下、更新後の積和演算値）を表す。式３において、更新後の積和演算値「Ｓ´」は、前回の積和演算値「Ｓ」に対して、差分値「（ａｊ´−ａｊ）×ｂｊ×ｃｊ」が加算されることによって算出される。
【００６８】
図１０は、式３において「ｎ＝８」とした場合の本実施の形態例における積和演算器の一例を表す図である。図６と同様に、同図の積和演算器では、値「ａ」の各要素ａ０〜ａ７はレジスターＲ００〜Ｒ０７に、値「ｂ」の各要素ｂ０〜ｂ７はレジスターＲ１０〜Ｒ１７に、値「ｃ」の各要素ｃ０〜ｃ７はレジスターＲ２０〜Ｒ２７に格納される。また、本実施の形態例における積和演算器は、入力レジスター（レジスターＲ００〜Ｒ２７）に前回データを、出力レジスターＯＵＴに前回の積和演算値を保持する。
【００６９】
また、図１０の積和演算器において、図６と同じ部分については同様の引用番号が付与される。同図の積和演算器は、さらに、レジスターＲ２０〜Ｒ２７、write_2_0からwrite_2_7の論理和s2、選択器ＳＥＬ６、ＳＥＬ７、減算器ＳＵＢ３、遅延器ＤＥＬ７、ＤＥＬ８を有する。write_2_0からwrite_2_7の論理和s2はレジスターＲ２０〜Ｒ２７のいずれかに格納される入力更新データの有無を表す。また、同図の積和演算器では、入力信号inputとして、値「ａ」「ｂ」「ｃ」のいずれかの更新データが入力される。
【００７０】
図１０の積和演算器の動作は、図６と同様である。同１０の積和演算器では、値「ａ」「ｂ」「ｃ」のいずれかのデータが入力されるため、例えば、値「ａ´」のデータが入力された場合、write_0_0からwrite_0_7の論理和s0はＨレベル、write_1_0からwrite_1_7の論理和s1、及びwrite_2_0からwrite_2_7の論理和s2はＬレベルとなる。従って、乗算器ＭＵＬ１は、値「ａ」に係る選択器ＳＥＬ３による減算器ＳＵＢ１からの減算値（ａｊ´−ａｊ）と、値「ｂ」に係る選択器ＳＥＬ４による遅延器ＤＥＬ３からの前回データ（ｂｊ）と、値「ｃ」に係る選択器ＳＥＬ７による遅延器ＤＥＬ７からの前回データ（ｃｊ）とを乗算する。
【００７１】
そして、乗算器ＭＵＬ１は、乗算結果を前回の積和演算値からの差分値として加算器ＡＤＤ１に出力する。この差分値は、上述した式３における「（ａｊ´−ａｊ）×ｂｊ×ｃｊ」に対応する。そして、加算器ＡＤＤ１は、当該差分値と、出力レジスターＯＵＴまたは前回の加算器ＡＤＤ１からの出力のいずれかを加算し、更新後の積和演算値として出力レジスターＯＵＴに出力する。
【００７２】
このように、本実施の形態例の積和演算器は、値「ａ」「ｂ」に、さらに値「ｃ」を加えた３つの値の積和演算値についても、図６の積和演算器と同様に、入力と演算のパイプライン処理により、前回の積和演算値に対して、更新された任意の要素データ（入力更新データ）に基づく前回の積和演算値との差分値を加算することによって、更新後の積和演算値を算出する。このため、積和演算器は、演算対象の全ての値「ａ」「ｂ」「ｃ」の要素データを積和演算し直す必要がなく、また、全ての入力更新データが対応するレジスターに蓄えられるのを待たずに演算を開始することができる。
【００７３】
これにより、本実施の形態例の積和演算器は、３つの値の積和演算値を算出する場合についても、演算対象の全ての要素データがレジスターに蓄えられるまでのデータ転送時間、及び、全ての要素データの演算時間を要しないことにより、より少ない処理サイクルで積和演算値を算出することができる。なお、本実施の形態例では３つの値の積和演算を行う場合について述べたが、本実施の形態例の積和演算器は、４つ以上の値の積和演算を行う場合にも有効である。
【００７４】
＜第３の実施の形態例＞
第１の実施の形態例では、値「ａ」「ｂ」のいずれかの要素データが入力される積和演算器について述べたが、第３の実施の形態例では、値「ａ」「ｂ」の同組の要素データが同時に入力される積和演算器について述べる。
【００７５】
第３の実施の形態例の積和演算器は、次の式４に基づいて積和演算値を算出する。式４において、値「ａ」、「ａ´」は式２と同様であり、値「ｂ´＝（ｂ０´，ｂ１´，ｂ２´，…，ａｎ−１´）」は前回積和演算された古い値「ｂ＝（ｂ０，ｂ１，ｂ２，…，ｂｎ−１）」である前回データに対してｊ番目の要素が更新されているものとする。そして、「Ｓ」は「ａ」と「ｂ」の積和演算値（以下、前回の積和演算値）であり、「Ｓ´」は「ａ´」と「ｂ´」の積和演算値（以下、更新後の積和演算値）を表す。
【００７６】
【数４】
0005668391.tif 000005
【００７７】
式４では、式２と同様に、更新後の積和演算値「Ｓ´」を、前回の積和演算値「Ｓ」に、「Ｓ´」と「Ｓ」の差分値を加算することによって求める。具体的に、更新後の積和演算値「Ｓ´」は、前回の積和演算値「Ｓ」から値「ａ」「ｂ」のｊ番目の要素の乗算値「ａｊ×ｂｊ」を減算し、値「ａ´」「ｂ´」のｊ番目の要素の乗算値「ａｊ´×ｂｊ´」を加算した値（Ｓ´＝Ｓ−（ａｊ×ｂｊ）＋（ａｊ´×ｂｊ´））である。従って、更新後の積和演算値「Ｓ´」は、前回の積和演算値「Ｓ」に差分値「−（ａｊ×ｂｊ）＋（ａｊ´×ｂｊ´）」が加算されることにより算出される。
【００７８】
式１と式４とを比較すると、値の一部の要素が更新される場合、式１に対して式４の演算量は少ない。従って、式４は、式１に対してより少ない処理サイクルで更新後の積和演算値「Ｓ」を算出することができる。
【００７９】
図１１は、式４において「ｎ＝８」とした場合の本実施の形態例における積和演算器の一例を表す図である。図６の積和演算器と同様に、同図の積和演算器では、値「ａ」の各要素ａ０〜ａ７はレジスターＲ００〜Ｒ０７に格納され、値「ｂ」の各要素ｂ０〜ｂ７はレジスターＲ１０〜Ｒ１７に格納される。また、同図の積和演算器では、各入力レジスターに前回データを、出力レジスターＯＵＴに前回の積和演算値を保持する。また、同図の積和演算器には、値「ａ」「ｂ」の同じ組の更新後のデータが同時に入力されるため、値「ａ」に対応する入力信号input_0と、値「ｂ」に対応する入力信号inout_1とが入力される。
【００８０】
図１１の積和演算器において、入力信号input_0として、値「ａ」に係る入力更新データが入力されると、入力更新データを書き込む前に、選択器ＳＥＬ１はupdateする組の番号s10に対応するレジスターが予め保持する前回データを選択器ＳＥＬ８と乗算器ＭＵＬ３とに出力する。同時に、入力更新データに対応するレジスターがライト信号write_0_0〜write_0_7に応答して、対応するレジスターＲ００〜Ｒ０７に入力更新データが書き込まれる。
【００８１】
同様にして、入力信号input_0と同じ組のデータであって、値「ｂ」に係るデータが入力信号input_１として入力されると、入力更新データを書き込む前に、選択器ＳＥＬ２はupdateする組の番号s10に対応するレジスターが予め保持する前回データを選択器ＳＥＬ９と乗算器ＭＵＬ３とに出力する。同時に、入力更新データに対応するレジスターがライト信号write_１_0〜write_１_7に応答して、対応するレジスターＲ１０〜Ｒ１７に入力更新データが書き込まれる。
【００８２】
続いて、選択器ＳＥＬ８は、セレクト信号select8（write_0_0からwrite_0_7の論理和s0）に基づいて、入力更新データinput_0と、選択器ＳＥＬ１から出力された入力更新データに対応する前回データのいずれかを選択し乗算器ＭＵＬ２に出力する。具体的に、選択器ＳＥＬ８は、セレクト信号select8がＨレベルの場合は入力更新データinput_0を、セレクト信号select8がＬレベルの場合は選択器ＳＥＬ１から出力された前回データを乗算器ＭＵＬ２に出力する。選択器ＳＥＬ９についても同様である。
【００８３】
前述したとおり、本実施の形態例の積和演算器では、値「ａ」「ｂ」の同組のデータが同時に入力されるため、write_0_0からwrite_0_7の論理和s0と、write_1_0からwrite_1_7の論理和s1とが、同時にＨレベルとなる。この場合、乗算器ＭＵＬ２は、両入力更新データinput_0、input_1を乗算した乗算値を（ａｊ´×ｂｊ´）、乗算器ＭＵＬ３は両入力更新データに対応する前回データを乗算した乗算値（ａｊ×ｂｊ）を、それぞれ減算器ＳＵＢ４に出力する。
【００８４】
そして、減算器ＳＵＢ４は、乗算器ＭＵＬ２が出力する両入力更新データの乗算値（ａｊ´×ｂｊ´）から、乗算器ＭＵＬ３からの出力である各前回データの乗算値（ａｊ×ｂｊ）を減算し、前回の積和演算結果からの差分値として加算器ＡＤＤ１に出力する。この差分値は、上述した式４における「−（ａｊ×ｂｊ）＋（ａｊ´×ｂｊ´）」に対応する。そして、加算器ＡＤＤ１は、当該差分値と、出力レジスターＯＵＴまたは前回の加算器ＡＤＤ１からの出力のいずれかを加算し、更新後の積和演算値として出力レジスターＯＵＴに出力する。
【００８５】
このように、本実施の形態例の積和演算器は、値「ａ」「ｂ」の任意の同組の要素データ（入力更新データ）を同時に更新する場合の積和演算値において、入力と演算のパイプライン処理により、前回の積和演算値に入力更新データに基づく前回の積和演算値との差分値を加算することにより、更新後の積和演算値を順次算出することができる。このため、積和演算器は、演算対象の全ての組の要素データを積和演算し直す必要がなく、また、全ての入力更新データが対応するレジスターに蓄えられるのを待たずに演算を開始することができる。
【００８６】
これにより、本実施の形態例の積和演算器は、値「ａ」「ｂ」の任意の同組の要素データを同時に更新する場合において、演算対象の全ての要素データがレジスターに蓄えられるまでのデータ転送時間、及び、全ての要素データの演算時間を要しないことにより、より少ない処理サイクルで積和演算値を算出することができる。
【００８７】
＜第４の実施の形態例＞
第１の実施の形態例では、１セットの入力レジスター及び出力レジスターを有する積和演算器について述べたが、第４の実施の形態例では、複数の入力レジスター及び出力レジスター（以下、レジスターセット）を保持する積和演算器について述べる。第４の実施の形態例では、例えば、ｍセットの入力レジスター（レジスターＲ００_ｉ〜Ｒ１７_ｉ（０≦ｉ≦ｍ−１））及び出力レジスター（ＯＵＴ_ｉ）を有する。そして、それぞれのレジスターセットに共有の演算部により、各レジスターセットの値「ａ」「ｂ」の積和演算を行う。
【００８８】
図１２は、第４の実施の形態例における積和演算器の一例を表す図である。同図の積和演算器は、さらに、updateするレジスターセットの番号s20を有する。updateするレジスターセットの番号s20とは、積和演算対象のレジスターセットの識別番号である。また、同図の積和演算器では、入力信号inputとして、updateするレジスターセットの番号s20で指定されたレジスターセットの値「ａ」「ｂ」のいずれかの更新後のデータが入力される。
【００８９】
図１２の積和演算値において、入力信号inputとしてデータが入力される際に、updateするレジスターセットの番号s20に基づいて、積和演算対象のレジスターセットが選択される。そして、updateするレジスターセットの番号s20で指定されたレジスターセットのレジスターＲ００_ｉ〜Ｒ１７_ｉに保持された前回データが選択器ＳＥＬ１、ＳＥＬ２を介して遅延器ＤＥＬ２、ＤＥＬ３及び減算器ＳＵＢ１、ＳＵＢ２に出力されると共に、当該レジスターに入力更新データが書き込まれる。その後、乗算器ＭＵＬ１の差分値の演算処理までは、図６の積和演算器と同様である。
【００９０】
続いて、加算器ＡＤＤ１は、乗算器ＭＵＬ１から出力された差分値と、連続入力検出回路ＥＣ２の出力するセレクト信号select11に基づく前回の積和演算値とを加算する。連続入力検出回路ＥＣ２は、連続するクロックサイクルでデータが入力されたか否かに加え、updateするレジスターセットの番号c20が１つ前のクロックサイクルと同じか否かを判定する。連続入力検出回路ＥＣ２は、２つの条件が真の場合、選択器ＳＥＬ１１にＨレベルのセレクト信号select11を出力し、２つの条件のいずれかまたは両方が真ではない場合は、選択器ＳＥＬ１１にＬレベルのセレクト信号select11を出力する。
【００９１】
そして、選択器ＳＥＬ１１は、Ｈレベルのセレクト信号select11が出力された場合、加算器ＡＤＤ１からの出力を再度加算器ＡＤＤ１に入力し、Ｌレベルのセレクト信号select11が出力された場合、遅延器ＤＥＬ９から入力されたupdateするレジスターセットの番号s20に基づく出力レジスターＯＵＴ_ｉが保持する前回の積和演算値を、加算器ＡＤＤ１に入力する。つまり、加算器ＡＤＤ１は、連続するクロックサイクルで入力更新データが発生し、かつ、１つ前のクロックサイクルとレジスターセット番号が同じである場合は加算器ＡＤＤ１の前回の出力を、それ以外の場合はレジスターセット番号に対応する出力レジスターＯＵＴ_ｉの出力を、前回の積和演算値として入力とする。
【００９２】
そして、遅延器ＤＥＬ１０は、updateするレジスターセットの番号s20を入力更新データに対応する積和演算値が算出されるタイミングに遅延させ、updateするレジスターセットの番号s20に基づく出力レジスターＯＵＴ_ｉを選択し書き込み信号writeを出力する。
【００９３】
このように、本実施の形態例の積和演算器は、複数のレジスターセットを有し、更新された任意の要素データ（入力更新データ）に対応するレジスターセットの積和演算値を算出する場合についても、入力と演算のパイプライン処理により、前回の積和演算値に対して、入力更新データに基づく前回の積和演算値との差分値を加算することによって、当該レジスターセットの更新後の積和演算値を算出することができる。このため、積和演算器は、演算対象の全ての値の要素データを積和演算し直す必要がなく、また、全ての入力更新データが対応するレジスターに蓄えられるのを待たずに演算を開始することができる。
【００９４】
これにより、本実施の形態例の積和演算器は、演算対象の全ての要素データがレジスターに蓄えられるまでのデータ転送時間、及び、全ての要素データの演算時間を要しないことにより、複数のレジスターセットそれぞれの値「ａ」「ｂ」の積和演算値をより少ない処理サイクルで高速に算出することができる。
【００９５】
＜第５の実施の形態例＞
図１３、図１４は、第５の実施の形態例における積和演算器の一例を表す図である。本実施の形態例は、図１３の演算回路と、ｍ個の図１４の演算回路を有する。図１３の演算回路は、入力信号data_0、data_iを、各図１４の演算回路に出力する。入力信号data_0は入力更新データに対応する第１のレジスターセット（レジスターＲ００〜Ｒ０７）の前回データであり、入力信号data_iは入力更新データに対応する第２のレジスターセット（レジスターＲ１０_ｉ〜Ｒ１７_ｉ（１≦ｉ≦ｍ））の前回データである。
【００９６】
第５の実施の形態例では、１組の第１のレジスターセット（レジスターＲ００〜Ｒ０７）と、ｍ組の第２のレジスターセット（レジスターＲ１０_ｉ〜Ｒ１７_ｉ）及び出力レジスターＯＵＴ_ｉを有する積和演算器について述べる。第５の実施の形態例では、例えば、ｍ個の第２のレジスターセットの値と、第２のレジスターセットそれぞれに共有の第１のレジスターセットの値とをそれぞれ積和したｍ個の積和演算値を出力レジスターＯＵＴ_ｉに出力する。本実施の形態例における積和演算器は、例えば、行列とベクトルとの積を求める場合に有効である。この場合、第１のレジスターセットはベクトルに当たり、ｍ個の第２のレジスターセットは「ｍ×８」行列に当たる。
【００９７】
【数５】
0005668391.tif 000006
【００９８】
式５は、第２のレジスターセットを「ｍ×８」行列（ｂ1，０，ｂ1，１，……，ｂｍ，７）、第１のレジスターセットをベクトル（ａ０，ａ１，…，ａ７）とした場合の行列とベクトルの積の演算を表す式である。式５の演算では、行列の各行とベクトルの演算「（ｂｉ，０×ａ０）＋（ｂｉ，１×ａ１）＋…＋（ｂｉ，７×ａ７）」が行われ、「output_ｉ」として算出される。
【００９９】
図１３は、入力更新データに対応する各レジスターセットの前回データdata_0、data_iを出力する演算回路である。同図の演算回路において、第１のレジスターセット（レジスターＲ００〜Ｒ０７）または第２のレジスターセット（レジスターＲ１０_ｉ〜Ｒ１７_ｉ）のいずれかの値が入力される。同図の演算回路において、入力信号inputとしてデータが入力されると、入力更新データが書き込まれる前に、選択器ＳＥＬｍ０〜ｍｍは各レジスターセットのupdateする組の番号s10に対応するレジスターが予め保持する前回データdata_0、data_iを出力する。同時に、入力更新データに対応するレジスターがライト信号write_0_0〜write_m_7に応答し、当該レジスターに入力更新データが書き込まれる。
【０１００】
図１４は、第１のレジスターセットと、ｍ個のうちの１つの第２のレジスターセットの積和演算値を算出する演算回路である。同図の演算回路は、例えば、行列とベクトルの積を求める演算の場合、行列内のある行とベクトルとの積の演算に当たる。また、write_0_0からwrite_0_7の論理和s0はレジスターＲ００〜Ｒ０７のいずれかに格納される入力更新データの有無を、write_i_0からwrite_i_7の論理和siはレジスターＲ１０_i〜Ｒ１７_ｉのいずれかに格納される入力更新データの有無を表す。
【０１０１】
図１４の演算回路において、まず、入力更新データinputに加えて、入力更新データinputに対応する第１のレジスターセットの前回データdata_0が、入力更新データに対応する第２のレジスターセットの前回データdata_iが入力される。例えば、第１のレジスターセットに対応するデータが入力された場合、write_0_0からwrite_0_7の論理和s0はＨレベル、write_i_0からwrite_i_7の論理和siはＬレベルとなる。この場合、選択器ＳＥＬ３は、減算器ＳＵＢ１から入力される入力更新データinputから前回データdata_0の減算値を乗算器ＭＵＬ１に出力し、選択器ＳＥＬ４は、遅延器ＤＥＬ３から入力される入力更新データに対応する第２のレジスターセットの前回データdata_iを乗算器ＭＵＬ１に出力する。
【０１０２】
そして、乗算器ＭＵＬ１は、それぞれの選択器ＳＥＬ３、ＳＥＬ４からの入力を乗算し差分値として加算器ＡＤＤ１に出力する。続いて、加算器ＡＤＤ１は、当該差分値と、出力レジスターＯＵＴ_ｉまたは前回の加算器ＡＤＤ１からの出力のいずれかを加算し、更新後の積和演算値として出力レジスターＯＵＴ_ｉに出力する。
【０１０３】
図１５は、図１３及び図１４の回路をバスに接続する回路を表す図である。同図において、図７のバス接続回路と同じ部分については、同様の引用番号が付与される。本実施の形態例におけるバス接続回路は、さらに、ｍ（１≦ｉ≦ｍ）個の第２のレジスターセットのwrite_i_0からwrite_i_7の論理和siを対応する演算回路（図１４）に出力する。なお、図１５中ではs1からs（m-1）までの回路を省略し、smの回路で代表させている。また、論理和器Ｌ００〜Ｌ０７は、各論理和器に対応する組のライト信号write_0_ｉ、write_1_ｉ、…、write_m_ｉの論理和をそれぞれエンコーダーＥ２に出力する。エンコーダーＥ２は、Ｈレベルの信号を出力する論理和器をupdateする組の番号s10として数値化し、図１３の演算回路に出力する。
【０１０４】
また、比較器Ｃ３０は、検出アドレスがｍ個の図１４の出力レジスターＯＵＴ_ｉ（１≦ｉ≦ｍ）のアドレスに該当するかを比較し、一致する場合にゲートＧ３に読み出し信号を出力する。また、論理積器ＡＮＤ２は、検出アドレスに対応する出力レジスターＯＵＴ_ｉを選択するセレクト信号select20を選択器ＳＥＬ２０に出力する。具体的に、論理積器ＡＮＤ２は、例えば、連続するアドレスを付与した各出力レジスターＯＵＴ_ｉのアドレスの下所定数桁と、当該所定数の各桁に「１」を保持する値との論理積値を、セレクト信号select20として選択器ＳＥＬ２０に出力する。そして、選択器ＳＥＬ２０は、セレクト信号select20に基づいて、検出アドレスに対応する出力レジスターＯＵＴ_ｉが保持する値output_iをゲートＧ３からデータバスＤＢに出力する。
【０１０５】
このように、本実施の形態例における積和演算器は、複数セットの第２のレジスター及び出力レジスターと共有の第１のレジスターセットを有し、更新された任意の要素データ（入力更新データ）に対応する複数セットの積和演算値を算出する場合についても有効である。本実施の形態例の積和演算器は、演算とパイプライン処理により、複数セットの前回の積和演算値に対してそれぞれ、入力更新データに基づく前回の積和演算値との差分値を加算することによって、当該複数セットの更新後の積和演算値を算出することができる。このため、積和演算器は、演算対象の全ての値の要素データを積和演算し直す必要がなく、また、全ての入力更新データが対応するレジスターに蓄えられるのを待たずに演算を開始することができる。
【０１０６】
これにより、本実施の形態例の積和演算器は、複数セットの第２のレジスターセットと共有の第１のレジスターセットとの複数の積和演算値を算出する場合において、演算対象の全ての要素データがレジスターに蓄えられるまでのデータ転送時間、及び、全ての要素データの演算時間を要しないことにより、より少ない処理サイクルで複数セットそれぞれの積和演算値を算出することができる。このように、本実施の形態例における積和演算器は、例えば、行列とベクトルの積を高速に求めることができる。
【０１０７】
＜第６の実施の形態例＞
第１の実施の形態例から第５の実施の形態例にかけて、積和演算値を算出する積和演算器について述べた。しかしながら、本発明の演算回路は、積和演算に限定されるものではなく、他の演算に対しても有効である。そこで、第６の実施の形態例では、積和演算以外の演算回路について述べる。
【０１０８】
本実施の形態例では、例えば、値「ａ＝（ａ０，ａ１，ａ２，…，ａｎ−１）」と値「ｂ＝（ｂ０，ｂ１，ｂ２，…，ｂｎ−１）」の各組のそれぞれの論理積を排他的論理和する論理和・排他的論理和演算回路（以下、ＡＮＤ・ＸＯＲ演算回路）について述べる。ＡＮＤ・ＸＯＲ演算回路は、一般的に、次の式６に基づいてＡＮＤ・ＸＯＲ演算値を演算する。
【０１０９】
【数６】
0005668391.tif 000007
【０１１０】
式６において、関数ｆは論理積を求める関数であり、「Ａ」は、値「ａ」と値「ｂ」の各組の論理積がさらに排他的論理和された値である。式６に基づく演算回路では、例えば、値「ａ」のうち一部の要素のみが更新された場合に、値「ａ」「ｂ」の全ての要素について論理積と排他的論理和をし直していた。
【０１１１】
そこで、本実施の形態例の演算回路は、次の式７に基づいてＡＮＤ・ＸＯＲ演算値を求める。式７において、値「ａ´＝（ａ０´，ａ１´，ａ２´，…，ａｎ−１´）」は、前回演算された古い値「ａ＝（ａ０，ａ１，ａ２，…，ａｎ−１）」である前回データに対してｊ番目の要素が更新されているものとする。また、「Ａ」は、値「ａ」と値「ｂ」のＡＮＤ・ＸＯＲ演算値（以下、前回のＡＮＤ・ＸＯＲ演算値）であり、「Ａ´」は値「ａ´」と値「ｂ」のＡＮＤ・ＸＯＲ演算値（以下、更新後のＡＮＤ・ＸＯＲ演算値）を表す。
【０１１２】
【数７】
0005668391.tif 000008
【０１１３】
式７において、更新後のＡＮＤ・ＸＯＲ演算値「Ａ´」は、「値「ａ」「ｂ」のｊ番目の要素の論理積（ｆ（ａｊ，ｂｊ））と、値「ａ´」「ｂ」のｊ番目の要素の論理積（ｆ（ａｊ´，ｂｊ））との排他的論理和」と前回のＡＮＤ・ＸＯＲ演算値「Ａ」との排他的論理和によって求められる（Ａ´＝Ａ＾（ｆ（ａｊ，ｂｊ））＾（ｆ（ａｊ´，ｂｊ）））。この演算式は、「Ａ´＝Ａ＾（ｆ（ａｊ＾ａｊ´，ｂｊ））」のようにまとめられる。従って、更新後のＡＮＤ・ＸＯＲ演算値「Ａ´」は、前回のＡＮＤ・ＸＯＲ演算値「Ａ」と、「ｆ（ａｊ＾ａｊ´，ｂｊ）」との排他的論理和によって求められる。
【０１１４】
式６と式７とを比較すると、値の一部の要素が更新される場合、式６に対して式７の演算量は少ない。従って、式７は、式６に対してより少ない処理サイクルで更新後のＡＮＤ・ＸＯＲ演算値「Ａ´」を算出することができる。
【０１１５】
図１６は、式７において「ｎ＝８」とした場合の本実施の形態例における回路の一例を表す図である。同図の演算回路において、値「ａ」の各要素ａ０〜ａ７はレジスターＲ００〜Ｒ０７に、値「ｂ」の各要素ｂ０〜ｂ７はレジスターＲ１０〜Ｒ１７に格納される。また、同様にして、本実施の形態例における演算回路は、レジスターＲ００〜Ｒ１７に前回データを、出力レジスターに前回のＡＮＤ・ＸＯＲ演算値を保持する。また、値「ａ」または値「ｂ」のいずれかの更新後のデータが入力信号inputとして入力される。
【０１１６】
なお、図１６の演算回路の式７「Ａ＾ｆ（ａｊ＾ａｊ´，ｂｊ）」と、図６の積和演算器の式２「Ｓ＋（ａｊ´−ａｊ）×ｂｊ」において、式７の論理積は式２の積算に、式７の排他的論理和は式２の加減算に対応する。そのため、図１６の演算回路は、図６の積和演算回路に対して、減算器ＳＵＢ１、ＳＵＢ２の代わりに排他的論理和器ＸＯＲ１、ＸＯＲ２を、乗算器ＭＵＬ１の代わりに論理積器ＡＮＤ３を、加算器ＡＤＤ１の代わりに排他的論理和器ＸＯＲ３を有する。
【０１１７】
図１６の演算回路において、例えば、値「ａ´」のデータ（ａｊ´）が入力信号inputとして入力された場合、排他的論理和器ＸＯＲ１は、入力更新データinputと、選択器ＳＥＬ１から出力された入力更新データに対応する前回データ（ａｊ）との排他的論理和を演算して選択器ＳＥＬ３に出力する（ａｊ＾ａｊ´）。そして、選択器ＳＥＬ３は、遅延器ＤＥＬ１からのＨレベルのセレクト信号select3に基づいて、排他的論理和器ＸＯＲ１からの出力を選択して論理積器ＡＮＤ３に出力する。一方、選択器ＳＥＬ４は、Ｌレベルのセレクト信号select4に基づいて、遅延器ＤＥＬ３からの入力である、入力更新データに対応する前回データ（ｂｊ）を選択して論理積器ＡＮＤ３に出力する。
【０１１８】
続いて、論理積器ＡＮＤ３は、選択器ＳＥＬ３による排他的論理和器ＸＯＲ１からの出力（ａｊ＾ａｊ´）と、選択器ＳＥＬ４による遅延器ＤＥＬ３からの前回データ（ｂｊ）との論理積を演算し、排他的論理和器ＸＯＲ３に出力する。この出力は、上述した式７における「ｆ（ａｊ＾ａｊ´，ｂｊ」に対応する。そして、排他的論理和器ＸＯＲ３は、論理積器ＡＮＤ３からの出力と、出力レジスターＯＵＴまたは前回の排他的論理和器ＸＯＲ３からの出力のいずれかとの排他的論理和を求め、更新後のＡＮＤ・ＸＯＲ演算値として出力レジスターＯＵＴに出力する。
【０１１９】
このように、本実施の形態例の演算回路は、値「ａ」と値「ｂ」のＡＮＤ・ＸＯＲ演算値を求める場合についても、入力と演算のパイプライン処理により、前回のＡＮＤ・ＸＯＲ演算値に基づいて更新後のＡＮＤ・ＸＯＲ演算値を求めることができる。このため、本実施の形態例の演算回路は、演算対象の全ての値の要素データを演算し直す必要がなく、また、全ての入力更新データが対応するレジスターに蓄えられるのを待たずに演算を開始することができる。これにより、本実施の形態例の演算回路は、値「ａ」と値「ｂ」のＡＮＤ・ＸＯＲ演算値を求める場合について、演算対象の全ての要素データがレジスターに蓄えられるまでのデータ転送時間、及び、全ての要素データの演算時間を要しないことにより、より少ない処理サイクルでＡＮＤ・ＸＯＲ演算値を算出することができる。
【０１２０】
このように、本発明の演算回路は、積和演算以外の演算回路にも有効である。このような演算回路は、次のように一般化される。
【０１２１】
まず、演算回路は、Ｎ個の要素を有する第１の値（ａ）、第２の値（ｂ）とを保持するレジスターと、第１、２の値に対して「第１演算（積算、論理積）」したＮ個の第１演算値を、さらに「第２演算（加減算、排他的論理和）」した演算結果値（Ｓ、Ａ）を保持するレジスターとを有する。
【０１２２】
また、演算回路は、「入力された第１の値の１つの前記要素（ａｊ´（＝入力更新データ））と、当該要素に対応する第１の値の要素（ａｊ）とに対して「第２演算（加減算、排他的論理和）」を行う第１の演算器」と、「第１の演算器の出力と、入力された第１の値の要素に対応する第２の値の要素（ｂｊ）とに対して「第１演算（積算、論理積）」を行う第２の演算器」を有する。さらに、演算回路は、第２の演算器の出力と、出力レジスターの演算結果値（Ｓ、Ａ）とに対して「第２演算（加減算、排他的論理和）」を行って出力レジスターに出力する第３の演算器とを有する。
【０１２３】
そして、前述の第２の演算器による演算は、「入力された第１の値の要素に対応する第１のレジスター内の第１の値の要素（ａｊ）と当該要素に対応する第２の値の要素（ｂｊ）とに対する「第１演算（積算、論理積）」の結果を第２演算に基づいて打ち消す値と…（１）」、「入力された第１の値の要素（ａｊ´）と当該要素に対応する第２の値の要素（ｂｊ）とに対する「第１演算（積算、論理積）」の結果…（２）」と、に対する「第２演算（加減算、排他的論理和）」…（３）について分配法則を満たす。
【０１２４】
以下、上記の一般化された構成を第１の実施の形態例、及び、第６の実施の形態例に対応させて説明する。まず、第１の実施の形態例の積和演算器において、第１演算は積算、第２演算は加減算に当たる。また、演算結果値「Ｓ」は、値「ａ」と値「ｂ」の各要素データの積算値を、さらに加算した積和演算値に当たる。
【０１２５】
（１）について、「入力された第１の値の要素に対応する第１のレジスター内の第１の値の要素（ａｊ）」と「当該要素に対応する第２の値の要素（ｂｊ）」とに対する積算の結果とは、「ａｊ×ｂｊ」である。そして、「ａｊ×ｂｊ」を加減算に基づいて打ち消す値とは、「ａｊ×ｂｊ」に加減算することによって「０」となる値、即ち、「−（ａｊ×ｂｊ）」を示す。そして、（２）について、「入力された第１の値の要素（ａｊ´）」と「当該要素に対応する第２の値の要素（ｂｊ）」とに対する積算の結果は、「ａｊ´×ｂｊ」であるため、（３）は「−（ａｊ×ｂｊ）＋（ａｊ´×ｂｊ）」である。
【０１２６】
第１の実施の形態例における第２の演算器の演算は「（ａｊ´−ａｊ）×ｂｊ」であり、当該演算は（３）「−（ａｊ×ｂｊ）＋（ａｊ´×ｂｊ）」に対して分配法則を満たしている。従って、第１の実施の形態例における演算回路は、上記の構成に該当する。
【０１２７】
続いて、第６の実施の形態例の積和演算器において、第１演算は論理積、第２演算は排他的論理和に当たる。また、演算結果値「Ａ」は、値「ａ」と値「ｂ」の各要素データの各論理積を、さらに排他的論理和したＡＮＤ・ＸＯＲ演算値に当たる。
【０１２８】
（１）について、「入力された第１の値の要素に対応する第１のレジスター内の第１の値の要素（ａｊ）」と「当該要素に対応する第２の値の要素（ｂｊ）」とに対する論理積の結果とは、「ｆ（ａｊ，ｂｊ）」である。そして、「ｆ（ａｊ，ｂｊ）」を排他的論理和に基づいて打ち消す値とは、「ｆ（ａｊ，ｂｊ）」との排他的論理和が「０」となる値である。排他的論理和演算において、同じ値の排他的論理和は「０」となる。従って、「ｆ（ａｊ，ｂｊ）」を排他的論理和に基づいて打ち消す値は同値、即ち「ｆ（ａｊ，ｂｊ）」である。そして、（２）について、「入力された第１の値の要素（ａｊ´）」と「当該要素に対応する第２の値の要素（ｂｊ）」とに対する論理積の結果は、「ｆ（ａｊ´，ｂｊ）」であるため、（３）は「（ｆ（ａｊ，ｂｊ））＾（ｆ（ａｊ´，ｂｊ））」である。
【０１２９】
第６の実施の形態例における第２の演算器の演算「ｆ（ａｊ＾ａｊ´，ｂｊ）」であり、当該演算は（３）「（ｆ（ａｊ，ｂｊ））＾（ｆ（ａｊ´，ｂｊ））」に対して分配法則を満たしている。従って、第６の実施の形態例における演算回路は、上記の構成に該当する。
【０１３０】
第１の実施の形態例の積和演算器、及び、第６の実施の形態例の演算回路は、上記のように一般化される。従って、本発明の演算回路は、上記の一般化した構成に該当する他の演算回路についても有効であり、当該演算回路は同様にして任意の値が更新された入力データに対する演算結果をより少ない処理サイクルで高速に求めることができる。
【０１３１】
以上の実施の形態をまとめると、次の付記のとおりである。
【０１３２】
（付記１）
Ｎ個の要素を有する第１の値を保持する第１のレジスターと、
Ｎ個の要素を有する第２の値を保持する第２のレジスターと、
前記第１の値と前記第２の値とが積和演算された積和演算値を保持する出力レジスターと、
入力された前記第１の値の１つの前記要素から、当該要素に対応する前記第１のレジスター内の前記第１の値の前記要素を減算する第１の減算器と、
前記第１の減算器の出力と、前記入力された第１の値の要素に対応する前記第２のレジスター内の前記第２の値の前記要素とを乗算する乗算器と、
前記乗算器の出力と、前記出力レジスターの前記積和演算値とを加算して前記出力レジスターに出力する加算器と、
を有することを特徴とする演算回路。
【０１３３】
（付記２）
付記１において、さらに、
前記入力された第１の値の要素に対応する前記第１のレジスター内の第１の値の要素を選択して前記第１の減算器に出力する第１の選択器を有することを特徴とする演算回路。
【０１３４】
（付記３）
付記１または２において、さらに、
入力された前記第２の値の１つの前記要素から、当該要素に対応する前記第２のレジスター内の前記第２の値の前記要素を減算する第２の減算器を有し、
前記乗算器は、前記第２の減算器の出力と、前記入力された第２の要素に対応する前記第１のレジスター内の前記第１の値の前記要素とを乗算することを特徴とする演算回路。
【０１３５】
（付記４）
付記３において、さらに、
前記第１の値の要素が入力された場合は前記第１の減算器の出力を選択して前記乗算器に出力し、前記第２の値の要素が入力された場合は当該要素に対応する前記第１のレジスター内の前記第１の値の前記要素を選択して前記乗算器に出力することを特徴とする演算回路。
【０１３６】
（付記５）
付記１または２において、さらに、
Ｎ個の要素を有する第３の値を保持する第３のレジスターを有し、
前記出力レジスターは、前記第１の値と前記第２の値に加え、前記第３の値が積和演算された積和演算値を保持し、
前記乗算器は、前記第１の減算器の出力と前記入力された第１の値の要素に対応する前記第２のレジスター内の前記第２の値の前記要素に加えて、前記第３のレジスター内の前記第３の値の前記要素を乗算することを特徴とする演算回路。
【０１３７】
（付記６）
付記１または２において、
前記第１のレジスターは、前記第１の値を複数セット保持し、
前記第２のレジスターは、前記第２の値を複数セット保持し、
前記出力レジスターは、前記複数セットの第１、第２の値それぞれの前記積和演算値を保持し、
前記第１の減算器は、入力された前記複数セットのうち第１セットの前記第１の値の１つの要素から、当該要素に対応する前記第１セットの前記第１のレジスター内の第１の値の要素を減算し、
前記乗算器は、前記第１の減算器の出力と、前記第１セットの第１の値の要素に対応する前記第１セットの前記第２のレジスター内の第２の値の要素とを乗算し、
前記加算器は、前記乗算器の出力と、前記第１セットの前記出力レジスターの前記積和演算値とを加算することを特徴とする演算回路。
【０１３８】
（付記７）
付記１または２において、
前記第２のレジスターは、前記第２の値を複数セット保持し、
前記出力レジスターは、第１の値と前記複数セットの第２の値それぞれとの前記積和演算値を保持し、
前記乗算器は、前記複数セット毎に、前記第１の減算器の出力と、前記入力された第１の値の要素に対応する当該複数セットのそれぞれの前記第２のレジスター内の第２の値の要素とを乗算し、
前記加算器は、前記複数セット毎に、前記乗算器の出力と、当該複数セットそれぞれの出力レジスターの前記積和演算値とを加算して当該出力レジスターに出力することを特徴とする演算回路。
【０１３９】
（付記８）
Ｎ個の要素を有する第１の値を保持する第１のレジスターと、
Ｎ個の要素を有する第２の値を保持する第２のレジスターと、
前記第１の値と前記第２の値とが積和演算された積和演算値を保持する出力レジスターと、
入力された前記第１の値の１つの前記要素と、当該要素に対応し、入力された前記第２の値の１つの前記要素とを乗算する第１の乗算器と、
前記入力された第１の値の要素に対応する前記第１のレジスター内の前記第１の値の前記要素と、前記入力された第２の値の要素に対応する前記第２のレジスター内の前記第２の値の前記要素とを乗算する第２の乗算器と、
前記第１の乗算器の出力から前記第２の乗算器の出力を減算する減算器と、
前記減算器の出力と、前記出力レジスターの前記積和演算値とを加算して前記出力レジスターに出力する加算器と、
を有することを特徴とする演算回路。
【０１４０】
（付記９）
Ｎ個の要素を有する第１の値を保持する第１のレジスターと、
Ｎ個の要素を有する第２の値を保持する第２のレジスターと、
前記第１の値と前記第２の値とに対して第１演算したＮ個の第１演算値を、さらに第２演算した演算結果値を保持する出力レジスターと、
入力された前記第１の値の１つの前記要素と、当該要素に対応する前記第１のレジスター内の前記第１の値の前記要素とに対して前記第２演算を行う第１の演算器と、
前記第１の演算器の出力と、前記入力された第１の値の要素に対応する前記第２のレジスター内の前記第２の値の前記要素とに対して前記第１演算を行う第２の演算器と、
前記第２の演算器の出力と、前記出力レジスターの前記演算結果値とに対して前記第２演算を行って前記出力レジスターに出力する第３の演算器と、
を有し、
前記第２の演算器による演算は、前記入力された第１の値の要素に対応する前記第１のレジスター内の第１の値の要素と、当該要素に対応する前記第２のレジスター内の第２の値の要素とに対する前記第１演算の結果を前記第２演算に基づいて打ち消す値と、前記入力された第１の値の要素と、当該要素に対応する前記第２のレジスター内の第２の値の要素とに対する前記第１演算の結果と、に対する前記第２演算について分配法則を満たすことを特徴とする演算回路。
【０１４１】
（付記１０）
付記９において、
前記第１演算は論理積であり、前記第２演算は排他的論理和であることを特徴とする演算回路。
【０１４２】
（付記１１）
付記９において、
前記第１演算は積であり、前記第２演算は加減であることを特徴とする演算回路。
【符号の説明】
【０１４３】
１１：ＣＰＵ、１２：ＤＭＡＣ、１３：メモリ、１４：積和演算器、１５：その他のハードウェア
【図１】
0005668391.tif 000009
【図２】
0005668391.tif 000010
【図３】
0005668391.tif 000011
【図４】
0005668391.tif 000012
【図５】
0005668391.tif 000013
【図６】
0005668391.tif 000014
【図７】
0005668391.tif 000015
【図８】
0005668391.tif 000016
【図９】
0005668391.tif 000017
【図１０】
0005668391.tif 000018
【図１１】
0005668391.tif 000019
【図１２】
0005668391.tif 000020
【図１３】
0005668391.tif 000021
【図１４】
0005668391.tif 000022
【図１５】
0005668391.tif 000023
【図１６】
0005668391.tif 000024