IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 株式会社東芝の特許一覧 ▶ 東芝デバイス&ストレージ株式会社の特許一覧

<>
  • 特許-演算回路 図1
  • 特許-演算回路 図2
  • 特許-演算回路 図3
  • 特許-演算回路 図4
  • 特許-演算回路 図5
  • 特許-演算回路 図6
  • 特許-演算回路 図7
  • 特許-演算回路 図8
  • 特許-演算回路 図9
  • 特許-演算回路 図10
  • 特許-演算回路 図11
  • 特許-演算回路 図12
  • 特許-演算回路 図13
  • 特許-演算回路 図14
  • 特許-演算回路 図15
  • 特許-演算回路 図16
  • 特許-演算回路 図17
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-11-07
(45)【発行日】2023-11-15
(54)【発明の名称】演算回路
(51)【国際特許分類】
   G06F 7/533 20060101AFI20231108BHJP
   G06F 17/10 20060101ALI20231108BHJP
   G06F 7/503 20060101ALI20231108BHJP
【FI】
G06F7/533 620
G06F17/10 S
G06F7/503
【請求項の数】 7
(21)【出願番号】P 2020154022
(22)【出願日】2020-09-14
(65)【公開番号】P2021152856
(43)【公開日】2021-09-30
【審査請求日】2022-07-01
(31)【優先権主張番号】P 2020049952
(32)【優先日】2020-03-19
(33)【優先権主張国・地域又は機関】JP
(73)【特許権者】
【識別番号】000003078
【氏名又は名称】株式会社東芝
(73)【特許権者】
【識別番号】317011920
【氏名又は名称】東芝デバイス&ストレージ株式会社
(74)【代理人】
【識別番号】100091487
【弁理士】
【氏名又は名称】中村 行孝
(74)【代理人】
【識別番号】100105153
【弁理士】
【氏名又は名称】朝倉 悟
(74)【代理人】
【識別番号】100107582
【弁理士】
【氏名又は名称】関根 毅
(74)【代理人】
【識別番号】100118843
【弁理士】
【氏名又は名称】赤岡 明
(74)【代理人】
【識別番号】100202429
【弁理士】
【氏名又は名称】石原 信人
(72)【発明者】
【氏名】生天目 辰也
【審査官】豊田 真弓
(56)【参考文献】
【文献】米国特許出願公開第2009/0013022(US,A1)
【文献】特表2008-527465(JP,A)
【文献】米国特許出願公開第2005/0080834(US,A1)
【文献】特開2016-045685(JP,A)
【文献】特開2014-209347(JP,A)
【文献】特開昭61-062937(JP,A)
【文献】特開平11-126157(JP,A)
【文献】特開2011-248904(JP,A)
【文献】特開平01-267728(JP,A)
【文献】特開2009-271598(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 7/533
G06F 17/10
G06F 7/503
(57)【特許請求の範囲】
【請求項1】
所定桁数ごとのブロックであって、それぞれの前記ブロックの最下位ビットが隣接する下位の前記ブロックの最上位ビットと重なるように一方の入力項を分割し、それぞれの前記ブロックと他方の入力項との部分積を、ブースリコーディングが±0となる場合に符号を制御するブースリコーディングに基づいて算出する、第1処理回路と、
前記部分積を簡約化する、第2処理回路と、
前記簡約化された結果と、加算項との和を出力する、加算回路と、
前記第2処理回路が出力した結果と、前記加算回路が出力した結果に基づいて、飽和処理を実行する、飽和論理回路と、
を備え
前記飽和論理回路は、前記第2処理回路の出力する和のビット集合から符号を抽出する、
演算回路。
【請求項2】
前記第2処理回路は、前記一方の入力項の最上位ビットを含む前記ブロックと、前記一方の入力項の最上位ビットを含まない前記ブロックと、を簡約化する回路を異なる構成とする、
請求項1に記載の演算回路。
【請求項3】
所定桁数ごとのブロックであって、それぞれの前記ブロックの最下位ビットが隣接する下位の前記ブロックの最上位ビットと重なるように一方の入力項を分割し、それぞれの前記ブロックと他方の入力項との部分積を、ブースリコーディングが±0となる場合に符号を制御するブースリコーディングに基づいて算出する、第1処理回路と、
前記部分積を簡約化する、第2処理回路と、
前記簡約化された結果と、加算項との和を出力する、加算回路と、
前記第2処理回路が出力した結果と、前記加算回路が出力した結果に基づいて、飽和処理を実行する、飽和論理回路と、
を備え
前記第2処理回路は、前記一方の入力項の最上位ビットを含む前記ブロックと、前記一方の入力項の最上位ビットを含まない前記ブロックと、を簡約化する回路を異なる構成とする、
演算回路。
【請求項4】
前記第2処理回路は、前記一方の入力項の最上位ビットを含む前記ブロックを処理する回路において、ブースリコーディングが±0となる場合に、符号を逆転させる回路を備える、
請求項2又は請求項3に記載の演算回路。
【請求項5】
前記第2処理回路は、前記他方の入力項の最上位ビットと、前記一方の入力項の最上位ビットを含む前記ブロックに含まれるビットと、を用いて、ブースリコーディングの結果を制御する、
請求項4に記載の演算回路。
【請求項6】
所定桁数ごとのブロックであって、それぞれの前記ブロックの最下位ビットが隣接する下位の前記ブロックの最上位ビットと重なるように一方の入力項を分割し、それぞれの前記ブロックと他方の入力項との部分積を、ブースリコーディングが±0となる場合に符号を制御するブースリコーディングに基づいて算出する、第1処理回路と、
前記第1処理回路と接続され、前記部分積を簡約化する、第2処理回路と、
前記第2処理回路と接続され、前記第2処理回路が出力する簡約化された前記一方の入力項と前記他方の入力項の積の結果を記憶する、複数のフリップフロップと、
前記フリップフロップのそれぞれと接続され、前記簡約化された結果と、加算数の和を出力する、加算回路と、
前記フリップフロップの少なくとも1つ及び前記加算回路と接続され、前記第2処理回路が出力した結果と、前記加算回路が出力した結果に基づいて、飽和演算を実行する、飽和論理回路と、
を備え
前記飽和論理回路は、前記第2処理回路の出力する和のビット集合から符号を抽出する、
演算回路。
【請求項7】
所定桁数ごとのブロックであって、それぞれの前記ブロックの最下位ビットが隣接する下位の前記ブロックの最上位ビットと重なるように一方の入力項を分割し、それぞれの前記ブロックと他方の入力項との部分積を、ブースリコーディングが±0となる場合に符号を制御するブースリコーディングに基づいて算出する、第1処理回路と、
前記第1処理回路と接続され、前記部分積を簡約化する、第2処理回路と、
前記第2処理回路と接続され、前記第2処理回路が出力する簡約化された前記一方の入力項と前記他方の入力項の積の結果を記憶する、複数のフリップフロップと、
前記フリップフロップのそれぞれと接続され、前記簡約化された結果と、加算数の和を出力する、加算回路と、
前記フリップフロップの少なくとも1つ及び前記加算回路と接続され、前記第2処理回路が出力した結果と、前記加算回路が出力した結果に基づいて、飽和演算を実行する、飽和論理回路と、
を備え
前記第2処理回路は、前記一方の入力項の最上位ビットを含む前記ブロックと、前記一方の入力項の最上位ビットを含まない前記ブロックと、を簡約化する回路を異なる構成とする、
演算回路。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、演算回路に関する。
【背景技術】
【0002】
コンピュータの発展に伴い、種々の複雑な演算を実行するための演算回路が広く用いられるようになっている。この演算回路は、多くのゲート回路を複雑に組み合わせることにより構成される。このゲート回路の組み合わせは、単純に演算を実行させるのみならず、電力消費の観点や回路形成の面積の観点等、様々な視点から最適化が施される。特に、積和演算は、その応用範囲が広いため様々な工夫がされている。これらの演算におけるゲート同士の接続には、その演算が1サイクル以内に完了しない場合に、演算途中にFF(Flip Flop:フリップフロップ)を挿入し、演算ステージを分割することがある。一般的に、FFは、電力消費が高いにも拘わらず、回路の構成上必要となることがある。例えば、このFFを削減するような最適化が望まれる。
【先行技術文献】
【特許文献】
【0003】
【文献】特表2009-527064号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
一実施形態は、積和演算における最適化を実現する演算回路を提供する。
【課題を解決するための手段】
【0005】
一実施形態によれば、演算回路は、第1処理回路と、第2処理回路と、加算回路と、飽和論理回路と、を備える。第1処理回路は、所定桁数ごとのブロックであって、それぞれのブロックの最下位ビットが隣接する下位のブロックの最上位ビットと重なるように乗算の入力項の一方を分割し、それぞれのブロックと他方の入力項との部分積を、ブースリコーディングが±0となる場合に符号を制御するブースリコーディングに基づいて算出する。第2処理回路は、部分積を簡約化する。加算回路は、簡約化された結果と、加算数の和を出力する。飽和論理回路は、第2処理回路が出力した結果と、加算回路が出力した結果に基づいて、飽和処理を実行する。
【図面の簡単な説明】
【0006】
図1】一実施形態に係る演算回路の一例を示す図。
図2】一実施形態に係る基数4のブースリコーディングによる入力項の分割例を示す図。
図3】基数を4としたブースリコーディング値を示す図。
図4】符号拡張した部分積を示す図。
図5】基数を4としたブースリコーディングで分割した最上位の部分積の符号と積の符号の関係を示す図。
図6】一実施形態に係る乗数のMSBとLSBを含まないブロックに対する部分積を算出する回路を示す図。
図7】一実施形態に係る乗数のMSBを含むブロックに対する部分積を算出する回路を示す図。
図8】一実施形態に係る乗算回路の第2処理回路を示す図。
図9】一実施形態に係る乗算回路の第2処理回路を示す図。
図10】一実施形態に係る乗算回路の第2処理回路を示す図。
図11】一実施形態に係る乗算回路の第2処理回路を示す図。
図12図10の入出力表を示す図。
図13図11の入出力表を示す図。
図14】一実施形態に係るMSBの取り得る値を示す図。
図15】一実施形態に係るMSBの取り得る値を示す図。
図16】一実施形態に係るMSBの取り得る値を示す図。
図17】一実施形態に係るMSBの取り得る値を示す図。
【発明を実施するための形態】
【0007】
以下、図面を参照して実施形態について説明する。本明細書において説明する演算回路及び演算方法は、特に、符号付き演算でオーバーフロー処理が必要となる場合に、効果的に適用することができる。また、論理演算が複数のステージで構成される場合に、FFの数を削減することにも寄与する。
【0008】
図1は、一実施形態に係る積和演算が可能な演算回路の構成の一例を示すブロック図である。演算回路1は、ブースのリコーディングアルゴリズムに基づいて構成される論理回路であり、例えば、あるビット長を持つX、Y、Zの3変数が入力されると、X × Y + Zを出力する。演算回路1は、FF 10と、乗算回路11と、FF 12と、CSA 13と、加算回路14と、飽和論理回路15と、を備える。ここで、X、Y、Zは、2の補数で表現された数であるとする。すなわち、X、Y、Zの最上位ビットは、符号を表し、0であれば正の整数又はゼロ、1であれば負の整数であることを示す。
【0009】
入力されるX、Yは、まずFF 10において、一時的に記憶される。
【0010】
乗算回路11は、FF 10に記憶されている情報に基づいて、XとYの積を算出する。この積は、sum(和)とcarry(桁上げ信号)に分離されたキャリーセーブフォーム(carry-save form)の形で表現され、FF 12に一時的に記憶される。乗算回路11は、X、Yの入力を受け付けてブースリコーディング(Booth Recoding)を適用し、部分積を算出する回路(以下、第1処理回路とする。)と、第1処理回路の出力を簡約化してキャリーセーブフォームで出力するウォレスツリー(Wallace Tree)回路(以下、第2処理回路とする。)と、を備える。
【0011】
第1処理回路は、例えば、基数4のブースリコーディングを使い、乗算入力項の一方を3桁ごとに区切ったブロックを生成し、このブロックと他方の項との部分積を算出する。そして、この部分積について符号拡張等を適切に実行し、ビット演算を最適化する。この最適化の詳細については、後述する。第1処理回路は、乗算入力項の一方を、所定桁数ごとに、各ブロックのLSB(最下位ビット:Least Significant Bit)と次のブロックのMSB(最上位ビット:Most Significant Bit)とが共有されるように分割し、ブロックの個数が最小となるように構成する。
【0012】
第2処理回路は、例えば、複数のCSA(Carry Save Adder)、すなわち、カウンタとコンプレッサを備え、第1処理回路が出力した部分積の簡約化を実行する。
【0013】
桁上保存加算器(CSA:Carry Save Adder、以下CSA 13と記載する。)は、FF 12に記憶されているsumとcarryにZを追加して3項の加算とし、これら3項を3-2カウンタにより、再度sumとcarryで構成されるキャリーセーブフォームで出力する。
【0014】
加算回路14は、CSA 13からキャリーセーブフォームで出力されたsumとcarryに対して加算を実行する。加算回路14は、例えば、桁上先見加算器(CLA:Carry Look-ahead Adder、以下CLAと記載する。)で構成される。なお、図1においては、CSA 13が加算回路14とは別の要素として示されているが、これには限られず、CSA 13は、加算回路14に含まれる構成としてもよい。この場合、加算回路14は、例えば、CSAとCLAとを備えて構成され、第2処理回路が出力した結果と、加算数とを加算して出力する回路となる。
【0015】
飽和論理回路15は、加算回路14において、乗算回路11が出力した結果と、加算項Zとの和がオーバーフローする場合に、飽和処理を実行する。オーバーフローの判定には、乗算回路11の出力から抽出した積の符号と、加算項Zの符号と、加算回路14の出力結果の符号が使用される。この順番で各符号が、0、0、1の場合には、加算回路14において演算結果が正の方向にオーバーフローしたと判定し、結果を正の最大値に置き換え、符号が、1、1、0の場合には、加算回路14において演算結果が負の方向にオーバーフローしたと判定し、結果を負の最小値に置き換える。このように、オーバーフローの判定から最終的なX × Y + Zの値を決定し、出力する。
【0016】
本実施形態に係る演算回路1は、X × YとZの和を演算するタイミングにおいて、X × Yの符号ビットを記憶するFFが存在しない。すなわち、FF 12は、X × Yのsumとcarryを記憶する一方で、符号情報については記憶する必要が無い。このため、符号ビットを記憶するためのFFを削減することが可能となる。
【0017】
このようなFFの削減をするために、乗算回路11は、出力に対して所定のエンコーディングを実行し、キャリーセーブフォームの情報から符号情報が抽出できるように構成される。そして、このキャリーセーブフォームの情報からX × Yの符号情報を抽出した上でX × YとZとの和を出力する。
【0018】
本実施形態において、乗算回路11は、基数を4としたブースリコードを使用し、入力項の一方、例えば、Xに対して、他方の入力項Yを3桁ごとに分割して部分積を求め、この結果に基づき積を算出する。
【0019】
以下、明細書中では、図面においてカギ括弧内の数字は、積のLSBを基準としたビット番号を表し、○に囲まれた数字、例えば○1は、その項又は部分積内でのビット番号を表す。その他の数字又は文字は、当該ビットに対応した位置にあるビットの値を表す。なお、後述する図面において、○に囲まれたSは、それぞれの部分積における符号ビットを示し、○に囲まれた!Sは、Sの否定であることを示す。また、○に囲まれたCは、その部分積の2の補数表現のための補正ビットを表す。
【0020】
図2は、8ビット同士の乗算におけるX、Yのビット表記と、基数4のブースリコーディングを使いYを分割する例を示す。例えば、Xは、MSBである○7からLSBである○0までの連続した並びで示される。同様に、Yは、MSBである○7からLSBである○0までの連続した並びで示され、ブースリコーディングではビット値の遷移を用いるため、YのLSBの右側に仮想的に0を付加した上でブロックに分割する。各項のMSBは、符号を示すビットとなる。
【0021】
Yの下に示される線分により、Yは、3ビットごとのブロックp0、p1、p2、p3に分割され、それぞれの分割されたブロックp0~p3から、Xとの部分積を算出する。
【0022】
図3は、基数を4とした場合のリコーディングとそのYのブロックp0~p3との関係を示す図である。
【0023】
この図3に示すように、Yのブロックが000である場合には、リコーディング値は+0となり、部分積は+0となる。ブロックが001又は010である場合には、リコーディング値は+1となり、部分積は+1 × Xとなる。ブロックが011である場合には、リコーディング値は+2となり、部分積は+2 × Xとなる。そして、Yのブロックが100である場合には、リコーディング値は-2となり、部分積は-2 × Xとなる。ブロックが101又は110である場合には、リコーディング値は-1となり、部分積は、-1 × Xとなる。ブロックが111である場合には、リコーディング値は-0となり、部分積は-0となる。このように、3ビットごとのブロックを参照することにより、部分積(符号とXの倍率)が決定される。
【0024】
この例においては、3ビットごとに分割することができたが、YのMSBを含むブロックのMSBがYのMSBではない場合には、当該YのMSBを含むブロックをYの符号で符号拡張することにより同様に処理することが可能である。
【0025】
図4は、符号拡張して桁を揃えた各部分積を示す図である。ここで、○8ビットは、各部分積のSを表すビットとなる。部分積pp0は、Yのブロックp0とXとの積を示す。同様に、部分積pp1、pp2、pp3は、Yのブロックp1、p2、p3とXとの積をそれぞれ示す。上部に記載されているカギ括弧内の数字は、積のLSBを基準としたビット番号である。これらの部分積をすべて加算することで、積が得られる。ここで、X × Yの符号は、通常図2のXのMSBとYのMSBから算出される。もし、部分積の加算パスから積の符号を取り出せるなら、乗算とは独立した、符号算出用の論理とパスを設ける必要はなくなる。XとY両方のMSBが演算に関係する部分積はpp3であり、もしpp3のビット列中にX × Yの符号を示すビットが含まれ、そのビットがそのままキャリーセーブフォームを構成するビットとして出力されれば、これをX × Yの符号判定に使用することができる。例えば、pp3の○!Sを参照することにより、X × Yの符号を取得できるようにする。
【0026】
図5は、Xの符号と、ブロックp3と、部分積pp3の!Sの否定(すなわちS)の関係を示す図である。ブロックp3のMSBは、Yの符号を示すことから、X × Yの符号は、Xの符号とp3のMSBを参照することにより取得することができる。すなわち、Xが正、p3のMSBが0であれば、X × Yは正となり、Xが正、p3のMSBが1であれば、X × Yは負となり、Xが負、p3のMSBが0であれば、X × Yは負となり、Xが負、p3のMSBが1であれば、X × Yは正となる。表中の「/」は、左側が部分積pp3のSの値、右側がX × Yの正しい符号を示す。なお、2の補数では、Xがゼロの場合のMSBは0であるため、ここではゼロも正の数として扱う。参考として、図14から図17においてMSBの取り得るパターンについて列挙する。図5は、このうち、図16図17から値を抜粋しており、図5における矢印は、図16図17の該当する演算に対応する。図15及び図17における黒地に白い文字が示されている箇所は、白地に黒い文字のビットを反転しているビットを示す。
【0027】
ここで、部分積pp3は、ブロックp3のリコーディング値を倍率としてXをスケーリングすることにより取得されるが、リコーディング値が+0、-0であれば、それぞれに対応するビット列がpp3として選択される。例えば、p3が000であり、Xが正である場合、p3のリコーディング値は、+0であるので、pp3は、”11000000000+0”となり、○8のSは0、○!Sは1となるため、Sによる符号の判定は正となる。この場合、期待されるX × Yの符号は、Xが正、Yが正であるため、正となり、Sによる符号の判定とX × Yの符号が一致する。同様に、X、Yがともに正でp3が001、010、011である場合には、p3のリコーディング値は+1、+2となり、これをXの倍率として算出したpp3は、”110xxxxxxxx+0”(xは0または1)となるので、Sは0、!Sは1となり、Sによる符号の判定と、X × Yの符号は一致する。なお、p3のリコーディングは、図3に示されている通りである。
【0028】
Xが正であり、Yが負である場合には、X × Yは、負である。XのMSBは0、p3は100、101、110、111であり、リコーディング値は-0、-1、-2となる。この場合、pp3は”101xxxxxxxx+1” (xは0または1)となるので、!Sは0となり、Sは1となる。この結果、Sによる符号の判定は負となり、X × Yの符号と一致する。
【0029】
Xが負であり、Yが正である場合には、X × Yは、負である。XのMSBは1、p3が001、010、011である場合、リコーディング値は+1、+2であるため、pp3の!Sは0、Sは1となる。この結果、Sによる符号の判定は負となり、X × Yの符号と一致する。一方で、p3が000である場合には、リコーディング値は+0であるため、pp3は”11000000000+0”となり、!Sは1、Sは0となる。この結果、Sによる符号の判定は正であるが、これは、X × Yの符号と矛盾する。
【0030】
Xが負であり、Yが負である場合には、X × Yは、正である。XのMSBは1、p3が100、101、110である場合、リコーディング値は-1、-2であるため、pp3の!Sは1、Sは0となる。この結果、Sによる符号の判定は正となり、X × Yの符号と一致する。一方で、p3が111である場合には、リコーディング値は-0であるため、pp3は”10111111111+1”となり、!Sは0、Sは1となる。この結果、Sによる符号の判定は負であるが、これは、X × Yの符号と矛盾する。
【0031】
このように、図5において矢印で示した2箇所の結果が異なる結果となる。そこで、本実施形態においては、Yをブロックに分割してブースリコーディングを実施する際、Xが負の場合には、Yの最上位ビットを含むブロックについて、000と111のリコーディングを交換する。それぞれのリコーディング値は+0、-0であり、対応するpp3はそれぞれ”11000000000+0”、 ”10111111111+1”であるので、この交換が演算結果に影響することはない。この交換により、上記の例において、pp3のSを参照することによりX × Yの符号を適切に判定することが可能となる。なお、Xが正の場合には、p3のリコーディング値が+0、-0のいずれの場合にも、結果は正しくなるため、すべての符号を適切に判定することが可能となる。
【0032】
また、入力項の組み合わせがゼロと負である場合には、符号の判定は負となる。しかし、この場合、飽和論理回路15においてオーバーフローを起こしたと判断される要因とはならないので、無視できる。
【0033】
以下、上記に示したリコーディング結果を交換し、キャリーセーブフォームから符号を正しく抽出することが可能な実装について説明する。
【0034】
図6は、乗算回路11におけるYのMSBを含むブロック以外に対する部分積を算出する回路である。以下説明においては、Xは8ビットとしているが、これに限られるものではなく、適切にビットを増減させてもよい。8ビットである場合、○7に対応するビットがMSBに対応するビットである。
【0035】
図6に示される回路図は、一般的に利用されるものであるので、詳細な説明は省略する。この図6の下部にあるpp(partial product)と示された箇所に、入力したYのブロックに対する部分積が出力される。この回路は、一例として示したものであり、その部分的には、等価な回路を用いてもよい。
【0036】
例えば、部分積のppの図6における!Sビットに対応する値は、単純にその1つ下位のビットである出力Sを否定することにより取得されてもよい。これは、次に説明する図7においても同様である。
【0037】
図7は、乗算回路11におけるYのMSBを含むブロックに対する部分積を算出する回路である。破線で囲った符号制御回路110が図6に示す回路とは異なる部分である。Yのブロックが000又は111である場合に、XのMSBにより、その符号を逆に変換する処理を実行する。この追加回路の出力は、Yのブロックの符号を示すビットである。
【0038】
符号制御回路110は、まず、破線内の一番上にあるAND回路111において、Yのブロックのすべてのビットが同じ値であれば1を出力し、1つでも異なる値であれば0を出力する。次に、このAND回路111の出力とXのMSBの論理積を求めるAND回路112が備えられる。この2番目のAND回路112が加わることにより、Xが負であり、かつ、Yのブロックがすべて同じ値のビットである場合に1、それ以外の場合に0を返す回路を形成される。そして、出力段に備えられるEXOR回路113により、2番目のAND回路112の出力とYのMSBとの排他的論理和が出力される。すなわち、Xが負であり、Yのブロックがすべて同じ値のビットである場合には、YのMSBを反転して出力し、それ以外の場合には、YのMSBを出力する回路が形成される。
【0039】
このような符号制御回路110を、YのMSBを含むブロックに対するリコーディング回路に備えることにより、乗算回路11から適切な符号ビットが出力されるように制御することができる。
【0040】
以上のように、本実施形態によれば、YのMSBを含むブロックについての部分積を求める場合に、他のブロックとは異なる符号ビットを出力する符号制御回路110を備えることにより、図1に示すように、X × Yの乗算における符号を記憶するFFを備えない構成とすることができる。この符号制御回路110は、論理ゲートのみを用いて単純な構成で形成することができるため、1ビットを記憶するFFよりも小さい消費電力とすることができる。この結果、演算回路1としての消費電力を小さくすることが可能となる。例えば、FIRフィルタといった積和演算を大量に実行するような回路である場合、この演算回路1を使用することにより、(1ビット分のFFと論理ゲート数個分の間の差分電力) × (積和演算回路の実装個数分)だけ、消費電力を下げることが可能となる。
【0041】
次に、上記の乗算回路11の部分積を演算する回路からの出力を簡約化する第2処理回路について説明する。上記の符号制御回路110により、部分積は、図4に示すように出力される。第2処理回路では、図4に示す部分積が、特にビット[16]に配置されるpp3の1、及びビット[15]に配置されるpp3の○!Sを入力しない形で、複数のCSAに入力され、sumとcarryに分割されたキャリーセーブフォームで出力される。
【0042】
図8は、乗算回路11に備えられる部分積を簡約化する第2処理回路の一例を示す図である。第2処理回路は、例えば、CSAのバリエーションである、4-2コンプレッサ、3-2カウンタ、2-2カウンタをそれぞれ複数備える。図8において、「4-2」は、4-2コンプレッサを、「3-2」は、3-2カウンタを、「2-2」は、2-2カウンタを示す。上部に示すカギ括弧内の数字は、積のLSBを基準としたビットの番号である。
【0043】
この図8は、図4に示す部分積について、ビットごとの4-2コンプレッサ、3-2カウンタ、2-2カウンタとの接続例と出力であるsumとcarryを示したものである。このため、X、Yのビット数が異なる場合には、異なる構成となるが、本実施形態に記載の開示に基づいた構成を拡張することにより実装することが可能である。
【0044】
ビット[0]では、部分積pp0の〇0と〇Cとが2-2カウンタに入力され、sumとcarryが出力される。
【0045】
ビット[1]では、部分積pp0の〇1がsumとして出力される。
【0046】
ビット[2]では、部分積pp0の〇2と、部分積pp1の〇0と〇Cとが3-2カウンタに入力され、sumとcarryが出力される。
【0047】
ビット[3]では、部分積pp0の〇3と、部分積pp1の〇1が2-2カウンタに入力され、sumが出力され、2-2カウンタから出力されるキャリーアウトは、ビット[4]の4-2コンプレッサにキャリーインとして入力される。
【0048】
ビット[4]では、ビット[3]からのキャリーアウトがキャリーインとして入力され、部分積pp0の〇4と、部分積pp1の〇2と、部分積pp2の〇0と〇Cとが4-2コンプレッサに入力されて、sumとcarryが出力される。さらに、4-2コンプレッサで生成されるもう一つのキャリーアウトがビット[5]の2-2カウンタへと入力される。
【0049】
ビット[5]以降についても同様に、2-2カウンタ、3-2カウンタ、4-2コンプレッサに図4の部分積中の各ビットが入力され、各ビットに対するsumとcarryが出力される。なお、ビット[6]におけるxには、例えば、部分積pp3の○Cが入力される。
【0050】
このように、第2処理回路は、CSAを用いて部分積を簡約化し、キャリーセーブフォームで結果を出力する。
【0051】
以上のように、乗算回路11にこのような第2処理回路を備える一方で、符号判定用のビットであるpp3のSを、この第2処理回路のCSAに入力することなく、出力のキャリーセーブフォーム中にそのまま配置させ、このビットを参照することで、独立して積の符号生成論理とパスを設けることなく、X × Yの符号を抽出することが可能となる。
【0052】
以下、第2処理回路の別の例について説明する。
【0053】
図9は、一実施形態に係る第2処理回路の図8におけるビット[14]、ビット[15]に関する回路図を示す。ビット[14]の出力には、図8に示されるように、ビット[13]における3-2カウンタからのキャリーインcinと、図4に示す部分積pp2の定数1と、部分積pp3の○8(=S)とが入力される3-2カウンタ114を備える。X × Yの符号判定用に用いるビット[15]の○!Sは、CSAに入力されることなく、そのままビット[15]のsumとされる。この3-2カウンタ114の内容は、一例として記載したものであり、本実装に限定されるものではない。
【0054】
図10は、図9に示す回路を簡略化したものである。図9において、ビット[14]において入力される値は、一方が1であるので、3-2カウンタ114の上段にあるAND回路の出力は、部分積pp3の○8となり、EXOR回路の出力は、部分積pp3の○8の否定となる。このため、本実施形態のように部分積を算出する場合、3-2カウンタ114は、図10のように簡略化した回路とすることが可能となる。
【0055】
以上のように、本実施形態によれば、第2処理回路の出力したキャリーセーブフォーム内のビットから符号を取り出すことができる。この第2処理回路も、図10に示すように、簡単な回路を用いて構成することも可能である。これは、前述のように、ブースリコーディングが±0となる場合に、これらの値を入れ替え、符号判定に使用できるビットを適切に生成させることと、その符号判定用のビットをキャリーセーブフォーム内のビットとしてそのまま出力させることにより実現することができる。
【0056】
図11は、さらに、図10を改良した回路である。図10の〇8は、cinを入力する前段階の、固定値1を加算した後のキャリーアウトを示しているが、これをビット[15]へのキャリーインとし、更にビット[15]の入力○!Sとビット[14]の入力〇8(=S) が反転の関係にあることを利用すると、ビット[15]のsumとcarryは、それぞれ1と0に固定される。その結果、図11に示すように、ビット[15]の○!Sは不要になる。最終的に、ビット[14]のsum出力は、部分積pp3の○8の否定と、ビット[13]における3-2カウンタからのキャリーインcinの排他的論理和となり、そして、ビット[14]のcarry出力は、部分積pp3の○8の否定と、ビット[13]における3-2カウンタからのキャリーインcinとの論理積として単純化される。
【0057】
S = 0の場合、図10の例では、ビット[14]のcarryは、cinが0であれば0、cinが1であれば1となるので、ビット[15]のsumとの和は、cinが0であれば1、cinが1であれば0となる。図11の例では、ビット[14]のcarryは、cinが0であれば0、cinが1であれば1となるので、ビット[15]のsum( = 1)との和は、cinが0であれば1、cinが1であれば0となる。
【0058】
同様にS = 1の場合、図10の例では、ビット[14]から出力されるcarryは、cinが0であれば1、cinが1であれば1となるので、ビット[15]のsumとの和は、cinが0であれば1、cinが1であれば1となる。図11の例では、ビット[14]のcarryは、cinが0であれば0、cinが1であれば0となるので、ビット[15]のsum( = 1)との和は、cinが0であれば1、cinが1であれば1となる。
【0059】
図12図13は、それぞれ図10図11の入力の組み合わせに関して、sumとcarry、そしてsumとcarryの加算結果をまとめたものである。ビット[14]から出力されるcarryは、ビット[15]のsumと加算するため、ビット[15]の桁に記載している。このように、図10図11は等価となる。
【0060】
さらに、ビット[14]のpp3の○8はSであることから、これを引き出すことによって、X × Yの符号判定に使用できる。この場合、引き出されたpp3の○8の値を記憶するFFが新たに必要となる一方で、ビット[15]のsumが固定値1となるため、このビットを記憶するFFが不要となる。同様に、図9図10においても、○8を符号判定用に使用することは可能であるが、負荷を抑えるために、この方法は適用していない。これら各回路は、演算回路1を使用する条件、環境等により、適切に選択できるものである。
【0061】
図10に示す回路とすることで、符号ビットの排他的論理和回路及び符号ビットのFFを削除することができる一方で、ブースリコードが000と111の場合の交換回路が必要となるが、電力消費を削減することができる。
【0062】
図11に示す回路とすることで、符号ビットの排他的論理和回路と、ビット[15]のsumのFFを削除することができる一方で、ブースリコードが000と111の場合の交換回路が必要となるが、こちらについても電力消費を削減することができる。
【0063】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれると共に、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0064】
1:演算回路、
10、12:FF、
11:乗算回路、
13:CSA、
14:加算回路、
15:飽和論理回路、
110:符号制御回路
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17