JP3516503B2 - 電子乗算および加算装置および方法 - Google Patents
電子乗算および加算装置および方法Info
- Publication number
- JP3516503B2 JP3516503B2 JP02703095A JP2703095A JP3516503B2 JP 3516503 B2 JP3516503 B2 JP 3516503B2 JP 02703095 A JP02703095 A JP 02703095A JP 2703095 A JP2703095 A JP 2703095A JP 3516503 B2 JP3516503 B2 JP 3516503B2
- Authority
- JP
- Japan
- Prior art keywords
- bit
- carry
- save
- partial
- multiplication
- 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.)
- Expired - Lifetime
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/544—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
- G06F7/5443—Sum of products
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computational Mathematics (AREA)
- Computing Systems (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Complex Calculations (AREA)
Description
ける電子乗算および加算の分野に関する。
を行うための専用のハードウェアを備えることは公知で
ある。そのような専用のハードウェアは、ある算術演算
の評価を、もしそれらの算術演算が汎用中央処理装置の
コアロジックによりソフトウェアの制御下で行われた場
合に得られるより、高速にするよう設計される。
して2Mビットの結果を生じる専用のハードウェア装置
を用いることは知られている。32ビットベースの中央
処理装置の場合においては、2つの32ビット被乗数は
64ビットの結果を生じる。実行が望まれるさらに改良
された算術演算は、2数を互いに乗算した後もう1つの
数を加算する。
ビット数を互いに乗算した後もう1つの32ビット数を加
算することは、比較的素直な方法で行われうる。しか
し、乗算の結果は64ビット数であり、この乗算演算の
64ビットの結果に対しては64ビット数を加算しうべ
きことが望ましい。これに伴って生じる問題は、32ビ
ットマシンが32ビットデータバス構造を有し、64ビ
ットの加算に対処するためにこれを64ビットの幅に拡
大することは、望ましくない複雑化を招き、大きな回路
面積が必要となる不利が生ずる。
タバス幅の不利な増大を招くことなしに、Mビット被乗
数にNビット乗数を乗算し、かつ(M+N)ビット累算
値を加算しうるようにすることである。
ると、Mビット被乗数にNビット乗数を乗算し、かつ
(M+N)ビット累算値を加算する電子乗算および加算
装置を提供し、該装置は、(i)前記Mビット被乗数
(multiplicand)と前記Nビット乗数との
乗算を表す一連の部分被加数(partial sum
mands)を発生する手段と、(ii)少なくとも1つ
の前記部分被加数を入力キャリー保存部分結果にキャリ
ー保存加算して出力キャリー保存部分結果を生じるキャ
リー保存加算手段であって、該入力キャリー保存部分結
果が、なお変化しつつあるアクティブキャリービット
と、なお変化しつつあるアクティブセーブビットとを有
し、該アクティブセーブビットの最上位ビットがビット
位置Zを有し、該アクティブセーブビットの最下位ビッ
トがビット位置Yを有する、前記キャリー保存加算手段
と、(iii )前記(M+N)ビット累算値のXビット
を、キャリー保存サイクルにおいて前記入力キャリー保
存部分結果に、ビット位置Zより高いビット位置におい
て加算する手段であって、ZおよびYが共にキャリー保
存サイクル間においてXだけ増加するようになってい
る、該加算手段と、を含む。
乗数の乗算と同時に、(M+N)ビット累算値の加算が
進行することを可能ならしめる。このようにして、全
(M+N)ビットデータバスの具備が回避されうる。ア
クティブキャリービットおよびアクティブセーブビット
は、それらが不変のまま最終加算へ進みうるのではな
く、それらのための新しい値が計算されようとしている
という意味で、なお変化しつつある。
前記加算手段は、キャリー保存サイクルにおいて前記出
力キャリー保存部分結果をビット位置Z+1およびZ+
2における拡張セーブビットおよびビット位置Z+2に
おける拡張キャリービットにより拡張する手段を含み、
前記拡張セーブビットは、前記(M+N)ビット累算値
のZ+1番目ビットと、前記アクティブキャリービット
のZ番目ビットの補数と、前記部分被加数のZ+1番目
ビットの補数と、の和によって与えられ、前記拡張キャ
リービットは前記(M+N)ビット累算値のZ+2番目
ビット補数により与えられる。
算値のZ+1番目ビットおよびZ+2番目ビットは、前
記キャリー保存のそれぞれの反復における計算内に取込
まれ、そのために前記乗算演算後の加算を行うための最
終的な(M+N)ビット幅のデータバスの必要が回避さ
れる。本発明の装置は、(M+N)ビット累算値を取扱
う余分な処理を収容するためのデータバス幅の増大を有
するが、この増大は全(M+N)ビット幅への増大と比
較すれば比較的に小さい。
は、所望される精巧さの程度に依存して多くの形式をと
りうることを認識すべきである。しかし、発生せしめら
れる部分被加数の数は、該発生手段がブース(Boot
h)エンコーダを含み、該部分被加数のシーケンスがブ
ース被加数である時減少せしめられる。
用されうるが、汎用算術演算処理装置を構成するために
は、MがNに等しかるべきことが最も通常に望まれる。
上述の関係において、M=N=32である場合には、過
剰に広いデータバスの回避は特に有利となる。M=Nの
場合には、たとえ2Mビット累算値が関係していたとし
ても、データバスはM+3のみの有利な幅を有しさえす
ればよい。
番目ビットが符号選択入力に依存して0または符号拡張
であり、前記Mビット被乗数およびNビット乗数が、該
符号選択入力に依存してそれぞれ符号なしまたは符号付
き数として取扱われる実施例において改善される。本発
明は、さまざまな応用の特殊な状況に有効に適用されう
るが、本発明は特に、ハードウェア乗算器を有する集積
回路中央処理装置内に用いるのに適している。
ビット被乗数にNビット乗数を乗算し、かつ(M+N)
ビット累算値を加算する電子乗算および加算装置内にお
ける乗算および加算方法を提供し、該方法は、(i)前
記Mビット被乗数と前記Nビット乗数との乗算を表す一
連の部分被加数を発生するステップと、(ii)前記部分
被加数のそれぞれの1つを入力キャリー保存部分結果に
キャリー保存加算して、出力キャリー保存部分結果を生
じるキャリー保存加算ステップであって、該入力キャリ
ー保存部分結果が、変化するアクティブキャリービット
と、変化するアクティブセーブビットとを有し、該アク
ティブセーブビットの最上位ビットがビット位置Zを有
し、該アクティブセーブビットの最下位ビットがビット
位置Yを有する、前記キャリー保存加算ステップと、
(iii )前記(M+N)ビット累算値のXビットを、キ
ャリー保存サイクルにおいて前記入力キャリー保存部分
結果に、ビット位置Zより高いビット位置において加算
するステップであって、ZおよびYが共にキャリー保存
サイクル間においてXだけ増加するようになっている、
該加算ステップと、を含む。
る電子乗算および加算装置を提供することである。演算
速度の増大は、処理における障害を減少せしめ、乗算お
よび加算装置を部分として含む装置の全体的パフォーマ
ンスを改善する。
ビット被乗数にNビット乗数を乗算し、かつ(M+N)
ビット累算値を加算する電子乗算および加算装置を提供
し、該装置は、(i)前記Mビット被乗数と前記Nビッ
ト乗数との乗算を表す部分被加数のシーケンスを発生す
る手段と、(ii)少なくとも1つの前記部分被加数を入
力キャリー保存部分結果にキャリー保存加算して出力キ
ャリー保存部分結果を生じるキャリー保存加算手段であ
って、該入力キャリー保存部分結果および該出力キャリ
ー保存部分結果がそれぞれキャリー値およびセーブ値を
含む、前記キャリー保存加算手段と、(iii )該キャリ
ー値および該セーブ値を、前記(M+N)ビット累算値
の少なくとも一部と、第1部分被加数と、のそれぞれの
1つに初期化する手段と、を含む。
は、主計算サイクルの前の該装置の初期化である。本発
明は、キャリー値およびセーブ値を適切に初期化するこ
とによって、主計算演算中に行われる必要のある計算が
減少せしめられ、それによってパフォーマンスの増大が
実現されうることを認識し、かつ利用する。さらに詳述
すると、初期化中に第1部分被加数を処理することによ
り、乗算器の反復数は1だけ減少せしめられうる。一
見、通常は10と20との間にある反復総数からの、そ
のような1反復だけの減少は、それほど意味があること
とは思えない。しかし、もし17反復を必要とする乗算
演算を考えれば、16反復への1反復の減少は、プロセ
スが、4反復毎マシンサイクルとして、平等に4マシン
サイクルへ分割されることを可能にする。その代案とし
て、4反復毎マシンサイクルを行った後、1サイクルに
おいて追加の反復を行えば、必要なサイクル数を5に増
大させ、あるいは、可能な反復数毎サイクルを5に増大
させることを試みれば、それはタイミングの制約を強く
して、恐らくは最大クロック周波数を減少させ、集積回
路を大きくすることになろう。
は改変されたブースエンコーダを含み、前記部分被加数
のシーケンスは改変されたブース被加数のシーケンスで
ある。
的に処理するためには、前記Nビット乗数が符号付きで
ある時は、該Nビット乗数を表す内部乗数のそれぞれの
ビットR〔a〕が、R〔(N−1)から1まで〕は前記
Nビット乗数の対応ビットに等しく、R〔N〕はR
〔(N−1)〕に等しい、によって与えられ、前記Nビ
ット乗数が符号なしである時は、該Nビット乗数を表す
内部乗数のそれぞれのビットR〔a〕が、R〔(N−
1)から1まで〕は前記Nビット乗数の対応ビットに等
しく、R〔N〕は0に等しい、によって与えられること
が好ましい。
上述によればN+1)であるブースエンコード装置の場
合には、第1部分被加数の特に簡単な形式が得られる。
この第1部分被加数は、従って速やかに決定されるの
で、過度に遅延する初期化は回避される。さらに詳述す
ると、もしR
加数が0に初期化され、もしR
ば、前記第1部分被加数が、前記Mビット被乗数のビッ
ト毎の逆に初期化される。
しければ、前記第1部分被加数は理想的には0にセット
されるべきであり、もしR
記第1部分被加数は理想的にはマイナス前記Mビット被
乗数にセットされるべきである。
しければ、前記第1部分被加数が0に初期化され、もし
R
記Mビット被乗数のビット毎の逆に初期化されるもので
ある。しかし、前記Mビット被乗数のビット毎の逆は、
マイナス該Mビットの被乗数より1小さいので、これ
は、もしR
必要性を導入する。実施例は、前記キャリー値および前
記セーブ値を加算するための最終加算器を含み、該最終
加算器に対するキャリー入力ビットはR
される。
値を加算する最終加算器の配設は、追加のオーバヘッド
を招くことなしに2の補数でなく1の補数がとられたの
で、要求される前記「1」を加算する機会を与える。最
終加算器のキャリービットは、それ以外には使用されな
いはずである。
と、Mビットの被乗数にNビットの乗数を乗算し、かつ
(M+N)ビットの累算値を加算する電子乗算および加
算装置内における乗算および加算方法を提供し、該方法
は、(i)前記Mビットの被乗数と前記Nビットの乗数
との乗算を表す一連の部分被加数を発生するステップ
と、(ii)前記部分被加数のそれぞれの1つを入力キャ
リー保存部分結果にキャリー保存加算して、出力キャリ
ー保存部分結果を生じるキャリー保存加算ステップであ
って、該入力キャリー保存部分結果および該出力キャリ
ー保存部分結果がそれぞれキャリー値およびセーブ値を
含む、前記キャリー保存加算ステップと、(iii )該キ
ャリー値および該セーブ値を、前記(M+N)ビットの
累算値の少なくとも一部と、第1部分被加数と、のそれ
ぞれの1つに初期化するステップと、を含む。
的、諸特徴、および諸利点は、添付図面を参照しつつ行
われる、実施例に関する以下の詳細な説明において明ら
かにされる。
ット数との乗算。 (2)Nビット数とMビット数とを互いに乗算し、かつ
(N+M)ビット累算値を加算して(N+M)ビットの
結果を生じる、乗算−累算演算。 を処理しうる。この回路は、これらの双方を符号付きお
よび符号なしバリアント(variant)として供給
しうる。上述の回路は、例としてN=M=32の特殊な
場合を用いている。(すなわち、32×32→64の乗
算、また32×32+64→64の乗算−累算)。
r)」という用語は、以下においては、それぞれ乗算器
回路のため、および乗算における2つのオペランドの一
方のため、の両方に用いられる。いずれが意図されてい
るかは、「回路」または「オペランド」の使用から、ま
たは文脈から、明らなはずである。
の乗算は、通常ハードウェアにおいて次の2つの主要ス
テップとして行われる。 (1) (a) 各々の乗算が容易に生成でき、また(b) X0 +
X1 +...+Xk =Rが成り立つように、被乗数Dの
乗算の集合、X0 *D、X1 *D、....Xk *Dを
形成して、X0 *D、X1 *D...及びXk *Dの和
が、R*D即ち求める積に等しくなるようにする。 (2) ステップ(1) で発生された被乗数の倍数を加算す
る。
な方法は、(被乗数の倍数がN個存在するように)k=
N−1とし、次に、Rのビットi(以下R〔i〕または
Riとする)が0であればXi=0とし、R〔i〕が1
であればXi=2i とする。各々のXiは、0または2
の累乗であるから、被乗数の倍数Xi*Dは、0、また
はDをiビットだけ左へシフトした結果を用いることに
より、容易に形成されうる。
長いので、被乗数の倍数Xi*Dは、積の全てのビット
を決定するために十分なビットにより構成されなければ
ならない。即ちそれぞれの被乗数を、その左側のビット
によって拡張することが要求される。これにより、符号
付きおよび符号なし被乗数の相違に対応することができ
る。即ち符号付き被乗数は、その符号ビットのコピーに
よって拡張され、一方符号なし被乗数は、0によって拡
張される。被乗数のこの拡張は、単一の0または符号ビ
ットのコピーによってそれをわずかに拡張することによ
り、しばしば物理的に実行され、その際この単一の余分
なビットは、全ての残りのビットの(共通)値を代表す
るものと理解される。
例えば、アドバンストRISCマシン社(Advanc
ed RISC Machine Lmited)のA
RM6集積回路の乗算命令のように、2つのNビット数
の積の、下位Nビットのみを発生するものがある。この
場合には、上記のように被乗数を拡張する必要はない。
被乗数は、前記命令の符号付きおよび符号なしバリアン
トの双方に対して同じに取扱われうる。少々明瞭でない
が、乗算器はそのようにできる。結局、前記命令の符号
付きおよび符号なしバージョンの間には全く差がなく、
1つの命令のみが与えられさえすればよい。
数Rの間の差の処理は、いくぶん巧妙なものである。ま
ず、Xiを加算するとRになることに注目する。この方
式は、「本来」符号なし乗算アルゴリズムである。それ
ゆえ、必要とされるのは、符号付き乗数の処理方法であ
る。これを処理するのには、いくつかの方法があり、そ
の多くは、次のいずれかの方法による(a) Rが負のと
き、余分な2N *Dを減算して最終結果を調節する、ま
たは(b)もしR〔k〕=1、すなわちもしRが負なら
ば、Xkを+2k ではなく−2k にする。
ス・エンコーディングである。これは、Nが偶数である
か奇数であるかにより、2つのやや異なる形式になる。
Nが偶数ならば、k=N/2−1とし(よって、N/2
個の被乗数の倍数を形成することになる)、次のように
定義する。
を、2進小数点の後の単一ビットR〔−1〕によって拡
張し、R〔−1〕を0と置く(これは、乗数の値を不変
に保つ)ことである。その時上記第2式は、i=0の場
合にも適用でき、その場合上記第1式に簡単化される。
すなわち、X0に対する外見上の特殊な場合は、この定
義、すなわち0としてのR〔−1〕により回避できる。
その時、以下のようにXiはRの符号付き値に等しくな
る。
合{−2,−1,0,1,2}からの数を乗算したもの
であり、0、2の累乗、マイナス2の累乗、の値を有す
る。これにより被乗数の倍数Xi*Dが容易に形成され
る。この方法は、前出の容易な方法におけるほど、容易
ではない。それは、2の正の累乗と同様に2の負の累乗
にも対処しなくてはならないが、実質的利点として第2
段階において加算すべき被乗数の倍数が、N個ではなく
N/2個であることのみだからである。負の被乗数の倍
数は、対応する正の倍数を形成するための被乗数をシフ
トさせ、次に「1の補数をとって1を加算する」方法に
より負にすることによって行われうる−この段階におい
ては1の加算は行われないが、それは第2段階へ移管さ
れる。従って、第2段階において加算されるのは、N/
2個の被乗数の倍数およびN/2個の単一ビット(これ
らは、対応する被乗数の倍数が正のとき0であり、負の
とき1である)で終わることになる。これはなお、N個
の全ての被乗数の倍数を扱う場合に比し実質的な改善と
なる。
ること以外では、極めて良く似たことを行い、Xiに対
する式は次のようになる。
特殊な場合ではなく、第2式が正しい値を生じるように
するためには、R〔−1〕=R〔−2〕=0と定義しさ
えすればよい)。
いに加算されるべき被乗数の倍数を半分にするだけでな
く、いま1つの利点を有し、乗数を符号なし数でなく、
符号付き数として自然な形で処理する。前出の技術にお
いては、符号付き乗数を特殊な場合として処理しなくて
はならなかった。それは、符号なし数の長さがどうであ
れ、それは負符号付き値を有しえないからである。逆は
容易であり、長さN+1ビットまたはそれ以上の符号付
き数は、長さNビットの符号なし値(または実に、長さ
Nビットの符号付き値)を有しうる。それゆえ、もし符
号付きおよび符号なしの32ビット乗数を処理しうる乗
算器回路が欲しければ、例えば、33ビットの、または
それより長い、ブース・エンコーダでそのジョブを行え
る。行うべき全てのことは、乗数を、その左端において
1つまたはそれ以上の追加ビットによって拡張し、該乗
数が符号なしとして取扱われる場合、これらのビットを
0にし、該乗数が符号付きとして取扱われる場合、存在
する符号のコピーとすることのみである。
の処理は、前出と同じ技術によって行われる。被乗数の
倍数を形成するための、他の、さらに洗練された方法も
存在し、複雑性になるが、該倍数の数をさらに減少させ
ることができる。
数、例えば33ビットまたは34ビットの改変されたブ
ース・エンコーダを、符号付きおよび符号なし32×3
2乗算の双方を行いうる回路として用いる場合には17
個、の被乗数の倍数が存在する。
に加算し、該最初の2つのものの和に対して第3のもの
を加算し、その結果である和に第4のものを加算し、な
どして、最後の和を得るまで続ける。(ところで、それ
ぞれの加算はまた、改変されたブース・エンコーディン
グによって発生させられたエクストラビットの1つを、
加算器に対するキャリー入力として用いて取扱うことが
可能である)。この技術は、ARM6集積回路によって
用いられるものと同様である。
の倍数を一度に発生させずに、必要に応じて発生させる
ことである。他の主たる相違は、この技術においては不
規則性が処理されることである。即ち、最初の加算が行
えるためには、2つの被乗数の倍数が発生されなくては
ならないが、他の各々の加算の前には1つの倍数が発生
されればよい。これは、この不規則性がない乗算−累算
機能を、「これまでの和」を累算値に初期化し、1つの
被乗数の倍数を繰返し発生させその結果をこれまでの和
に加算することによって実現するために、利用される。
(簡単な乗算を行う場合、これまでの和が累算値にでは
なく0に初期化されること以外、同じことが行われ
る)。
ことを完成する。即ち、実際、改変されたブース・エン
コーダからの全てのエクストラビットを処理するのには
少なすぎる1回の加算しかなかったのが、いまは適当な
数が存在する。
の加算が長いキャリー連鎖(carry chain)
を含むために、相当な時間の量を要することである。こ
れに対する良い解決法は、「キャリー保存」加算であ
り、これは、1つの数を得るための、2つの数とキャリ
ービットとの加算は必然的に長いキャリー連鎖を含む
が、2つの数を得るための、3つの数とキャリービット
との加算はそれを必要としないことに基づいている。詳
述すると、3つの数X〔N:0〕、Y〔N:0〕、Z
〔N:0〕とキャリービットWとがある場合、それらは
2つの数S〔N:0〕およびC〔N+1:0〕に減少さ
せられ、これらの2数は加算された時、各々のビット列
内において異なる3つの単一ビットの加算を単に行うこ
とによって得られる値と同じ値になる。
およびZ〔i〕の2ビット和である。
鎖なしに別個に行われるので、通常の加算よりもかなり
高速である。(例えば、ARM6における乗算は通常の
加算を用い、それらの1つ1つをクロックサイクル毎に
管理した。キャリー保存加算を用いる集積回路は、4回
またはそれ以上の加算をクロックサイクル毎に管理しう
る。)
ば、それらを、最終結果を得るために加算しなくてはな
らないちょうど2つの数まで減少させるのに、この技術
をJ−2回用いればよい。この最後の加算は、通常の加
算を必要とするが、J−2回のキャリー保存加算と1回
の通常加算との全体としての総計は、元のJ−1回の通
常加算に比しかなりの改善になっている。
被乗数の倍数を直ちに発生する。これらによれば、加算
の遅延の多くは、多数の加算器回路が必要となるが、加
算を並列に行うことによって解消できる。例えば、17
個の被乗数の倍数を最終積まで減少させるためには、5
段階の通常加算(第1のものはそれらを9個の数まで減
少させ、第2のものは5個まで減少させ、第3のものは
3個まで減少させ、第4のものは2個まで減少させ、第
5のものは1個まで減少させる)、または6段階のキャ
リー保存加算および1回の最後の通常加算(17→12
→8→6→4→3→2→1)を用いることもできる。キ
ャリー保存加算の時間的利点は、この場合は前よりも少
ないが、この場合は、キャリー保存加算のもう1つの利
点が重要であり、キャリー保存加算器はまた通常の加算
器よりもずっと小さい。
場合、この種の並列加算は望ましくない。通常のアプロ
ーチは通常の加算器におけるものと同様であり、「キャ
リー」値および「セーブ」値が、(例えば、それらの双
方を0に初期化することにより)それらの和が0になる
ように初期化され、次に被乗数の倍数を1つずつ加算す
るためにキャリー保存加算が用いられる。最後に、「キ
ャリー」値と「セーブ」値との最終和を形成するため
に、通常の加算が用いられる。前と同様に、「キャリ
ー」値および「セーブ」値を、例えば、それらの一方を
0に、かつ他方を累算値にして、それらの和が累算値に
なるように初期化することにより、自由な乗算−累算演
算を得ることができる。実際、初期化すべき2つの値が
あるので、2つの累算値を加算しうるはずであるが、こ
れは極めて有用ではない。この第2の累算値スロットを
利用する、より良い方法は後述される。
行うと仮定している。例えば、32×32の乗算が実行
するときは、64ビットの加算が行われるだろう。これ
は通常、他のデータバスの2倍広いデータバス部分を必
要とすることになるので、厄介である。
れば、それらが、Mビットよりもやや多くの対象領域含
むのみであることがわかる。例えば、奇数のNを有する
改変されたブース・エンコーダに対するXi*Dを考え
てみる。Xi*Dに対応するXiは、−2(2*i) 、−2
(2*i-1) 、0、2(2*i-1) 、2(2*i) の1つである。
1ビットの双方は、それほど関心のあるものではない。
特に、各々の場合において、全て0にするようにキャリ
ービットを下位2*i−1ビットに加算し、また同じキ
ャリーを中位M+1ビットに加算することができる。す
なわち、上記の表1を下記の表2によって置換すること
ができる。
−1ビットに対して行う必要がないことがわかる。2つ
の値と0とのキャリー保存加算を行わずに、該2つの値
を単に不変のままにしておくことができる。さらに、
「セーブ」値および「キャリー」値の上位N−2*iビ
ットが、これまで全て同じである限り、全ての上位N−
2*i列の加算は同じになるので、それらを全て評価す
るためには、1つの回路が必要とされるのみである。そ
の結果、下記の条件により、ちょうどM+2個の列加算
器(中位M+1ビットに対するM+1個と、上位N−2
*iビットに対する1個とを足したもの)によって全て
が行われうる。 (a) 同じ上位Nビットを有する「セーブ」値から開始
する。 (b) 同じ上位Nビットを有する「キャリー」値から開
始する。 (c) それぞれの加算が要求する上位における同じビット
の数が、前のものよりも少ないように、被乗数の倍数を
X0*D、X1*D、X2*D、...、Xk*Dの順
序で加算する。 (d) それぞれの反復において「関心ある領域」を2ビッ
トだけ左へシフトさせ、下位端から脱落するビットを取
って記憶する。計算の終了時に、これらのビットは最終
「キャリー」値および「セーブ」値の低位端を形成し、
一方最後の「対象領域」内のそれらは、それらの高位端
を形成する。
ータバスの幅の倍増ではなく、該幅のほんのわずかな
「増大」によって、実現することが可能となる。最後の
加算は、なおダブル幅のものでなくてはならないが、シ
ングル幅加算器の2回の使用により、第1加算からのキ
ャリー出力ビットを第2加算に対するキャリー入力とし
て用いる技術を利用して実現されうる。
当に実現できるかどうかの問題がある。しかし、最初の
2つは、任意の累算値が、もし符号付きのものならば、
約N+Mビットの広さのものではなく、高々Mビットで
あることを意味している。累算値に関するこの制限を回
避する技術は後述され、例えば、単に32×32+32
ではなく32×32+64の乗算−累算命令の実現が可
能となる。
生し且つ現在の「キャリー」および「セーブ」形式に対
してキャリー保存加算を行う、ハードウェアの多数の例
を含みうることに注意すべきである(このハードウェア
は、以下においては「乗算器行」と呼ばれる)。極端な
例では、図1に示されているようにそれぞれの反復に対
する別個の乗算器行を有する、全乗算器アレイがある。
の反復を処理するただ1つの乗算器行を有する、完全に
反復的な乗算器がある。中間には、1つより多くの行を
有する反復バージョン、例えば図3に示されている2行
を有する乗算器、がある。
質的に空間対時間のトレードオフである。使用する乗算
器が多いほど、回路は大きくかつ高速になる(高速にな
るわけは、乗算毎の乗算器およびラッチ遅延が少なくな
り、次のクロックエッジの起こるのを待つためにある時
間が無駄になる回数が少なくなるからである)。実際に
は、適度に小さい乗算器に対する通常のトレードオフ
は、ループを回っての全遅延を、要求されるサイクル時
間(または、回路が2倍の速度のクロックにより駆動さ
れるある場合には、要求されるサイクル時間の半分)よ
り少し小さくする、正しい数の乗算器行を有する反復乗
算器を用いることである。
計の全てにおいて、本質的に同じ乗算器行のハードウェ
アが用いられることである。乗算器行の設計の任意の改
善は、それらのいずれに対しても平等に適用される。
「セーブ」部分の双方を初期化することができる。それ
らの一方に累算値が要求され、他方は単に0にセットさ
れる。これは被乗数の倍数の1つとして用いることがで
きる。これに関する主要な問題は、それが、キャリー保
存形式のイニシャライザーが被乗数の倍数発生器を含ま
なくてはならないことを意味することである。これは、
ある空間を要し、さらに重要なことは、それがさらに初
期化の遅延を生じることである。
被乗数倍数の発生の複雑さに依存する。上記の改変され
たブース・エンコーディングによって発生せしめられる
Xiに対する式を考察すると、1つのものは特に簡単で
ある。すなわち、奇数のNに対して、X0=−R
である。もちろん、通常関心をもたれるのは、Nが偶数
の場合である。しかし、以上において観察されたよう
に、符号付きおよび符号なしNビット数を乗算する要求
を処理する良い方法は、実は符号付き(N+1)ビット
数を乗算することである。
ンコーディングと、キャリー保存加算と、奇数のNとを
用いて、符号付きおよび符号なしバリアントの双方を処
理する、Mビットに対するNビットの乗算−累算器のた
めの以下の初期化方法が得られる。
よって初期化する: R〔N−1:0〕=供給された乗数オペランド: R〔N〕=0 符号なしバリアントが望まれる場合 =R〔N−1〕 符号付きバリアントが望まれる場合 「キャリー」値および「セーブ」値の一方を、供給され
た累算値(それが符号なしであるか、または符号付きで
あるかにより、0または符号ビットのコピーにより拡張
されたもの)に初期化する。「キャリー」値および「セ
ーブ」値の他方を、もしR
もしR
号付きまたは符号なしとして適切に処理されている)
に、初期化する。
乗数、すなわち、その2の補数、を発生させなくてはな
らないことによりやや複雑であるように見える。代わり
に、その1の補数を形成し、かつ1を加算する技巧を用
いると有利である。問題は、この1をいつ加算すべきか
である。
の理由は、キャリー保存形式に関する最後の加算が、そ
の時ちょうど、その「キャリー」部分と「セーブ」部分
とを互いに加算することを必要としているからである。
多くの加算器は、2つの数とキャリービットとを加算す
るので、該キャリービットは使用されない。キャリービ
ットをR
用いることと、1の補数を用いることとの相違は補償さ
れうる。従って、以下の初期化方法が得られる。
よって初期化する: R〔N−1:0〕=供給された乗数オペランド: R〔N〕=0 符号なしバリアントが望まれる場合 =R〔N−1〕 符号付きバリアントが望まれる場合 「キャリー」値および「セーブ」値の一方を、供給され
た累算値(符号付きまたは符号なしとして適切に処理さ
れている)に初期化する。「キャリー」値および「セー
ブ」値の他方を、もしR
号なしとして適切に処理されている)のビット毎の逆
(すなわち、1の補数)に、初期化する。最後の加算に
対するキャリー入力ビットをR
ハードウェアが少々多くなるのみで、主反復において、
1段階少ないキャリー保存加算しか要らなくなることで
ある。これは、実際の応用においてはNがしばしば2の
累乗である事実により、見かけよりも重要である。N=
2n の場合、(N+1)ビットの改変ブース・エンコー
ディングが、総計2(n-1) +1個の被乗数の倍数および
キャリー保存加算を発生することを意味する。これの2
(n-1) 段階への減少は、計算を正確な数のサイクル内へ
極めて適合しやすくすることができ、従って、時間の無
駄の回避を可能ならしめる。
えてみる。この初期化によれば、それは、16段階のキ
ャリー保存加算を行う必要があり、これは、それぞれが
4段階を行う4サイクルに適合する。もしキャリー保存
形式が単に累算値に初期化されていたものとすれば、1
7段階が要求され、これは賢明に処理するためには遙か
に困難な数である。
N−2*iビットを単一ビットによって表すことができ
れば、累算値は、約Mビットの長さのものでしかありえ
ない。もし累算値がもっと長ければ、データバスは、そ
れに対処するために幅を実質的に増大せしめられる必要
がある。
「キャリー」値および「セーブ」値の一方が同じでない
ビットを含むことが可能であることが必要である。もう
片方は、被乗数の倍数の上位N−2*iビットと同様に
全て同じビットを含むことができる。しかしながら、キ
ャリー保存加算の後には、「キャリー」値および「セー
ブ」値は共に、それらの上位ビット内に同じでないビッ
ト列を含みうる。もし、このようでなく、累算値の上位
ビットが加算によって不変のままになっており、他の値
の各々が同じビットの列のままになっているように配列
されうるものと仮定すれば、主な作業はやはりほぼMビ
ットの広さのデータバスによって行われ得るはずであ
る。前の例との唯一の相違は、累算値の2ビットを、反
復毎にメイン計算に供給しなくてはならないことであ
る。
存の「各列における3ビット加算」する技術を変更する
ことである。上述と同様に、「キャリー」値および「セ
ーブ」値は、以下の3領域に分割される。 (a) 「低位」領域。この領域においては、「キャリー」
値および「セーブ」値に対し、これ以上の変化はない。
Xi*Dをそれらに加算した後、この領域はLiビット
を含み、(前に示された)Nが奇数の場合はLi=2*
i+1であり、Nが偶数の場合はLi=2*i+2であ
る。Nが偶数の場合は、これはまた、Xi*Dが加算さ
れる前にはLi=2*iであると表現されうる。Nが奇
数の場合は、それはまた、(例えば、X0*Dの加算を
前述のように初期化内に置くことにより)i=0に対し
特殊な場合が作られるという条件で、Xi*Dが加算さ
れる前にはLi=2*i−1であると表現されうる。S
L〔Li−1:0〕およびCL〔Li−1:0〕は、そ
れぞれ低位の「セーブ」ビットおよび「キャリー」ビッ
トを表す。 (b) 「中位」または「アクティブ」領域。この領域にお
いては、主要なキャリー−セーブ加算が行われつつあ
る。この領域は、「セーブ」値および「キャリー」値の
それぞれに対する、S〔M:0〕およびC〔M:0〕で
表されるM+1ビットを含む。 (c) 「高位」領域。この領域においては、「セーブ」値
は累算値の未使用ビットを含み、「キャリー」値は単に
C〔M〕のコピーのストリングである。Xi*Dをキャ
リー保存形式で加算する前には、この領域は2*(k−
1)+2ビットの長さ、すなわち、毎加算2ビットでな
おアクティブ領域内へ入れたい累算ビットの数(kは最
後のXiのインデックスであることを想起されたい)を
有する。
「セーブ」値の全長は、次のようになる。
値A〔M+N:0〕を処理することになる。(もちろ
ん、単に適切に、それらを0拡張することにより、また
はそれらを符号拡張することにより、処理される累算値
をもっと短くすることができる。また、余分のビットは
主演算によって全く不変であり、単に対応する「キャリ
ー」値ビット(すなわちC〔M〕のコピー)に加算され
る必要があるだけであるが、処理される累算値をもっと
長くすることもできる)。従って、Xi*Dをキャリー
保存形式に加算する前における「キャリー」値および
「セーブ」値は次表のようになる。
るかを考察する必要がある。(M+1)ビットの符号付
き被乗数D〔M:0〕を形成するために、それぞれ符号
拡張または0拡張される、Mビットの符号付きまたは符
号なし被乗数D〔M−1:0〕から開始する。上述のよ
うに被乗数の倍数を形成する時、「ブース・ディジッ
ト」−2*R〔2*i+1〕+R〔2*i〕+R〔2*
i−1〕(Nが偶数の場合)または−2*R〔2*i〕
+R〔2*i−1〕+R〔2*i−2〕(Nが奇数の場
合)の値に依存して、被乗数の倍数に対し次表の形式が
得られる。
ビット毎の反転(すなわち1の補数)である。
値に対し、これらは全て次表の形式を有する。
形式のものとなる。
Liは2大きい、「キャリー」値および「セーブ」値で
終わることが望まれる。このプロセスにおいては、S
〔M:0〕およびC〔M:0〕に対する新しい値が発生
せしめられようとしており、これらをそれぞれS’
〔M:0〕およびC’〔M:0〕と呼ぶことにする。S
L〔〕の新しい2ビットであるが、存在する諸ビットS
L〔Li−1:0〕には妨害を与えない、SL〔Li+
1:Li〕もまた発生せしめられる。同様にして、新し
い2ビットCL〔Li+1:Li〕が発生せしめられる
が、存在する諸ビットCL〔Li−1:0〕には妨害を
与えない。最後に、最低位の2ビットA〔M+N:Li
+M+1〕が使い尽くされるので、この改変されたキャ
リー保存加算は次表の形式の結果を生じることが望まれ
る。
算に適合するものとして、改変されたキャリー保存加算
が、以下の形式のものであることが望まれているのがわ
かる。
わけは、この領域が最終和に対して行う寄与は不変であ
るからである。同様にして、線の上下双方の同じ位置に
現れているビットA〔M+N:Li+M+3〕も消去さ
れうる。最終形式に対するそれらの寄与も、やはり明ら
かに不変である。この後、この改変されたキャリー保存
加算は、次の形式のものでなくてはならないことがわか
る。
2つの遷移ビットに関し、ある通常のキャリー保存加算
が行われる。
〔1〕、およびX〔1〕の2ビット和 i=2,3,...,Mに対し、 (C’〔i−1〕,S’〔i−2〕)=S〔i〕、C
〔i〕、およびX〔i〕の2ビット和
2:0〕、SL〔Li+1〕、SL〔Li〕、C’〔M
−1:0〕、CL〔Li+1〕およびCL〔Li〕がラ
インの下方の最終和に対し、S〔M:0〕、C〔M−
1:0〕、X〔M:0〕、XCおよびC〔M〕の「アク
ティブ領域」コピーがラインの上方で行うのと同じ寄与
を行うことが保証される。従ってここで、これらの全て
を、XCを含む行上の全ての0と共に消去することがで
き、この改変されたキャリー保存加算の残りは、次の形
式のものではなくてはならない。
学的変更を加える。まず、その第2行は次の2行の和に
よって置換されうる。 1,...,1 1 1 0,...,0 0 NOT(C〔M〕)
全て1の行と、全て0の行との和であり、それは全て1
の行である。逆に、もしC〔M〕が0ならば、これは、
全て1の行と、右端の単一の1との和である。これは、
全て0の行と、左端のキャリー出力との和を生じる。こ
のキャリー出力は、加算が行われている領域外にあるの
で無視される。従って、いずれの場合においても、和は
C〔M〕のコピーの行である。
て置換されうる。 1,...,1 1 1 0,...,0 0 NOT(X〔M+1〕)
を次の形式に改変する。
出力を無視する。無視する理由は、それが加算の行われ
ている領域外にあるからである。これは、要求されてい
るキャリー保存加算を次の形式に改変する。
1〕、NOT(C〔M〕)、およびNOT(X〔M+
1〕)の2ビット和 を行えば、要求されている加算から、全てのこれらのビ
ットをいくつかの0と共に消去しうることがわかり、そ
の結果、次の形式が残る。
の位置にまさにNOT(C〔M〕)を含む行と、によっ
て置換しえたことを述べた議論の逆により、加算和のこ
の残部が解決される。
〔1〕、およびX〔1〕の2ビット和 i=2,3,...,Mに対し、 (C’〔i−1〕,S’〔i−2〕)=S〔i〕、C
〔i〕、およびX〔i〕の2ビット和 (S’〔M〕,S’〔M−1〕)=A〔Li+M+
1〕、NOT(C〔M〕)、およびNOT(X〔M+
1〕)の2ビット和 C’〔M〕 =NOT(A〔Li+
M+2〕) を行うことにより、所望の演算のための改変されたキャ
リー保存加算を実行することができる。
「セーブ」値を正しく初期化できれば、(M+N+1)
ビットの累算値を有する、Mビットに対するNビットの
乗算−累算演算を、初期化し、被乗数の倍数を、上述の
改変されたキャリー保存加算を用い、その後キャリー保
存値に関する最終加算を行って、加算することにより、
行いうる。キャリー保存加算を実現するリスト内にある
演算はM+4個なので、これを行うためには、データバ
スのほんの少しの「増大」が要求され、通常考えられる
はずのその幅の倍増が、所望される演算のために要求さ
れることはなかったのである。
の乗算器行を、それが完全なアレイをなすか、または反
復乗算器をなすかにかかわらず、また、該アレイまたは
反復ループ内にいくつの乗算器行が存在するかにかかわ
らず、含む。
が役目を交換しても、本質的な変化は起こらないことに
注意すべきである。例えば、XCとC
た、C’〔M−1〕とS’〔M−1〕との、役目を交換
することにより、以下の方程式を得ることができ、これ
らは本発明を同様に効果的に実行しうるはずである。
C、およびX
〔1〕、およびX〔1〕の2ビット和 i=2,3,...,M−1に対し、 (C’〔i−1〕,S’〔i−2〕)=S〔i〕、C
〔i〕、およびX〔i〕の2ビット和 (S’〔M−1〕,S’〔M−2〕)=S〔M〕、C
〔M〕、およびX〔M〕の2ビット和 (S’〔M〕,C’〔M−1〕)=A〔Li+M+
1〕、NOT(C〔M〕)、およびNOT(X〔M+
1〕)の2ビット和 C’〔M〕 =NOT(A〔Li+
M+2〕)
れた、もっと洗練された被乗数の倍数の発生方法のある
ものに対しても適用されうる。例えば、ブース・アルゴ
リズムのもう1つの改変は、Xnを、2の累乗に数−
4、−3、−2、−1、0、1、2、3、または4の1
つを乗じたものにすることにより、サイクル毎に乗数の
3ビットを処理しうる。そのようなアルゴリズムによれ
ば、それぞれのサイクルにおいて、累算値の3ビットが
「アクティブ」領域内へ吸収されなくてはならない。こ
れは、キャリー保存加算の改変された部分が多少似てい
る、上述と類似した方法で行われうる。すなわち、
M+2〕)、かつS’〔M:M−1〕は、A〔Li+M
+1〕、NOT(C〔M〕)、およびNOT(X〔M+
1〕)の2ビット和。とするよりも、むしろ、
i+M+3〕)、S’〔M+1:M〕は、A〔Li+M
+2〕、1、および0の2ビット和(すなわち、S’
〔M+1〕=A〔Li+M+2〕、S’〔M〕=NOT
(A〔Li+M+2〕))、かつ、(C’〔M〕,S’
〔M−1〕)は、A〔Li+M+1〕、NOT(C
〔M〕)、およびNOT(X〔M+1〕)の2ビット
和。とするのである。
ージョンの双方における、32×32→64の乗算およ
び32×32+64→64の乗算−累算演算を行う、乗
算器の例を次に説明する。
な改善は、以下の通りであると思われる。 * 全ての残りの被乗数の倍数が0になる(従って、も
う加算が実際には要求されない)時を検出し、その時正
しい最終加算を行うために、「低位」、「アクティ
ブ」、および「高位」領域における諸ビットの、比較的
繁雑な再配置を行うことを本質的に含む早期終了。 * データバス上に、例えばALUの一部として存在し
うるもう1つの加算器を用いることによる、この回路内
の最終加算器の必要性の回避。 * 「キャリー低位ラッチ」が末尾から2ビット/乗算
器行で満たされ、一方「累算値高位ラッチ」が末尾から
おなじ率で空にされる事実を利用して、同じ物理的レジ
スタは双方の値を保持するように使用されうるはずであ
る。開始時には、それは累算値の高位部分を含み、終了
時には、それは「セーブ」値の低位部分を含み、中間で
は、それは、まだ使い尽くされていない高位累算値ビッ
トと、それまでに発生せしめられた低位「キャリー」値
ビットとを含む。これは、回路に対する有用な改善であ
る。
る場合1、符号なし演算が行われる場合0である単一ビ
ット ACCUM − 乗算−累算が行われる
場合1、単に乗算が行われる場合0である単一ビット および、事象の正しいシーケンスを生ずる制御入力。
〔63:0〕を発生する。この乗算器の基本的ブロック
図は、図4に示されている通りである(わかりやすくす
るために、制御信号は示されていない)。この乗算器
は、MPLIER〔31:0〕*MCAND〔31:
0〕+ACCVAL〔63:0〕を5サイクルで計算
し、さまざまなブロックは、それぞれのサイクルにおい
て以下の機能を行う。
0〕 R〔32〕 =SIGNED AND MPLIER
〔31〕 サイクル2−5: 変化なし被乗数ラッチ サイクル1: D〔31:0〕=MCAND D〔32〕 =SIGNED AND MCAND
〔31〕 サイクル2−5: 変化なし
〔i〕 CI〔i〕= R
0〕およびC0〔32:0〕がそれぞれS6〔32:
0〕およびC6〔32:0〕からロードされる サイクル4−5: 変化なしキャリー保存ラッチB サイクル1−4: フェーズ1において、S4〔32:
0〕およびC4〔32:0〕がそれぞれS3〔32:
0〕およびC3〔32:0〕からロードされる サイクル5: 変化なし
よって指定される。
2:0〕、Bk〔4:0〕、AHk〔1:0〕、Sk
〔32:0〕、およびCk〔32:0〕を得て、以下の
方程式により出力S〔k+1〕〔32:0〕、C〔k+
1〕〔32:0〕、SLk〔1:0〕、およびCLk
〔1:0〕を発生する。
2:0〕およびXCを発生する。
Ck〔1〕、およびX〔1〕の2ビット和 i=2,3,...,32に対し、 (C(k+1)〔i−1〕,S(k+1)〔i−2〕)
=Sk〔i〕、Ck〔i〕、およびX〔i〕の2ビット
和 (S(k+1)〔32〕,S(k+1)〔31〕)=A
Hk
(X〔33〕)の2ビット和 C(k+1)〔M〕 =NOT(AHk
〔1〕)
イクル1: i=0,1,...,30に対し、 ACCHI〔i〕=ACCUM AND ACCVAL
〔i+33〕 ACCHI〔31〕=SIGNED AND ACCU
M ACCVAL〔63〕 AH1〔1:0〕= ACCHI〔1:0〕 AH2〔1:0〕= ACCHI〔3:2〕 AH4〔1:0〕= ACCHI〔5:4〕 AH5〔1:0〕= ACCHI〔7:6〕 サイクル2: AH1〔1:0〕= ACCHI〔9:
8〕 AH2〔1:0〕= ACCHI〔11:10〕 AH4〔1:0〕= ACCHI〔13:12〕 AH5〔1:0〕= ACCHI〔15:14〕 サイクル3: AH1〔1:0〕= ACCHI〔1
7:16〕 AH2〔1:0〕= ACCHI〔19:18〕 AH4〔1:0〕= ACCHI〔21:20〕 AH5〔1:0〕= ACCHI〔23:22〕 サイクル4: AH1〔1:0〕= ACCHI〔2
5:24〕 AH2〔1:0〕= ACCHI〔27:26〕 AH4〔1:0〕= ACCHI〔29:28〕 AH5〔1:0〕= ACCHI〔31:30〕 サイクル4: 変化なし
0〕,SL4〔1:0〕,SL2〔1:0〕,SL1
〔1:0〕) CL〔7:0〕 =(CL5〔1:0〕,CL4〔1:
0〕,CL2〔1:0〕,CL1〔1:0〕) サイクル2: SL〔15:8〕=(SL5〔1:
0〕,SL4〔1:0〕,SL2〔1:0〕,SL1
〔1:0〕) CL〔15:8〕=(CL5〔1:0〕,CL4〔1:
0〕,CL2〔1:0〕,CL1〔1:0〕) サイクル3:SL〔23:16〕=(SL5〔1:
0〕,SL4〔1:0〕,SL2〔1:0〕,SL1
〔1:0〕) CL〔23:16〕=(CL5〔1:0〕,CL4
〔1:0〕,CL2〔1:0〕,CL1〔1:0〕) サイクル4:SL〔31:24〕=(SL5〔1:
0〕,SL4〔1:0〕,SL2〔1:0〕,SL1
〔1:0〕) CL〔31:24〕=(CL5〔1:0〕,CL4
〔1:0〕,CL2〔1:0〕,CL1〔1:0〕) サイクル5: 変化なし
0〕 CF〔31:0〕= CL〔31:0〕 サイクル5: SF〔31:0〕= S6〔31:
0〕 CF〔31:0〕= C6〔31:0〕乗算器C サイクル1−4: SF〔31:0〕= SL〔31:
0〕 CF〔31:0〕= CL〔31:0〕 サイクル5: CIN=R
0〕)=SF〔31:0〕、CF〔31:0〕、および
CINの33ビット和結果ラッチ サイクル1−3: 変化なし サイクル4: RESULT〔31:0〕 = S
UM〔31:0〕 サイクル5: RESULT〔62:32〕= S
UM〔31:0〕
CAND〔〕)と、Nビットの乗数(MPLIE
R〔〕)とを乗算し、次に(M+N)ビットの累算値
(ACCVAL〔〕)を加算する、乗算−累算回路を示
し、この例においてはM=N=32である。Nビット乗
数は乗数ラッチ2内にラッチされ、Mビット被乗数は被
乗数ラッチ4内にラッチされる。(M+N)ビット累算
値の低位部分は、キャリー保存初期化器6へ供給され、
(M+N)ビット累算値の高位部分は、累算値高位ラッ
チ8へ供給される。キャリー保存初期化器6は、Mビッ
ト被乗数(D〔〕)を受け、乗数ラッチ2の最下位ビッ
トの値が1であるか、0であるかにより、それぞれ、前
記Mビット被乗数(D〔〕)のビット毎の反転、または
0を出力する。その結果は、マルチプレクサA10へ供
給され、キャリー値またはセーブ値の一方として働く。
キャリー値またはセーブ値の他方は、累算値の最低位ビ
ットを含む。
コーダ12へ供給され、該エンコーダは、後の乗算器行
のそれぞれの1つへ供給される改変されたブース被加数
を発生する。
行14、16、18、20が備えられ、それぞれ前述の
乗算器アルゴリズムを実行する。この乗算器アルゴリズ
ムは、それぞれの反復において累算値の2ビットを取入
れる。それぞれのサイクルにおける、それぞれの乗算器
行14、16、18、20への入力は、ブース・ディジ
ット(B1〔〕、B2〔〕、B4〔〕、B5〔〕)と、
累算値高位ラッチ8内に記憶されている累算値からの諸
ビットと、被乗数ラッチ4からのMビット被乗数の諸ビ
ットと、前の乗算器行からの直接的または間接的セーブ
値およびキャリー値と、である。
復においてもう変化しない最低位ビット(SL、CL)
と、現在のセーブ値およびキャリー値とである。これら
の最低位ビットは、キャリーおよびセーブ低位ラッチ2
4内に累算される。セーブ値およびキャリー値(S
6〔〕、C6〔〕)は、キャリー保存ラッチA22およ
びマルチプレクサA10を経て、最初の乗算器行14へ
帰還される。最終乗算反復が完了した時、最後の乗算器
行20およびキャリーおよびセーブ低位ラッチ24から
のキャリー値およびセーブ値は、それぞれ最終加算器2
6へ供給され、そこでそれらは2サイクルで加算され
(キャリーおよびセーブ低位ラッチ24からの値は、第
1サイクルにおいて最終加算器26へ供給され、最終乗
算器行20からの値は、第2サイクルにおいて供給され
る)、その結果は結果ラッチ28内に記憶される。マル
チプレクサC30は、最終加算器26の第1加算サイク
ル中において1の補数の初期化から残されたキャリービ
ットR
第2サイクルとの間において必要な任意のキャリービッ
ト、を供給する働きをする。
実施例を詳細に説明してきたが、本発明はこれらの特定
の実施例に制限されるものではなく、本技術分野に習熟
した者ならば、添付の特許請求の範囲によって定められ
る本発明の範囲および精神から逸脱することなく、それ
らに対してさまざまな変更および改変を行いうることを
理解すべきである。
り、乗算結果を決定する乗算器の概略図。
いて単一乗算器行が再使用される図1の改変バージョン
を示す。
つの改変を示す。
部分を示す。
Claims (23)
- 【請求項1】 Mビット被乗数にNビット乗数を乗算
し、かつ(M+N)ビットの累算値を加算する電子乗算
および加算装置であって、該装置が、 (i)前記Mビット被乗数と前記Nビット乗数との乗算
を表す一連の部分被加数を発生する手段と、 (ii)少なくとも1つの前記部分被加数を入力キャリー
保存部分結果にキャリー保存加算して、出力キャリー保
存部分結果を生じる、該キャリー保存加算手段であっ
て、該入力キャリー保存部分結果が、変化するアクティ
ブキャリービットと、変化するアクティブセーブビット
とを有し、該アクティブセーブビットの最上位ビットが
ビット位置Zを有し、該アクティブセーブビットの最下
位ビットがビット位置Yを有する、前記キャリー保存加
算手段と、 (iii )前記(M+N)ビットの累算値のXビットを、
キャリー保存サイクルにおいて前記入力キャリー保存部
分結果に、ビット位置Zより高いビット位置において加
算する手段であって、ZおよびYが共にキャリー保存サ
イクル間においてXだけ増加するようになっている、該
加算手段と、を含む、電子乗算および加算装置。 - 【請求項2】 X=2である、請求項1記載の電子乗算
および加算装置。 - 【請求項3】 前記加算手段が、 キャリー保存サイクルにおいて、前記出力キャリー保存
部分結果を、ビット位置Z+1およびZ+2における拡
張セーブビットおよびビット位置Z+2における拡張キ
ャリービットにより拡張する手段を含み、 前記拡張セーブビットが、 前記(M+N)ビットの累算値のZ+1番目ビットと、 前記活動キャリービットのZ番目ビットの補数と、 前記部分被加数のZ+1番目ビットの補数と、 の和によって与えられ、 前記拡張キャリービットが前記(M+N)ビット累算値
のZ+2番目ビットの補数により与えられる、請求項2
記載の電子乗算および加算装置。 - 【請求項4】 前記発生手段がブース(Booth)エ
ンコーダを含み、前記一連の部分被加数が一連のブース
被加数である、請求項1記載の電子乗算および加算装
置。 - 【請求項5】 M=Nである、請求項1記載の電子乗算
および加算装置。 - 【請求項6】 M=N=32である、請求項5記載の電
子乗算および加算装置。 - 【請求項7】 前記装置が該装置を通るデータバスを有
し、該データバスがN+Mビットより小さい幅を有す
る、請求項1記載の電子乗算および加算装置。 - 【請求項8】 M=Nであり、かつ前記データバスがM
+3ビットの幅を有する、請求項7記載の電子乗算およ
び加算装置。 - 【請求項9】 前記部分被加数のZ+1番目ビットが符
号選択入力に依存して0または符号拡張であり、前記M
ビットの被乗数およびNビットの乗数が、該符号選択入
力に依存してそれぞれ符号なしまたは符号付き数として
取扱われる、請求項1記載の電子乗算および加算装置。 - 【請求項10】 ハードウェア乗算器を有する集積回路
中央処理装置を含む、請求項1記載の電子乗算および加
算装置。 - 【請求項11】 Mビットの被乗数にNビットの乗数を
乗算し、かつ(M+N)ビットの累算値を加算する電子
乗算および加算装置内における乗算および加算方法であ
って、該方法が、 (i)前記Mビットの被乗数と前記Nビットの乗数との
乗算を表す一連の部分被加数を発生するステップと、 (ii)前記部分被加数のそれぞれの1つを、入力キャリ
ー保存部分結果にキャリー保存加算して出力キャリー保
存部分結果を生じる、キャリー保存加算ステップであっ
て、該入力キャリー保存部分結果が、変化するアクティ
ブキャリービットと、変化するアクティブセーブビット
とを有し、該アクティブセーブビットの最上位ビットが
ビット位置Zを有し、該アクティブセーブビットの最下
位ビットがビット位置Yを有する、前記キャリー保存加
算ステップと、 (iii )前記(M+N)ビット累算値のXビットを、キ
ャリー保存サイクルにおいて、前記入力キャリー保存部
分結果に、ビット位置Zより高いビット位置において加
算するステップであって、ZおよびYが共にキャリー保
存サイクル間においてXだけ増加するようになってい
る、該加算ステップと、を含む、電子乗算および加算装
置内における乗算および加算方法。 - 【請求項12】 X=2である、請求項11記載の乗算
および加算方法。 - 【請求項13】 前記加算ステップが、 キャリー保存サイクルにおいて前記出力キャリー保存部
分結果をビット位置Z+1およびZ+2における拡張セ
ーブビットおよびビット位置Z+2における拡張キャリ
ービットにより拡張するステップを含み、 前記拡張セーブビットが、 前記(M+N)ビットの累算値のZ+1番目ビットと、 前記アクティブキャリービットのZ番目ビットの補数
と、 前記部分被加数のZ+1番目ビットの補数と、 の和によって与えられ、 前記拡張キャリービットが前記(M+N)ビットの累算
値のZ+2番目ビット補数により与えられる、請求項1
1記載の乗算および加算方法。 - 【請求項14】 Mビットの被乗数にNビットの乗数を
乗算し、かつ(M+N)ビットの累算値を加算する電子
乗算および加算装置であって、該装置が、 (i)前記Mビットの被乗数と前記Nビットの乗数との
乗算を表す部分被加数のシーケンスを発生する手段と、 (ii)少なくとも1つの前記部分被加数を、入力キャリ
ー保存部分結果にキャリー保存加算して出力キャリー保
存部分結果を生じるキャリー保存加算手段であって、該
入力キャリー保存部分結果および該出力キャリー保存部
分結果がそれぞれキャリー値およびセーブ値を含む、前
記キャリー保存加算手段と、 (iii )該キャリー値および該セーブ値を、 前記(M+N)ビットの累算値の少なくとも一部と、 第1部分被加数と、のそれぞれの1つに初期化する手段
と、を含む、電子乗算および加算装置。 - 【請求項15】 前記発生手段が改変されたブースエン
コーダを含み、前記部分被加数のシーケンスが改変され
たブース被加数のシーケンスである、請求項14記載の
電子乗算および加算装置。 - 【請求項16】 前記Nビットの乗数が符号付きである
時は、該Nビットの乗数を表す内部乗数のそれぞれのビ
ットR〔a〕が、 R〔(N−1)から1まで〕は前記Nビットの乗数の対
応ビットに等しく、 R〔N〕はR〔(N−1)〕に等しい、によって与えら
れる、請求項15記載の電子乗算および加算装置。 - 【請求項17】 前記Nビットの乗数が符号なしである
時は、該Nビットの乗数を表す内部乗数のそれぞれのビ
ットR〔a〕が、 R〔(N−1)から1まで〕は前記Nビットの乗数の対
応ビットに等しく、 R〔N〕は0に等しい、によって与えられる、請求項1
5記載の電子乗算および加算装置。 - 【請求項18】 もしR〔0〕が0に等しければ、前記
第1部分被加数が0に初期化される、請求項16記載の
電子乗算および加算装置。 - 【請求項19】 もしR〔0〕が1に等しければ、前記
第1部分被加数が、前記Mビット被乗数のビット毎の逆
に対して後に1を加算したものに初期化される、請求項
16記載の電子乗算および加算装置。 - 【請求項20】 前記キャリー値と前記セーブ値とを加
算するための最終加算器を含み、該最終加算器に対する
キャリー入力ビットがR〔0〕にセットされる、請求項
19記載の電子乗算および加算装置。 - 【請求項21】 Mビットの被乗数にNビットの乗数を
乗算し、かつ(M+N)ビットの累算値を加算する電子
乗算および加算装置内における乗算および加算方法であ
って、該方法が、 (i)前記Mビットの被乗数と前記Nビットの乗数との
乗算を表す一連の部分被加数を発生するステップと、 (ii)前記部分被加数のそれぞれの1つを入力キャリー
保存部分結果にキャリー保存加算して、出力キャリー保
存部分結果を生じるキャリー保存加算ステップであっ
て、該入力キャリー保存部分結果および該出力キャリー
保存部分結果がそれぞれキャリー値およびセーブ値を含
む、前記キャリー保存加算ステップと、 (iii )該キャリー値および該セーブ値を、 前記(M+N)ビットの累算値の少なくとも一部と、 第1部分被加数と、のそれぞれの1つに初期化するステ
ップと、を含む、電子乗算および加算装置内における乗
算および加算方法。 - 【請求項22】 (i)前記Mビットの被乗数と前記N
ビットの乗数との乗算を表す一連の部分被加数を発生す
る手段と、 (ii)少なくとも1つの前記部分被加数を入力キャリー
保存部分結果にキャリー保存加算して出力キャリー保存
部分結果を生じるキャリー保存加算手段であって、該入
力キャリー保存部分結果および該出力キャリー保存部分
結果がそれぞれキャリー値およびセーブ値を含む、前記
キャリー保存加算手段と、 (iii )該キャリー値および該セーブ値を、 前記(M+N)ビットの累算値の少なくとも一部と、 第1部分被加数と、のそれぞれの1つに初期化する手段
と、を含む、請求項1記載の電子乗算および加算装置。 - 【請求項23】 (i)前記Mビットの被乗数と前記N
ビットの乗数との乗算を表す部分被加数のシーケンスを
発生するステップと、 (ii)前記部分被加数のそれぞれの1つを入力キャリー
保存部分結果にキャリー保存加算して出力キャリー保存
部分結果を生じるキャリー保存加算ステップであって、
該入力キャリー保存部分結果および該出力キャリー保存
部分結果がそれぞれキャリー値およびセーブ値を含む、
前記キャリー保存加算ステップと、 (iii )該キャリー値および該セーブ値を、 前記(M+N)ビットの累算値の少なくとも一部と、 第1部分被加数と、のそれぞれの1つに初期化するステ
ップと、を含む、請求項11記載の電子乗算および加算
装置内における乗算および加算方法。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB94039559 | 1994-03-02 | ||
GB9403955A GB2287331B (en) | 1994-03-02 | 1994-03-02 | Electronic multiplying and adding apparatus and method |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH07271556A JPH07271556A (ja) | 1995-10-20 |
JP3516503B2 true JP3516503B2 (ja) | 2004-04-05 |
Family
ID=10751118
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP02703095A Expired - Lifetime JP3516503B2 (ja) | 1994-03-02 | 1995-02-15 | 電子乗算および加算装置および方法 |
Country Status (3)
Country | Link |
---|---|
US (1) | US5528529A (ja) |
JP (1) | JP3516503B2 (ja) |
GB (2) | GB2287331B (ja) |
Families Citing this family (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7395298B2 (en) * | 1995-08-31 | 2008-07-01 | Intel Corporation | Method and apparatus for performing multiply-add operations on packed data |
US6385634B1 (en) | 1995-08-31 | 2002-05-07 | Intel Corporation | Method for performing multiply-add operations on packed data |
US5721892A (en) * | 1995-08-31 | 1998-02-24 | Intel Corporation | Method and apparatus for performing multiply-subtract operations on packed data |
US6237016B1 (en) | 1995-09-05 | 2001-05-22 | Intel Corporation | Method and apparatus for multiplying and accumulating data samples and complex coefficients |
US5936872A (en) * | 1995-09-05 | 1999-08-10 | Intel Corporation | Method and apparatus for storing complex numbers to allow for efficient complex multiplication operations and performing such complex multiplication operations |
US6058408A (en) * | 1995-09-05 | 2000-05-02 | Intel Corporation | Method and apparatus for multiplying and accumulating complex numbers in a digital filter |
US5983253A (en) * | 1995-09-05 | 1999-11-09 | Intel Corporation | Computer system for performing complex digital filters |
US6470370B2 (en) | 1995-09-05 | 2002-10-22 | Intel Corporation | Method and apparatus for multiplying and accumulating complex numbers in a digital filter |
US5822459A (en) * | 1995-09-28 | 1998-10-13 | Intel Corporation | Method for processing wavelet bands |
US5621674A (en) * | 1996-02-15 | 1997-04-15 | Intel Corporation | Computer implemented method for compressing 24 bit pixels to 16 bit pixels |
US5831885A (en) * | 1996-03-04 | 1998-11-03 | Intel Corporation | Computer implemented method for performing division emulation |
US7454361B1 (en) | 1999-04-22 | 2008-11-18 | Ceats, Inc. | Individual seat selection ticketing and reservation system |
US6446104B1 (en) * | 1999-09-15 | 2002-09-03 | Sun Microsystems, Inc. | Double precision floating point multiplier having a 32-bit booth-encoded array multiplier |
US7430578B2 (en) * | 2001-10-29 | 2008-09-30 | Intel Corporation | Method and apparatus for performing multiply-add operations on packed byte data |
US7191203B2 (en) * | 2002-09-25 | 2007-03-13 | Broadcom Corporation | Method and system for high-speed multiplication |
US7797366B2 (en) * | 2006-02-15 | 2010-09-14 | Qualcomm Incorporated | Power-efficient sign extension for booth multiplication methods and systems |
US9563401B2 (en) * | 2012-12-07 | 2017-02-07 | Wave Computing, Inc. | Extensible iterative multiplier |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4575812A (en) * | 1984-05-31 | 1986-03-11 | Motorola, Inc. | X×Y Bit array multiplier/accumulator circuit |
EP0197945A1 (en) * | 1984-09-28 | 1986-10-22 | Motorola, Inc. | A digital signal processor for single cycle multiply/accumulation |
US5262976A (en) * | 1989-11-13 | 1993-11-16 | Harris Corporation | Plural-bit recoding multiplier |
US5124941A (en) * | 1990-11-01 | 1992-06-23 | Vlsi Technology Inc. | Bit-serial multipliers having low latency and high throughput |
US5325320A (en) * | 1992-05-01 | 1994-06-28 | Seiko Epson | Area efficient multiplier for use in an integrated circuit |
JP2859779B2 (ja) * | 1992-06-17 | 1999-02-24 | 三菱電機株式会社 | 乗算器 |
-
1994
- 1994-03-02 GB GB9403955A patent/GB2287331B/en not_active Expired - Lifetime
- 1994-03-02 GB GB9727525A patent/GB2317978B/en not_active Expired - Lifetime
- 1994-09-09 US US08/303,663 patent/US5528529A/en not_active Expired - Lifetime
-
1995
- 1995-02-15 JP JP02703095A patent/JP3516503B2/ja not_active Expired - Lifetime
Also Published As
Publication number | Publication date |
---|---|
GB9727525D0 (en) | 1998-02-25 |
GB2287331A (en) | 1995-09-13 |
GB2287331B (en) | 1998-04-29 |
GB9403955D0 (en) | 1994-04-20 |
GB2317978A (en) | 1998-04-08 |
JPH07271556A (ja) | 1995-10-20 |
US5528529A (en) | 1996-06-18 |
GB2317978B (en) | 1998-05-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3516503B2 (ja) | 電子乗算および加算装置および方法 | |
JP3605181B2 (ja) | 掛け算累算命令を使用したデータ処理 | |
JP6694880B2 (ja) | 有効度整合 | |
US5220525A (en) | Recoded iterative multiplier | |
US9519460B1 (en) | Universal single instruction multiple data multiplier and wide accumulator unit | |
US6446104B1 (en) | Double precision floating point multiplier having a 32-bit booth-encoded array multiplier | |
JP2011134346A (ja) | 算術プロセッサ | |
JP3139466B2 (ja) | 乗算器及び積和演算器 | |
US5796645A (en) | Multiply accumulate computation unit | |
JP2001524698A (ja) | マルチプレシジョン整数演算用の装置 | |
US7827226B2 (en) | Hybrid arithmetic logic unit | |
US6728744B2 (en) | Wide word multiplier using booth encoding | |
US5734599A (en) | Performing a population count using multiplication | |
JP2006228190A (ja) | 入力値に逆数演算を実施して結果値を作り出すデータ処理装置および方法 | |
US5036482A (en) | Method and circuitry for digital system multiplication | |
US5721697A (en) | Performing tree additions via multiplication | |
KR100308726B1 (ko) | 고속 산술 장치에서 올림수 예견가산기 스테이지의 수를 감소시키는 장치 및 방법 | |
US6633896B1 (en) | Method and system for multiplying large numbers | |
JPH04355827A (ja) | 開平演算装置 | |
JP3516504B2 (ja) | データ処理乗算装置および方法 | |
US7167885B2 (en) | Emod a fast modulus calculation for computer systems | |
JP2007500388A (ja) | 長整数乗算器 | |
EP0534760A2 (en) | High speed multiplier device | |
TWI679577B (zh) | 多位元加法器設備與用於執行算術運算之設備及方法 | |
US20240111489A1 (en) | Bignum addition and/or subtraction with carry propagation |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20040106 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20040120 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090130 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100130 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100130 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110130 Year of fee payment: 7 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110130 Year of fee payment: 7 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120130 Year of fee payment: 8 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130130 Year of fee payment: 9 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130130 Year of fee payment: 9 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
EXPY | Cancellation because of completion of term |