JP6350111B2 - 乗算回路及びその乗算方法 - Google Patents
乗算回路及びその乗算方法 Download PDFInfo
- Publication number
- JP6350111B2 JP6350111B2 JP2014169142A JP2014169142A JP6350111B2 JP 6350111 B2 JP6350111 B2 JP 6350111B2 JP 2014169142 A JP2014169142 A JP 2014169142A JP 2014169142 A JP2014169142 A JP 2014169142A JP 6350111 B2 JP6350111 B2 JP 6350111B2
- Authority
- JP
- Japan
- Prior art keywords
- data
- carry
- circuit
- adder
- bit
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Landscapes
- Compression Or Coding Systems Of Tv Signals (AREA)
Description
本発明は,乗算回路及びその乗算方法に関する。
乗算器は,一般的には,被乗数を乗数の各桁と乗算して複数の部分積を生成し,複数の部分積を加算して乗算値を出力する。部分積の数を減らす方法としてブースアルゴリズム(Booth Algorism)が知られている。ブースアルゴリズムによれば,例えば2次のブースアルゴリズムであれば,被乗数を複数桁の乗数に応じて1倍の正数もしくは負数,または2倍の正数もしくは負数を部分積として生成する。そして,2次のブースアルゴリズムでは乗数を2ビット単位で処理するので,部分積の数を1/2にすることができる。
また,複数の部分積を短時間で加算する方法として,ワレスツリー(Wallace tree)が知られている。ワレスツリーは,桁上げ保存加算器(Carry Saved Adder: CSA)をツリー状に配置した構成を有し,ツリーの各段では複数のCSAを並列に配置して並列に演算する。CSAはキャリーデータである桁上げビットを下位桁から上位桁に伝搬させることなく保持するので,演算結果が出力されるまでの論理段数を短くできる。
上記のように,ブースアルゴリズムによる部分積生成回路と,ワレスツリーによる部分積加算回路とを組み合わせることで,乗算結果が出力されるまでの時間を短くする。
このようなブースアルゴリズムとワレスツリーを組み合わせた乗算器は,ビット数を増大させることでn倍精度の被乗数と乗数を乗算する。そして,n倍精度の乗算器は,n/m倍精度でm並列の被乗数と乗数を演算する並列モードで動作することが望まれる。例えば,単精度が32ビットの場合,倍精度は64ビットである。その場合,2つの32ビットデータを並列に乗算することで,乗算効率を高めることができる。
ブースアルゴリズムによる部分積生成回路は,乗数Yの複数桁の組合せをデコードするブースデコーダと,デコード結果に応じて被乗数Xの,例えば2次であれば,1倍,2倍,マイナス1倍,マイナス2倍(被乗数Xの×1,×2,−×1,−×2)のいずれかのデータを選択するブースセレクタとを有する。2倍は被乗数Xを左シフトすることで簡単に求めることができる。
しかしながら,デコード結果がマイナス1倍,マイナス2倍の場合,負数を2の補数にするために,セレクトしたデータのビット反転とその最下位桁に1を加える処理を行う必要がある。この最下位桁に加えられる1を,ホットビット(Hotbit)と称する。したがって,ブースアルゴリズムの部分積生成回路は,ブースデコード結果に応じてホットビットを加算する回路が必要になる。
このことは,単一のデータを乗算する通常モードでは,最下位ビットにだけホットビットを加算すれば良いが,複数のデータを並列に乗算する並列モードでは,複数の並列データそれぞれの最下位ビットにホットビットを加算することが必要になることを意味する。2の補数にするためのホットビットは,通常,ワレスツリーの入力段で加算される。そのため,通常モードか並列モードかによって,並列データの最下位ビットにホットビットを加算する回路を有効にするか否かを切り替える制御が必要になる。
そこで,実施の形態の第1の側面の目的は,簡単な回路で並列モードでの乗算を行うことにより,乗算回路の物理量および消費電力を削減できる乗算器及び乗算器の乗算方法を提供することにある。
本実施の形態の第1の側面は,乗数の組合せをデコードするブースデコーダと,デコード結果に応じて被乗数と前記乗数の部分積を生成するブースセレクタとを有する部分積生成回路と,
複数の前記部分積を並列に加算するキャリー保存加算器をツリー状に配置し,所定段の前記キャリー保存加算器が出力する加算データとキャリーデータを後段の前記キャリー保存加算器が加算する部分積加算回路と,
複数のデータを並列に乗算する並列モードで,上位側の並列データのデコード結果に応じて補正加算すべき補正ホットビットを生成する補正ホットビット生成部とを有し,
前記部分積加算回路は,前記並列モードで,下位側の並列データを入力し第1の加算データ及び第1のキャリーデータを生成する第1のキャリー保存加算器と,上位側の並列データを入力し第2の加算データ及び第2のキャリーデータを生成する第2のキャリー保存加算器と,前記第1の加算データ及び第1のキャリーデータと前記第2の加算データ及び第2のキャリーデータとを加算する第3のキャリー保存加算器と,前記並列モードで,前記上位側の並列データに前記補正ホットビットを加算する補正ホットビット加算回路を有する乗算回路である。
複数の前記部分積を並列に加算するキャリー保存加算器をツリー状に配置し,所定段の前記キャリー保存加算器が出力する加算データとキャリーデータを後段の前記キャリー保存加算器が加算する部分積加算回路と,
複数のデータを並列に乗算する並列モードで,上位側の並列データのデコード結果に応じて補正加算すべき補正ホットビットを生成する補正ホットビット生成部とを有し,
前記部分積加算回路は,前記並列モードで,下位側の並列データを入力し第1の加算データ及び第1のキャリーデータを生成する第1のキャリー保存加算器と,上位側の並列データを入力し第2の加算データ及び第2のキャリーデータを生成する第2のキャリー保存加算器と,前記第1の加算データ及び第1のキャリーデータと前記第2の加算データ及び第2のキャリーデータとを加算する第3のキャリー保存加算器と,前記並列モードで,前記上位側の並列データに前記補正ホットビットを加算する補正ホットビット加算回路を有する乗算回路である。
第1の側面によれば,簡単な回路構成で並列モードの乗算を行うことができ,乗算回路の物理量および消費電力を削減できる。
図1は,ブースアルゴリズムとワレスツリーを組み合わせた乗算回路の第1の例を示す図である。図1(A)には,1つの入力データに対して乗算を行う通常モードの場合の乗算回路が,図1(B)には,2つの入力データに対して乗算を行う並列モードの場合の乗算回路が示されている。
乗算回路は,入力データが単精度と倍精度(またはn倍精度)のいずれでも演算可能に構成されている。図1の例では2倍精度(n=2)の演算が可能である。さらに,乗算回路は,n倍精度のデータに代えてm個のデータを並列に演算するn/m倍精度のm並列の演算も可能である。m=2とすると,単精度(2/2=1)の2つのデータを2並列に乗算する。
図1に示された乗算回路は,乗数Yの複数ビットの組合せをデコードするブースデコーダ11と,デコード結果に応じて被乗数Xと乗数Yの部分積PMを複数生成するブースセレクタ12とを含む部分積生成回路10を有する。さらに,乗算回路は,複数の部分積PMを加算して乗算値PMを出力するワレスツリー構成の部分積加算回路20を有する。
例えば,2次のブースアルゴリズムの場合,ブースデコーダ11は乗数Yの3ビットをデコードし,ブースセレクタ12は,デコード結果に応じて0,X,2X,−2X,−X,0のいずれかを選択して部分積PMを出力する。そして,乗数Yは2ビットずつシフトしてデコードされるので,部分積PMの数は乗数Yのビット数の1/2に減らすことができる。部分積PMの上位側には符号ビットSが拡張して格納されている。
ブースセレクタ12は,デコード結果に応じて−2X,−Xを選択する場合,被乗数Xを左シフトして2Xを生成しまたは左シフトせずにXを生成し,負数を表すために2X,Xのビットを反転し,1を加算(+1)するためのホットビットを生成する。そして,生成されたホットビットはワレスツリーの部分積加算回路20に入力され加算される。図1には,このホットビットHが便宜的に部分積PMの最下位ビットに表記されている。
ワレスツリーの部分積加算回路20は,複数の部分積PMを並列に加算するキャリー保存加算器(以下CSA:carry saved adder, 図示せず)をツリー状に配置し,所定段のキャリー保存加算器が出力する加算データとキャリーデータを後段のキャリー保存加算器が加算する。4入力に対して加算データとキャリーデータの2データを出力する4to2CSAの場合は,各段のCSAを通過するたびに加算すべきデータ数が1/2に減っていく。各CSAはキャリーを伝搬することなく保存するので,各段のCSAの演算時間は短い。そして,ツリー状に配置することで,加算すべき部分積PMの入力から最終加算結果が出力されるまでの段数も少なくなり,短時間で結果を出力する。
以上の基本的な説明に基づいて,ブースアルゴリズムとワレスツリーによる乗算器の問題点について説明する。図1(A)の通常モードの場合,ワレスツリーの加算器20には単一データの部分積PMが入力されるので,ワレスツリー加算器20が出力する乗算値PMは正しい結果になる。
一方,図1(B)の並列モードの場合,2/2(=n/m)倍精度のデータを2(=m)要素並べた並列データをそのまま演算する例である。この場合,2倍精度の被乗数には上位側の要素の被乗数X_1と下位側の要素の被乗数X_0とが並んでいて,この並列データからブースセレクタ12が部分積PMを生成する。この場合,部分積PMも並列データであり,上位側の被乗数X_1の最下位ビットにもホットビットHが加算される必要がある。そして,ワレスツリー加算器20には,並列データの部分積PMが入力されると,部分積PMは上位側にビットシフトしているため,上位側と下位側の部分積PMがワレスツリー加算器20内のCSA加算器で混ざり合い,ワレスツリー加算器20が出力する乗算値PMは間違った結果になる。
図2は,ブースアルゴリズムとワレスツリーを組み合わせた乗算回路の第2の例を示す図である。この乗算回路では,ブースセレクタ12が上位側の部分積PM_1と下位側の部分積PM_0とを別々に生成し,2つのワレスツリー加算器20_1,20_2が2つの部分積PM_1,PM_0をそれぞれ加算して,それぞれの乗算値MP_1,MP_0を出力する。最後に,2つの乗算値MP_1,MP_0を合成して正しい並列データの乗算値MPを得る。
図2の例は,正しい乗算値MPを得ることができるが,並列データの数(2個)に対応した数(2個)のワレスツリー加算器が必要になり,回路規模が大幅に増大する。
図3は,ブースアルゴリズムとワレスツリーを組み合わせた乗算回路の第3の例を示す図である。この乗算回路では,ブースセレクタ20が,下位側の要素の部分積PM_0の上位側を0でマスクし上位側の要素の部分積PM_1の下位側を0でマスクする0マスク機能と,上位側の要素にホットビットを加算するホットビット加算回路を有する。このような下位側の要素の部分積PM_0と上位側の要素の部分積PM_1とをワレスツリー加算器20が加算演算しても,両部分積のデータが混ざり合うことはなく,ワレスツリー加算器20が出力する乗算結果は正しい並列データの乗算結果になる。
図4は,図3の乗算回路を実現する場合の問題点を示す図である。図3で説明したホットビット加算回路は,例えば,部分積PMを入力するワレスツリー加算器20の入力段に追加される。そして,乗算回路が,単一の要素を乗算する通常モードと,複数の要素の並列データを乗算する並列モードとを切り替え制御される必要がある。
図5は,通常モードと並列モードの違いを説明する図である。図5(A)の通常モードでは,ブースセレクタ12がデコード結果に応じて単一の被乗数の0倍,正の1倍,正の2倍,負の2倍,負の1倍のいずれかを選択して部分積PMを出力する。そして,負の場合は,ビット反転した部分積PMの最下位にホットビットH(+1)を加算すればよい。
一方,図5(B)の並列モードでは,ブースセレクタ12が上位側の要素1と下位側の要素0それぞれをデコード結果に応じて上記と同様に選択する。部分積が負の場合は,各部分積の要素PM_1,PM_0の最下位ビットにホットビットH(+1)を加算する必要がある。したがって,通常モードでは上位側の要素PM_1の最下位の位置へのホットビットHの加算を行われず,並列モードではその位置へのホットビットHの加算を行う必要がある。図5(B)内に示されたホットビットHである。
図4に戻り,図5のように通常モードでは上位側の要素1にホットビットの加算は行われず,並列モードでは加算が行われるので,図中に示すとおり,ホットビットセレクト信号Selをワレスツリー20の入力段に供給して,全ての並列モードに対応するビットの位置に設けたホットビット加算回路をイネーブルまたはディセーブルにする制御が必要になる。このような回路構成では,ホットビットセレクト信号Selの伝搬が乗算器全体の動作速度を律則することになり,セレクト信号Selの伝搬路がクリティカルパスになる。また,全ての並列モードに対応するビットの位置にホットビット加算回路を設けることは,回路規模の増大になる。
[本実施の形態の乗算回路]
図6は,本実施の形態における乗算回路の概略構成図である。図6の乗算回路は,図1と同様に,乗数Yの組合せをデコードするブースデコーダ11と,デコード結果に応じて被乗数Xと乗数Yの部分積PMを生成するブースセレクタ12とを有する部分積生成回路10と,複数の部分積PMを並列に加算するキャリー保存加算器(CSA)をツリー状に配置し,所定段のキャリー保存加算器が出力する加算データとキャリーデータを後段のキャリー保存加算器が加算する部分積加算回路(ワレスツリー加算回路)20,21を有する。また,ワレスツリー加算回路の最終段のCSA21の後に,加算データSUMとキャリーデータCRYとを加算する全加算器30を有する。
図6は,本実施の形態における乗算回路の概略構成図である。図6の乗算回路は,図1と同様に,乗数Yの組合せをデコードするブースデコーダ11と,デコード結果に応じて被乗数Xと乗数Yの部分積PMを生成するブースセレクタ12とを有する部分積生成回路10と,複数の部分積PMを並列に加算するキャリー保存加算器(CSA)をツリー状に配置し,所定段のキャリー保存加算器が出力する加算データとキャリーデータを後段のキャリー保存加算器が加算する部分積加算回路(ワレスツリー加算回路)20,21を有する。また,ワレスツリー加算回路の最終段のCSA21の後に,加算データSUMとキャリーデータCRYとを加算する全加算器30を有する。
図6の乗算回路は,さらに,複数のデータを並列に乗算する並列モードで,上位側の並列データのブースデコード結果に応じて補正加算すべき補正ホットビットを生成する補正ホットビット生成部50を有する。この補正ホットビット生成部50は,ブースデコーダ11のデコード結果に応じて補正キャリーの判定を行って補正キャリー信号を出力する補正キャリー判定回路50_1と,補正キャリー信号に基づいて補正ホットビット信号を生成する補正ホットビット生成回路50_2とを有する。
この乗算回路では,第1に,入力される被乗数Xを上位側の並列データ(要素1)と下位側の並列データ(要素0)の並列データに分割し,要素1の下位側を全て0にし,要素0の上位側を全て0にする分割回路30を設け,第2に,ブースセレクタ12が生成する要素0の部分積PM_0の最下位ビットと,要素1の部分積PM_1の最下位ビットにホットビットHを加算し,第3に,ワレスツリー加算回路21に入力する上位側の要素1の下位側をゼロにマスクし,下位側の要素0の上位側をゼロにマスクするゼロマスク回路40を設けることで,ワレスツリー加算回路21での上位側と下位側の要素1,0が混ざってしまい誤った加算結果が出力されることを防止する。
このゼロマスク回路40により上位側の要素1の下位側をゼロにマスクすることで,部分積PM_1に加算したホットビットHの一部が消失してしまう。そこで,乗算回路は,この消失するホットビットHを補正するための補正ホットビットをブースデコーダ11のデコード結果に基づいて予め生成する補正ホットビット生成部50_1,50_2を有する。そして,補正ホットビットCHが上位側の要素1の最下位ビットに加算される。図6の例では,最終段の4to2CSA21と,全加算器22とで加算されている。補正ホットビットCHの加算は,ワレスツリー加算回路20で加算するようにしても良い。但し,補正ホットビットCHは,要素1の32ビットの最下位ビットに加算する必要がある。その結果,ゼロマスク回路40で要素1の下位側がゼロに変換されても加算した補正ホットビットCHが消失することはない。
図6の乗算回路について,さらに具体的に説明する。乗算回路は,単精度と倍精度のデータについて乗算することができる。そして,乗算回路は,倍精度のデータを乗算できることを利用して,1組の被乗数Xと乗数Yを乗算する通常モードと,2組の被乗数X_1,X_0と乗数Y_1,Y_0をそれぞれ乗算する並列モードとを,切替可能に構成される。これを一般化すると,乗算回路は,単精度からn倍精度のデータについて乗算することができ,n倍精度のデータを乗算できることを利用して,1組の被乗数Xと乗数Yを乗算する通常モードと,m組の被乗数X_1,X_0と乗数Y_1,Y_0をそれぞれ乗算する並列モードとを,切替可能に構成される。並列モードでのデータはn/m倍精度である。以下の実施の形態では,入力データは単精度32ビットと倍精度64ビットのいずれかであり,並列モードでは32ビットの2組の被乗数X_1,X_0とが入力される例である。
図6の乗算回路では,分割回路30が,上位側に要素1の被乗数X_1が下位側に要素0の被乗数X_0が格納された入力データを,上位側の要素1の下位側を全て0にし,下位側の要素0の上位側を全て0(または符号ビットS)にして,上位側の要素1のデータと下位側の要素0のデータとに分割する。そして,要素0のデータと要素1のデータがそれぞれブースセレクタ12に入力される。
好ましくは,ブースセレクタ12は,要素0のデータを入力し要素0の部分積PM_0を生成する要素0のブースセレクタ12_0と,要素1のデータを入力し要素1の部分積PM_1を生成する要素1のブースセレクタ12_1とを有する。そして,ブースデコーダ11が,乗数Y_1,Y_0をそれぞれデコードしたデコード結果を出力し,両ブースセレクタ12_0,12_1がデコード結果に応じて要素0の部分積PM_0,要素1の部分席PM_1を同時に出力する。
図7は,ブースセレクタ12の構成を示す図である。この例は,2次のブースアルゴリズムによる構成である。また,図7には,32ビットのデータのうちkビット目のブースセレクタのみが示されている。ブースデコーダ11は,論理値表に示すように,被乗数Yの3ビットの組合せn+1,n,n−1をデコードして,乗数Xの0倍,1倍(×1),2倍(×2),負の2倍(−×2),負の1倍(−×1),0倍のいずれかをデコード結果として出力する。ブースセレクタ12は,デコード結果である1倍(×1),2倍(×2),負の2倍(−×2),負の1倍(−×1)に対応して,被乗数X[k]をビットシフトせずに出力する(×1),左シフトして出力する(×2),ビットシフトせずビット反転して出力する(−×1),左シフトしてビット反転して出力する(−×2)のいずれかを選択して,部分積PM[k]として出力するセレクタ121を有する。
ビット反転された部分積PMには,最下位ビットにホットビットHとして1が加算される。具体的には,部分積PMをワレスツリー加算器20の初段の最下位ビットのCSAに加算するホットビット加算回路が設けられる。ビット反転して+1加算することで,負の部分積が2の補数に変換される。
図6に戻り,ブースセレクタ12_0は,要素0の部分積PM_0を生成し,ブースセレクタ12_1は,要素1の部分積PM_1を生成する。乗数Y_0,Y_1がそれぞれ32ビットとすると,2次のブースアルゴリズムにより部分積の数は32/2=16個になる。ここで注意すべき点は,要素0の部分積PM_0も要素1の部分積PM_1も,最下位ビットにホットビットH(=+1)が加算されることである。特に,分割回路20が上位側の要素1の下位側を全て0にマスクしたため,ブースセレクタ12_1が負の部分積をセレクトした場合,要素1の下位側が全て1にビット反転される。その結果,要素1のデータについても64ビットの最下位ビットにホットビットを加算することで,上位側にある要素1の32ビットのデータにホットビットが伝搬する。つまり,要素0の部分積PM_0も要素1の部分積PM_1も同様に,64ビットの最下位ビットにホットビットを加算する構成をワレスツリー加算器20の入力部に設ければよく,通常モードと並列モードとで部分積PMに対するホットビットの加算回路を同じ構成にできる。
次に,乗算回路は,2組のワレスツリー加算器20_1,20_0を有する。このワレスツリー加算器20_1,20_0は,それぞれ3段の4to2CSAで構成される。したがって,上位側のワレスツリー加算器20_1は,16個の要素1の部分積PM_1を入力し2個の部分積PM3_1を出力する。下位側のワレスツリー加算器20_0も同様である。
図8は,ワレスツリー加算器20_1,20_0と,ワレスツリー加算器が内蔵する4to2CSAとの回路構成を示す図である。図8の上側に示した4to2CSAは,3つの入力ビットからキャリーアウトビットCO,キャリービットCと,加算ビットSを出力するキャリー保存加算器CSA3を2個有する。そして,一方のCSA3は入力ビットA2,A3,A4からキャリーアウトビットCOと加算ビットSを出力し,もう一方のCSA3は下位ビットからのキャリーインビットCIと入力ビットA1とCSA3からの加算ビットを入力し,下段へのキャリービットCと加算ビットSとを出力する。各キャリーアウトビットCOとキャリービットCと加算ビットSの論理式が図8に示されている。
4to2CSAは,入力データのビット数だけ横方向に配列され,下位ビットからのキャリーアウトCOが上位ビットにキャリーインCIとして入力されるが,最下位ビットからのキャリーが最上位ビットまで伝搬することはない。これがCSAの演算時間が短い理由である。
更に,図8にはワレスツリー加算器20_1,20_0の内部構成が示される。初段の4つの4to2CSAには,16個の部分積が4グループに分けて入力される。つまり,初段の4つの4to2CSAがそれぞれ4つの部分積を有するグループA,B,C,Dを入力する。更に,初段の4つの4to2CSAがそれぞれ出力する4組のキャリーデータCと加算データSとを,次段の2つの4to2CSAがそれぞれ入力し,キャリーデータCと加算データSとをそれぞれ出力する。そして,3段目の1つの4to2CSAは2組のキャリーデータCと加算データSを入力し,キャリーデータCと加算データSとを出力する。
図6に戻り,上記の通り,4to2CSAは,4入力A1−A4に対して加算データSとキャリーデータCを出力するので,1段の4to2CSAでデータの数が半減する。したがって,3段の4to2CSAによりデータ数が1/23=1/8に減ることになる。よって,ワレスツリー加算器20_1が,16個の部分積PM_1から2個の部分積PM3_1,つまり加算データSUMとキャリーデータCRYを生成する。同様に,下位側のワレスツリー加算器20_0は,16個の要素0の部分積PM_0を入力し2個の部分積PM3_0,つまり加算データSUMとキャリーデータCRYを出力する。
2組のワレスツリー加算器20_1,20_0が,上位側の要素1の16個の部分積PM_1と下位側の要素0の16個の部分積PM_0をそれぞれ加算するので,それぞれのワレスツリー加算器20_1,20_0では,要素1の部分積PM_1と要素0の部分積PM_0とが混ざり合うことはない。
さらに,キャリー保存加算器CSAは,各桁で発生したキャリーを全て伝搬せずに保存して加算データとキャリーデータを出力し,次の段のキャリー保存加算器CSAに入力する。したがって,ワレスツリー加算器20_1,20_0が出力する部分積PM3_1,PM3_0内には加算したホットビットHの伝搬によるキャリーが含まれている。
そして,2つの部分積PM3_1と2つの部分積PM3_0とを合わせて計4つのデータが,最終段の4to2CSA21に入力されると,上位側の要素1と下位側の要素0とが混じり合うことになる。そこで,乗算回路は,上位側の要素1の下位ビットを0に置きかえ,下位側の要素0の上位ビットを0に置きかえるゼロマスク回路40を有する。このゼロマスク回路によるゼロへの置きかえにより,上位側の要素1の下位ビットに含まれていたホットビットの伝搬によるキャリーが消失される。
そこで,ゼロマスク回路40により消失されたホットビットを,上位側の要素1のデータに加算する必要がある。この追加すべきホットビットを補正ホットビットと称する。図6の乗算回路は,ブースデコーダ11による上位側の要素1の乗数Y_1のデコード結果に応じて,補正すべきキャリーを判定する補正キャリー判定回路50_1と,補正キャリー信号に基づいて補正ホットビットを生成する補正ホットビット生成回路50_2とを有する。補正キャリー判定回路50_1と補正ホットビット生成回路50_2により,補正ホットビットCHを生成する補正ホットビット生成部が構成される。
上記の補正ホットビットCHを上位側の要素1の最下位ビットに加算することで,ゼロマスク回路40により消失されたホットビットを補うことができる。補正ホットビットCHを加算する回路は,図6の例では,最終段の4to2CSAの入力部または全加算器22の入力部に設けられる。後述するとおり,3段の4to2CSAの例では,補正ホットビットCHは2,1,0のいずれかである。そこで,図6の例では,補正ホットビットCHが最大値2の場合は,最終段の4to2CSAの入力部と全加算器22の入力部で+1ずつ加算され,補正ホットビットCHが1の場合は最終段の4to2CSAの入力部または全加算器22の入力部のいずれかで加算される。
図6の乗算回路は,最終段の4to2CSA21が出力する部分積PM5の加算データSUMとキャリーデータCRYを,全加算器22が加算して乗算値データMPを出力する。部分積PM5は,上位側に要素1のデータを,下位側に要素0のデータをそれぞれ有する。そして,全加算器22が,部分積PM5の加算データSUMとキャリーデータCRYとを加算して乗算値データMPを出力する。全加算器22はキャリーを全て伝搬させて入力データを加算するので,乗算値データMPにはブースセレクタ12の出力に加算したホットビットHが全て反映される。
[補正ホットビットの生成アルゴリズム]
次に,図6の乗算回路内の補正キャリー判定回路50_1と補正ホットビット生成回路50_2による補正ホットビットの生成アルゴリズムについて説明する。
次に,図6の乗算回路内の補正キャリー判定回路50_1と補正ホットビット生成回路50_2による補正ホットビットの生成アルゴリズムについて説明する。
図6の乗算回路では,分割回路30が要素1の下位側を全て0にし,要素0の上位側を全て0または符号ビットSにする。したがって,要素1の下位側を全て0にしてブースセレクタ12_1に入力した結果,ブースセレクタ12_1によりセレクトされる要素0の下位側は,正の部分積がセレクトされると全て0になり,負の部分積がセレクトされると全て1になる。この結果,ワレスツリー加算器20_1の入力と出力との間にはある規則性が生じる。
図9は,4to2CSAの4入力の全パターンに対する出力S,Cとキャリーの関係を示す図である。入力される要素1の下位側は全て0か全て1かである。したがって,4to2CSAの4入力についての組合せは16通りとなる。4to2CSAは組み合わせ回路であるので,4つの入力と2つの出力の組合せは一意に決まり,4つの入力が0000のときは出力S,Cは00,4つの入力が1111のときは出力S,Cは11,それ以外のときは出力S,Cは10または01である。
また,ワレスツリー加算器では,4to2CSAが,出力C,S以外にキャリーアウトCOを出力し上位ビットに伝搬する。要素1の下位側のビットにおけるキャリーCとキャリーアウトCOは,負の部分積の場合に加算したホットビットHの伝搬そのものである。したがって,キャリーCとキャリーアウトCOが発生した数は,ホットビットHが伝搬した数になる。以上を前提にして,4to2CSAの入力と出力の組合せ,キャリーC,COが発生した数,ホットビット伝搬のために発生すべきキャリーの数について説明する。
なお,図9では,便宜上,要素1の下位側の32ビットのうち任意の3ビットだけを示している。また,図9では,1段の4to2CSAにおいて発生したキャリーの数と発生すべきキャリーの数とそれらの差分とを示している。1段の4to2CSAの法則性が理解できれば,3段またはN段(Nは複数)の4to2CSAによるワレスツリー加算器において発生したキャリーの数と発生すべきキャリーの数とそれらの差分とを知ることができる。
(1)パターンZは,4入力A1−A4が全て0の例である。図8の論理式に示したとおり,入力A2,A3,A4からキャリーアウトCOが生成され,キャリーアウトCOは上位ビットでキャリーインCIとなる。そして,入力A2,A3,A4から生成された加算ビットと入力A1とキャリーインCI(=CO)からキャリービットCと加算ビットSとが生成される。4入力A1−A4が全て0の場合は,出力S,Cは00となる。また,生成されたキャリーCは0,キャリーアウトCOは0であるので,発生したキャリーCRYも0である。そして,発生すべきキャリーCRYの数は,入力A1−A4の1の数に等しいので,0である。つまり,入力A1−A4の下位側が全て1の場合は負の部分積が選択されてホットビットHが加算されているからである。上記から,発生すべきキャリーCRYの数から発生したキャリーCRYの数を減算した差分は,0−0=0である。つまり,入力A1−A4が全て0の場合は,ゼロマスク回路40により失われるホットビットの数は,上記の差分の0になることが理解できる。
(2)パターンX−1は,4入力A1−A4のうち1つが1で残り3つが0の例である。この場合の出力S,Cは10であり,発生したキャリーCRYの数(CO+C)は0,発生すべきキャリーCRYの数(入力の1の数)は1となる。したがって差分は1になる。4種類の入力の組合せのいずれも同じ結果になる。
(3)パターンX−2は,4入力A1−A4のうち2つが1で残り2つが0の例である。この場合の出力S,Cは10または01であり,発生したキャリーCRYの数(CO+C)は1,発生すべきキャリーCRYの数(入力の1の数)は2となる。したがって差分は1になる。
(4)パターンX−3は,4入力A1−A4のうち3つが1で残り1つが0の例である。この場合の出力S,Cは01であり,発生したキャリーCRYの数(CO+C)は2,発生すべきキャリーCRYの数(入力の1の数)は3となる。したがって差分は1になる。
(5)パターンFは,4入力A1−A4がすべて1の例である。この場合の出力S,Cは11であり,発生したキャリーCRYの数(CO+C)は2,発生すべきキャリーCRYの数(入力の1の数)は4となる。したがって差分は2になる。
上記の4入力パターンに対する出力S,Cには,加算したホットビットは反映されていない。
図10は,図9に示した5つのパターンの発生したキャリーCRY,発生すべきキャリーCRY,それらの差分をまとめた図である。図10には,図9と同じように,5つのパターンZ,X−1,X−2,X−3,Fに対する出力S,Cの組合せが示され,図10内の表には,5つのパターンに対する発生したキャリーCRY,発生すべきキャリーCRY,それらの差分が示されている。
そこで,図10にまとめた入力パターンと,出力S,Cと,発生したキャリーCRYと,発生すべきキャリーCRYと,それらの差分(消失で不足するホットビットの数)に基づいて,3段の4to2CSAのワレスツリー加算器における不足するホットビットの数について,以下で検討する。
図11は,ワレスツリー加算器により伝搬するキャリーと不足するホットビットの数の一例を示す図である。図11は,一例として,ワレスツリー加算器に入力する4組の4入力が,グループA(X−3),グループB(X−1),グループC(X−2),グループD(F)の場合において,3段の4to2CSAで伝搬するキャリーを示している。グループA−Dと図10のパターンZ,X−1,X−2,X−3,Fとの関係は,括弧内に示したとおりである。
図11において,1段目の4つの4to2CSAで発生したキャリーCRY,発生すべきキャリーCRY,それらの差分は,図示されるとおりである。したがって,1段目で発生したキャリーCRY,発生すべきキャリーCRY,差分は,4つの4to2CSAのキャリーCRY,発生すべきキャリーCRY,差分の数を合計した数になり,図示されるとおり,5,10,5である。
次に,2段目の2つの4to2CSAには,グループA,Bそれぞれの出力S,Cからなる4つのデータ(X−2)と,グループC,Dそれぞれの出力S,Cからなる4つのデータ(X−3)とが入力される。図10によれば,それぞれの4to2CSAで発生するキャリーCRYの数は1,2であるので,2段目で発生したキャリーCRYの合計は3,1段目で残っていたキャリー(差分)が5だったため,2段目での残りのキャリーCRYの数を示す差分は,5−3=2になる。
そして,3段目の1つの4to2CSAには,グループABの出力S,CとグループCDの出力S,Cからなる4つのデータ(X−2)が入力される。図10によれば,4to2CSAで発生したキャリーCRYの数は1であるので,2段目で残っているキャリー(差分)の数2から3段目で発生したキャリーCRYの数1を減じると,3段目での残りのキャリーCRYの数を示す差分は,2−1=1になる。
図11によれば,要素1の入力の組合せがパターンX−3,X−1,X−2,Fの場合は,3段のワレスツリー加算器の出力S,Cに残っているキャリーCRYの数は1になるので,補正ホットビットCHは1になる。
ワレスツリー加算器12は,4to2CSAが3段積まれていて,各グループの入力データは24=16種類あるので,図11により予測される補正ホットビットの種類の組合せは膨大な数になる。しかしながら,4to2CSAの出力が入力パターンによって一意に決まること,その出力が次段の4to2CSAの入力なる。したがって,図11に示した5つのパターンZ,X−1,X−2,X−3,Fに対する出力S,Cに基づいて,3段のワレスツリー加算器において発生する補正ホットビットの規則性は以下の通りとなる。
図12は,3段のワレスツリー加算器の各段の4to2CSAの入力パターンを示す図である。まず,4to2CSAの入出力の組合せの規則に基づいて,3段のワレスツリー加算器の各段の4to2CSAの入力パターンを検討する。
(1)CSAの入力がパターンZであれば出力SC=00であるので,4グループの入力A−Dが全てパターンZの場合は,2段目の入力パターンも全てZになり,3段目の入力パターンもZになる。つまり,入力が全てパターンZの場合は3段目の入力パターンはZになり,その出力SC=00になる。
(2)CSAの入力がパターンFであれば出力SC=11であるので,4グループの入力A−Dが全てパターンFの場合は,2段目の入力パターンも全てFになり,3段目の入力パターンもFになる。つまり,入力が全てパターンFの場合は3段目の入力パターンはFになり,その出力SC=11になる。
(3)CSAの入力がパターンXであれば出力SC=01または10であるので,ワレスツリーのどこかでパターンXの入力が発生すると,その先の入力はパターンXに収束する。そして,その場合3段目の出力SC=01または10になる。
図13,図14は,入力パターンの組合せ例に対する1段目での差分(不足数),2,3段目で発生したキャリーCRY,最終的に残った数(補正値)を示す図である。図10の表を参照して,図13,図14の5つの例について説明する。
(1)4グループの入力がパターンXのみの例である。この場合,1段目の4つのCSAでのキャリーの不足数(差分)は合計4である。2段目以降の入力はパターンXに収束し,発生するキャリー数は合計3となる。したがって,1段目のキャリーの不足数4に対して2,3段目のキャリー発生数3であるので,補正すべきキャリー数は1になる。つまり,補正ホットビットは1になる。
(2)4グループの入力にパターンZが含まれる例である。この場合,パターンZが入力の場合のキャリーの不足数(差分)は0であるので,3つのパターンXにより,1段目の4つのCSAでのキャリーの不足数(差分)は合計3である。2段目では,パターンZとXの組合せではパターンX−1となりキャリーが発生せず,パターンXとXの組合せではパターンX−2となりキャリーが1発生し,発生するキャリー数は合計1となる。さらに,3段目で発生するキャリー数は1である。したがって,1段目のキャリーの不足数3に対して2,3段目のキャリー発生数2であるので,(1)と同様に,補正すべきキャリー数は1になる。つまり,補正ホットビットは1になる。
(3)4グループの入力にパターンFが含まれる例である。この場合,パターンFが入力の場合のキャリーの不足数(差分)は2であるので,3つのパターンXによる不足分の3を加えて,1段目の4つのCSAでのキャリーの不足数(差分)は合計5である。2段目では,パターンXとFの組合せではパターンX−3となりキャリーが2発生し,パターンXとXの組合せではパターンX−2となりキャリーが1発生し,発生するキャリー数は合計3となる。さらに,3段目で発生するキャリー数は1である。したがって,1段目のキャリーの不足数5に対して2,3段目のキャリー発生数が4であるので,(1)(2)と同様に,補正すべきキャリー数は1になる。つまり,補正ホットビットは1になる。
(4)4グループの入力が全てパターンZの例である。この場合は,1段目の不足数は0,2,3段目のキャリー発生数は0,その結果補正すべきキャリー数も0になる。
(5)4グループの入力が全てパターンFの例である。この場合は,ツリーの入力は全てパターンFになる。よって,1段目で不足する数(差分)は2×4=8,2段目で発生するキャリー数は2×2=4,3段目で発生するキャリー数は2である。したがって,補正すべきキャリー数は2となる。
上記の法則は,ワレスツリー加算器が3段構成に限らず,2段または4段以上の構成であっても適用される。したがって,入力データである部分積の数にかかわらず上記の法則は適用できる。
上記の5つの例をまとめると,入力にパターンXが含まれる場合は,補正値(不足するキャリー数,差分)は1,入力が全てパターンZの場合は0,入力が全てパターンFの場合は2になる。入力のパターンX,Z,Fは1の数に基づいており,入力が1になるのはブースデコーダのデコード値が負の部分積を選択しビット反転した場合,つまりデコード値が−×1,−×2の場合である。
したがって,この法則を利用すれば,補正すべきキャリー数,つまり補正ホットビットの数は,ブースデコーダのデコード値が−×1または−×2になる数に基づいて判定することができる。すなわち,入力にパターンXが含まれるか否かは,16個のブースデコード値のうち負を示す−×1,−×2がひとつでもあるかどうかで判定する。入力が全てパターンFか否かは,16個の全てのブースデコード値が−×1,−×2のどちらかであるかどうかで判定する。入力が全てパターンZになるか否かは,16個のブースデコード値が−×1,−×2のいずれにもならないかどうかで判定する。
図15は,補正ホットビット生成部50の回路図である。補正ホットビットCH[1:0]は,以下のようにして生成される。まず,補正キャリー判定回路50_1は,32ビットの乗数Y_1の3ビットの組合せをデコードする16個のブースデコーダ11_1〜11_16それぞれのブースデコード値が−×1,−×2のいずれかであることを検出するORゲート51_1〜51_16と,これら16個のORゲート51の出力を入力して第1の補正キャリーCRY_1を出力するORゲート52と,同じ16個のORゲート51の出力を入力して第2の補正キャリーCRY_2を出力するANDゲート53とを有する。
ORゲート52が出力する第1の補正キャリーCRY_1は,入力にパターンXが一つでも含まれるか否かを示す。したがって,第1の補正キャリーCRY_1=1であれば,補正ホットビットは1になる。また,第2の補正キャリーCRY_2は,入力全てがパターンFであるか否かを示す。したがって,第2の補正キャリーCRY_2=1であれば,補正ホットビットは2になる。
補正ホットビット生成回路50_2は,インバータ54とANDゲート55とを有する。上記したとおり,2ビットの補正ホットビットCH[1:0]は,次の通りである。
CH[0]=CRY_1*(notCRY_2)
CH[1]=CRY_2
これにより,補正ホットビットCH[1:0]は,00,01,10のいずれか,つまり補正ホットビット数0,1,2いずれかになる。
CH[0]=CRY_1*(notCRY_2)
CH[1]=CRY_2
これにより,補正ホットビットCH[1:0]は,00,01,10のいずれか,つまり補正ホットビット数0,1,2いずれかになる。
図6に示したとおり,補正ホットビット生成ユニット50は,ワレスツリー加算器21の動作と並行して行うことができる。そして,補正ホットビットは,ワレスツリー加算器21以降のどこかで要素1の最下位ビットに加算するようにすればよい。この結果,補正ホットビットを加算することによる,本来のブースアルゴリズムによる部分積生成回路とワレスツリー加算器の動作に遅延の影響を与えることはない。
[乗算器の具体的構成]
図16,図17は,本実施の形態における乗算回路の具体的な構成を示す図である。図6の乗算回路の具体例である。この乗算回路は,単精度32ビットまたは倍精度64ビットの乗算を行う通常モードと,2つの32ビットの並列データを並列に乗算する並列モードとを有する。図16,17には,並列モードでの並列データが示され,図6と同様に並列データが上位側の要素1と下位側の要素0で構成される。図6と同じ構成には同じ引用番号を付与している。
図16,図17は,本実施の形態における乗算回路の具体的な構成を示す図である。図6の乗算回路の具体例である。この乗算回路は,単精度32ビットまたは倍精度64ビットの乗算を行う通常モードと,2つの32ビットの並列データを並列に乗算する並列モードとを有する。図16,17には,並列モードでの並列データが示され,図6と同様に並列データが上位側の要素1と下位側の要素0で構成される。図6と同じ構成には同じ引用番号を付与している。
図16において,被乗数として要素1の被乗数X_1と要素0の被乗数X_0とが入力される。また,乗数として要素1の乗数Y_1と要素0の乗数Y_0とが入力される。要素1,0の乗数,被乗数はいずれも32ビット構成である。
乗算回路は,要素1と要素0を分割する分割回路30を有する。分割回路30は,要素1,0の並列データを,上位側を要素1の32ビットデータに下位側を全て0にした要素1の被乗数データX_1と,上位側を全て0(または符号ビットS)に下位側を要素0の32ビットデータにした要素0の被乗数データX_0とに分割する。
図18は,分割回路の一例を示す図である。分割回路30は,並列モードで並列モード信号MODEが1に制御される場合に,入力される被乗数Xのうち要素1のデータを上位ビット[63:32]に下位ビット[31:0]を0にし,要素0のデータを下位ビット[31:0]に上位ビット[63:32]を0にして,分割後の要素1のデータX_1,要素0のデータX_0を出力する。
図16に戻り,ブースセレクタ12_1は,分割後の要素1のデータX_1を入力し,ブースデコーダ11による要素1の乗数Y_1のデコード値に応じて,部分積PM_1を出力する。同様に,ブースセレクタ12_0は,分割後の要素0のデータX_0を入力し,ブースデコーダ11による要素0の乗数Y_0のデコード値に応じて,部分積PM_0を出力する。好ましくは,ブースデコーダ11は,要素1,0の乗数Y_1,Y_0それぞれの16通りの3ビットを同時にデコードし,それぞれ16のデコード値を出力する。そして,好ましくは,ブースセレクタ12_1,12_0も,要素1,0それぞれの16のデコード値に応じて,それぞれ16個の部分積PM_1,PM_0を同時に出力する。
図19は,ブースデコーダ11とブースセレクタ12_1,12_0の構成を示す図である。図19には,ブースデコーダ11の1組のデコード値(×1,×2,−×2,−×1)に対するブースセレクタ回路が示されている。ブースセレクタ12_#は,64ビットの入力データからデコード値に基づいて選択した64ビットのデータを出力する。そして,図19内の1ビット分のブースセレクタ回路は,図7に示した回路と同じである。
前述したとおり,好ましい例では,ブースデコーダ11が要素1,0の乗数Y_1,Y_0に対してそれぞれの16個のデコード値を出力する。したがって,図16の好ましいブースデコーダ11とブースセレクタ12は,図19に示した回路を16個×2=32個有する。
ブースセレクタ12_#は,デコード値が−×1,−×2のいずれかの場合に,被乗数X_1,X_0のビットを反転して出力する。その場合は,反転されたデータにホットビットとして1を加算して2の補数を生成する必要がある。そのために,図19の回路は,ブースセレクタ12_#が出力する部分積PM_#にホットビットを加算する回路60を有する。このホットビット加算回路60は,デコード値が−×1,−×2のいずれかの場合に1を出力するOR回路である。そして,部分積PM_#とホットビット加算回路60が出力するホットビットHとが,ワレスツリー加算器20に入力され,ホットビットが加算される。つまり,ホットビット加算回路60は,ホットビットHをワレスツリー加算器に入力し加算させる。
図16に戻り,ブースセレクタ12_1,12_0が要素1,0の部分積PM_1,PM_0をそれぞれ出力する。部分積PM_1,PM_0は,それぞれ16個の部分積を有する。好ましくは,ブースセレクタ12_1,12_0が要素1,0それぞれの16個の部分積を同時に出力する。そして,要素1,0それぞれの16個の部分積PM_1,PM_0は,ワレスツリー加算器20に入力され,図示しないホットビットと共に加算される。ワレスツリー加算器20は,要素1,0それぞれの16個の部分積PM_1,PM_0を,最初に異なるワレスツリー20_1,20_0で加算してから,その加算結果を共通のワレスツリー21のCSAで加算する。図16には,ワレスツリー加算器20の最終段の全加算器22が示されている。
図17には,図16のワレスツリー加算器20の構成が示されている。ワレスツリー加算器20は,要素1の部分積PM_1を入力して加算する第1のワレスツリー加算器20_1と,要素0の部分積PM_0を入力して加算する第2のワレスツリー加算器20_0と,ゼロマスク回路40_1,40_0と,共通の第3のワレスツリー加算器21と,全加算器22_1,22_0とを有する。
第1,第2のワレスツリー加算器20_1,20_0は,それぞれ3段の4to2CSAを有し,それぞれ16個の部分積PM_1,PM_0を加算して,それぞれ加算データSとキャリーデータCを有する部分積PM3_1,PM3_0を出力する。つまり,16入力から2出力が生成される。したがって,第1,第2のワレスツリー加算器20_1,20_0では,要素1と要素0の部分積PM_1.PM_0が混ざり合うことはない。
ワレスツリー加算器では,更に,それぞれ加算データSとキャリーデータCを有する部分積PM3_1,PM3_0の4つのデータを一緒に加算する第3のワレスツリー加算器21を有する。但し,この第3のワレスツリー加算器21では,要素1,0の部分積PM3_1,PM3_0が混ざり合う。そこで,マスク回路40_1が要素1の部分積PM3_1の下位側を0に変換し,マスク回路40_0が要素0の部分積PM3_0の上位側を0に変換し,ワレスツリー加算器21がそれぞれゼロマスクされた要素1,0の部分積PM4_1,PM4_0を加算する。ワレスツリー加算器21は1段の4to2CSAを有し,要素1,0のそれぞれ加算データSとキャリーデータCとを有する部分積PM4_1,PM4_0を加算して,加算データSとキャリーデータCを有する部分積PM5を出力する。
ワレスツリー加算器21では,要素1の部分積PM4_1と要素0の部分積PM4_0が4to2SAにより加算されるが,対応するビットでは要素1または要素0のデータしかないので,両要素1,0のデータが混ざり合うことはない。
しかし,ゼロマスク回路40−1で下位側がゼロにマスクされた要素1のデータからは残っているキャリーが消失する。そこで,補正ホットビットCH[1:0]が,ワレスツリー加算器21と全加算器22_1に入力され加算される。例えば,補正ホットビットCH[1:0]=01であれば,例えばワレスツリー加算器21にのみ1が加算され,CH[1:0]=10であれば,ワレスツリー加算器21と全加算器22_1にそれぞれ1が加算される。
そして,全加算器22が出力する乗算値PMは要素1の乗算データと要素0の乗算データとを含み,要素1の乗算データはホットビットが補正されている。
図20は,ワレスツリー加算器の構成を示す図である。ワレスツリー加算器は,要素1,0のそれぞれ16個の部分積PM_1,PM_0を別々に加算する第1,第2のワレスツリー加算器20_1,20_0と,要素1,0の部分積を合わせて加算する第3のワレスツリー加算器21と,全加算器22とを有する。そして,第1,第2のワレスツリー加算器20_1,20_0と第3のワレスツリー加算器21との間に,要素1,0の下位側と上位側をそれぞれゼロマスクするゼロマスク回路40_1,40_0を有する。さらに,第3のワレスツリー加算器21の入力と,全加算器22の入力に補正ホットビットを入力する補正ホットビット加算回路62を有する。
第1のワレスツリー加算器20_1は,前述のとおり,3段の4to2CSAを有し,初段は4グループA〜Dの入力をそれぞれ加算する4組の4to2CSAを有し,2段目はグループA,Bそれぞれの加算データとキャリーデータを加算し,グループC,Dそれぞれの加算データとキャリーデータを加算する2組の4to2CSAを有し,3段目はグループABとCDそれぞれの加算データとキャリーデータを加算する1組の4to2CSAを有する。
マスク回路40_1,40_0は,並列モード信号MODE=1の場合にANDゲートにより要素1の下位側のビットを0に変換し,要素0の上位側のビットを0に変換する。
そして,第3のワレスツリー加算器21は,要素1の加算データSとキャリーデータC及び要素2の加算データSとキャリーデータCを有し,それぞれゼロマスクされた部分積PM4_1,PM4_0を加算して,加算データとキャリーデータを有する部分積PM5出力する。この部分積PM5の加算データとキャリーデータは,要素1,0のデータを上位側と下位側に有する。最後に,全加算器22が部分積PM5の加算データとキャリーデータを全加算して,乗算データMPを出力する。
補正ホットビット加算回路62は,並列モード信号MODE=1で補正ホットビットCH[1:0]を入力するマルチプレクサMUXを有する。補正ホットビット加算回路62は,CH[1:0]=01,10の場合に,ORゲートの出力「1」を第2のワレスツリー加算器21の要素1の最下位の4to2CSAに入力して+1加算し,CH[1:0]=10の場合のみ全加算器22の要素1の最下位の加算器に「1」を入力して+1加算する。したがって,補正ホットビット加算回路62は,実際には補正ホットビットを第3のワレスツリー加算器21と全加算器22の入力に供給し,加算させている。図19で説明したホットビット加算回路60が,第1のワレスツリー加算器20_0の入力にホットビットを供給しているのと同様である。
[n=4,m=2の乗算回路]
キャリー補正値である補正ホットビットの予測は,4to2CSAの入出力組合せで一意に決まるので,倍精度の数nと並列数mを変えても同様に予測することができる。したがって,本実施の形態は,たとえば,n=4,m=2とし,2次のブースアルゴリズムを利用した乗算回路に適用することができる。この場合は,データ幅は128ビット,要素の幅は64ビットになる。その結果,ブースセレクタが出力する部分積の数は,要素1,0それぞれに32個になる。したがって,第1,第2のワレスツリー加算器20_1,20_0は,それぞれ,入力数が8グループになり,4段構成になる。そして,図15の補正ホットビット生成部の補正キャリー判定回路は,32個のブースデコーダの出力を入力する構成になる。
キャリー補正値である補正ホットビットの予測は,4to2CSAの入出力組合せで一意に決まるので,倍精度の数nと並列数mを変えても同様に予測することができる。したがって,本実施の形態は,たとえば,n=4,m=2とし,2次のブースアルゴリズムを利用した乗算回路に適用することができる。この場合は,データ幅は128ビット,要素の幅は64ビットになる。その結果,ブースセレクタが出力する部分積の数は,要素1,0それぞれに32個になる。したがって,第1,第2のワレスツリー加算器20_1,20_0は,それぞれ,入力数が8グループになり,4段構成になる。そして,図15の補正ホットビット生成部の補正キャリー判定回路は,32個のブースデコーダの出力を入力する構成になる。
この場合でも,入力にパターンXが含まれる場合は補正値(差分)は1,全てパターンZの場合は補正値は0,全てパターンFの場合は補正値は2になる。
[3次のブースアルゴリズム]
3次以上のブースアルゴリズムを利用した乗算回路にも,本実施の形態を適用することができる。再び,n=2,m=2の例で説明する。
3次以上のブースアルゴリズムを利用した乗算回路にも,本実施の形態を適用することができる。再び,n=2,m=2の例で説明する。
図21は,3次のブースアルゴリズムの場合のブースデコード表である。3次のブースデコーダは,乗数の4ビットの組合せをデコードして0,×1,×2,×3,×4,−×4,−×3,−×2,−×1のいずれかをデコード値として出力する。そして,デコード値が−×4,−×3,−×2,−×1の場合は,ビット反転をしてホットビットを加算する。したがって,図7,19のブースセレクタは,デコード値が×3,×4,−×4,−×3の場合のビットシフト回路や加算回路が必要になる。
図22は,3次のブースアルゴリズムを使用した場合の補正ホットビット生成ユニットを示す図である。図示されるとおり,補正キャリー判定回路50_1のORゲート51_1〜51_16は,4つのデコード値−×4,−×3,−×2,−×1の論理和を出力する。それ以外の構成は,図15と同じである。
以上説明したとおり,本実施の形態の乗算回路によれば,ブースアルゴリズムの部分積生成回路とワレスツリー加算器に,並列モードの場合に上位側の要素1にホットビットを加算する回路を設ける必要がなく構成が簡単になる。また,ワレスツリー加算器により消失するホットビットを簡単な回路で補正することができる。よって,回路規模を大幅に増大することなく乗算回路の演算速度が向上する。
以上の実施の形態をまとめると,次の付記のとおりである。
(付記1)
乗数の組合せをデコードするブースデコーダと,デコード結果に応じて被乗数と前記乗数の部分積を生成するブースセレクタとを有する部分積生成回路と,
複数の前記部分積を並列に加算するキャリー保存加算器をツリー状に配置し,所定段の前記キャリー保存加算器が出力する加算データとキャリーデータを後段の前記キャリー保存加算器が加算する部分積加算回路と,
複数のデータを並列に乗算する並列モードで,上位側の並列データのデコード結果に応じて補正加算すべき補正ホットビットを生成する補正ホットビット生成部とを有し,
前記部分積加算回路は,前記並列モードで,下位側の並列データを入力し第1の加算データ及び第1のキャリーデータを生成する第1のキャリー保存加算器と,上位側の並列データを入力し第2の加算データ及び第2のキャリーデータを生成する第2のキャリー保存加算器と,前記第1の加算データ及び第1のキャリーデータと前記第2の加算データ及び第2のキャリーデータとを加算する第3のキャリー保存加算器と,前記並列モードで,前記上位側の並列データに前記補正ホットビットを加算する補正ホットビット加算回路を有する乗算回路。
乗数の組合せをデコードするブースデコーダと,デコード結果に応じて被乗数と前記乗数の部分積を生成するブースセレクタとを有する部分積生成回路と,
複数の前記部分積を並列に加算するキャリー保存加算器をツリー状に配置し,所定段の前記キャリー保存加算器が出力する加算データとキャリーデータを後段の前記キャリー保存加算器が加算する部分積加算回路と,
複数のデータを並列に乗算する並列モードで,上位側の並列データのデコード結果に応じて補正加算すべき補正ホットビットを生成する補正ホットビット生成部とを有し,
前記部分積加算回路は,前記並列モードで,下位側の並列データを入力し第1の加算データ及び第1のキャリーデータを生成する第1のキャリー保存加算器と,上位側の並列データを入力し第2の加算データ及び第2のキャリーデータを生成する第2のキャリー保存加算器と,前記第1の加算データ及び第1のキャリーデータと前記第2の加算データ及び第2のキャリーデータとを加算する第3のキャリー保存加算器と,前記並列モードで,前記上位側の並列データに前記補正ホットビットを加算する補正ホットビット加算回路を有する乗算回路。
(付記2)
さらに,
前記並列モードで,前記上位側の要素データの下位側の桁を0にして前記部分積生成回路に入力される被乗数の上位側の要素データを生成し,前記下位側の要素データの上位側の桁を0または符号ビットにして前記部分積生成回路に入力される被乗数の下位側の要素データを生成する分割回路を有し,
前記ブースセレクタは,前記デコード結果が負の部分積を選択する場合,セレクトされるデータをビット反転して前記負の部分積を生成し,
前記並列モード及び単一のデータを乗算する通常モードのいずれの場合も,前記負の部分積の最下位ビットにホットビットが加算される付記1に記載の乗算回路。
さらに,
前記並列モードで,前記上位側の要素データの下位側の桁を0にして前記部分積生成回路に入力される被乗数の上位側の要素データを生成し,前記下位側の要素データの上位側の桁を0または符号ビットにして前記部分積生成回路に入力される被乗数の下位側の要素データを生成する分割回路を有し,
前記ブースセレクタは,前記デコード結果が負の部分積を選択する場合,セレクトされるデータをビット反転して前記負の部分積を生成し,
前記並列モード及び単一のデータを乗算する通常モードのいずれの場合も,前記負の部分積の最下位ビットにホットビットが加算される付記1に記載の乗算回路。
(付記3)
前記部分積加算回路は,前記キャリー保存加算器に前記ホットビットを入力して加算させる付記2に記載の乗算回路。
前記部分積加算回路は,前記キャリー保存加算器に前記ホットビットを入力して加算させる付記2に記載の乗算回路。
(付記4)
さらに,
前記並列モードで,前記第3のキャリー保存加算器に入力される前記第1の加算データ及び第1のキャリーデータの上位側の桁を0に変更し,前記第2の加算データ及び第2のキャリーデータの下位側の桁を0に変更するゼロマスク回路を有する付記1または2に記載の乗算回路。
さらに,
前記並列モードで,前記第3のキャリー保存加算器に入力される前記第1の加算データ及び第1のキャリーデータの上位側の桁を0に変更し,前記第2の加算データ及び第2のキャリーデータの下位側の桁を0に変更するゼロマスク回路を有する付記1または2に記載の乗算回路。
(付記5)
前記第3のキャリー保存加算器は,第1の前記補正ホットビット加算回路を有し,
前記第1の補正ホットビット加算回路は,前記並列モードで,前記第2の加算データまたは前記第2のキャリーデータに前記補正ホットビットを加算する付記1または4に記載の乗算回路。
前記第3のキャリー保存加算器は,第1の前記補正ホットビット加算回路を有し,
前記第1の補正ホットビット加算回路は,前記並列モードで,前記第2の加算データまたは前記第2のキャリーデータに前記補正ホットビットを加算する付記1または4に記載の乗算回路。
(付記6)
前記部分積加算回路は,前記第3のキャリー保存加算器が出力する第3の加算データ及び第3のキャリーデータを加算する全加算器を有し,
前記全加算器は,第2の前記補正ホットビット加算回路を有し,
前記第2の補正ホットビット加算回路は,前記並列モードで,前記第3の加算データ及び前記第3のキャリーデータに前記補正ホットビットを加算する付記5に記載の乗算回路。
前記部分積加算回路は,前記第3のキャリー保存加算器が出力する第3の加算データ及び第3のキャリーデータを加算する全加算器を有し,
前記全加算器は,第2の前記補正ホットビット加算回路を有し,
前記第2の補正ホットビット加算回路は,前記並列モードで,前記第3の加算データ及び前記第3のキャリーデータに前記補正ホットビットを加算する付記5に記載の乗算回路。
(付記7)
前記キャリー保存加算器は,4つの入力データを演算して加算データとキャリーデータを有する2つの出力データを出力し,
前記部分積加算回路は,複数段のキャリー保存加算器を有し,
前記補正ホットビット生成部は,前記並列モードで,前記上位側の要素データについて,前記乗数の複数の組合せのデコード結果が全て正の部分積(Z)の場合は前記補正ホットビットを0に,全て負の部分積(F)の場合は前記補正ホットビットを2に,一部に負の部分積が含まれる場合は前記補正ホットビットを1にする付記1に記載の乗算回路。
前記キャリー保存加算器は,4つの入力データを演算して加算データとキャリーデータを有する2つの出力データを出力し,
前記部分積加算回路は,複数段のキャリー保存加算器を有し,
前記補正ホットビット生成部は,前記並列モードで,前記上位側の要素データについて,前記乗数の複数の組合せのデコード結果が全て正の部分積(Z)の場合は前記補正ホットビットを0に,全て負の部分積(F)の場合は前記補正ホットビットを2に,一部に負の部分積が含まれる場合は前記補正ホットビットを1にする付記1に記載の乗算回路。
(付記8)
前記補正ホットビット生成部は,前記第1,第2のキャリー保存加算器と並列に前記補正ホットビットを生成し,前記補正ホットビット加算回路に前記補正ホットビットを出力する付記1に記載の乗算回路。
前記補正ホットビット生成部は,前記第1,第2のキャリー保存加算器と並列に前記補正ホットビットを生成し,前記補正ホットビット加算回路に前記補正ホットビットを出力する付記1に記載の乗算回路。
(付記9)
乗数の組合せをデコードするブースデコーダと,デコード結果に応じて被乗数と前記乗数の部分積を生成するブースセレクタとを有する部分積生成回路と,
複数の前記部分積を並列に加算するキャリー保存加算器をツリー状に配置し,所定段の前記キャリー保存加算器が出力する加算データとキャリーデータを後段の前記キャリー保存加算器が加算する部分積加算回路とを有し,
前記部分積加算回路は,前記並列モードで,下位側の並列データを入力し第1の加算データ及び第1のキャリーデータを生成する第1のキャリー保存加算器と,上位側の並列データを入力し第2の加算データ及び第2のキャリーデータを生成する第2のキャリー保存加算器と,前記第1の加算データ及び第1のキャリーデータと前記第2の加算データ及び第2のキャリーデータとを加算する第3のキャリー保存加算器とを有する乗算回路の乗算方法において,
複数のデータを並列に乗算する並列モードで,上位側の並列データのデコード結果に応じて補正加算すべき補正ホットビットを生成し,
前記部分積加算回路は,前記並列モードで,前記上位側の並列データに前記補正ホットビットを加算する乗算方法。
乗数の組合せをデコードするブースデコーダと,デコード結果に応じて被乗数と前記乗数の部分積を生成するブースセレクタとを有する部分積生成回路と,
複数の前記部分積を並列に加算するキャリー保存加算器をツリー状に配置し,所定段の前記キャリー保存加算器が出力する加算データとキャリーデータを後段の前記キャリー保存加算器が加算する部分積加算回路とを有し,
前記部分積加算回路は,前記並列モードで,下位側の並列データを入力し第1の加算データ及び第1のキャリーデータを生成する第1のキャリー保存加算器と,上位側の並列データを入力し第2の加算データ及び第2のキャリーデータを生成する第2のキャリー保存加算器と,前記第1の加算データ及び第1のキャリーデータと前記第2の加算データ及び第2のキャリーデータとを加算する第3のキャリー保存加算器とを有する乗算回路の乗算方法において,
複数のデータを並列に乗算する並列モードで,上位側の並列データのデコード結果に応じて補正加算すべき補正ホットビットを生成し,
前記部分積加算回路は,前記並列モードで,前記上位側の並列データに前記補正ホットビットを加算する乗算方法。
11:ブースデコーダ
12:ブースセレクタ
10:部分積生成回路
20,21,22:ワレスツリー加算器,部分積加算回路
CSA:キャリー保存加算器
22:全加算器
H,HB:ホットビット,補正ホットビット
30:分割回路
40:ゼロマスク回路
60:ホットビット加算回路
62:補正ホットビット加算回路
12:ブースセレクタ
10:部分積生成回路
20,21,22:ワレスツリー加算器,部分積加算回路
CSA:キャリー保存加算器
22:全加算器
H,HB:ホットビット,補正ホットビット
30:分割回路
40:ゼロマスク回路
60:ホットビット加算回路
62:補正ホットビット加算回路
Claims (7)
- 乗数の組合せをデコードするブースデコーダと,デコード結果に応じて被乗数と前記乗数の部分積を生成するブースセレクタとを有する部分積生成回路と,
複数の前記部分積を並列に加算するキャリー保存加算器をツリー状に配置し,所定段の前記キャリー保存加算器が出力する加算データとキャリーデータを後段の前記キャリー保存加算器が加算する部分積加算回路と,
複数のデータを並列に乗算する並列モードで,上位側の並列データのデコード結果に応じて補正加算すべき補正ホットビットを生成する補正ホットビット生成部とを有し,
前記部分積加算回路は,前記並列モードで,下位側の並列データを入力し第1の加算データ及び第1のキャリーデータを生成する第1のキャリー保存加算器と,上位側の並列データを入力し第2の加算データ及び第2のキャリーデータを生成する第2のキャリー保存加算器と,前記第1の加算データ及び第1のキャリーデータと前記第2の加算データ及び第2のキャリーデータとを加算する第3のキャリー保存加算器と,前記並列モードで,前記上位側の並列データに前記補正ホットビットを加算する補正ホットビット加算回路を有する乗算回路。 - さらに,
前記並列モードで,前記上位側の要素データの下位側の桁を0にして前記部分積生成回路に入力される被乗数の上位側の要素データを生成し,前記下位側の要素データの上位側の桁を0または符号ビットにして前記部分積生成回路に入力される被乗数の下位側の要素データを生成する分割回路を有し,
前記ブースセレクタは,前記デコード結果が負の部分積を選択する場合,セレクトされるデータをビット反転して前記負の部分積を生成し,
前記並列モード及び単一のデータを乗算する通常モードのいずれの場合も,前記負の部分積の最下位ビットにホットビットが加算される請求項1に記載の乗算回路。 - さらに,
前記並列モードで,前記第3のキャリー保存加算器に入力される前記第1の加算データ及び第1のキャリーデータの上位側の桁を0に変更し,前記第2の加算データ及び第2のキャリーデータの下位側の桁を0に変更するゼロマスク回路を有する請求項1または2に記載の乗算回路。 - 前記第3のキャリー保存加算器は,第1の前記補正ホットビット加算回路を有し,
前記第1の補正ホットビット加算回路は,前記並列モードで,前記第2の加算データまたは前記第2のキャリーデータに前記補正ホットビットを加算する請求項1または3に記載の乗算回路。 - 前記部分積加算回路は,前記第3のキャリー保存加算器が出力する第3の加算データ及び第3のキャリーデータを加算する全加算器を有し,
前記全加算器は,第2の前記補正ホットビット加算回路を有し,
前記第2の補正ホットビット加算回路は,前記並列モードで,前記第3の加算データ及び前記第3のキャリーデータに前記補正ホットビットを加算する請求項4に記載の乗算回路。 - 前記キャリー保存加算器は,4つの入力データを演算して加算データとキャリーデータを有する2つの出力データを出力し,
前記部分積加算回路は,複数段のキャリー保存加算器を有し,
前記補正ホットビット生成部は,前記並列モードで,前記上位側の要素データについて,前記乗数の複数の組合せのデコード結果が全て正の部分積(Z)の場合は前記補正ホットビットを0に,全て負の部分積(F)の場合は前記補正ホットビットを2に,一部に負の部分積が含まれる場合は前記補正ホットビットを1にする請求項1に記載の乗算回路。 - 乗数の組合せをデコードするブースデコーダと,デコード結果に応じて被乗数と前記乗数の部分積を生成するブースセレクタとを有する部分積生成回路と,
複数の前記部分積を並列に加算するキャリー保存加算器をツリー状に配置し,所定段の前記キャリー保存加算器が出力する加算データとキャリーデータを後段の前記キャリー保存加算器が加算する部分積加算回路とを有し,
前記部分積加算回路は,前記並列モードで,下位側の並列データを入力し第1の加算データ及び第1のキャリーデータを生成する第1のキャリー保存加算器と,上位側の並列データを入力し第2の加算データ及び第2のキャリーデータを生成する第2のキャリー保存加算器と,前記第1の加算データ及び第1のキャリーデータと前記第2の加算データ及び第2のキャリーデータとを加算する第3のキャリー保存加算器とを有する乗算回路の乗算方法において,
複数のデータを並列に乗算する並列モードで,上位側の並列データのデコード結果に応じて補正加算すべき補正ホットビットを生成し,
前記部分積加算回路は,前記並列モードで,前記上位側の並列データに前記補正ホットビットを加算する乗算方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2014169142A JP6350111B2 (ja) | 2014-08-22 | 2014-08-22 | 乗算回路及びその乗算方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2014169142A JP6350111B2 (ja) | 2014-08-22 | 2014-08-22 | 乗算回路及びその乗算方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2016045685A JP2016045685A (ja) | 2016-04-04 |
JP6350111B2 true JP6350111B2 (ja) | 2018-07-04 |
Family
ID=55636206
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2014169142A Active JP6350111B2 (ja) | 2014-08-22 | 2014-08-22 | 乗算回路及びその乗算方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP6350111B2 (ja) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP6707752B2 (ja) * | 2017-08-22 | 2020-06-10 | 日本電信電話株式会社 | 光乗算器および光乗算方法 |
JP6886389B2 (ja) * | 2017-10-23 | 2021-06-16 | 日立Astemo株式会社 | 演算装置及び車載制御装置 |
EP3779670A4 (en) * | 2018-03-30 | 2022-01-05 | Riken | DEVICE AND SYSTEM OF ARITHMETIC OPERATIONS |
JP7230744B2 (ja) * | 2019-08-28 | 2023-03-01 | 株式会社デンソー | 畳込み演算方法及び演算処理装置 |
JP7381426B2 (ja) * | 2020-03-19 | 2023-11-15 | 株式会社東芝 | 演算回路 |
KR102696794B1 (ko) * | 2023-11-14 | 2024-08-21 | 인하대학교 산학협력단 | 고속 병렬 곱셈기 하드웨어 및 그 동작 방법 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2859779B2 (ja) * | 1992-06-17 | 1999-02-24 | 三菱電機株式会社 | 乗算器 |
FR2722590B1 (fr) * | 1994-07-15 | 1996-09-06 | Sgs Thomson Microelectronics | Circuit logique de multiplication parallele |
JP3315042B2 (ja) * | 1996-11-20 | 2002-08-19 | 株式会社リコー | 乗算装置 |
DE69832985T2 (de) * | 1998-10-06 | 2006-08-17 | Texas Instruments Inc., Dallas | Multiplizier-Akkumulatorschaltungen |
US8037119B1 (en) * | 2006-02-21 | 2011-10-11 | Nvidia Corporation | Multipurpose functional unit with single-precision and double-precision operations |
-
2014
- 2014-08-22 JP JP2014169142A patent/JP6350111B2/ja active Active
Also Published As
Publication number | Publication date |
---|---|
JP2016045685A (ja) | 2016-04-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP6350111B2 (ja) | 乗算回路及びその乗算方法 | |
Swartzlander et al. | Computer arithmetic | |
US11301213B2 (en) | Reduced latency multiplier circuitry for very large numbers | |
US9098332B1 (en) | Specialized processing block with fixed- and floating-point structures | |
US7308471B2 (en) | Method and device for performing operations involving multiplication of selectively partitioned binary inputs using booth encoding | |
Živaljević et al. | Digital filter implementation based on the RNS with diminished-1 encoded channel | |
US6704762B1 (en) | Multiplier and arithmetic unit for calculating sum of product | |
JPS60163128A (ja) | 乗算回路 | |
Gokhale et al. | Design of area and delay efficient Vedic multiplier using Carry Select Adder | |
EP0811908B1 (en) | Two's complement multiplier | |
US8316071B2 (en) | Arithmetic processing unit that performs multiply and multiply-add operations with saturation and method therefor | |
US7139787B2 (en) | Multiply execution unit for performing integer and XOR multiplication | |
Bachir et al. | Performing floating-point accumulation on a modern FPGA in single and double precision | |
Tomczak | Hierarchical residue number systems with small moduli and simple converters | |
Bruguera | Radix-64 floating-point divider | |
JP4376904B2 (ja) | 乗算装置 | |
Haritha et al. | Design of an enhanced array based approximate arithmetic computing model for multipliers and squarers | |
US9164728B1 (en) | Ternary DSP block | |
CN110506255B (zh) | 节能型可变功率加法器及其使用方法 | |
Laxman et al. | FPGA implementation of different multiplier architectures | |
Kumar et al. | Reconfigurable delay optimized carry select adder | |
US5903484A (en) | Tree circuit | |
Shukla | LFSR based versatile divider architectures for BCH and RS error correction encoders | |
US10127013B1 (en) | Specialized processing blocks with fixed-point and floating-point structures | |
US9069624B1 (en) | Systems and methods for DSP block enhancement |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20170511 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20180508 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20180521 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 6350111 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |