JP3778489B2 - プロセッサ、演算装置及び演算方法 - Google Patents
プロセッサ、演算装置及び演算方法 Download PDFInfo
- Publication number
- JP3778489B2 JP3778489B2 JP2001168737A JP2001168737A JP3778489B2 JP 3778489 B2 JP3778489 B2 JP 3778489B2 JP 2001168737 A JP2001168737 A JP 2001168737A JP 2001168737 A JP2001168737 A JP 2001168737A JP 3778489 B2 JP3778489 B2 JP 3778489B2
- Authority
- JP
- Japan
- Prior art keywords
- floating
- point number
- carry
- variable
- 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.)
- Expired - Fee Related
Links
- 238000000034 method Methods 0.000 title claims description 64
- 238000004364 calculation method Methods 0.000 claims description 49
- 230000010354 integration Effects 0.000 claims description 44
- 238000009825 accumulation Methods 0.000 description 15
- 238000010586 diagram Methods 0.000 description 12
- 230000014509 gene expression Effects 0.000 description 11
- 229910002056 binary alloy Inorganic materials 0.000 description 4
- 230000001934 delay Effects 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 241001237728 Precis Species 0.000 description 1
- 230000006835 compression Effects 0.000 description 1
- 238000007906 compression Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000010561 standard procedure Methods 0.000 description 1
Images
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/552—Powers or roots, e.g. Pythagorean sums
-
- 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/483—Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
Landscapes
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Engineering & Computer Science (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Pure & Applied Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computing Systems (AREA)
- Mathematical Optimization (AREA)
- General Engineering & Computer Science (AREA)
- Complex Calculations (AREA)
Description
【発明の属する技術分野】
本発明は、コンピュータのプロセッサなどに用いられる演算装置に関し、特に浮動小数点数の2乗算を行う演算装置の構成及びその演算方法に関する。
【0002】
【従来の技術】
コンピュータを用いた科学技術計算では、浮動小数点数で表現した数の2乗計算が頻繁に行われる。そのため、浮動小数点数の2乗算器の処理速度は、科学技術計算におけるコンピュータの処理能力に大きく影響する。したがって、従来から浮動小数点数の2乗算器の処理速度を向上させる種々の工夫がされている。
【0003】
以下、電子回路による浮動小数点数の2乗算及び従来におけるその高速化の手法について説明する。
浮動小数点数の乗算には、数値の積算と積算結果のまるめ処理という2つの処理を要する。従来の浮動小数点数の2乗算における高速化の工夫は、主として数値の積算に対して行われている。
【0004】
まず、8ビットの数a(=a7 a6 a5 a4 a3 a2 a1 a0)、b(=b7 b6 b5 b4 b3 b2 b1 b0)の積算について説明する。
図6は、数a、bの積算を説明する図である。図6に示すように、数a、bの積算では、まず各数のビットごとにa0b0からa7b7までの64(=8×8)個の積項が生成され、次にこれらの積項が順次加算される。このような積算を実行する積算器は、回路技術の定石的な手法として、ワラスツリー(Wallace tree)とバイナリアダー(加算器)との組合せによって構成される。
【0005】
2乗算では、積算する2つの数が同一であり、また、浮動小数点数の乗算では、最上位ビット(MSB:Most Significant Bit)は常に「1」である。したがって、8ビットの数aの2乗算は、図6において、b=a、a7=1として、図7に示すようになる。
ここで、図7に示す積項において、
(a)aiai=ai
(b)aiaj=ajai
が成り立つ。
(a)式は、同じ項の積算であるため、ANDゲートそのものが必要ないこととなる。
(b)式は、aiajという積項ajaiという積項が同じ項であることを意味する。したがって、この2つの積項が同じ位で加算される場合は、これらをまとめて1つの積項とし、1つ上の位で加算すれば良いことがわかる。
【0006】
この2乗算器における積項の対称性を用いて、ワラスツリーを簡単にする手法が従来から知られている。
図8は、図7の2乗算に対して積項の対称性を用い、ワラスツリーを簡単化して積項の数を減らした様子を示す図である。
図8において、例えば、s0の位の積項は、a0a0のみであり、これに上述した(a)式を適用できる。したがって、s0の位の値はa0がそのまま入ることとなる。
また、s1の位の積項はa1a0とa0a1であり、上述した(b)式が適用できる。したがって、1つ上のs2の位にこれらをまとめた1つの積項a1a0が加算される。
さらに、このs2の位の積項は、a2a0、a1a1及びa0a2の3つである。このうち、a1a1には(a)式が適用でき、a2a0とa0a2とには(b)式が適用できる。したがって、s2の位では、s1の位から(b)式の適用により桁上がりして加算されたa1a0と、(a)式の適用により残ったa1との加算が行われることとなる。
以上のようにして、図7において64個あった積項が36個に減少する。積項を減少させたことにより、2乗算器を構成する演算器を減少させて回路サイズを削減することができ、処理における遅延の蓄積を減少させて2乗算器における処理速度の向上を図ることができる。
【0007】
また、上記の積項を積算するバイナリアダー(加算器)において、組合せ回路を使って下位のキャリー(桁上げ)から上位のキャリーを作るキャリールックアヘッド(Carry Look Ahead:CLA)と呼ばれる回路技術がある。このキャリールックアヘッドを用いることにより、加算器の積算処理における遅延を小さくすることができる。
【0008】
また、上述したように、浮動小数点数の乗算では、入力の有効ビット数と出力の有効ビット数とを同じにするため、数値の積算結果に対するまるめ処理が行われる。
図9は、まるめ処理を含む乗算処理の手順を説明するフローチャートである。図9を参照すると、浮動小数点数の乗算では、まず、上述した手法などを用いて積算が行われ(ステップ901)、積算結果に基づいて、仮数におけるMSBの位置が確定する(ステップ902)。次に、MSBの位置に基づいてガードビットの位置が確定し(ステップ903)、さらにまるめ処理の対象であるラウンドビットが確定する(ステップ904)。そして、ステップ901の積算結果におけるラウンドビットに対して実際にまるめ処理が実行される(ステップ905)。このまるめ処理の結果、桁上がりが発生する場合は、指数部の値に「1」を加算する(ステップ906)。
以上の浮動小数点数の演算方法及びまるめ処理の方法は、IEEE(Institute of Electrical and Electronics Engineers:米国電気電子学会)754に準拠している。
【0009】
【発明が解決しようとする課題】
上述したように、従来から浮動小数点数の2乗算器の処理速度を向上させる工夫はなされているが、今日、コンピュータの処理能力に対する要求から、浮動小数点数の2乗算器においてもさらなる高速化が求められている。
【0010】
そこで、本発明は、浮動小数点数の積算(仮数の積算)を論理圧縮することにより、浮動小数点数の2乗算器を構成する演算器の数を減少させると共に、その処理速度を向上させることを目的とする。
【0011】
また、本発明は、浮動小数点数の積算とその積算結果に対するまるめ処理とを並列に行うことにより、浮動小数点数の2乗算器の処理速度を向上させることを他の目的とする。
【0012】
【課題を解決するための手段】
上記の目的を達成する本発明は、2進法で表された所定の変数を保持するレジスタと、このレジスタから演算対象の変数を読み出して種々の演算を行う演算装置とを備えたプロセッサにおいて、この演算装置は、変数の演算における所定ビット分の桁上がりに関する情報を擬似的に生成する擬似キャリー生成回路と、この擬似キャリー生成回路にて生成された桁上がりに関する情報を用いて変数の演算を行う組合せ回路とを備えることを特徴とする。
ここで、桁上がりに関する情報(キャリー)を擬似的に生成するとは、実際に数値計算を行った結果としてキャリーを得るのではなく、組合せ回路(擬似キャリー生成回路)を用いてキャリーのみを先読みして生成することを意味する。
さらにここで、この擬似キャリー生成回路は、演算におけるまるめ処理の対象となるビットに対して、この桁上がりに関する情報を生成する。
【0013】
また、本発明は、2進法で表された所定の変数を保持するレジスタと、このレジスタから演算対象の変数を読み出して種々の演算を行う演算装置とを備えたプロセッサにおいて、この演算装置は、変数の演算における所定ビット分の桁上がりを先読みする擬似キャリー生成回路と、この擬似キャリー生成回路による先読みの結果を用いて変数の演算を行う組合せ回路とを備えることを特徴とする。
【0014】
さらに、本発明は、2進法で表された所定の変数を保持するレジスタと、このレジスタから演算対象の変数を読み出して種々の演算を行う演算装置とを備えたプロセッサにおいて、この演算装置は、変数における下位所定ビット分の値に対して、数値を計算した場合の桁上がりに関する情報を生成する擬似キャリー生成回路と、この桁上がりに関する情報を加味して上位ビットの値の計算を行う組合せ回路とを備えることを特徴とする。
【0015】
さらにまた、本発明は、2進法で表された所定の変数を保持するレジスタと、このレジスタから演算対象の変数を読み出して種々の演算を行う演算装置とを備えたプロセッサにおいて、この演算装置は、変数の演算に伴うまるめ処理に用いるラウンドビットの位置に関する情報を、演算対象である変数から直接求める第1の組合せ回路と、この第1の組合せ回路により求められたラウンドビットの位置に関する情報を用いてまるめ処理を実行しながら、変数の演算を行う第2の組合せ回路とを備えることを特徴とする。
より詳しくは、この第2の組合せ回路は、演算対象である変数の下位の桁から順に計算を行うと共に、この第1の組合せ回路にて求められたラウンドビットの位置に関する情報を取得し、検出されたラウンドビットの位置まで計算が進んだ場合にこのラウンドビットの値を確定し、確定したラウンドビットの値を加味してさらに上位の桁の計算を行う。
【0016】
また、本発明は、2進法で表された所定の変数を保持するレジスタと、このレジスタから演算対象の変数を読み出して種々の演算を行う演算装置とを備えたプロセッサにおいて、この演算装置は、演算結果における最上位ビット(MSB:Most Significant Bit)の位置を、演算対象である変数から先見的に確定するMSB先見回路と、このMSB先見回路によって確定された最上位ビットの位置に基づいてまるめ処理を行う組合せ回路とを備えることを特徴とする。
【0017】
さらに、本発明は、2進法で表された所定の変数を保持するレジスタと、このレジスタから演算対象の変数を読み出してこの変数の2乗計算を行う演算装置とを備えたプロセッサにおいて、この演算装置は、演算対象の変数を√2と比較し、比較結果に基づいて、演算結果における最上位ビット(MSB:Most Significant Bit)の位置を確定するMSB先見回路と、このMSB先見回路によって確定された最上位ビットの位置に基づいてまるめ処理を行う組合せ回路とを備えることを特徴とする。
【0018】
また、本発明は、2進法で表された所定の浮動小数点数の乗算を行う演算装置において、浮動小数点数を保持するレジスタから演算対象の浮動小数点数を読み出す手段と、読み出された浮動小数点数における所定ビット分の桁上がりに関する情報を生成する手段と、この桁上がりに関する情報を加味して演算対象である浮動小数点数の仮数の積算を行う手段とを備えることを特徴とする。
ここで、この桁上がりに関する情報を生成する手段は、演算対象の浮動小数点数の仮数における下位所定ビット分の値に対して桁上がりに関する情報を生成し、積算を行う手段は、この桁上がりに関する情報を加味して仮数の上位ビットの値の積算を行うことを特徴とする。
【0019】
さらに、本発明は、2進法で表された所定の浮動小数点数の乗算を行う演算装置において、浮動小数点数を保持するレジスタから演算対象の浮動小数点数を読み出す手段と、この浮動小数点数の乗算における所定ビット分の桁上がりを先読みする手段と、この桁上がりの先読みの結果を用いて演算対象である浮動小数点数の乗算を行う手段とを備えることを特徴とする。
【0020】
さらにまた、本発明は、2進法で表された所定の浮動小数点数の乗算を行う演算装置において、浮動小数点数を保持するレジスタから演算対象の浮動小数点数を読み出す手段と、この浮動小数点数の乗算に伴うまるめ処理に用いる情報を、演算対象である浮動小数点数から直接求める手段と、求められたまるめ処理に用いる情報を用いてまるめ処理を実行しながら、この浮動小数点数の仮数の積算を行う手段とを備えることを特徴とする。
【0021】
また、本発明は、2進法で表された所定の浮動小数点数の乗算を行う演算装置において、浮動小数点数を保持するレジスタから演算対象の浮動小数点数を読み出す手段と、この浮動小数点数の乗算結果における最上位ビット(MSB:Most Significant Bit)の位置を、この浮動小数点数自体の仮数から直接求める手段とを備えることを特徴とする。
【0022】
さらに、本発明は、2進法で表された所定の浮動小数点数の2乗計算を行う演算装置において、浮動小数点数を保持するレジスタから演算対象の浮動小数点数を読み出す手段と、読み出された浮動小数点数の仮数を√2と比較し、比較結果に基づいて、演算結果における最上位ビット(MSB:Most Significant Bit)の位置を確定する手段とを備えることを特徴とする。
【0023】
また、本発明は、2進法で表された所定の浮動小数点数の乗算を行う演算装置の演算方法において、浮動小数点数を保持するレジスタから演算対象の浮動小数点数を読み出すステップと、読み出された浮動小数点数の仮数における下位所定ビット分の値に対して、数値を計算した場合の桁上がりに関する情報を生成するステップと、この桁上がりに関する情報を加味して上位ビットの値の計算を行うステップとを含むことを特徴とする。
【0024】
さらに、本発明は、2進法で表された所定の浮動小数点数の乗算を行う演算装置の演算方法において、浮動小数点数を保持するレジスタから演算対象の浮動小数点数を読み出すステップと、読み出された浮動小数点数の仮数を下位の桁から順に計算すると共に、まるめ処理に用いるラウンドビットの位置を検出するステップと、検出されたラウンドビットの位置まで計算が進んだ場合にこのラウンドビットの値を確定するステップと、確定したラウンドビットの値を加味してさらに上位の桁の計算を行うステップとを含むことを特徴とする。
【0025】
【発明の実施の形態】
以下、添付図面に示す実施の形態に基づいて、この発明を詳細に説明する。
本発明は、浮動小数点数の2乗算器を高速化する手法として、
・浮動小数点数の下位ビットの積算におけるキャリーの先読みを行う。
・浮動小数点数の積算結果におけるMSBを先見的に確定することにより、積算結果のまるめ処理を当該積算と並列に行う。
という2つの手法を提案する。
本実施の形態では、これらの手法を実現する組合せ回路(後述する擬似キャリー生成回路及びMSB先見回路)を組み込んだ演算装置を提供する。
【0026】
図1は、本実施の形態の演算装置が用いられるプロセッサの構成例を示す図である。図1を参照すると、プロセッサ100は、アドレス生成器11とデコーダ12とを備えた制御部10、演算装置21と汎用レジスタ22とを備えたデータ・パス20、及びメモリ200にアクセスするための外部バス・インタフェース30を備える。このプロセッサ100において、まず、制御部10のデコーダ12が、メモリ200に展開されたプロセスの命令を、外部バス・インタフェース30を介して入力し、復号してアドレス生成器11とデータ・パス20の演算装置21とに送る。そして、アドレス生成器11が受け取った命令に基づいてアドレスを生成し、メモリ200の該当アドレスからデータが読み出されてデータ・パス20の汎用レジスタ22に送られる。そして、演算装置21と汎用レジスタ22との間でデータの流れが循環する(CPUサイクル)。
【0027】
また、演算装置21は、浮動小数点数の2乗計算を行う演算手段である組合せ回路と共に、浮動小数点数の下位ビットの積算におけるキャリーの先読みを行うキャリー先読み手段としての組合せ回路である擬似キャリー生成回路21aと、浮動小数点数の積算結果におけるMSBを先見的に確定するMSB先見手段としての組合せ回路であるMSB先見回路21bとを備える。
【0028】
本発明の対象である浮動小数点数の2乗算器は、図1に示した演算装置21における2乗算の機能を特に限定して最適化したものである。したがって、この演算装置21を備えたプロセッサ100は、3次元グラフィックスエンジンや科学技術計算などの用途における専用計算機として用いられる。
【0029】
次に、上述した浮動小数点数の2乗算器を高速化する2つの手法について詳細に説明する。
(1)キャリーの先読みにより浮動小数点数の積算を高速化する手法
浮動小数点数の演算では、仮数の上位ビットは有効ビットとして使われるが、下位ビットに関してはまるめ処理の対象になるので、値の如何によらず、キャリーの有無と、1になっているビットがあるかどうかの判断のみが必要となる。
そこで、下位ビットの部分を実際に計算するのではなく、この下位ビットに関する情報(キャリーの有無と1になっているビットの有無)を適当な組合せ回路(擬似キャリー生成回路21a)を用いて生成できれば、簡単な回路構成で浮動小数点数の2乗算における数値の積算を高速化できる。
【0030】
ここで、擬似キャリー生成回路21aを構成するため、浮動小数点数の2乗算におけるキャリー信号の個数とまるめ信号について考察する。
図8に示した計算例に関して、キャリー信号の個数とまるめ信号とを下位ビットから順にまとめる。
<s0の位について>
s0の位は、加算する項がa0だけなので、加算結果はa0であり、キャリーは発生しない。まるめの結果はa0になる。よって、この桁からのキャリー信号をCarry0、まるめ信号をRound0とすると次式が成立する。
s0 = a0
Carry0 = 0
Round0 = a0
【0031】
<s1の位について>
s1の位は、加算する項が無いのでキャリーは発生せず、まるめの結果は保存される。よって、この桁からのキャリー信号をCarry1、まるめ信号をRound1とすると次式が成立する。
s1 = 0
Carry1 = 0
Round1 = a0
【0032】
<s2の位について>
ここでは、a1、a1a0の二つの項が加算される。これに、下位からのCarry1を加算すれば良いが、上記s0、s1の位についての検討に基づき、Carry1は常に0である。したがって、a1a0のビットパターンと出力の関係は次の真理値表にしたがう。
a1 a0 a1 a1a0 Carry1 Total
0 0
0 1
1 0 1 1
1 1 1 1 2
有効項数の総計が2以下なので、キャリーは1本であり、まるめの結果が更新される。したがって、この桁からのキャリー信号をCarry2、まるめ信号をRound2とすると次式が成立する。
Carry2 = a1a0
Round2 = Round1 + a1・−a0 = a0 + a1
【0033】
<s3の位について>
ここでは、a2a0の項が加算される。そして、キャリー信号Carry3とまるめ信号Round3の真理値表は次のようになる。
a2 a1 a0 a2a0 Carry2 Total
0 0 0
0 0 1
0 1 0
0 1 1 1 1
1 0 0
1 0 1 1 1
1 1 0
1 1 1 1 1 2
よって、この桁からのキャリー信号Carry3、まるめ信号Round3について、次式が成立する。
Round3 = Round2 + −a2・a1・a0 + a2・−a1・a0 = a0 + a1
Carry3 = a2・a1・a0
【0034】
<s4の位について>
ここでは、a2、a3a0、a2a1の各項が加算される。そして、キャリー信号Carry4とまるめ信号Round4の真理値表は次のようになる。
a3 a2 a1 a0 a2 a3a0 a2a1 Carry3 Total
0 0 0 0
0 0 0 1
0 0 1 0
0 0 1 1
0 1 0 0 1 1
0 1 0 1 1 1
0 1 1 0 1 1 2
0 1 1 1 1 1 1 3
1 0 0 0
1 0 0 1 1 1
1 0 1 0
1 0 1 1 1 1
1 1 0 0 1 1
1 1 0 1 1 1 2
1 1 1 0 1 1 2
1 1 1 1 1 1 1 1 4
これにより、Round4、Carry4の真理値表は次のようになる。
a3 a2 a1 a0 Total Round4 Carry4
0 0 0 0
0 0 0 1
0 0 1 0
0 0 1 1
0 1 0 0 1 1
0 1 0 1 1 1
0 1 1 0 2 1
0 1 1 1 3 1 1
1 0 0 0
1 0 0 1 1 1
1 0 1 0
1 0 1 1 1 1
1 1 0 0 1 1
1 1 0 1 2 1
1 1 1 0 2 1
1 1 1 1 4 1
よって、この桁からのキャリー信号Carry4、まるめ信号Round4について、次式が成立する。
Round4 = Round3 +([a3..a0] = 0100, 0101, 0111, 1001, 1011, 1100)
=(a0 + a1)+([a3..a0] = 0100, 1100)
= a0 + a1 + a2
Carry4a = a2a1
Carry4b = a3a2a0
【0035】
<s5の位について>
ここでは、a4a0 a3a1の項が加算される。そして、キャリー信号Carry5とまるめ信号Round5の真理値表は次のようになる。
a4 a3 a2 a1 a0 a4a0 a3a1 Carry4 Total
0 0 0 0 0
0 0 0 0 1
0 0 0 1 0
0 0 0 1 1
0 0 1 0 0
0 0 1 0 1
0 0 1 1 0 1 1
0 0 1 1 1 1 1
0 1 0 0 0
0 1 0 0 1
0 1 0 1 0 1 1
0 1 0 1 1 1 1
0 1 1 0 0
0 1 1 0 1 1 1
0 1 1 1 0 1 1 2
0 1 1 1 1 1 2 3
1 0 0 0 0
1 0 0 0 1 1 1
1 0 0 1 0
1 0 0 1 1 1 2
1 0 1 0 0
1 0 1 0 1 1 1
1 0 1 1 0 1 1
1 0 1 1 1 1 1 2
1 1 0 0 0
1 1 0 0 1 1 1
1 1 0 1 0 1 1
1 1 0 1 1 1 1 2
1 1 1 0 0
1 1 1 0 1 1 1 2
1 1 1 1 0 1 1 2
1 1 1 1 1 1 1 2 4
これにより、Round5及びCarry5の真理値表は次のようになる。
a4 a3 a2 a1 a0 Total Carry5 Round5
0 0 0 0 0
0 0 0 0 1
0 0 0 1 0
0 0 0 1 1
0 0 1 0 0
0 0 1 0 1
0 0 1 1 0 1 1
0 0 1 1 1 1 1
0 1 0 0 0
0 1 0 0 1
0 1 0 1 0 1 1
0 1 0 1 1 1 1
0 1 1 0 0
0 1 1 0 1 1 1
0 1 1 1 0 2 1
0 1 1 1 1 3 1 1
1 0 0 0 0
1 0 0 0 1 1 1
1 0 0 1 0
1 0 0 1 1 2 1
1 0 1 0 0
1 0 1 0 1 1 1
1 0 1 1 0 1 1
1 0 1 1 1 2 1
1 1 0 0 0
1 1 0 0 1 1 1
1 1 0 1 0 1 1
1 1 0 1 1 2 1
1 1 1 0 0
1 1 1 0 1 2 1
1 1 1 1 0 2 1
1 1 1 1 1 4 2
ここで、Carry5の擬似キャリー生成回路を作る。
上の真理値表のうちで、Carry5の値を「1」または「2」にする項を集めると、次のようになる。
a4 a3 a2 a1 a0 Carry5
0 1 1 1 0 1
0 1 1 1 1 1
1 0 1 1 1 1
1 1 0 1 1 1
1 1 1 0 1 1
1 1 1 1 0 1
1 1 1 1 1 2
これから、Carry5の主項は、a3a2a1 a4a2a1a0 a4a3a2a0 a4a3a1a0 の4つが見つかる。この主項を見つける手法は、論理圧縮の手法として知られているクワイン・マクラスキー法を用いることができる。
ここで見つかった3つの主項とCarry5との関係を調べると、
pt0 = a3a2a1
pt1 = a4a2a1a0
pt2 = a4a3a2a0
pt3 = a4a3a1a0
a4 a3 a2 a1 a0 pt0 pt1 pt2 pt3 Carry5
0 1 1 1 0 1 0 0 0 1
0 1 1 1 1 1 0 0 0 1
1 0 1 1 1 0 1 0 0 1
1 1 0 1 1 0 0 0 1 1
1 1 1 0 1 0 0 1 0 1
1 1 1 1 0 1 0 0 0 1
1 1 1 1 1 1 1 1 1 2 (i)
ここで、2つの擬似キャリーを作るとすると、(i)式からpt0、pt1、pt2、pt3を2つのグループに分ければ良いことがわかる。分け方は任意なので、例えば、
Carry5a = pt0 = a3a2a1
Carry5b = pt1 + pt2 + pt3 = a4a0(a3a2 + a2a1 + a1a3)
とすることができる。また、Round5は、次の論理式により作ることができる。
Round5 = a2 + a1 + a0
この3つの式によって2乗回路のs5までの論理を代理させることができる。
【0036】
<s6の位について>
ここでは、a3、a5a0、a4a1、a3a2 の項が加算される。そして、項数の総計の真理値表は次のようになる。
a5 a4 a3 a2 a1 a0 a3 a5a0 a4a1 a3a2 Carry5 Total
0 0 0 0 0 0
0 0 0 0 0 1
0 0 0 0 1 0
0 0 0 0 1 1
0 0 0 1 0 0
0 0 0 1 0 1
0 0 0 1 1 0
0 0 0 1 1 1
0 0 1 0 0 0 1 1
0 0 1 0 0 1 1 1
0 0 1 0 1 0 1 1
0 0 1 0 1 1 1 1
0 0 1 1 0 0 1 1 2
0 0 1 1 0 1 1 1 2
0 0 1 1 1 0 1 1 1 3
0 0 1 1 1 1 1 1 1 3
0 1 0 0 0 0
0 1 0 0 0 1
0 1 0 0 1 0 1 1
0 1 0 0 1 1 1 1
0 1 0 1 0 0
0 1 0 1 0 1
0 1 0 1 1 0 1 1
0 1 0 1 1 1 1 1 2
0 1 1 0 0 0 1 1
0 1 1 0 0 1 1 1
0 1 1 0 1 0 1 1 2
0 1 1 0 1 1 1 1 1 3
0 1 1 1 0 0 1 1 2
0 1 1 1 0 1 1 1 1 3
0 1 1 1 1 0 1 1 1 1 4
0 1 1 1 1 1 1 1 1 2 5
1 0 0 0 0 0
1 0 0 0 0 1 1 1
1 0 0 0 1 0
1 0 0 0 1 1 1 1
1 0 0 1 0 0
1 0 0 1 0 1 1 1
1 0 0 1 1 0
1 0 0 1 1 1 1 1
1 0 1 0 0 0 1 1
1 0 1 0 0 1 1 1 2
1 0 1 0 1 0 1 1
1 0 1 0 1 1 1 1 2
1 0 1 1 0 0 1 1 2
1 0 1 1 0 1 1 1 1 3
1 0 1 1 1 0 1 1 1 3
1 0 1 1 1 1 1 1 1 3
1 1 0 0 0 0
1 1 0 0 0 1 1 1
1 1 0 0 1 0 1 1
1 1 0 0 1 1 1 1 2
1 1 0 1 0 0
1 1 0 1 0 1 1 1
1 1 0 1 1 0 1 1
1 1 0 1 1 1 1 1 1 3
1 1 1 0 0 0 1 1
1 1 1 0 0 1 1 1 2
1 1 1 0 1 0 1 1 2
1 1 1 0 1 1 1 1 1 1 4
1 1 1 1 0 0 1 1 2
1 1 1 1 0 1 1 1 1 1 4
1 1 1 1 1 0 1 1 1 1 4
1 1 1 1 1 1 1 1 1 1 2 6
上の真理値表をCarry6とRound6について整理すると、次のようになる。
a5 a4 a3 a2 a1 a0 Total Carry6 Round6
0 0 1 0 0 0 1 1
0 0 1 0 0 1 1 1
0 0 1 0 1 0 1 1
0 0 1 0 1 1 1 1
0 0 1 1 0 0 2 1
0 0 1 1 0 1 2 1
0 0 1 1 1 0 3 1 1
0 0 1 1 1 1 3 1 1
0 1 0 0 1 0 1 1
0 1 0 0 1 1 1 1
0 1 0 1 1 0 1 1
0 1 0 1 1 1 2 1
0 1 1 0 0 0 1 1
0 1 1 0 0 1 1 1
0 1 1 0 1 0 2 1
0 1 1 0 1 1 3 1 1
0 1 1 1 0 0 2 1
0 1 1 1 0 1 3 1 1
0 1 1 1 1 0 4 2
0 1 1 1 1 1 5 2 1
1 0 0 0 0 1 1 1
1 0 0 0 1 1 1 1
1 0 0 1 0 1 1 1
1 0 0 1 1 1 1 1
1 0 1 0 0 0 1 1
1 0 1 0 0 1 2 1
1 0 1 0 1 0 1 1
1 0 1 0 1 1 2 1
1 0 1 1 0 0 2 1
1 0 1 1 0 1 3 1 1
1 0 1 1 1 0 3 1 1
1 0 1 1 1 1 3 1 1
1 1 0 0 0 1 1 1
1 1 0 0 1 0 1 1
1 1 0 0 1 1 2 1
1 1 0 1 0 1 1 1
1 1 0 1 1 0 1 1
1 1 0 1 1 1 3 1 1
1 1 1 0 0 0 1 1
1 1 1 0 0 1 2 1
1 1 1 0 1 0 2 1
1 1 1 0 1 1 4 2
1 1 1 1 0 0 2 1
1 1 1 1 0 1 4 2
1 1 1 1 1 0 4 2
1 1 1 1 1 1 6 3
これを、さらにCarry6について整理すると、次のようになる。
a5 a4 a3 a2 a1 a0 Carry6
0 0 1 1 0 0 1
0 0 1 1 0 1 1
0 0 1 1 1 0 1
0 0 1 1 1 1 1
0 1 0 1 1 1 1
0 1 1 0 1 0 1
0 1 1 0 1 1 1
0 1 1 1 0 0 1
0 1 1 1 0 1 1
0 1 1 1 1 0 2
0 1 1 1 1 1 1
1 0 1 0 0 1 1
1 0 1 0 1 1 1
1 0 1 1 0 0 1
1 0 1 1 0 1 1
1 0 1 1 1 0 1
1 0 1 1 1 1 1
1 1 0 0 1 1 1
1 1 0 1 1 1 1
1 1 1 0 0 1 1
1 1 1 0 1 0 1
1 1 1 0 1 1 2
1 1 1 1 0 0 1
1 1 1 1 0 1 2
1 1 1 1 1 0 2
1 1 1 1 1 1 3
これを論理圧縮すると、Carry6の主項は、次のように求めることができる。
a5 a4 a3 a2 a1 a0 Carry6
- - 1 1 - - 1 (i)
- 1 1 - 1 - 1 (ii)
1 - 1 - - 1 1 (iii)
1 1 - - 1 1 1 (iv)
- 1 - 1 1 1 1 (v)
ここで、各主項について出力への寄与を調べると、次のようになる。
a5 a4 a3 a2 a1 a0 (i) (ii) (iii) (iv) (v) Carry6
0 0 1 1 0 0 1 1
0 0 1 1 0 1 1 1
0 0 1 1 1 0 1 1
0 0 1 1 1 1 1 1
0 1 0 1 1 1 1 1
0 1 1 0 1 0 1 1
0 1 1 0 1 1 1 1
0 1 1 1 0 0 1 1
0 1 1 1 0 1 1 1
0 1 1 1 1 0 1 1 2
0 1 1 1 1 1 1 1 1 2
1 0 1 0 0 1 1 1
1 0 1 0 1 1 1 1
1 0 1 1 0 0 1 1
1 0 1 1 0 1 1 1 1 (vi)
1 0 1 1 1 0 1 1
1 0 1 1 1 1 1 1 1 (vi)
1 1 0 0 1 1 1 1
1 1 0 1 1 1 1 1 1
1 1 1 0 0 1 1 1
1 1 1 0 1 0 1 1
1 1 1 0 1 1 1 1 1 2
1 1 1 1 0 0 1 1
1 1 1 1 0 1 1 1 2 (vii)
1 1 1 1 1 0 1 1 2
1 1 1 1 1 1 1 1 1 1 1 3
【0037】
上の表において、主項だけを考えると、(vi)から(i)と(iii)とは同一グループとなる。一方、(vii)から(i)と(iii)とは別グループとなり、これは矛盾する。この矛盾を解消するためには、主項が(vii)で発火し(値が1となり)、(vi)で発火しない(値が1とならない)ような新しい項を考える必要がある。そこで、
(iii)’= a5a4a3a0
なる項を新たに作成する。この(iii)’は、(iii)の部分項になっている。このとき、3本のキャリーは次のようになる。
Carry6a =(i)+(iii)+(iv)+(v)
Carry6b =(ii)
Carry6c =(iii)’
また、Round6は、次の論理式により作ることができる。
Round6 = a3 + a2 + a1 + a0
以上のように、包含関係だけでは擬似キャリーを作れなくなる場合がある。この場合に、上記の(iii)’のような新しい項を作ってつじつまを合わせる。新たに作った項は主項ではなく、何かの部分項になっている。
【0038】
<s7の位について>
ここではa6a0、a5a1、a4a2の項が加算される。そして、項数の総計の真理値表は次のようになる。
a6 a5 a4 a3 a2 a1 a0 a6a0 a5a1 a4a2 Carry6 Total
0 0 0 0 0 0 0
0 0 0 0 0 0 1
0 0 0 0 0 1 0
0 0 0 0 0 1 1
0 0 0 0 1 0 0
0 0 0 0 1 0 1
0 0 0 0 1 1 0
0 0 0 0 1 1 1
0 0 0 1 0 0 0
0 0 0 1 0 0 1
0 0 0 1 0 1 0
0 0 0 1 0 1 1
0 0 0 1 1 0 0 1 1
0 0 0 1 1 0 1 1 1
0 0 0 1 1 1 0 1 1
0 0 0 1 1 1 1 1 1
0 0 1 0 0 0 0
0 0 1 0 0 0 1
0 0 1 0 0 1 0
0 0 1 0 0 1 1
0 0 1 0 1 0 0 1 1
0 0 1 0 1 0 1 1 1
0 0 1 0 1 1 0 1 1
0 0 1 0 1 1 1 1 1 2
0 0 1 1 0 0 0
0 0 1 1 0 0 1
0 0 1 1 0 1 0 1 1
0 0 1 1 0 1 1 1 1
0 0 1 1 1 0 0 1 1 2
0 0 1 1 1 0 1 1 1 2
0 0 1 1 1 1 0 1 2 3
0 0 1 1 1 1 1 1 2 3
0 1 0 0 0 0 0
0 1 0 0 0 0 1
0 1 0 0 0 1 0 1 1
0 1 0 0 0 1 1 1 1
0 1 0 0 1 0 0
0 1 0 0 1 0 1
0 1 0 0 1 1 0 1 1
0 1 0 0 1 1 1 1 1
0 1 0 1 0 0 0
0 1 0 1 0 0 1 1 1
0 1 0 1 0 1 0 1 1
0 1 0 1 0 1 1 1 1 2
0 1 0 1 1 0 0 1 1
0 1 0 1 1 0 1 1 1
0 1 0 1 1 1 0 1 1 2
0 1 0 1 1 1 1 1 1 2
0 1 1 0 0 0 0
0 1 1 0 0 0 1
0 1 1 0 0 1 0 1 1
0 1 1 0 0 1 1 1 1 2
0 1 1 0 1 0 0 1 1
0 1 1 0 1 0 1 1 1
0 1 1 0 1 1 0 1 1 2
0 1 1 0 1 1 1 1 1 1 3
0 1 1 1 0 0 0
0 1 1 1 0 0 1 1 1
0 1 1 1 0 1 0 1 1 2
0 1 1 1 0 1 1 1 2 3
0 1 1 1 1 0 0 1 1 2
0 1 1 1 1 0 1 1 2 3
0 1 1 1 1 1 0 1 1 2 4
0 1 1 1 1 1 1 1 1 3 5
1 0 0 0 0 0 0
1 0 0 0 0 0 1 1 1
1 0 0 0 0 1 0
1 0 0 0 0 1 1 1 1
1 0 0 0 1 0 0
1 0 0 0 1 0 1 1 1
1 0 0 0 1 1 0
1 0 0 0 1 1 1 1 1
1 0 0 1 0 0 0
1 0 0 1 0 0 1 1 1
1 0 0 1 0 1 0
1 0 0 1 0 1 1 1 1
1 0 0 1 1 0 0 1 1
1 0 0 1 1 0 1 1 1 2
1 0 0 1 1 1 0 1 1
1 0 0 1 1 1 1 1 1 2
1 0 1 0 0 0 0
1 0 1 0 0 0 1 1 1
1 0 1 0 0 1 0
1 0 1 0 0 1 1 1 1
1 0 1 0 1 0 0 1 1
1 0 1 0 1 0 1 1 1 2
1 0 1 0 1 1 0 1 1
1 0 1 0 1 1 1 1 1 1 3
1 0 1 1 0 0 0
1 0 1 1 0 0 1 1 1
1 0 1 1 0 1 0 1 1
1 0 1 1 0 1 1 1 1 2
1 0 1 1 1 0 0 1 1 2
1 0 1 1 1 0 1 1 1 1 3
1 0 1 1 1 1 0 1 2 3
1 0 1 1 1 1 1 1 1 2 4
1 1 0 0 0 0 0
1 1 0 0 0 0 1 1 1
1 1 0 0 0 1 0 1 1
1 1 0 0 0 1 1 1 1 2
1 1 0 0 1 0 0
1 1 0 0 1 0 1 1 1
1 1 0 0 1 1 0 1 1
1 1 0 0 1 1 1 1 1 2
1 1 0 1 0 0 0
1 1 0 1 0 0 1 1 1 2
1 1 0 1 0 1 0 1 1
1 1 0 1 0 1 1 1 1 1 3
1 1 0 1 1 0 0 1 1
1 1 0 1 1 0 1 1 1 2
1 1 0 1 1 1 0 1 1 2
1 1 0 1 1 1 1 1 1 1 3
1 1 1 0 0 0 0
1 1 1 0 0 0 1 1 1
1 1 1 0 0 1 0 1 1
1 1 1 0 0 1 1 1 1 1 3
1 1 1 0 1 0 0 1 1
1 1 1 0 1 0 1 1 1 2
1 1 1 0 1 1 0 1 1 2
1 1 1 0 1 1 1 1 1 1 1 4
1 1 1 1 0 0 0
1 1 1 1 0 0 1 1 1 2
1 1 1 1 0 1 0 1 1 2
1 1 1 1 0 1 1 1 1 2 4
1 1 1 1 1 0 0 1 1 2
1 1 1 1 1 0 1 1 1 2 4
1 1 1 1 1 1 0 1 1 2 4
1 1 1 1 1 1 1 1 1 1 3 6
上の真理値表をCarry7とRound7について整理すると、次のようになる。
a6 a5 a4 a3 a2 a1 a0 Total Carry7 Round7
0 0 0 0 0 0 0
0 0 0 0 0 0 1
0 0 0 0 0 1 0
0 0 0 0 0 1 1
0 0 0 0 1 0 0
0 0 0 0 1 0 1
0 0 0 0 1 1 0
0 0 0 0 1 1 1
0 0 0 1 0 0 0
0 0 0 1 0 0 1
0 0 0 1 0 1 0
0 0 0 1 0 1 1
0 0 0 1 1 0 0 1 1
0 0 0 1 1 0 1 1 1
0 0 0 1 1 1 0 1 1
0 0 0 1 1 1 1 1 1
0 0 1 0 0 0 0
0 0 1 0 0 0 1
0 0 1 0 0 1 0
0 0 1 0 0 1 1
0 0 1 0 1 0 0 1 1
0 0 1 0 1 0 1 1 1
0 0 1 0 1 1 0 1 1
0 0 1 0 1 1 1 2 1
0 0 1 1 0 0 0
0 0 1 1 0 0 1
0 0 1 1 0 1 0 1 1
0 0 1 1 0 1 1 1 1
0 0 1 1 1 0 0 2 1
0 0 1 1 1 0 1 2 1
0 0 1 1 1 1 0 3 1 1
0 0 1 1 1 1 1 3 1 1
0 1 0 0 0 0 0
0 1 0 0 0 0 1
0 1 0 0 0 1 0 1 1
0 1 0 0 0 1 1 1 1
0 1 0 0 1 0 0
0 1 0 0 1 0 1
0 1 0 0 1 1 0 1 1
0 1 0 0 1 1 1 1 1
0 1 0 1 0 0 0
0 1 0 1 0 0 1 1 1
0 1 0 1 0 1 0 1 1
0 1 0 1 0 1 1 2 1
0 1 0 1 1 0 0 1 1
0 1 0 1 1 0 1 1 1
0 1 0 1 1 1 0 2 1
0 1 0 1 1 1 1 2 1
0 1 1 0 0 0 0
0 1 1 0 0 0 1
0 1 1 0 0 1 0 1 1
0 1 1 0 0 1 1 2 1
0 1 1 0 1 0 0 1 1
0 1 1 0 1 0 1 1 1
0 1 1 0 1 1 0 2 1
0 1 1 0 1 1 1 3 1 1
0 1 1 1 0 0 0
0 1 1 1 0 0 1 1 1
0 1 1 1 0 1 0 2 1
0 1 1 1 0 1 1 3 1 1
0 1 1 1 1 0 0 2 1
0 1 1 1 1 0 1 3 1 1
0 1 1 1 1 1 0 4 2
0 1 1 1 1 1 1 5 2 1
1 0 0 0 0 0 0
1 0 0 0 0 0 1 1 1
1 0 0 0 0 1 0
1 0 0 0 0 1 1 1 1
1 0 0 0 1 0 0
1 0 0 0 1 0 1 1 1
1 0 0 0 1 1 0
1 0 0 0 1 1 1 1 1
1 0 0 1 0 0 0
1 0 0 1 0 0 1 1 1
1 0 0 1 0 1 0
1 0 0 1 0 1 1 1 1
1 0 0 1 1 0 0 1 1
1 0 0 1 1 0 1 2 1
1 0 0 1 1 1 0 1 1
1 0 0 1 1 1 1 2 1
1 0 1 0 0 0 0
1 0 1 0 0 0 1 1 1
1 0 1 0 0 1 0
1 0 1 0 0 1 1 1 1
1 0 1 0 1 0 0 1 1
1 0 1 0 1 0 1 2 1
1 0 1 0 1 1 0 1 1
1 0 1 0 1 1 1 3 1 1
1 0 1 1 0 0 0
1 0 1 1 0 0 1 1 1
1 0 1 1 0 1 0 1 1
1 0 1 1 0 1 1 2 1
1 0 1 1 1 0 0 2 1
1 0 1 1 1 0 1 3 1 1
1 0 1 1 1 1 0 3 1 1
1 0 1 1 1 1 1 4 2
1 1 0 0 0 0 0
1 1 0 0 0 0 1 1 1
1 1 0 0 0 1 0 1 1
1 1 0 0 0 1 1 2 1
1 1 0 0 1 0 0
1 1 0 0 1 0 1 1 1
1 1 0 0 1 1 0 1 1
1 1 0 0 1 1 1 2 1
1 1 0 1 0 0 0
1 1 0 1 0 0 1 2 1
1 1 0 1 0 1 0 1 1
1 1 0 1 0 1 1 3 1 1
1 1 0 1 1 0 0 1 1
1 1 0 1 1 0 1 2 1
1 1 0 1 1 1 0 2 1
1 1 0 1 1 1 1 3 1 1
1 1 1 0 0 0 0
1 1 1 0 0 0 1 1 1
1 1 1 0 0 1 0 1 1
1 1 1 0 0 1 1 3 1 1
1 1 1 0 1 0 0 1 1
1 1 1 0 1 0 1 2 1
1 1 1 0 1 1 0 2 1
1 1 1 0 1 1 1 4 2
1 1 1 1 0 0 0
1 1 1 1 0 0 1 2 1
1 1 1 1 0 1 0 2 1
1 1 1 1 0 1 1 4 2
1 1 1 1 1 0 0 2 1
1 1 1 1 1 0 1 4 2
1 1 1 1 1 1 0 4 2
1 1 1 1 1 1 1 6 3
これを、さらにCarry7について整理すると、次のようになる。
a6 a5 a4 a3 a2 a1 a0 Carry7
0 0 1 0 1 1 1 1
0 0 1 1 1 0 0 1
0 0 1 1 1 0 1 1
0 0 1 1 1 1 0 1
0 0 1 1 1 1 1 1
0 1 0 1 0 1 1 1
0 1 0 1 1 1 0 1
0 1 0 1 1 1 1 1
0 1 1 0 0 1 1 1
0 1 1 0 1 1 0 1
0 1 1 0 1 1 1 1
0 1 1 1 0 1 0 1
0 1 1 1 0 1 1 1
0 1 1 1 1 0 0 1
0 1 1 1 1 0 1 1
0 1 1 1 1 1 0 2
0 1 1 1 1 1 1 2
1 0 0 1 1 0 1 1
1 0 0 1 1 1 1 1
1 0 1 0 1 0 1 1
1 0 1 0 1 1 1 1
1 0 1 1 0 1 1 1
1 0 1 1 1 0 0 1
1 0 1 1 1 0 1 1
1 0 1 1 1 1 0 1
1 0 1 1 1 1 1 2
1 1 0 0 0 1 1 1
1 1 0 0 1 1 1 1
1 1 0 1 0 0 1 1
1 1 0 1 0 1 1 1
1 1 0 1 1 0 1 1
1 1 0 1 1 1 0 1
1 1 0 1 1 1 1 1
1 1 1 0 0 1 1 1
1 1 1 0 1 0 1 1
1 1 1 0 1 1 0 1
1 1 1 0 1 1 1 2
1 1 1 1 0 0 1 1
1 1 1 1 0 1 0 1
1 1 1 1 0 1 1 2
1 1 1 1 1 0 0 1
1 1 1 1 1 0 1 2
1 1 1 1 1 1 0 2
1 1 1 1 1 1 1 3
これを論理圧縮して、Carry7の主項を取り出すと、次のようになる。
a6 a5 a4 a3 a2 a1 a0 Carry7
- - 1 1 1 - - 1
- 1 1 - 1 1 - 1
1 1 - - - 1 1 1
1 - 1 - 1 - 1 1
- - 1 - 1 1 1 1
- 1 - 1 - 1 1 1
- 1 - 1 1 1 - 1
- 1 1 - - 1 1 1
- 1 1 1 - 1 - 1
1 - - 1 1 - 1 1
1 - 1 1 - 1 1 1
1 1 - 1 - - 1 1
【0039】
以上、図8におけるs0からs7までの各桁について、キャリー信号の個数及びまるめ信号の検討を行った。
図2は、上述した、キャリー信号の個数及びまるめ信号を求め、擬似キャリーを生成する手法を一般化したフローチャートである。
図2に示すように、まず、キャリーに寄与する主項が検出される(ステップ201)。次に、1つのキャリーに対して複数の主項が発火するものがあるかどうかが判断され、そのような主項が存在する場合は、これらの主項が1つのグループにまとめられる(ステップ202、203)。また、複数のキャリーに対して複数の主項が発火するものがあるかどうかが判断され、そのような主項が存在する場合は、同一の主項の重複を許し、かつキャリーの個数に合わせて、主項がグループ分けされる(ステップ204、205)。
【0040】
次に、主項の複数のグループが発火する個数とキャリーの数とを一致させる処理が行われる(ステップ206)。ステップ205までの処理が終わった段階で、擬似キャリーが1本の場合、当該擬似キャリーの値が一意的に決まる。また、擬似キャリーが2本の場合、当該擬似キャリーの取り得る値は一般に複数存在する。また、擬似キャリーが3本以上になると、当該擬似キャリーの値は決まらないことが多く、特殊な場合分けが必要となる。例えば上述のs0からs7までの各桁について調べると、s0及びs1は、キャリーの個数が0であるから対象外である。s2及びs3は、キャリーの個数が1であるから擬似キャリーの値が一意的に決まる。s4は、キャリーの個数が2であるが、主項の数とキャリーの数とが一致しているので、擬似キャリーの値が一意的に決まる。s5は、キャリーの個数が2であり、擬似キャリーの取り得る値は複数存在する。s6及びs7は、キャリーの個数が3であり、主項だけでは擬似キャリーの値が決まらない。ここでは、s5の場合に擬似キャリーの取り得る値が複数であるので、ステップ206において、主項の複数のグループが発火する個数とキャリーの数とを一致させ、2つの擬似キャリーを作成している。
【0041】
次に、ステップ202乃至ステップ206の処理において擬似キャリーの値が決まらない場合、適当な主項が部分項に分けられ、ステップ202に戻ってこれ以降の処理が繰り返され、擬似キャリーの値が決定される(ステップ207、208)。上記の例では、s6の場合が該当し、主項を部分項へ分割する操作を行って3つの擬似キャリーの値を決めている。
【0042】
以上のような手順で擬似キャリーを作成することができる。しかしながら、上述したようにs6以上の上位ビットに関しては、擬似キャリーの取り得る値が増加し、これを一意的に決定するための処理が複雑になるので、キャリーの先読みを行うことは現実的ではない。そこで、本実施の形態では、s5の桁から発生する2つの擬似キャリーをf0 = Carry5a、f1 = Carry5bとし、まるめをr5として、元の式に代入すると、浮動小数点数の2乗計算は図3に示すようになる。
【0043】
図3に示すように、本実施の形態では下位6ビットの演算が不要となるため、この部分の演算における遅延の蓄積を削減することができ、動作速度が向上する。上記s5までの擬似キャリーf0、f1は、2ゲート・ディレイ(2ゲート分の遅延)で作ることができ、s6の桁のワラスツリーの入力となる。一方、s6の桁に元々あった4つの積項a3、a5a0、a4a1、a3a2は、1ゲート・ディレイで作ることができる。したがって、差引き1ゲート・ディレイのコストで擬似キャリー生成回路21aが導入されたことになる。
また、図3と従来技術において説明した図8とを比較すると、積項の数は、図8における36個から29個に減少しており、回路サイズの削減にも効果があることがわかる。
【0044】
実際の2乗算器は、VHDLやVerilog HDLなどのハードウェア記述言語(HDL:Hardware Description Language)にて図3に示したような演算式を記述し、CADにてこの演算式を満足する回路設計を行うことにより作成する。図5は、8ビット×8ビットの2乗算器の構成例を示す図である。図5において、r5、f0、f1とある出力が、図3におけるr5、f0、f1の値にそれぞれ対応する。したがって、この部分の組合せ回路が擬似キャリー生成回路21aに相当し、これらの出力に、下位6ビット分の計算が集約されることとなる。
なお、本実施の形態では、浮動小数点数の2乗計算を対象としているが、キャリーの先読みにより浮動小数点数の積算を高速化する手法自体は、他の演算においても利用することができる。すなわち、本手法は、乗算における積項の加算のような多数のビットを加算する場合であって、かつ下位の数ビットに関しては、まるめ処理などによって値の如何によらず、キャリーの有無と1になっているビットがあるかどうかの判断のみが必要となる場合に、当該下位ビットに対して、キャリーに関する情報のみを先読みし、数値計算を省略するものである。したがって、2乗計算のみならず、浮動小数点数の乗算など、同様の条件が該当する演算であれば、本手法を利用することが可能である。
【0045】
ところで、本実施の形態における2乗算、すなわち8ビットの浮動小数点数の2乗算において、最上位のs15、s14、s13、s12は、加算する積項がa6、a5、a4のみで構成されできているので、この部分の計算を簡略化することができる。
s11からは最大で2個のキャリーが出てくるので、これをCarry11としてs12とCarry12の真理値表を求めると、次のようになる。
a6 a5 a4 Carry11 a6 a4 a6a5 s12 Carry12
0 0 0 0 0 0 0 0 0
0 0 0 1 0 0 0 1 0
0 0 0 2 0 0 0 0 1
0 0 1 0 0 1 0 1 0
0 0 1 1 0 1 0 0 1
0 0 1 2 0 1 0 1 1
0 1 0 0 0 0 0 0 0
0 1 0 1 0 0 0 1 0
0 1 0 2 0 0 0 0 1
0 1 1 0 0 1 0 1 0
0 1 1 1 0 1 0 0 1
0 1 1 2 0 1 0 1 1
1 0 0 0 1 0 0 1 0
1 0 0 1 1 0 0 0 1
1 0 0 2 1 0 0 1 1
1 0 1 0 1 1 0 0 1
1 0 1 1 1 1 0 1 1
1 0 1 2 1 1 0 0 2
1 1 0 0 1 0 1 0 1
1 1 0 1 1 0 1 1 1
1 1 0 2 1 0 1 0 2
1 1 1 0 1 1 1 1 1
1 1 1 1 1 1 1 0 2
1 1 1 2 1 1 1 1 2
ここで得られたCarry12を使って、s13、Carry13の真理値表を求めると、次のようになる。
a6 a5 a4 Carry11 Carry12 a5 s13 Carry13
0 0 0 0 0 0 0 0
0 0 0 1 0 0 0 0
0 0 0 2 1 0 1 0
0 0 1 0 0 0 0 0
0 0 1 1 1 0 1 0
0 0 1 2 1 0 1 0
0 1 0 0 0 1 1 0
0 1 0 1 0 1 1 0
0 1 0 2 1 1 0 1
0 1 1 0 0 1 1 0
0 1 1 1 1 1 0 1
0 1 1 2 1 1 0 1
1 0 0 0 0 0 0 0
1 0 0 1 1 0 1 0
1 0 0 2 1 0 1 0
1 0 1 0 1 0 1 0
1 0 1 1 1 0 1 1
1 0 1 2 2 0 0 1
1 1 0 0 1 1 0 1
1 1 0 1 1 1 0 1
1 1 0 2 2 1 1 1
1 1 1 0 1 1 0 1
1 1 1 1 2 1 1 1
1 1 1 2 2 1 1 1
ここで得られたCarry13を使って、さらにs14、s15(= Carry14)の真理値表を求めると、次のようになる。
a6 a5 a4 Carry11 Carry13 a6 1 S14 S15
0 0 0 0 0 0 1 1 0
0 0 0 1 0 0 1 1 0
0 0 0 2 0 0 1 1 0
0 0 1 0 0 0 1 1 0
0 0 1 1 0 0 1 1 0
0 0 1 2 0 0 1 1 0
0 1 0 0 0 0 1 1 0
0 1 0 1 0 0 1 1 0
0 1 0 2 1 0 1 0 1
0 1 1 0 0 0 1 1 0
0 1 1 1 1 0 1 0 1
0 1 1 2 1 0 1 0 1
1 0 0 0 0 1 1 0 1
1 0 0 1 0 1 1 0 1
1 0 0 2 0 1 1 0 1
1 0 1 0 0 1 1 0 1
1 0 1 1 1 1 1 1 1
1 0 1 2 1 1 1 1 1
1 1 0 0 1 1 1 1 1
1 1 0 1 1 1 1 1 1
1 1 0 2 1 1 1 1 1
1 1 1 0 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 2 1 1 1 1 1
これらの関係からs6、s5、s4、Carry11が決まれば、s12より上位の擬似キャリーを全て決定することができる。この擬似キャリーを使ってs14、s15を決めることができる。例えば、S14は、次の計算により求めることができる。
S14 ≦ '1'when S(6 downto 5)="00" or S(6 downto 5)="11"
or (S(6 downto 5)="01" and Carry11 =0)
or ((S(5 downto 4)="01" or S(5 downto 4)="10") and Carry11 =1)
or (S(6= ='1' and S(4)='1' Carry11 =2)
以上のようにして、Carry11が決まれば、S12、S13、S14、S15は、全て2ゲート・ディレイで確定することができる。これは、この部分にアダーを置いて下位から順次決定するよりも速い。
しかしながら、上位ビットはワラスツリーのディレイの下り坂にある部分であるため、様々な回路構成を取ることが可能である。例えば、この部分に2段キャリースキップアダーを用いても、同程度の動作速度を実現することができる。
【0046】
さて、本実施の形態及び従来の乗算器に関して、s6のワラスツリーの出力が確定するまでのゲート・ディレイを比較すると、通常の乗算器を2乗計算に用いた場合で7ゲート・ディレイとなる。また、図8に示したように2乗回路の特性を使って項数を削減した場合で6ゲート・ディレイとなる。これに対し、本実施の形態によるキャリーの先読みを行った場合、3ゲート・ディレイとなる。したがって、本実施の形態による擬似キャリー生成回路21aを演算装置21に組み込むことによって、2乗回路の処理速度を大幅に高速化することができる。
【0047】
なお、擬似キャリー生成回路21aを、より高位の桁に対して作ることは、論理的には可能である。しかし、擬似キャリーを組合せ回路で作るために必要な積項の数は、Carry6で6、Carry7で10となり、桁が上がるに伴って高速化という擬似キャリー生成回路の利点が徐々になくなる。また、Carry7以上の高位の擬似キャリーを生成するには、主項だけでなく部分項が必要になるため、計算にようする時間がさらに増すこととなる。
そして、キャリーの個数が多い場合は、通常の演算回路における手法でキャリーを扱った方が回路サイズも少なくなり、回路ディレイも少なくなる。つまり高位の桁に関しては最適に組まれた擬似キャリー発生回路と真のキャリーを発生させる演算回路は一致し、擬似キャリーを用いる意義はなくなる。
【0048】
(2)浮動小数点数の積算結果におけるMSBを先見的に確定し、積算結果のまるめ処理を当該積算と並列に行う手法
浮動小数点数の乗算では、入力の有効ビット数と出力の有効ビット数とを同じにするため、仮数の積算結果に対するまるめ処理が行われる。まるめ処理では、浮動小数点数の積算結果の何桁目をラウンドビットとしてまるめるかを決めるために、当該積算結果におけるMSBの「1」の位置を確定する必要がある。そのため、通常は浮動小数点数の積算が完了した後にまるめ処理が行われている。
そこで、適当な組合せ回路(MSB先見回路21b)を用いてMSBの「1」の位置を先見的に確定することができれば、これに基づいてラウンドビットの位置を確定できるため、まるめ処理を浮動小数点数の積算と並行して行うことが可能となり、これにより浮動小数点数の2乗計算を高速化することができる。
【0049】
まず、本実施の形態によるMSBの位置を先見的に確定する手法の説明の準備として、浮動小数点数の積算が完了した後にまるめ処理を行う通常の手法について説明する。
従来の技術において説明したように、IEEE754に基づく通常のまるめ処理を含む浮動小数点数の乗算処理は、図9のフローチャートにしたがう。
【0050】
具体的な計算例を挙げて、図9にしたがった浮動小数点数の2乗算の手順を説明する。
図4は、数値4/3の2進数表記(ただし、有効桁数は24ビット)である1.01010101010101010101011の2乗算における積算結果を示す図である。
図4に示す積算結果である
011100011100011100011100111000111000111000111001
からMSBがわかるので(図9のステップ902参照)、ここから24ビットを切り取り、25ビット目をガードビットとする(ステップ903参照)。そして、26ビット目以降、すなわち下位22ビットについて、次のORを取り、ラウンドビットとする(ステップ904参照)。
RoundBit = '0' when ("1000111000111000111001"="0000000000000000000000")
else '1'
したがって、図4の積算結果においては、
RoundBit = '1'
となる。
【0051】
そして、下位から23ビット目、すなわちガードビットの値が「1」であり、かつラウンドビットまたは下位から24ビット目、すなわちulp(Unit of Least Precis)の値が「1」である場合、IEEE754の決めるところにより、このulpのビットに1を加えてまるめ処理の結果とする(ステップ905参照)。その他の場合は、上述したMSBから24ビット目までの値をまるめ処理の結果とする。図4に示した積算結果においては、下位から22ビット目、23ビット目、24ビット目の値がいずれも「1」であるので、下位から24ビット目のulpに1を加える。したがって、まるめ処理の結果は、
111000111000111000111001+1 = 111000111000111000111010
となる。
さらに、このまるめ処理によって桁上がりが発生しMSBがずれる場合は、指数に1を加える処理を行うが(ステップ906参照)、図4に示した例では桁上がりは発生しないので、この処理は行われない。
以上のようにして、積算結果に基づいてMSBの位置を検出し、これに続く一連の処理により、まるめ処理が行われる。
【0052】
ここで、MSBの「1」の位置を先見的に発見する方法について考察する。
浮動小数点数の乗算では、乗算結果が2以上の値か否かによりMSBの位置が変わる。これから、乗算結果が2以上となるかどうかを予め知ることができれば、MSBの位置を先見的に検出することができる。したがって、2乗算の場合は、2乗する浮動小数点数の仮数を√2(=21/2)と比較することにより、計算結果が2以上となるかどうかがわかり、当該計算結果におけるMSBの位置を確定することが可能となる。
【0053】
IEEE754で規定されている単精度32ビットと倍精度64ビットの場合について具体的に説明する。
単精度の√2は、
√2= 1.0110 1010 0000 1001 1110 011
であり、これを2乗すると、
1.1111 1111 1111 1111 1111 111
となる。したがって、計算対象である元の数が√2以下であれば、2乗した数は2以下になる。
同様に、倍精度の√2は、
√2
= 1.0110 1010 0000 1001 1110 0110 0110 0111 1111 0011 1010 0010 0000 1
であり、これを2乗すると、
1.1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1
となる。したがって、計算対象である元の数が√2以下であれば、2乗した数は2以下になる。
以上のように、単精度、倍精度ともに、乗算対象の浮動小数点数の仮数を√2と比較することにより、乗算結果におけるMSBの位置を確定することができる。そして、このMSBの位置に基づいて、当該乗算結果における指数とulp、ガードビット、ラウンドビットが確定することとなる。
【0054】
このMSBを先見的に発見する手法を、上述した数値4/3の2進数表記である1.01010101010101010101011の2乗算(図4参照)に適用すると、次のようになる。
上述したように、単精度の√2は1.0110 1010 0000 1001 1110 011であり、これと1.01010101010101010101011(=4/3)とを比較すると、
4/3<√2
である。したがって、仮数の積算を行うまでもなく、(4/3)2は2よりも小さい値であることがわかり、乗算結果におけるMSBの位置を先見的に確定することができる。
【0055】
さて、このMSBを先見的に発見する手法を用いて浮動小数点数の2乗算を行う場合、まるめ処理は仮数の積算と並列に行われる。
すなわち、仮数の積算において、まず仮数の各項における積項が生成され、生成された積項に対してワラスツリーが動作し、バイナリアダーによる加算が実行されるが、この間に、MSB先見回路21bが、上述した当該仮数と√2とを比較し、比較結果に基づいてMSBの位置を確定し、さらにulp、ガードビット、ラウンドビットの位置を確定する。
そして、MSB先見回路21bによって確定されたラウンドビットの桁まで仮数の積算が進み、ビットの値が確定すると、ラウンドビットが確定する。
引き続いて、仮数のさらに上位のビットに対する積算が行われるが、ラウンドビットが既に確定しているため、仮数の積算が終了すると同時にまるめ処理も終了する。
【0056】
図5に示した2乗算器を用いて、MSB先見回路21bの回路構成について説明する。
A=[1 a6 a5 a4 a3 a2 a1 a0]
とすると、A>181の場合、
A×A=1XXXXXXXXXXXXXXX
であり、A≦181の場合、
A×A=01XXXXXXXXXXXXXX
であり、MSBの位置がずれることとなる。Aを浮動小数点数とした場合、Aの変域は
255>A>128
なので、
[a6 a5 a4 a3 a2 a1 a0]>53
の判断を行うことによって、MSBの位置を確定できることとなる。
図5の2乗算器では、組合せ回路501の部分にて演算対象である浮動小数点数の下位7桁と数値53(2進数表記で110101)とが比較され、その出力(比較結果)によって、MSBの位置が確定される。すなわち、この組合せ回路501がMSB先見回路21bに相当する。
【0057】
そして、
[a6 a5 a4 a3 a2 a1 a0]>53
の場合は、有効数字が[s15 s14 s13 s12 s11 s10 s9 s8]、ガードビットがs7、ラウンドビットがs6〜s0のORとなる。このとき、s8の位に
p1 = s7 &(s8+(s6 + r5))
を加算することにより、まるめ処理が実行される。この処理は、図5の2乗算器におけるまるめ処理実行手段としての組合せ回路502によって行われる。
また、
[a6 a5 a4 a3 a2 a1 a0]≦53
の場合は、有効数字が[s14 s13 s12 s11 s10 s9 s8 s7]、ガードビットがs6、ラウンドビットがs5〜s0のORとなる。このとき、s7の位に
p0 = s6 &(s7 + r5)
を加算することにより、まるめ処理が実行される。この処理は、図5の2乗算器におけるまるめ処理実行手段としての組合せ回路503によって行われる。
上述した
[a6 a5 a4 a3 a2 a1 a0]>53
の判断は、十分に速く、図5の2乗算器において浮動小数点数の仮数の積算の実行中に、上記のまるめ処理の計算を入れることができる。
【0058】
以上のように、本実施の形態によれば、まるめ処理を浮動小数点数の仮数の積算の中に隠すことができる。すなわち、図9に示したステップ901の積算が完了すると同時にまるめ処理が終了するため、ステップ902以降の処理が省略されることとなる。これにより、浮動小数点数の2乗算の高速化を図ることができる。
また、本実施の形態では、演算装置21にMSB先見回路21bが組み込まれるが、浮動小数点数の仮数の積算結果に基づいてまるめ処理を行うための加算回路が不要となるため、全体としてゲート数が減少し、回路サイズの削減に寄与することとなる。
【0059】
【発明の効果】
以上説明したように、本発明によれば、浮動小数点数の積算(仮数の積算)を論理圧縮することにより、浮動小数点数の2乗算器を構成する演算器の数を減少させると共に、その処理速度を向上させることができる。
【0060】
また、本発明によれば、浮動小数点数の積算とその積算結果に対するまるめ処理とを並列に行うことにより、浮動小数点数の2乗算器の処理速度を向上させることができる。
【図面の簡単な説明】
【図1】 本実施の形態の演算装置が用いられるプロセッサの構成例を示す図である。
【図2】 本実施の形態における擬似キャリーを生成する手法を説明するフローチャートである。
【図3】 本実施の形態による擬似キャリーを用いた2乗計算を説明する図である。
【図4】 まるめ処理の具体的な計算例を説明する図である。
【図5】 本実施の形態による擬似キャリー生成回路及びMSB先見回路を含む8ビット×8ビットの2乗算器の構成例を示す図である。
【図6】 8ビットの2変数の積算を説明する図である。
【図7】 8ビット×8ビットの2乗算を説明する図である。
【図8】 図7の2乗算に対して積項の対称性を用い、ワラスツリーを簡単化して積項の数を減らした様子を示す図である。
【図9】 まるめ処理を含む乗算処理の手順を説明するフローチャートである。
【符号の説明】
10…制御部、11…アドレス生成器、12…デコーダ、20…データ・パス、21…演算装置、21a…擬似キャリー生成回路、21b…MSB先見回路、22…汎用レジスタ、30…外部バス・インタフェース、100…プロセッサ、200…メモリ
Claims (17)
- 2進法で表された所定の変数を保持するレジスタと、当該レジスタから当該変数を読み出して種々の演算を行う演算装置とを備えたプロセッサにおいて、
前記演算装置は、
前記変数の演算における所定ビット分の桁上がりに関する情報を実際の値の計算を行わず論理的に先読みして生成する擬似キャリー生成回路と、
前記擬似キャリー生成回路にて生成された桁上がりに関する情報を用いて前記変数の演算を行う組合せ回路と
を備えることを特徴とするプロセッサ。 - 前記擬似キャリー生成回路は、前記演算におけるまるめ処理の対象となるビットに対して、前記桁上がりに関する情報を生成することを特徴とする請求項1に記載のプロセッサ。
- 2進法で表された所定の変数を保持するレジスタと、当該レジスタから当該変数を読み出して種々の演算を行う演算装置とを備えたプロセッサにおいて、
前記演算装置は、
前記変数の演算における所定ビット分の桁上がりをビットパターンに対する入出力の関係に基づき先読みする擬似キャリー生成回路と、
前記擬似キャリー生成回路による先読みの結果を用いて前記変数の演算を行う組合せ回路と
を備えることを特徴とするプロセッサ。 - 2進法で表された所定の変数を保持するレジスタと、当該レジスタから当該変数を読み出して種々の演算を行う演算装置とを備えたプロセッサにおいて、
前記演算装置は、
前記変数における下位所定ビット分の値に対して、当該値を計算した場合の桁上がりに関する情報を実際の値の計算を行わず論理的に先読みして生成する擬似キャリー生成回路と、
前記桁上がりに関する情報を加味して上位ビットの値の計算を行う組合せ回路と
を備えることを特徴とするプロセッサ。 - 2進法で表された所定の変数を保持するレジスタと、当該レジスタから前記変数を読み出して種々の演算を行う演算装置とを備えたプロセッサにおいて、
前記演算装置は、
前記変数の演算に伴うまるめ処理に用いるラウンドビットの位置に関する情報を、実際の値の計算を行わずに演算対象である変数から先見的に求める第1の組合せ回路と、
前記第1の組合せ回路により求められた前記ラウンドビットの位置に関する情報を用いてまるめ処理を実行しながら、前記変数の演算を行う第2の組合せ回路と
を備えることを特徴とするプロセッサ。 - 前記第2の組合せ回路は、
前記変数の下位の桁から順に計算を行うと共に、前記第1の組合せ回路にて求められた前記ラウンドビットの位置に関する情報を取得し、
検出された前記ラウンドビットの位置まで計算が進んだ場合に前記ラウンドビットの値を確定し、
確定した前記ラウンドビットの値を加味してさらに上位の桁の計算を行うことを特徴とする請求項5に記載のプロセッサ。 - 2進法で表された所定の変数を保持するレジスタと、当該レジスタから当該変数を読み出して種々の演算を行う演算装置とを備えたプロセッサにおいて、
前記演算装置は、
演算結果における最上位ビット(MSB:Most Significant Bit)の位置を、実際の値の計算を行わずに演算対象である変数から先見的に確定するMSB先見回路と、
前記MSB先見回路によって確定された最上位ビットの位置に基づいてまるめ処理を行う組合せ回路と
を備えることを特徴とするプロセッサ。 - 2進法で表された所定の変数を保持するレジスタと、当該レジスタから当該変数を読み出して当該変数の2乗計算を行う演算装置とを備えたプロセッサにおいて、
前記演算装置は、
前記変数を√2と比較し、比較結果に基づいて、演算結果における最上位ビット(MSB:Most Significant Bit)の位置を確定するMSB先見回路と、
前記MSB先見回路によって確定された最上位ビットの位置に基づいてまるめ処理を行う組合せ回路と
を備えることを特徴とするプロセッサ。 - 2進法で表された所定の変数を保持するレジスタと、当該レジスタから当該変数を読み出して種々の演算を行う演算装置とを備えたプロセッサにおいて、
前記演算装置は、
前記変数の演算における所定ビット分の桁上がりに関する情報を実際の値の計算を行わず論理的に先読みして生成する擬似キャリー生成回路と、
演算結果における最上位ビット(MSB:Most Significant Bit)の位置を、演算対象である変数から先見的に確定するMSB先見回路と、
前記擬似キャリー生成回路にて生成された桁上がりに関する情報を用い、かつ前記MSB先見回路によって確定された最上位ビットの位置に基づいてまるめ処理を行いながら前記変数の演算を行う組合せ回路と
を備えることを特徴とするプロセッサ。 - 2進法で表された所定の浮動小数点数の乗算を行う演算装置において、
前記浮動小数点数を保持するレジスタから演算対象の浮動小数点数を読み出す手段と、
前記浮動小数点数における所定ビット分の桁上がりに関する情報を実際の値の計算を行わず論理的に先読みして生成する手段と、
前記桁上がりに関する情報を加味して前記浮動小数点数の仮数の積算を行う手段と
を備えることを特徴とする演算装置。 - 前記桁上がりに関する情報を生成する手段は、前記浮動小数点数の仮数における下位所定ビット分の値に対して前記桁上がりに関する情報を生成し、
前記積算を行う手段は、前記桁上がりに関する情報を加味して前記仮数の上位ビットの値の積算を行うことを特徴とする請求項10に記載の演算装置。 - 2進法で表された所定の浮動小数点数の乗算を行う演算装置において、
前記浮動小数点数を保持するレジスタから演算対象の浮動小数点数を読み出す手段と、
前記乗算における所定ビット分の桁上がりを実際の値の計算を行わず論理的に先読みする手段と、
前記桁上がりの先読みの結果を用いて前記浮動小数点数の乗算を行う手段と
を備えることを特徴とする演算装置。 - 2進法で表された所定の浮動小数点数の乗算を行う演算装置において、
前記浮動小数点数を保持するレジスタから演算対象の浮動小数点数を読み出す手段と、
前記浮動小数点数の乗算に伴うまるめ処理に用いる情報を、実際の値の計算を行わずに演算対象である当該浮動小数点数から先見的に求める手段と、
求められた前記まるめ処理に用いる情報を用いてまるめ処理を実行しながら、前記浮動小数点数の仮数の積算を行う手段と
を備えることを特徴とする演算装置。 - 2進法で表された所定の浮動小数点数の乗算を行う演算装置において、
前記浮動小数点数を保持するレジスタから演算対象の浮動小数点数を読み出す手段と、
乗算結果における最上位ビット(MSB:Most Significant Bit)の位置を、実際の値の計算を行わずに演算対象である前記浮動小数点数の仮数から先見的に求める手段と
を備えることを特徴とする演算装置。 - 2進法で表された所定の浮動小数点数の2乗計算を行う演算装置において、
前記浮動小数点数を保持するレジスタから演算対象の浮動小数点数を読み出す手段と、
読み出された前記浮動小数点数の仮数を√2と比較し、比較結果に基づいて、演算結果における最上位ビット(MSB:Most Significant Bit)の位置を確定する手段と
を備えることを特徴とする演算装置。 - 2進法で表された所定の浮動小数点数の乗算を行う演算装置の演算方法において、
前記浮動小数点数を保持するレジスタから演算対象の浮動小数点数を読み出すステップと、
前記浮動小数点数の仮数における下位所定ビット分の値に対して、当該値を計算した場合の桁上がりに関する情報を実際の値の計算を行わず論理的に先読みして生成するステップと、
前記桁上がりに関する情報を加味して上位ビットの値の計算を行うステップと
を含むことを特徴とする演算方法。 - 2進法で表された所定の浮動小数点数の乗算を行う演算装置の演算方法において、
前記浮動小数点数を保持するレジスタから演算対象の浮動小数点数を読み出すステップと、
前記浮動小数点数の仮数を下位の桁から順に計算すると共に、まるめ処理に用いるラウンドビットの位置を実際の値の計算を行わずに先見的に検出するステップと、
検出された前記ラウンドビットの位置まで計算が進んだ場合に前記ラウンドビットの値を確定するステップと、
確定した前記ラウンドビットの値を加味してさらに上位の桁の計算を行うステップと
を含むことを特徴とする演算方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2001168737A JP3778489B2 (ja) | 2001-06-04 | 2001-06-04 | プロセッサ、演算装置及び演算方法 |
US10/162,812 US6988120B2 (en) | 2001-06-04 | 2002-06-04 | Arithmetic unit and method thereof |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2001168737A JP3778489B2 (ja) | 2001-06-04 | 2001-06-04 | プロセッサ、演算装置及び演算方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2002366346A JP2002366346A (ja) | 2002-12-20 |
JP3778489B2 true JP3778489B2 (ja) | 2006-05-24 |
Family
ID=19010918
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2001168737A Expired - Fee Related JP3778489B2 (ja) | 2001-06-04 | 2001-06-04 | プロセッサ、演算装置及び演算方法 |
Country Status (2)
Country | Link |
---|---|
US (1) | US6988120B2 (ja) |
JP (1) | JP3778489B2 (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101566008B1 (ko) | 2013-12-30 | 2015-11-05 | 건국대학교 산학협력단 | 산술 장치 및 방법 |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7500233B2 (en) * | 2005-04-14 | 2009-03-03 | Microsoft Corporation | Parallel filter check using an arithmetic memory location |
EP2798466B1 (en) | 2011-12-30 | 2017-12-13 | Intel Corporation | Floating point round-off amount determination processors, methods, systems, and instructions |
US9817661B2 (en) * | 2015-10-07 | 2017-11-14 | Arm Limited | Floating point number rounding |
RU2642385C1 (ru) * | 2017-04-06 | 2018-01-24 | Федеральное государственное бюджетное образовательное учреждение высшего образования "Кубанский государственный технологический университет" (ФГБОУ ВО "КубГТУ") | Устройство для вычисления функции arctg y/x |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
FR2683340A1 (fr) * | 1991-11-05 | 1993-05-07 | Sgs Thomson Microelectronics | Circuit elevateur au carre de nombres binaires. |
US6018758A (en) * | 1997-07-30 | 2000-01-25 | Lucent Technologies Inc. | Squarer with diagonal row merged into folded partial product array |
US6393453B1 (en) * | 1998-09-22 | 2002-05-21 | Ati International Srl | Circuit and method for fast squaring |
US6301598B1 (en) * | 1998-12-09 | 2001-10-09 | Lsi Logic Corporation | Method and apparatus for estimating a square of a number |
US6766346B2 (en) * | 1999-11-30 | 2004-07-20 | Mosaid Technologies Incorporation | System and method for computing a square of a number |
-
2001
- 2001-06-04 JP JP2001168737A patent/JP3778489B2/ja not_active Expired - Fee Related
-
2002
- 2002-06-04 US US10/162,812 patent/US6988120B2/en not_active Expired - Fee Related
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101566008B1 (ko) | 2013-12-30 | 2015-11-05 | 건국대학교 산학협력단 | 산술 장치 및 방법 |
Also Published As
Publication number | Publication date |
---|---|
JP2002366346A (ja) | 2002-12-20 |
US6988120B2 (en) | 2006-01-17 |
US20030126177A1 (en) | 2003-07-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR100955557B1 (ko) | 선택가능 준정밀도를 가진 부동―소수점 프로세서 | |
JP3689183B2 (ja) | 正確な浮動小数点除算/平方根演算を実現する正確、かつ効果的なスティッキー・ビット計算 | |
JP3761977B2 (ja) | 遅延整合技術の利用によりクリティカル・パスを減少させた浮動小数点型掛け算器及びその演算方法 | |
JP2662196B2 (ja) | 演算結果正規化方法及び装置 | |
US5627773A (en) | Floating point unit data path alignment | |
US5931895A (en) | Floating-point arithmetic processing apparatus | |
JPH0773227A (ja) | 論理回路の自動設計方法、そのシステム及びその装置並びに乗算器 | |
JPH08212058A (ja) | 加算オーバフロ検出回路 | |
JP3778489B2 (ja) | プロセッサ、演算装置及び演算方法 | |
US9448767B2 (en) | Three-term predictive adder and/or subtracter | |
US6912559B1 (en) | System and method for improving the accuracy of reciprocal square root operations performed by a floating-point unit | |
US5867413A (en) | Fast method of floating-point multiplication and accumulation | |
US7016930B2 (en) | Apparatus and method for performing operations implemented by iterative execution of a recurrence equation | |
JP3537378B2 (ja) | 加算器および集積回路 | |
US6101516A (en) | Normalization shift prediction independent of operand subtraction | |
US5097434A (en) | Hybrid signed-digit/logarithmic number system processor | |
US7051062B2 (en) | Apparatus and method for adding multiple-bit binary-strings | |
SalehiTabrizi et al. | Designing Efficient Two-Level Reverse Converters for Moduli Set {2^ 2n+ 1-1, 2^ 2n, 2^ n-1\} 2 2 n+ 1-1, 2 2 n, 2 n-1 | |
JP3257278B2 (ja) | 冗長なシフト数予測とシフト誤り補正を用いた正規化装置 | |
EP0780759A1 (en) | Elimination of math overflow flag generation delay in an alu | |
Reddy et al. | An Efficient Multi-Precision Floating Point Adder and Multiplier | |
KR20010067226A (ko) | 인터폴레이션 방법 및 장치 | |
Aditya et al. | ASIC Implementation of Approximate Single Precision Floating Point Multiplier | |
JPH11353157A (ja) | 累積加算回路 | |
JP2000099493A (ja) | 誤差関数計算装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20050125 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20050406 |
|
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: 20060131 |
|
RD14 | Notification of resignation of power of sub attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7434 Effective date: 20060202 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20060224 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
LAPS | Cancellation because of no payment of annual fees |