(57)【要約】【課題】算器の消費電力を削減すると共に、乗算器の演算速度の低下を抑制する。【解決手段】乗算器２０は、第１の端子２２に乗数が入力され、第２の端子２４に被乗数が入力される。制御回路３０は、乗算されるＡとＢについて、いずれを乗数としたほうが乗算器２０による乗算にキャリの発生回数が少ないかを判定すると共に、キャリの発生が少ない乗算が行われるように、ＡとＢの片方を第１の端子２２と第２の端子２４の片方に入力し、ＡとＢの他方を第１の端子２２と第２の端子２４の他方に入力する。【選択図】図３
2010079840.tif 000002
【特許請求の範囲】
【請求項１】
第１の端子に乗数が入力され、第２の端子に被乗数が入力される乗算器と、
乗算されるＡとＢについて、いずれを乗数としたほうが前記乗算器による乗算にキャリの発生回数が少ないかを判定すると共に、キャリの発生が少ない乗算が行われるように、前記ＡとＢの片方を前記第１の端子と前記第２の端子の片方に入力し、前記ＡとＢの他方を前記第１の端子と前記第２の端子の他方に入力する制御回路とを備えたことを特徴とする演算回路。
【請求項２】
前記乗算器は、ブースアルゴリズを用いて乗算を行うものであり、
前記制御回路は、
前記ＡとＢに対してそれぞれエンコードを行うブースエンコーダを備え、
前記ブースエンコーダによる演算結果が小さいほうに対応するＡまたはＢを乗数とした場合に、キャリの発生回数が少ないと判定することを特徴とする請求項１に記載のデジタル演算回路。
【請求項３】
前記制御部は、前記Ａのビット列における「１」の個数Ｎｕｍ（Ａ）と、前記Ｂのビット列における「１」の個数Ｎｕｍ（Ｂ）を夫々カウントするカウント回路をさらに備え、
前記Ａに対する前記ブースエンコーダの演算結果とＮｕｍ（Ｂ）の積と、前記Ｂに対する前記ブースエンコーダの演算結果とＮｕｍ（Ａ）の積とを比較し、積が小さいほうの演算結果に対応するＡまたはＢを乗数とした場合に、前記キャリの発生回数が少ないと判定することを特徴とする請求項２に記載のデジタル演算回路。
【請求項４】
第１の端子に乗数が入力され、第２の端子に被乗数が入力されるｎ（ｎ：２以上の整数）個の乗算器を備えて、積和演算を行うデジタル演算回路であって、
前記ｎ個の乗算器に対して共通に設けられており、夫々の乗算器により乗算されるＡｉとＢｉ（１≦ｉ≦ｎ）について、いずれを乗数としたほうが当該乗算器による乗算にキャリの発生回数が少ないかを判定するための指標値を算出する指標値算出回路と、
前記ｎ個の乗算器に対して夫々設けられた入力切替回路であって、前記指標値算出回路により当該乗算器に対して算出した前記指標値に基づいて前記判定を行うと共に、判定の結果に応じて、キャリの発生が少ない乗算が行われるように、該乗算器により乗算が行われるＡｉとＢｉの片方を前記乗算器の第１の端子と前記第２の端子の片方に入力し、前記ＡｉとＢｉの他方を前記第１の端子と前記第２の端子の他方に入力する入力切替回路とを備えたことを特徴とするデジタル演算回路。
【請求項５】
前記乗算器は、ブースアルゴリズを用いて乗算を行うものであり
前記指標値算出回路は、各Ａｉと各Ｂｉに対してそれぞれエンコードを行うブースエンコーダであり、
前記入力切替回路は、前記ブースエンコーダによる演算結果を前記指標値とし、該演算結果が小さいほうに対応するＡｉまたはＢｉを乗数とした場合に、キャリの発生回数が少ないと判定することを特徴とする請求項４に記載のデジタル演算回路。
【請求項６】
前記指標値算出回路は、Ａｉのビット列における「１」の個数Ｎｕｍ（Ａｉ）と、Ｂｉのビット列における「１」の個数Ｎｕｍ（Ｂｉ）を夫々カウントするカウント回路をさらに備え、前記Ａｉに対する前記ブースエンコーダの演算結果とＮｕｍ（Ｂ）の積と、前記Ｂに対する前記ブースエンコーダの演算結果とＮｕｍ（Ａ）の積とを算出するものであり、
前記入力切替回路は、前記指標値算出回路により得た積を前記指標値とし、該積が小さいほうの演算結果に対応するＡｉまたはＢｉを乗数とした場合に、キャリの発生回数が少ないと判定することを特徴とする請求項５に記載のデジタル演算回路。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、乗算器を備えるデジタル演算回路における電力消費を抑制する技術に関する。
【背景技術】
【０００２】
乗算器は、画像処理や音声処理などの様々な分野のデジタル演算回路に多数用いられている。乗算器の消費電力はこれらのデジタル演算回路の消費電力の大きな割合を占める。
【０００３】
特許文献１には、定数（特許文献１で定乗数とも呼ばれている）と不定数の乗算を行う乗算器の電力消費を抑制する手法が開示されている。図１１（特許文献１の図４）を参照してこの手法を説明する。
【０００４】
この手法は、４０２の数列により表される定乗数４０１絶対値｜Ａ｜を変換作業用数列ｂｋ４０３に置き換える。そして、ｂｋ４０３の最下位ビットから、「１」となるビットが３つ以上連続しているビット列を検索する。図１１の４０４に示すように、ｉビット目、「ｉ＋１」ビット目、「ｉ＋２」ビット目に「１」が３つ連続したビット列が抽出され、これをα列部とする。
【０００５】
α列部の存在が確認できたら、α列部の最上位ビットより１だけ上位のビットである「ｉ＋３」ビット目を「１」に、α列部の最下位ビットであるｉビット目を［−１］に、最上位ビットより１だけ上位のビットと、最下位ビットとに挟まれたビット（「ｉ＋２」、「ｉ＋１」ビット目）を「０」にすることで数列ｂｋは、４０５のように変換される。
【０００６】
数列ｂｋに対して、上述したようなα列の検索とビットの置き換えを、α列部が無くなるまで繰り返して４０６が示すβ列を得る。このβ列は、定乗数４０１の絶対値｜Ａ｜と等価である。
【０００７】
このように変化して得たβ列を乗算に用いることにより、乗算するための加減算項目を減らし、乗算器を構成する加減算器の数を減らすことができる。そのため、乗算器の消費電力を削減できる。
【特許文献１】特開２０００−２３５４８０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
しかし、特許文献１に提案された乗算器は、例えば画像処理装置用のフィルタに用いられ、係数が一般的な汎用係数である場合には、ビット毎に上記変換作業を行うことになるため、演算が低速になるという問題がある。
【課題を解決するための手段】
【０００９】
本発明の一つの態様は、乗算器と制御回路を備えたデジタル演算回路である。乗算器は、第１の端子に乗数が入力され、第２の端子に被乗数が入力される。制御回路は、乗算されるＡとＢについて、いずれを乗数としたほうが乗算器による乗算にキャリの発生回数が少ないかを判定すると共に、キャリの発生が少ない乗算が行われるようにＡとＢの片方を第１の端子と第２の端子の片方に入力し、ＡとＢの他方を第１の端子と第２の端子の他方に入力する。
【００１０】
本発明の別の態様もデジタル演算回路である。このデジタル演算回路は、積和演算を行うものであり、ｎ（ｎ：２以上の整数）個の乗算器と、該ｎ個の乗算器に対して共通に設けられた指標値算出回路と、該ｎ個の乗算器に対してそれぞれ設けられた入力切替回路を備える。
【００１１】
乗算器は、第１の端子に乗数が入力され、第２の端子に被乗数が入力される。
指標値算出回路は、夫々の乗算器により乗算されるＡｉとＢｉ（１≦ｉ≦ｎ）について、いずれを乗数としたほうが当該乗算器による乗算にキャリの発生回数が少ないかを判定するための指標値を算出する。
【００１２】
力切替回路は、指標値算出回路により当該乗算器に対して算出した指標値に基づいて上記判定を行うと共に、判定の結果に応じて、キャリの発生が少ない乗算が行われるように、該乗算器により乗算が行われるＡｉとＢｉの片方を該乗算器の第１の端子と第２の端子の片方に入力し、ＡｉとＢｉの他方を第１の端子と第２の端子の他方に入力する。
【００１３】
なお、上記演算回路を演算装置やシステム、または演算方法に置き換えて表現したものも、本発明の態様としては有効である。
【発明の効果】
【００１４】
本発明の技術によれば、乗算器の消費電力を削減すると共に、乗算器の演算速度の低下を抑制することができる。
【発明を実施するための最良の形態】
【００１５】
本願発明者は、乗算器の消費電力をいかに抑制することについて鋭意研究模索した結果、下記のことを知見した。
【００１６】
数値Ａと数値Ｂの乗算に際して、数値Ａと数値Ｂのいずれを乗数とするかによって、キャリの発生回数が異なる。これについて、２次のブースアルゴリズを用いる乗算器（以下ブース乗算器という）により、−２００（ｆ３８）と１０００（３ｅ８）を乗算して−２０００００（７ｃｆ２ｃ０）を得る場合を例に説明する。
【００１７】
＜−２００（ｆ３８）を乗数とした場合＞
ブース乗算器は、ブースエンコーダを備え、乗算の際に、まずブースエンコーダにより乗数に対してブースアルゴリズを適用した演算を行う。
【００１８】
図１に示すように、この場合、−２００が乗数であるため、ブースエンコーダが、−２００に対してブースアルゴリズを適用し、演算結果の「０１００１０」を得る。
【００１９】
その後、ブース乗算器は、ブースエンコーダの演算結果の夫々の桁ごとに被乗数１０００との間で乗算を行って部分積を得、各部分積を加算することにより乗算結果のー２０００００を得る。
【００２０】
図１において、「＊」がキャリの発生箇所を示す。この場合、乗算結果を得るまで４５回のキャリが発生する。
【００２１】
＜１０００（３ｅ８）を乗数とした場合＞
この場合、ブースエンコードが１０００に対してアルゴリズを適用し、演算結果の「０００１１０」を得る。
【００２２】
その後、ブース乗算器は、ブースエンコーダの演算結果の夫々の桁ごとに被乗数−２００との間で乗算を行って部分積を得、各部分積を加算することにより乗算結果のー２０００００を得る。
図２に示すように、この場合、乗算結果を得るまでに３３回のキャリが発生する。
【００２３】
キャリの発生は、当該ビットでビット反転（「１」から「０」、または「０」から「１」）を生じさせる。
【００２４】
デジタル回路を構成する論理ゲートでは、ビット反転が生じたときに消費電力が発生し、「１」または「０」が続く状態、すなわちビット反転が生じていない状態では、消費電力が発生しない。そのため、多数の論理ゲートにより構成される乗算器において、ビット反転すなわちキャリの発生回数を抑制すれば、乗算器の消費電力を抑制することができる。
【００２５】
上記知見に基づき、本願発明者は、乗算される数値Ａと数値Ｂのいずれを乗数として乗算器に入力することを制御することにより、乗算器の消費電力を抑制する手法を確立した。図３の模式図を参照してこの手法を説明する。
【００２６】
図３に示す演算回路１０は、乗算器２０と制御回路３０を備える。乗算器２０は、乗数が入力される第１の端子２２と、被乗数が入力される第２の端子２４を有する。制御回路３０は、乗算される数値Ａと数値Ｂついて、いずれを乗数としたほうが乗算器２０による乗算にキャリの発生回数が少ないかを判定すると共に、キャリの発生が少ない乗算が行われるように数値Ａと数値Ｂを第１の端子２２と第２の端子２４に夫々入力する。具体的には、制御回路３０は、数値Ａを乗数とした場合にキャリの発生回数が少ないと判定した場合、数値Ａを第１の端子２２に入力し、数値Ｂを第２の端子２４に入力する。一方、数値Ｂを乗数とした場合にキャリの発生回数が少ないと判定した場合、数値Ｂを第１の端子２２に入力し、数値Ａを第２の端子２４に入力する。
【００２７】
演算回路１０のこのような構成により、乗算器２０は、数値Ａと数値Ｂの乗算に際して、（Ａ×Ｂ）と（Ｂ×Ａ）のうちのキャリの発生回数が少ないほうの演算を行うことになるため、消費電力を削減することができる。また、キャリの発生回数の多少の判定は、ビット毎に行うわけではないので、消費電力を削減することに起因する処理速度の低下を抑制することができる。
【００２８】
また、乗算時のキャリの発生回数を抑制することにより、乗算器内部から発生するシリコン基板ノイズを減らすという効果も得ることができる。
【００２９】
本願発明者は、さらに、ブースアルゴリズを用いた乗算器の場合、数値Ａと数値Ｂのうちの、ブースエンコーダによる演算結果が小さいほうが、該数値を乗数とした場合にキャリの発生回数が少ない傾向を知見した。例えば、図１に示すように、−２００に対するブースエンコーダの演算結果が０１００１０（＝１８）であり、１０００に対するブースエンコーダの演算結果が０００１１０（＝６）である。この結果に対応して、１０００を乗数とした場合は、−２００を乗数とした場合より乗算時にキャリの発生回数が少ない。すなわち、乗算される２つの数値のそれぞれに対するブースエンコーダの演算結果を、該２つの数値のいずれを乗数としたほうがブース乗算器による乗算にキャリの発生回数が少ないかの判定をするための指標値として用いることができる。
【００３０】
この知見に基づく、ブース乗算器に対して、図４に示す制御回路３０を用いることができる。
図４に示す制御回路３０は、数値Ａと数値Ｂに対してそれぞれブースアルゴリズムでエンコードして演算結果ＳＡとＳＢを得るブースエンコーダ３２と、ＡとＢのうちの、ＳＡとＳＢのうちの小さいほうに対応する片方を第１の端子２２に出力し、他方を第２の端子２４に出力する。
【００３１】
さらに、被乗数のビット列に「１」が少ないほど、ブース乗算器に含まれたブースエンコーダにより得られた演算結果の各ビットと、被乗数とを乗算する際に、キャリの発生回数が少なくなることも考えられる。そのため、図５に示す制御回路３０の構成により、数値Ａと数値Ｂのいずれを乗数とした場合にキャリの発生回数が少ないかを判定する精度を高めることができる。
【００３２】
図５に示す制御回路３０は、ブースエンコーダ３２と、カウント乗算回路３６と、入力切替回路３８を備える。ブースエンコーダ３２は、数値Ａと数値Ｂに対してそれぞれブースアルゴリズを適用して演算結果ＳＡとＳＢを得る。
【００３３】
カウント乗算回路３６は、数値Ａと数値Ｂのビット列における「１」の個数Ｎｕｍ（Ａ）とＮｕｍ（Ｂ）を夫々カウントすると共に、ブースエンコーダ３２により得られた数値Ａの演算結果ＳＡとＮｕｍ（Ｂ）の積ＰＡＢと、ブースエンコーダ３２により得られた数値Ａの演算結果ＳＢとＮｕｍ（Ａ）の積ＰＢＡとを算出して入力切替回路３８に出力する。
【００３４】
入力切替回路３８は、ＰＡＢとＰＢＡを比較し、ＰＡＢのほうが小さい場合には、数値Ａを乗算器２０の第１の端子２２に出力し、数値Ｂを乗算器２０の第２の端子２４に出力する。一方、ＰＢＡのほうが小さい場合には、数値Ｂを乗算器２０の第１の端子２２に出力し、数値Ａを乗算器２０の第２の端子２４に出力する。
【００３５】
以上に述べた本発明の技術の原理を踏まえて、本発明の実施の形態を説明する。
＜第１の実施の形態＞
【００３６】
図６は、本発明の第１の実施の形態にかかる積和演算回路１００を示す。この積和演算回路１００は、画像処理装置や音声処理装置に用いられるフィルタ回路であり、下記の式（１）が示す処理を行うものである。
Filter(E0,E1,E2,E3,E4)=Lim(C0*e0+C1*e1+C2*e2+ C3*e3+ C4*e4)    （１）
【００３７】
式（１）において、Ｃ０〜Ｃ４は係数であり、ｅ０〜ｅ４は、これらの係数と夫々乗算されるデータ（以下乗算データという）である。「Ｌｉｍ」は、Ｌｉｍｉｔ演算を意味する。
【００３８】
積和演算回路１００は、乗算データを格納するレジスタＥａおよびレジスタＥ０〜Ｅ４と、係数を格納するレジスタＨａおよびレジスタＨ０〜Ｈ４と、選択器１１０と、ブースエンコーダ１２０と、乗算器を含む５つの回路（１３０、１４０、１５０、１６０、１７０）と加算器１８０と、Ｌｉｍｉｔ演算回路１８２と、積和演算回路１００の演算結果を格納するレジスタＥｏｕｔを備える。
【００３９】
レジスタＥａは、順次入力される乗算データをレジスタＥ０と選択器１１０に出力する。レジスタＥ０〜Ｅ３は、前のレジスタからの乗算データを格納すると共に、格納していた乗算データを後のレジスタに出力する。レジスタＥ４は、レジスタＥ３からの乗算データを格納すると共に、格納していた乗算データを回路１７０に出力する。レジスタＥ０〜Ｅ３は、格納していた乗算データをさらに回路１３０、回路１４０、回路１５０、回路１６０にそれぞれ出力する。
【００４０】
レジスタＨａは、順次入力される係数をレジスタＨ０とブースエンコーダ１２０に出力する。レジスタＨ０〜Ｈ３は、前のレジスタからの係数を格納すると共に、格納していた係数を後のレジスタに出力する。レジスタＨ４が、レジスタＨ３から係数Ｃ４を受け取った格納した後は、係数の入力が停止され、レジスタＨ０〜Ｈ４に係数Ｃ０〜Ｃ４が格納され状態は維持される。レジスタＨ０〜Ｈ４は、回路１３０〜回路１７０に接続しており、格納中の係数を当該回路に供することができる。
【００４１】
選択器１１０は、レジスタＥａからの乗算データとレジスタＨａからの係数を選択的にブースエンコーダ１２０に出力する。
【００４２】
ブースエンコーダ１２０は、指標値算出回路として機能し、各乗算器により乗算される乗算データと係数について、いずれを乗数としたほうが乗算にキャリの発生回数が少ないかを判定するための指標値を算出する。この指標値は、選択器１１０からの乗算データまたは係数に対してブースアルゴリズを適用してエンコードを行って得た演算結果である。ブースエンコーダ１２０は、乗算データに対して得た演算結果ｆをレジスタＦ０に出力し、係数に対して得た演算結果ｇをレジスタＧ０に出力する。
【００４３】
図７は、ブースエンコーダ１２０を示す。このブースエンコーダ１２０は、エンコード対象のデータ（ビット列）を入力するための複数のレジスタ１２１と、複数のＡＮＤゲート１２２と、複数の反転入力付きＯＲゲート１２３を備え、エンコード対象のビット列に対して、２次のブースのアルゴリズを適用する。具体的には、ビット列を最下位側から２ビットずつ区切り、区切られた２ビットとオーバラップの１ビットからなる３ビット毎にアルゴリズムを適用する。例えば、「０、−２、−１、０、１、２、−２」のビット列に対して、ブースエンコーダ１２０により「０１１０００１」の演算結果が得られる。
【００４４】
図６に戻って、積和演算回路１００の他の機能ブロックを説明する。
レジスタＦ０は、ブースエンコーダ１２０からの演算結果ｆを格納すると共に、格納していた演算結果ｆをレジスタＦ１に出力する。レジスタＦ１〜Ｆ３は、前のレジスタからの演算結果ｆを格納すると共に、格納していた演算結果ｆを後のレジスタに出力する。レジスタＦ４は、レジスタＦ３からの演算結果ｆを格納すると共に、格納していた演算結果ｆを回路１７０に出力する。レジスタＦ０〜Ｆ３は、格納していた演算結果ｆをさらに回路１３０、回路１４０、回路１５０、回路１６０にそれぞれ出力する。
【００４５】
レジスタＧ０〜Ｇ４は、格納するデータが係数の演算結果ｇである点を除いて、レジスタＦ０〜Ｆ４と同様の動作をする。
【００４６】
回路１３０〜回路１７０が同じ構成を有するため、回路１３０についてのみ詳細に説明および図示をする。
図６に示すように、回路１３０は、入力切替回路１３２とブース乗算器１３６を有する。ブース乗算器１３６は、ブースアルゴリズを用いて、係数Ｃ０と乗算データを乗算するものである。なお、ブース乗算器１３６にはブースエンコーダが備えられており、乗数がブースエンコーダに入力されるようになっている。
【００４７】
入力切替回路１３２は、レジスタＨ０に格納された係数Ｃ０と、レジスタＥ０に格納された乗算データｅと、レジスタＦ０に格納された演算結果ｆと、レジスタＧ０に格納された演算結果ｇとが入力される。入力切替回路１３２は、演算結果ｆと演算結果ｇを比較し、比較の結果に応じて、乗算データと係数のいずれを乗数とするかを決定し、乗数に決定された側をブース乗算器１３６のブースエンコーダに入力する。
【００４８】
すなわち、本実施の形態において、ブースエンコーダ１２０と、ブース乗算器１３６は、制御回路を構成する。
図８は、入力切替回路１３２の具体的な構成を示す。入力切替回路１３２は、セレクタ１３３と、比較器１３４と、セレクタ１３５を有する。セレクタ１３３は、乗算データｅと係数Ｃが入力され、比較器１３４からの制御信号Ｃｔｒに従って、乗算データｅと係数Ｃの片方をブース乗算器１３６の乗数入力端子１３７に入力する。セレクタ１３５は、乗算データｅと係数Ｃが入力され、比較器１３４からの制御信号Ｃｔｒに従って、乗算データｅと係数Ｃのうちの、セレクタ１３３が選択した片方とは別の一方をブース乗算器１３６の被乗数入力端子１３８に入力する。乗数入力端子１３７は、ブース乗算器１３６に備えられたブースエンコーダと接続しており、該端子から入力されたデータは、ブースエンコーダに入力される。
【００４９】
比較器１３４は、乗算データｅの演算結果ｆと、係数Ｃの演算結果ｇが入力され、これらの大小関係を比較する。比較器１３４は、演算結果ｆが小さいほうである場合には、乗算データｅが乗数入力端子１３７に入力され、係数Ｃが被乗数入力端子１３８に入力されるように制御信号Ｃｔｒを出力する。一方、演算結果ｇが小さいほうである場合には、係数Ｃが乗数入力端子１３７に入力され、乗算データｅが被乗数入力端子１３８に入力されるように制御信号Ｃｔｒを出力する。
【００５０】
図９は、図６に示す積和演算回路１００による演算に伴って、各レジスタに格納されるデータの遷移を示すタイミングチャートである。時間順に説明する。
＜タイミングｔ１＞
【００５１】
タイミングｔ１において、積和演算回路１００の動作開始により、回路１７０に含まれる乗算器が乗算する係数Ｃ４は、レジスタＨａに格納される。
＜タイミングｔ２＞
【００５２】
レジスタＨａは係数Ｃ４をレジスタＨ０と選択器１１０に出力し、係数Ｃ３を格納する。
レジスタＨ０は乗算係数Ｃ４を格納する。
【００５３】
選択器１１０は、係数Ｃ４をブースエンコーダ１２０に出力し、ブースエンコーダ１２０は、係数Ｃ４に対してブースアルゴリズムを適用して演算結果ｇ０４を得る。この演算結果ｇ０４は、レジスタＧ０に格納される。
＜タイミングｔ３＞
【００５４】
レジスタＨａは、係数Ｃ３をレジスタＨ０と選択器１１０に出力し、係数Ｃ２を格納する。
レジスタＨ０は、係数Ｃ４をレジスタＨ１に出力し、係数Ｃ３を格納する。
レジスタＨ１は、係数Ｃ４を格納する。
【００５５】
ブースエンコーダ１２０は、係数Ｃ３に対してブースアルゴリズムを適用して演算結果ｇ０３を得る。この演算結果ｇ０３は、レジスタＧ０に格納される。
なお、レジスタＧ０に格納されていた演算結果ｇ０４は、レジスタＧ０からレジスタＧ１に出力され、レジスタＧ１により格納される。
＜タイミングｔ４＞
【００５６】
レジスタＨａは、係数Ｃ２をレジスタＨ０と選択器１１０に出力し、係数Ｃ１を格納する。
レジスタＨ０は、係数Ｃ３をレジスタＨ１に出力し、係数Ｃ２を格納する。
レジスタＨ１は、係数Ｃ４をレジスタＨ２に出力し、係数Ｃ３を格納する。
レジスタＨ２は、係数Ｃ４を格納する。
【００５７】
レジスタＧ０は、係数Ｃ３の演算結果ｇ０３をレジスタＧ１に出力し、ブースエンコーダ１２０により得られた係数Ｃ２の演算結果ｇ０２を格納する。
レジスタＧ１は、係数Ｃ４の演算結果ｇ０４をレジスタＧ２に出力し、係数Ｃ３の演算結果ｇ０３を格納する。
レジスタＧ２は、係数Ｃ４の演算結果ｇ０４を格納する。
なお、タイミングｔ４まで、係数と乗算されるデータ（以下乗算データという）の入力がなされない。
＜タイミングｔ５＞
【００５８】
レジスタＨａは、係数Ｃ１をレジスタＨ０と選択器１１０に出力し、係数Ｃ０を格納する。
レジスタＨ０は、係数Ｃ２をレジスタＨ１に出力し、係数Ｃ１を格納する。
レジスタＨ１は、係数Ｃ３をレジスタＨ２に出力し、係数Ｃ２を格納する。
レジスタＨ２は、係数Ｃ４をレジスタＨ３に出力し、係数Ｃ３を格納する。
レジスタＨ３は、係数Ｃ４を格納する。
【００５９】
レジスタＧ０は、係数Ｃ２の演算結果ｇ０２をレジスタＧ１に出力し、ブースエンコーダ１２０により得られた係数Ｃ１の演算結果ｇ０１を格納する。
レジスタＧ１は、係数Ｃ３の演算結果ｇ０３をレジスタＧ２に出力し、係数Ｃ２の演算結果ｇ０２を格納する。
レジスタＧ２は、係数Ｃ４の演算結果ｇ０４をレジスタＧ３に出力し、係数Ｃ３の演算結果ｇ０３を格納する。
レジスタＧ３は、係数Ｃ４の演算結果ｇ０４を格納する。
【００６０】
また、このタイミングにおいて、乗算データの入力が開始される。それにより、レジスタＥａに乗算データｅ０４が格納される。
＜タイミングｔ６＞
【００６１】
レジスタＨａは、係数Ｃ０をレジスタＨ０と選択器１１０に出力する。
レジスタＨ０は、係数Ｃ１をレジスタＨ１に出力し、係数Ｃ０を格納する。
レジスタＨ１は、係数Ｃ２をレジスタＨ２に出力し、係数Ｃ１を格納する。
レジスタＨ２は、係数Ｃ３をレジスタＨ３に出力し、係数Ｃ２を格納する。
レジスタＨ３は、係数Ｃ４をレジスタＨ４に出力し、係数Ｃ３を格納する。
【００６２】
レジスタＧ４は、係数Ｃ４を格納する。
レジスタＧ０は、係数Ｃ１の演算結果ｇ０１をレジスタＧ１に出力し、ブースエンコーダ１２０により得られた係数Ｃ０の演算結果ｇ００を格納する。
レジスタＧ１は、係数Ｃ２の演算結果ｇ０２をレジスタＧ２に出力し、係数Ｃ１の演算結果ｇ０１を格納する。
レジスタＧ２は、係数Ｃ３の演算結果ｇ０３をレジスタＧ３に出力し、係数Ｃ２の演算結果ｇ０２を格納する。
レジスタＧ３は、係数Ｃ４の演算結果ｇ０４をレジスタＧ４に出力し、係数Ｃ３の演算結果ｇ０３を格納する。
レジスタＧ４は、係数Ｃ４の演算結果ｇ０４を格納する。
【００６３】
レジスタＥａは、乗算データｅ０４をレジスタＥ０と選択器１１０に出力し、乗算データｅ０３を格納する。
レジスタＥ０は、乗算データｅ０４を格納する。
【００６４】
選択器１１０は、乗算データｅ０４をブースエンコーダ１２０に出力し、ブースエンコーダ１２０は、乗算データｅ０４に対してブースアルゴリズムを適用して演算結果ｆ０４を得る。この演算結果ｆ０４は、レジスタＦ０に格納される。
【００６５】
なお、タイミングｔ６以降、レジスタＨ０〜Ｈ４が係数Ｃ０〜Ｃ４を夫々格納した状態は、維持される。また、レジスタＧ０〜Ｇ４が係数Ｃ０〜Ｃ４の演算結果ｇ００〜Ｇ０４を夫々格納した状態も維持される。
【００６６】
タイミングｔ６以降にも、レジスタＥａに乗算データが順次入力される。その結果、タイミングｔ１０において、レジスタＥ０、レジスタＥ１、レジスタＥ２、レジスタＥ３、レジスタＥ４に、乗算データｅ００、乗算データｅ０１、乗算データｅ０２、乗算データｅ０３、乗算データｅ０４がそれぞれ格納される。また、レジスタＦ０、レジスタＦ１、レジスタＦ２、レジスタＦ３、レジスタＦ４には、ブースエンコーダ１２０による乗算データｅ００の演算結果ｆ００、乗算データｅ０１の演算結果ｆ０１、乗算データｅ０２の演算結果ｆ０２、乗算データｅ０３の演算結果ｆ０３、乗算データｅ０４がそれぞれ格納される。
＜タイミングｔ１１＞
【００６７】
回路１３０の入力切替回路１３２は、レジスタＦ０とレジスタＧ０から演算結果ｆ００と演算結果ｇ００を読み出し、それらの大小を比較する。
【００６８】
演算結果ｆ００のほうが小さいときには、入力切替回路１３２は、乗算データｅ００を乗数とすべく、レジスタＥ０に格納された乗算データｅ００をブース乗算器１３６の乗数入力端子１３７に入力し、レジスタＨ０に格納された係数Ｃ０をブース乗算器１３６の被乗数入力端子１３８に入力する。
【００６９】
一方、演算結果ｇ００のほうが小さいときには、入力切替回路１３２は、係数Ｃ０を乗数とすべく、係数Ｃ０を乗数入力端子１３７に入力し、乗算データｅ００を被乗数入力端子１３８に入力する。
【００７０】
ブース乗算器１３６は、乗数入力端子１３７と被乗数入力端子１３８に入力された２つのデータを乗算して、乗算結果「乗算データｅ００＊係数Ｃ０」を加算器１８０に出力する。
【００７１】
同曜日、回路１４０〜回路１７０からも、「乗算データｅ０１＊係数Ｃ１」、「乗算データｅ０２＊係数Ｃ２」、「乗算データｅ０３＊係数Ｃ３」、「乗算データｅ０４＊係数Ｃ４」が加算器１８０に夫々出力される。
【００７２】
加算器１８０は、回路１３０〜回路１７０の５つの回路の出力を加算して加算結果をＬｉｍｉｔ演算回路１８２に出力する。
【００７３】
Ｌｉｍｉｔ演算回路１８２は、加算器１８０の加算結果に対してＬｉｍｉｔ演算を行い、演算結果Ｒ００を得てレジスタＥｏｕｔに出力する。
レジスタＥｏｕｔは、演算結果Ｒ００を格納して、後段の処理に供する。
【００７４】
このように、レジスタＥａへの乗算データの入力、ブースエンコーダ１２０により、該乗算データを乗数とした場合の演算結果ｆの算出、レジスタＥ０〜レジスタＥ４に格納される乗算データの更新、レジスタＦ０に格納される演算結果ｆの更新に伴って、タイミングｔ１１の処理が繰り返される。
【００７５】
本実施の形態の積和演算回路１００は、図３及び図４に示す模式を具現化したものであり、これらの模式の説明時に述べた効果を得ることができる。
【００７６】
さらに、積和演算回路１００は、１つのブースエンコーダ１２０により、複数の乗算器に対して、係数と乗算データのいずれを当該乗算器の乗数入力端子に入力するかを判断するための演算結果ｅを得ているので、回路規模を抑制すると共に、電力消費をより削減することができる。
＜第２の実施の形態＞
【００７７】
本発明の第２の実施の形態も積和演算回路である。この積和演算回路は、図６に示す積和演算回路１００において、ブースエンコーダ１２０の代わりに、ブースエンコーダ１２０が含まれた回路２２０を設けてなるものである。ここでは、第２の実施の形態の積和演算回路における回路２２０についてのみ詳細に説明する。
【００７８】
図１０は、回路２２０を示す。この回路２２０は、ブースエンコーダ１２０と、カウント回路２２１と、乗算器２２２を備える。
【００７９】
ブースエンコーダ１２０は、乗算データまたは係数に対してブースアルゴリズムを適用して演算結果を得て乗算器２２２に出力する。
【００８０】
カウント回路２２１は、ブースエンコーダ１２０が乗算データまたは係数に対して演算を行っているときに、該乗算データまたは係数のビット列における「１」の数Ｎｕｍをカウントして乗算器２２２に供する。
【００８１】
乗算器２２２は、ブースエンコーダ１２０により得られた乗算データの演算結果ｆと、カウント回路２２１により得られた、該乗算データと乗算される係数のＮｕｍ（Ｃ）とを乗算する。また、ブースエンコーダ１２０により得られた係数の演算結果ｇと、カウント回路２２１により得られた、該係数と乗算される乗算データのＮｕｍ（ｅ）を乗算する。
【００８２】
回路１３０〜１７０に含まれる入力切替回路は、このようにして得た「ｆ＊Ｎｕｍ（Ｃ）」と「ｇ＊Ｎｕｍ（ｅ）」を比較し、「ｆ＊Ｎｕｍ（Ｃ）」のほうが小さいときには、乗算データが乗数になり、「ｇ＊Ｎｕｍ（ｅ）」のほうが小さいときには、係数が乗数になるように乗算データと係数を当該乗算器に入力する。
【００８３】
この第２の実施の形態の積和演算回路は、図５に示す模式を具現化したものであり、第１の実施の形態の効果を得ることができると共に、乗算データと係数のいずれを乗数とした場合にキャリの発生回数が少ないかを判定する精度を高めることができる。
【００８４】
上記第１の実施の形態と第２の実施の形態の積和演算回路を用いて、ランダムに選ばれたサンプルデータに対して処理を行った。その結果、従来の積和演算回路と比べ、第１の実施の形態の積和演算回路は、消費電力を１５％程度削減できており、第２の実施の形態の積和演算回路は、消費電力を３７％程度削減できている。
【００８５】
以上、実施の形態をもとに本発明を説明した。実施の形態は例示であり、本発明の主旨から逸脱しない限り、さまざまな変更、増減を加えてもよい。これらの変更、増減が加えられた変形例も本発明の範囲にあることは当業者に理解されるところである。
【図面の簡単な説明】
【００８６】
【図１】ブースアルゴリズを用いた乗算器のキャリ発生回数を説明するための図である（その１）。
【図２】ブースアルゴリズを用いた乗算器のキャリ発生回数を説明するための図である（その２）。
【図３】本発明の原理を適用した演算回路の模式図である。
【図４】ブースアルゴリズを用いた乗算器に本発明の原理を適用した演算回路の模式図である。
【図５】ブースアルゴリズを用いた乗算器に本発明の原理を適用した別の演算回路の模式図である。
【図６】本発明の第１の実施の形態にかかる積和演算回路を示す図である。
【図７】図６に示す積和演算回路におけるブースエンコーダを示す図である。
【図８】図６に示す積和演算回路における入力切替回路の詳細を示す図である。
【図９】図６に示す積和演算回路における処理の流れを示すタイミングチャートである。
【図１０】本発明の第２の実施の形態と第１の実施の形態の積和演算回路の異なる部分を示す図である。
【図１１】特許文献１の手法を説明するための図である。
【符号の説明】
【００８７】
１０  演算回路  ２０  乗算器
２２  第１の端子  ２４  第２の端子
３０  制御回路  ３２  ブースエンコーダ
３４  入力切替回路  ３６  カウント乗算回路
３８  入力切替回路  １００  積和演算回路
１１０  選択器  １２０  ブースエンコーダ
１２１  レジスタ  １２２  ＡＮＤゲート
１２３  反転入力付きＯＲゲート  １３０  回路
１３２  入力切替回路  １３３  セレクタ
１３４  比較器  １３５  セレクタ
１３６  ブース乗算器  １３７  乗数入力端子
１３８  被乗数入力端子  １４０〜１７０  回路
１８０  加算器  １８２  Ｌｉｍｉｔ演算回路
２２０  回路  ２２１  カウント回路
２２２  乗算器  Ｃ  係数
ｅ  乗算データ  ｆ  乗算データに対するブースエンコーダの演算結果
ｇ  係数に対するブースエンコーダの演算結果
【図１】
2010079840.tif 000003
【図２】
2010079840.tif 000004
【図３】
2010079840.tif 000005
【図４】
2010079840.tif 000006
【図５】
2010079840.tif 000007
【図６】
2010079840.tif 000008
【図７】
2010079840.tif 000009
【図８】
2010079840.tif 000010
【図９】
2010079840.tif 000011
【図１０】
2010079840.tif 000012
【図１１】
2010079840.tif 000013