(57)【特許請求の範囲】
【請求項１】
２進法で表された所定の変数を保持するレジスタと、当該レジスタから当該変数を読み出して種々の演算を行う演算装置とを備えたプロセッサにおいて、
前記演算装置は、
前記変数の演算における所定ビット分の桁上がりに関する情報を実際の値の計算を行わず論理的に先読みして生成する擬似キャリー生成回路と、
前記擬似キャリー生成回路にて生成された桁上がりに関する情報を用いて前記変数の演算を行う組合せ回路と
を備えることを特徴とするプロセッサ。
【請求項２】
前記擬似キャリー生成回路は、前記演算におけるまるめ処理の対象となるビットに対して、前記桁上がりに関する情報を生成することを特徴とする請求項１に記載のプロセッサ。
【請求項３】
２進法で表された所定の変数を保持するレジスタと、当該レジスタから当該変数を読み出して種々の演算を行う演算装置とを備えたプロセッサにおいて、
前記演算装置は、
前記変数の演算における所定ビット分の桁上がりをビットパターンに対する入出力の関係に基づき先読みする擬似キャリー生成回路と、
前記擬似キャリー生成回路による先読みの結果を用いて前記変数の演算を行う組合せ回路と
を備えることを特徴とするプロセッサ。
【請求項４】
２進法で表された所定の変数を保持するレジスタと、当該レジスタから当該変数を読み出して種々の演算を行う演算装置とを備えたプロセッサにおいて、
前記演算装置は、
前記変数における下位所定ビット分の値に対して、当該値を計算した場合の桁上がりに関する情報を実際の値の計算を行わず論理的に先読みして生成する擬似キャリー生成回路と、
前記桁上がりに関する情報を加味して上位ビットの値の計算を行う組合せ回路と
を備えることを特徴とするプロセッサ。
【請求項５】
２進法で表された所定の変数を保持するレジスタと、当該レジスタから前記変数を読み出して種々の演算を行う演算装置とを備えたプロセッサにおいて、
前記演算装置は、
前記変数の演算に伴うまるめ処理に用いるラウンドビットの位置に関する情報を、実際の値の計算を行わずに演算対象である変数から先見的に求める第１の組合せ回路と、
前記第１の組合せ回路により求められた前記ラウンドビットの位置に関する情報を用いてまるめ処理を実行しながら、前記変数の演算を行う第２の組合せ回路と
を備えることを特徴とするプロセッサ。
【請求項６】
前記第２の組合せ回路は、
前記変数の下位の桁から順に計算を行うと共に、前記第１の組合せ回路にて求められた前記ラウンドビットの位置に関する情報を取得し、
検出された前記ラウンドビットの位置まで計算が進んだ場合に前記ラウンドビットの値を確定し、
確定した前記ラウンドビットの値を加味してさらに上位の桁の計算を行うことを特徴とする請求項５に記載のプロセッサ。
【請求項７】
２進法で表された所定の変数を保持するレジスタと、当該レジスタから当該変数を読み出して種々の演算を行う演算装置とを備えたプロセッサにおいて、
前記演算装置は、
演算結果における最上位ビット（ＭＳＢ：Most Significant Bit）の位置を、実際の値の計算を行わずに演算対象である変数から先見的に確定するＭＳＢ先見回路と、
前記ＭＳＢ先見回路によって確定された最上位ビットの位置に基づいてまるめ処理を行う組合せ回路と
を備えることを特徴とするプロセッサ。
【請求項８】
２進法で表された所定の変数を保持するレジスタと、当該レジスタから当該変数を読み出して当該変数の２乗計算を行う演算装置とを備えたプロセッサにおいて、
前記演算装置は、
前記変数を√２と比較し、比較結果に基づいて、演算結果における最上位ビット（ＭＳＢ：Most Significant Bit）の位置を確定するＭＳＢ先見回路と、
前記ＭＳＢ先見回路によって確定された最上位ビットの位置に基づいてまるめ処理を行う組合せ回路と
を備えることを特徴とするプロセッサ。
【請求項９】
２進法で表された所定の変数を保持するレジスタと、当該レジスタから当該変数を読み出して種々の演算を行う演算装置とを備えたプロセッサにおいて、
前記演算装置は、
前記変数の演算における所定ビット分の桁上がりに関する情報を実際の値の計算を行わず論理的に先読みして生成する擬似キャリー生成回路と、
演算結果における最上位ビット（ＭＳＢ：Most Significant Bit）の位置を、演算対象である変数から先見的に確定するＭＳＢ先見回路と、
前記擬似キャリー生成回路にて生成された桁上がりに関する情報を用い、かつ前記ＭＳＢ先見回路によって確定された最上位ビットの位置に基づいてまるめ処理を行いながら前記変数の演算を行う組合せ回路と
を備えることを特徴とするプロセッサ。
【請求項１０】
２進法で表された所定の浮動小数点数の乗算を行う演算装置において、
前記浮動小数点数を保持するレジスタから演算対象の浮動小数点数を読み出す手段と、
前記浮動小数点数における所定ビット分の桁上がりに関する情報を実際の値の計算を行わず論理的に先読みして生成する手段と、
前記桁上がりに関する情報を加味して前記浮動小数点数の仮数の積算を行う手段と
を備えることを特徴とする演算装置。
【請求項１１】
前記桁上がりに関する情報を生成する手段は、前記浮動小数点数の仮数における下位所定ビット分の値に対して前記桁上がりに関する情報を生成し、
前記積算を行う手段は、前記桁上がりに関する情報を加味して前記仮数の上位ビットの値の積算を行うことを特徴とする請求項１０に記載の演算装置。
【請求項１２】
２進法で表された所定の浮動小数点数の乗算を行う演算装置において、
前記浮動小数点数を保持するレジスタから演算対象の浮動小数点数を読み出す手段と、
前記乗算における所定ビット分の桁上がりを実際の値の計算を行わず論理的に先読みする手段と、
前記桁上がりの先読みの結果を用いて前記浮動小数点数の乗算を行う手段と
を備えることを特徴とする演算装置。
【請求項１３】
２進法で表された所定の浮動小数点数の乗算を行う演算装置において、
前記浮動小数点数を保持するレジスタから演算対象の浮動小数点数を読み出す手段と、
前記浮動小数点数の乗算に伴うまるめ処理に用いる情報を、実際の値の計算を行わずに演算対象である当該浮動小数点数から先見的に求める手段と、
求められた前記まるめ処理に用いる情報を用いてまるめ処理を実行しながら、前記浮動小数点数の仮数の積算を行う手段と
を備えることを特徴とする演算装置。
【請求項１４】
２進法で表された所定の浮動小数点数の乗算を行う演算装置において、
前記浮動小数点数を保持するレジスタから演算対象の浮動小数点数を読み出す手段と、
乗算結果における最上位ビット（ＭＳＢ：Most Significant Bit）の位置を、実際の値の計算を行わずに演算対象である前記浮動小数点数の仮数から先見的に求める手段と
を備えることを特徴とする演算装置。
【請求項１５】
２進法で表された所定の浮動小数点数の２乗計算を行う演算装置において、
前記浮動小数点数を保持するレジスタから演算対象の浮動小数点数を読み出す手段と、
読み出された前記浮動小数点数の仮数を√２と比較し、比較結果に基づいて、演算結果における最上位ビット（ＭＳＢ：Most Significant Bit）の位置を確定する手段と
を備えることを特徴とする演算装置。
【請求項１６】
２進法で表された所定の浮動小数点数の乗算を行う演算装置の演算方法において、
前記浮動小数点数を保持するレジスタから演算対象の浮動小数点数を読み出すステップと、
前記浮動小数点数の仮数における下位所定ビット分の値に対して、当該値を計算した場合の桁上がりに関する情報を実際の値の計算を行わず論理的に先読みして生成するステップと、
前記桁上がりに関する情報を加味して上位ビットの値の計算を行うステップと
を含むことを特徴とする演算方法。
【請求項１７】
２進法で表された所定の浮動小数点数の乗算を行う演算装置の演算方法において、
前記浮動小数点数を保持するレジスタから演算対象の浮動小数点数を読み出すステップと、
前記浮動小数点数の仮数を下位の桁から順に計算すると共に、まるめ処理に用いるラウンドビットの位置を実際の値の計算を行わずに先見的に検出するステップと、
検出された前記ラウンドビットの位置まで計算が進んだ場合に前記ラウンドビットの値を確定するステップと、
確定した前記ラウンドビットの値を加味してさらに上位の桁の計算を行うステップと
を含むことを特徴とする演算方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、コンピュータのプロセッサなどに用いられる演算装置に関し、特に浮動小数点数の２乗算を行う演算装置の構成及びその演算方法に関する。
【０００２】
【従来の技術】
コンピュータを用いた科学技術計算では、浮動小数点数で表現した数の２乗計算が頻繁に行われる。そのため、浮動小数点数の２乗算器の処理速度は、科学技術計算におけるコンピュータの処理能力に大きく影響する。したがって、従来から浮動小数点数の２乗算器の処理速度を向上させる種々の工夫がされている。
【０００３】
以下、電子回路による浮動小数点数の２乗算及び従来におけるその高速化の手法について説明する。
浮動小数点数の乗算には、数値の積算と積算結果のまるめ処理という２つの処理を要する。従来の浮動小数点数の２乗算における高速化の工夫は、主として数値の積算に対して行われている。
【０００４】
まず、８ビットの数ａ（＝ａ７ ａ６ ａ５ ａ４ ａ３ ａ２ ａ１ ａ０）、ｂ（＝ｂ７ ｂ６ ｂ５ ｂ４ ｂ３ ｂ２ ｂ１ ｂ０）の積算について説明する。
図６は、数ａ、ｂの積算を説明する図である。図６に示すように、数ａ、ｂの積算では、まず各数のビットごとにａ０ｂ０からａ７ｂ７までの６４（＝８×８）個の積項が生成され、次にこれらの積項が順次加算される。このような積算を実行する積算器は、回路技術の定石的な手法として、ワラスツリー（Wallace tree）とバイナリアダー（加算器）との組合せによって構成される。
【０００５】
２乗算では、積算する２つの数が同一であり、また、浮動小数点数の乗算では、最上位ビット（ＭＳＢ：Most Significant Bit）は常に「１」である。したがって、８ビットの数ａの２乗算は、図６において、ｂ＝ａ、ａ７＝１として、図７に示すようになる。
ここで、図７に示す積項において、
（ａ）ａｉａｉ＝ａｉ
（ｂ）ａｉａｊ＝ａｊａｉ
が成り立つ。
（ａ）式は、同じ項の積算であるため、ＡＮＤゲートそのものが必要ないこととなる。
（ｂ）式は、ａｉａｊという積項ａｊａｉという積項が同じ項であることを意味する。したがって、この２つの積項が同じ位で加算される場合は、これらをまとめて１つの積項とし、１つ上の位で加算すれば良いことがわかる。
【０００６】
この２乗算器における積項の対称性を用いて、ワラスツリーを簡単にする手法が従来から知られている。
図８は、図７の２乗算に対して積項の対称性を用い、ワラスツリーを簡単化して積項の数を減らした様子を示す図である。
図８において、例えば、ｓ０の位の積項は、ａ０ａ０のみであり、これに上述した（ａ）式を適用できる。したがって、ｓ０の位の値はａ０がそのまま入ることとなる。
また、ｓ１の位の積項はａ１ａ０とａ０ａ１であり、上述した（ｂ）式が適用できる。したがって、１つ上のｓ２の位にこれらをまとめた１つの積項ａ１ａ０が加算される。
さらに、このｓ２の位の積項は、ａ２ａ０、ａ１ａ１及びａ０ａ２の３つである。このうち、ａ１ａ１には（ａ）式が適用でき、ａ２ａ０とａ０ａ２とには（ｂ）式が適用できる。したがって、ｓ２の位では、ｓ１の位から（ｂ）式の適用により桁上がりして加算されたａ１ａ０と、（ａ）式の適用により残ったａ１との加算が行われることとなる。
以上のようにして、図７において６４個あった積項が３６個に減少する。積項を減少させたことにより、２乗算器を構成する演算器を減少させて回路サイズを削減することができ、処理における遅延の蓄積を減少させて２乗算器における処理速度の向上を図ることができる。
【０００７】
また、上記の積項を積算するバイナリアダー（加算器）において、組合せ回路を使って下位のキャリー（桁上げ）から上位のキャリーを作るキャリールックアヘッド（Carry Look Ahead：ＣＬＡ）と呼ばれる回路技術がある。このキャリールックアヘッドを用いることにより、加算器の積算処理における遅延を小さくすることができる。
【０００８】
また、上述したように、浮動小数点数の乗算では、入力の有効ビット数と出力の有効ビット数とを同じにするため、数値の積算結果に対するまるめ処理が行われる。
図９は、まるめ処理を含む乗算処理の手順を説明するフローチャートである。図９を参照すると、浮動小数点数の乗算では、まず、上述した手法などを用いて積算が行われ（ステップ９０１）、積算結果に基づいて、仮数におけるＭＳＢの位置が確定する（ステップ９０２）。次に、ＭＳＢの位置に基づいてガードビットの位置が確定し（ステップ９０３）、さらにまるめ処理の対象であるラウンドビットが確定する（ステップ９０４）。そして、ステップ９０１の積算結果におけるラウンドビットに対して実際にまるめ処理が実行される（ステップ９０５）。このまるめ処理の結果、桁上がりが発生する場合は、指数部の値に「１」を加算する（ステップ９０６）。
以上の浮動小数点数の演算方法及びまるめ処理の方法は、ＩＥＥＥ（Institute of Electrical and Electronics Engineers：米国電気電子学会）７５４に準拠している。
【０００９】
【発明が解決しようとする課題】
上述したように、従来から浮動小数点数の２乗算器の処理速度を向上させる工夫はなされているが、今日、コンピュータの処理能力に対する要求から、浮動小数点数の２乗算器においてもさらなる高速化が求められている。
【００１０】
そこで、本発明は、浮動小数点数の積算（仮数の積算）を論理圧縮することにより、浮動小数点数の２乗算器を構成する演算器の数を減少させると共に、その処理速度を向上させることを目的とする。
【００１１】
また、本発明は、浮動小数点数の積算とその積算結果に対するまるめ処理とを並列に行うことにより、浮動小数点数の２乗算器の処理速度を向上させることを他の目的とする。
【００１２】
【課題を解決するための手段】
上記の目的を達成する本発明は、２進法で表された所定の変数を保持するレジスタと、このレジスタから演算対象の変数を読み出して種々の演算を行う演算装置とを備えたプロセッサにおいて、この演算装置は、変数の演算における所定ビット分の桁上がりに関する情報を擬似的に生成する擬似キャリー生成回路と、この擬似キャリー生成回路にて生成された桁上がりに関する情報を用いて変数の演算を行う組合せ回路とを備えることを特徴とする。
ここで、桁上がりに関する情報（キャリー）を擬似的に生成するとは、実際に数値計算を行った結果としてキャリーを得るのではなく、組合せ回路（擬似キャリー生成回路）を用いてキャリーのみを先読みして生成することを意味する。
さらにここで、この擬似キャリー生成回路は、演算におけるまるめ処理の対象となるビットに対して、この桁上がりに関する情報を生成する。
【００１３】
また、本発明は、２進法で表された所定の変数を保持するレジスタと、このレジスタから演算対象の変数を読み出して種々の演算を行う演算装置とを備えたプロセッサにおいて、この演算装置は、変数の演算における所定ビット分の桁上がりを先読みする擬似キャリー生成回路と、この擬似キャリー生成回路による先読みの結果を用いて変数の演算を行う組合せ回路とを備えることを特徴とする。
【００１４】
さらに、本発明は、２進法で表された所定の変数を保持するレジスタと、このレジスタから演算対象の変数を読み出して種々の演算を行う演算装置とを備えたプロセッサにおいて、この演算装置は、変数における下位所定ビット分の値に対して、数値を計算した場合の桁上がりに関する情報を生成する擬似キャリー生成回路と、この桁上がりに関する情報を加味して上位ビットの値の計算を行う組合せ回路とを備えることを特徴とする。
【００１５】
さらにまた、本発明は、２進法で表された所定の変数を保持するレジスタと、このレジスタから演算対象の変数を読み出して種々の演算を行う演算装置とを備えたプロセッサにおいて、この演算装置は、変数の演算に伴うまるめ処理に用いるラウンドビットの位置に関する情報を、演算対象である変数から直接求める第１の組合せ回路と、この第１の組合せ回路により求められたラウンドビットの位置に関する情報を用いてまるめ処理を実行しながら、変数の演算を行う第２の組合せ回路とを備えることを特徴とする。
より詳しくは、この第２の組合せ回路は、演算対象である変数の下位の桁から順に計算を行うと共に、この第１の組合せ回路にて求められたラウンドビットの位置に関する情報を取得し、検出されたラウンドビットの位置まで計算が進んだ場合にこのラウンドビットの値を確定し、確定したラウンドビットの値を加味してさらに上位の桁の計算を行う。
【００１６】
また、本発明は、２進法で表された所定の変数を保持するレジスタと、このレジスタから演算対象の変数を読み出して種々の演算を行う演算装置とを備えたプロセッサにおいて、この演算装置は、演算結果における最上位ビット（ＭＳＢ：Most Significant Bit）の位置を、演算対象である変数から先見的に確定するＭＳＢ先見回路と、このＭＳＢ先見回路によって確定された最上位ビットの位置に基づいてまるめ処理を行う組合せ回路とを備えることを特徴とする。
【００１７】
さらに、本発明は、２進法で表された所定の変数を保持するレジスタと、このレジスタから演算対象の変数を読み出してこの変数の２乗計算を行う演算装置とを備えたプロセッサにおいて、この演算装置は、演算対象の変数を√２と比較し、比較結果に基づいて、演算結果における最上位ビット（ＭＳＢ：Most Significant Bit）の位置を確定するＭＳＢ先見回路と、このＭＳＢ先見回路によって確定された最上位ビットの位置に基づいてまるめ処理を行う組合せ回路とを備えることを特徴とする。
【００１８】
また、本発明は、２進法で表された所定の浮動小数点数の乗算を行う演算装置において、浮動小数点数を保持するレジスタから演算対象の浮動小数点数を読み出す手段と、読み出された浮動小数点数における所定ビット分の桁上がりに関する情報を生成する手段と、この桁上がりに関する情報を加味して演算対象である浮動小数点数の仮数の積算を行う手段とを備えることを特徴とする。
ここで、この桁上がりに関する情報を生成する手段は、演算対象の浮動小数点数の仮数における下位所定ビット分の値に対して桁上がりに関する情報を生成し、積算を行う手段は、この桁上がりに関する情報を加味して仮数の上位ビットの値の積算を行うことを特徴とする。
【００１９】
さらに、本発明は、２進法で表された所定の浮動小数点数の乗算を行う演算装置において、浮動小数点数を保持するレジスタから演算対象の浮動小数点数を読み出す手段と、この浮動小数点数の乗算における所定ビット分の桁上がりを先読みする手段と、この桁上がりの先読みの結果を用いて演算対象である浮動小数点数の乗算を行う手段とを備えることを特徴とする。
【００２０】
さらにまた、本発明は、２進法で表された所定の浮動小数点数の乗算を行う演算装置において、浮動小数点数を保持するレジスタから演算対象の浮動小数点数を読み出す手段と、この浮動小数点数の乗算に伴うまるめ処理に用いる情報を、演算対象である浮動小数点数から直接求める手段と、求められたまるめ処理に用いる情報を用いてまるめ処理を実行しながら、この浮動小数点数の仮数の積算を行う手段とを備えることを特徴とする。
【００２１】
また、本発明は、２進法で表された所定の浮動小数点数の乗算を行う演算装置において、浮動小数点数を保持するレジスタから演算対象の浮動小数点数を読み出す手段と、この浮動小数点数の乗算結果における最上位ビット（ＭＳＢ：Most Significant Bit）の位置を、この浮動小数点数自体の仮数から直接求める手段とを備えることを特徴とする。
【００２２】
さらに、本発明は、２進法で表された所定の浮動小数点数の２乗計算を行う演算装置において、浮動小数点数を保持するレジスタから演算対象の浮動小数点数を読み出す手段と、読み出された浮動小数点数の仮数を√２と比較し、比較結果に基づいて、演算結果における最上位ビット（ＭＳＢ：Most Significant Bit）の位置を確定する手段とを備えることを特徴とする。
【００２３】
また、本発明は、２進法で表された所定の浮動小数点数の乗算を行う演算装置の演算方法において、浮動小数点数を保持するレジスタから演算対象の浮動小数点数を読み出すステップと、読み出された浮動小数点数の仮数における下位所定ビット分の値に対して、数値を計算した場合の桁上がりに関する情報を生成するステップと、この桁上がりに関する情報を加味して上位ビットの値の計算を行うステップとを含むことを特徴とする。
【００２４】
さらに、本発明は、２進法で表された所定の浮動小数点数の乗算を行う演算装置の演算方法において、浮動小数点数を保持するレジスタから演算対象の浮動小数点数を読み出すステップと、読み出された浮動小数点数の仮数を下位の桁から順に計算すると共に、まるめ処理に用いるラウンドビットの位置を検出するステップと、検出されたラウンドビットの位置まで計算が進んだ場合にこのラウンドビットの値を確定するステップと、確定したラウンドビットの値を加味してさらに上位の桁の計算を行うステップとを含むことを特徴とする。
【００２５】
【発明の実施の形態】
以下、添付図面に示す実施の形態に基づいて、この発明を詳細に説明する。
本発明は、浮動小数点数の２乗算器を高速化する手法として、
・浮動小数点数の下位ビットの積算におけるキャリーの先読みを行う。
・浮動小数点数の積算結果におけるＭＳＢを先見的に確定することにより、積算結果のまるめ処理を当該積算と並列に行う。
という２つの手法を提案する。
本実施の形態では、これらの手法を実現する組合せ回路（後述する擬似キャリー生成回路及びＭＳＢ先見回路）を組み込んだ演算装置を提供する。
【００２６】
図１は、本実施の形態の演算装置が用いられるプロセッサの構成例を示す図である。図１を参照すると、プロセッサ１００は、アドレス生成器１１とデコーダ１２とを備えた制御部１０、演算装置２１と汎用レジスタ２２とを備えたデータ・パス２０、及びメモリ２００にアクセスするための外部バス・インタフェース３０を備える。このプロセッサ１００において、まず、制御部１０のデコーダ１２が、メモリ２００に展開されたプロセスの命令を、外部バス・インタフェース３０を介して入力し、復号してアドレス生成器１１とデータ・パス２０の演算装置２１とに送る。そして、アドレス生成器１１が受け取った命令に基づいてアドレスを生成し、メモリ２００の該当アドレスからデータが読み出されてデータ・パス２０の汎用レジスタ２２に送られる。そして、演算装置２１と汎用レジスタ２２との間でデータの流れが循環する（ＣＰＵサイクル）。
【００２７】
また、演算装置２１は、浮動小数点数の２乗計算を行う演算手段である組合せ回路と共に、浮動小数点数の下位ビットの積算におけるキャリーの先読みを行うキャリー先読み手段としての組合せ回路である擬似キャリー生成回路２１ａと、浮動小数点数の積算結果におけるＭＳＢを先見的に確定するＭＳＢ先見手段としての組合せ回路であるＭＳＢ先見回路２１ｂとを備える。
【００２８】
本発明の対象である浮動小数点数の２乗算器は、図１に示した演算装置２１における２乗算の機能を特に限定して最適化したものである。したがって、この演算装置２１を備えたプロセッサ１００は、３次元グラフィックスエンジンや科学技術計算などの用途における専用計算機として用いられる。
【００２９】
次に、上述した浮動小数点数の２乗算器を高速化する２つの手法について詳細に説明する。
（１）キャリーの先読みにより浮動小数点数の積算を高速化する手法
浮動小数点数の演算では、仮数の上位ビットは有効ビットとして使われるが、下位ビットに関してはまるめ処理の対象になるので、値の如何によらず、キャリーの有無と、１になっているビットがあるかどうかの判断のみが必要となる。
そこで、下位ビットの部分を実際に計算するのではなく、この下位ビットに関する情報（キャリーの有無と１になっているビットの有無）を適当な組合せ回路（擬似キャリー生成回路２１ａ）を用いて生成できれば、簡単な回路構成で浮動小数点数の２乗算における数値の積算を高速化できる。
【００３０】
ここで、擬似キャリー生成回路２１ａを構成するため、浮動小数点数の２乗算におけるキャリー信号の個数とまるめ信号について考察する。
図８に示した計算例に関して、キャリー信号の個数とまるめ信号とを下位ビットから順にまとめる。
＜s0の位について＞
s0の位は、加算する項がa0だけなので、加算結果はa0であり、キャリーは発生しない。まるめの結果はa0になる。よって、この桁からのキャリー信号をCarry0、まるめ信号をRound0とすると次式が成立する。
s0 ＝ a0
Carry0 ＝ 0
Round0 ＝ a0
【００３１】
＜s1の位について＞
s1の位は、加算する項が無いのでキャリーは発生せず、まるめの結果は保存される。よって、この桁からのキャリー信号をCarry1、まるめ信号をRound1とすると次式が成立する。
s1 ＝ 0
Carry1 ＝ 0
Round1 ＝ a0
【００３２】
＜s2の位について＞
ここでは、a1、a1a0の二つの項が加算される。これに、下位からのCarry1を加算すれば良いが、上記s0、s1の位についての検討に基づき、Carry1は常に０である。したがって、a1a0のビットパターンと出力の関係は次の真理値表にしたがう。
a1 a0         a1     a1a0   Carry1   Total
0  0
0  1
1  0         1                        1
1  1         1        1               2
有効項数の総計が２以下なので、キャリーは１本であり、まるめの結果が更新される。したがって、この桁からのキャリー信号をCarry2、まるめ信号をRound2とすると次式が成立する。
Carry2 ＝ a1a0
Round2 ＝ Round1 ＋ a1・−a0 ＝ a0 ＋ a1
【００３３】
＜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
【００３４】
＜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
【００３５】
＜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の値を「１」または「２」にする項を集めると、次のようになる。
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 の４つが見つかる。この主項を見つける手法は、論理圧縮の手法として知られているクワイン・マクラスキー法を用いることができる。
ここで見つかった３つの主項と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)
ここで、２つの擬似キャリーを作るとすると、（i）式からpt0、pt1、pt2、pt3を２つのグループに分ければ良いことがわかる。分け方は任意なので、例えば、
Carry5a ＝ pt0 ＝ a3a2a1
Carry5b ＝ pt1 ＋ pt2 ＋ pt3 ＝ a4a0（a3a2 ＋ a2a1 ＋ a1a3）
とすることができる。また、Round5は、次の論理式により作ることができる。
Round5 ＝ a2 ＋ a1 ＋ a0
この３つの式によって２乗回路のs5までの論理を代理させることができる。
【００３６】
＜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
【００３７】
上の表において、主項だけを考えると、（vi）から（i）と（iii）とは同一グループとなる。一方、（vii）から（i）と（iii）とは別グループとなり、これは矛盾する。この矛盾を解消するためには、主項が（vii）で発火し（値が１となり）、（vi）で発火しない（値が１とならない）ような新しい項を考える必要がある。そこで、
（iii）’＝ a5a4a3a0
なる項を新たに作成する。この（iii）’は、（iii）の部分項になっている。このとき、３本のキャリーは次のようになる。
Carry6a ＝（i）＋（iii）＋（iv）＋（v）
Carry6b ＝（ii）
Carry6c ＝（iii）’
また、Round6は、次の論理式により作ることができる。
Round6 ＝ a3 + a2 + a1 + a0
以上のように、包含関係だけでは擬似キャリーを作れなくなる場合がある。この場合に、上記の（iii）’のような新しい項を作ってつじつまを合わせる。新たに作った項は主項ではなく、何かの部分項になっている。
【００３８】
＜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
【００３９】
以上、図８におけるs0からs7までの各桁について、キャリー信号の個数及びまるめ信号の検討を行った。
図２は、上述した、キャリー信号の個数及びまるめ信号を求め、擬似キャリーを生成する手法を一般化したフローチャートである。
図２に示すように、まず、キャリーに寄与する主項が検出される（ステップ２０１）。次に、１つのキャリーに対して複数の主項が発火するものがあるかどうかが判断され、そのような主項が存在する場合は、これらの主項が１つのグループにまとめられる（ステップ２０２、２０３）。また、複数のキャリーに対して複数の主項が発火するものがあるかどうかが判断され、そのような主項が存在する場合は、同一の主項の重複を許し、かつキャリーの個数に合わせて、主項がグループ分けされる（ステップ２０４、２０５）。
【００４０】
次に、主項の複数のグループが発火する個数とキャリーの数とを一致させる処理が行われる（ステップ２０６）。ステップ２０５までの処理が終わった段階で、擬似キャリーが１本の場合、当該擬似キャリーの値が一意的に決まる。また、擬似キャリーが２本の場合、当該擬似キャリーの取り得る値は一般に複数存在する。また、擬似キャリーが３本以上になると、当該擬似キャリーの値は決まらないことが多く、特殊な場合分けが必要となる。例えば上述のs0からs7までの各桁について調べると、s0及びs1は、キャリーの個数が０であるから対象外である。s2及びs3は、キャリーの個数が１であるから擬似キャリーの値が一意的に決まる。s4は、キャリーの個数が２であるが、主項の数とキャリーの数とが一致しているので、擬似キャリーの値が一意的に決まる。s5は、キャリーの個数が２であり、擬似キャリーの取り得る値は複数存在する。s6及びs7は、キャリーの個数が３であり、主項だけでは擬似キャリーの値が決まらない。ここでは、s5の場合に擬似キャリーの取り得る値が複数であるので、ステップ２０６において、主項の複数のグループが発火する個数とキャリーの数とを一致させ、２つの擬似キャリーを作成している。
【００４１】
次に、ステップ２０２乃至ステップ２０６の処理において擬似キャリーの値が決まらない場合、適当な主項が部分項に分けられ、ステップ２０２に戻ってこれ以降の処理が繰り返され、擬似キャリーの値が決定される（ステップ２０７、２０８）。上記の例では、s6の場合が該当し、主項を部分項へ分割する操作を行って３つの擬似キャリーの値を決めている。
【００４２】
以上のような手順で擬似キャリーを作成することができる。しかしながら、上述したようにs6以上の上位ビットに関しては、擬似キャリーの取り得る値が増加し、これを一意的に決定するための処理が複雑になるので、キャリーの先読みを行うことは現実的ではない。そこで、本実施の形態では、s5の桁から発生する２つの擬似キャリーをf0 ＝ Carry5a、f1 ＝ Carry5bとし、まるめをr5として、元の式に代入すると、浮動小数点数の２乗計算は図３に示すようになる。
【００４３】
図３に示すように、本実施の形態では下位６ビットの演算が不要となるため、この部分の演算における遅延の蓄積を削減することができ、動作速度が向上する。上記s5までの擬似キャリーf0、f1は、２ゲート・ディレイ（２ゲート分の遅延）で作ることができ、ｓ6の桁のワラスツリーの入力となる。一方、s6の桁に元々あった４つの積項a3、a5a0、a4a1、a3a2は、１ゲート・ディレイで作ることができる。したがって、差引き１ゲート・ディレイのコストで擬似キャリー生成回路２１ａが導入されたことになる。
また、図３と従来技術において説明した図８とを比較すると、積項の数は、図８における３６個から２９個に減少しており、回路サイズの削減にも効果があることがわかる。
【００４４】
実際の２乗算器は、ＶＨＤＬやVerilog ＨＤＬなどのハードウェア記述言語（ＨＤＬ：Hardware Description Language）にて図３に示したような演算式を記述し、ＣＡＤにてこの演算式を満足する回路設計を行うことにより作成する。図５は、８ビット×８ビットの２乗算器の構成例を示す図である。図５において、ｒ５、ｆ０、ｆ１とある出力が、図３におけるr5、f0、f1の値にそれぞれ対応する。したがって、この部分の組合せ回路が擬似キャリー生成回路２１ａに相当し、これらの出力に、下位６ビット分の計算が集約されることとなる。
なお、本実施の形態では、浮動小数点数の２乗計算を対象としているが、キャリーの先読みにより浮動小数点数の積算を高速化する手法自体は、他の演算においても利用することができる。すなわち、本手法は、乗算における積項の加算のような多数のビットを加算する場合であって、かつ下位の数ビットに関しては、まるめ処理などによって値の如何によらず、キャリーの有無と１になっているビットがあるかどうかの判断のみが必要となる場合に、当該下位ビットに対して、キャリーに関する情報のみを先読みし、数値計算を省略するものである。したがって、２乗計算のみならず、浮動小数点数の乗算など、同様の条件が該当する演算であれば、本手法を利用することが可能である。
【００４５】
ところで、本実施の形態における２乗算、すなわち８ビットの浮動小数点数の２乗算において、最上位のs15、s14、s13、s12は、加算する積項がa6、a5、a4のみで構成されできているので、この部分の計算を簡略化することができる。
s11からは最大で２個のキャリーが出てくるので、これを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は、全て２ゲート・ディレイで確定することができる。これは、この部分にアダーを置いて下位から順次決定するよりも速い。
しかしながら、上位ビットはワラスツリーのディレイの下り坂にある部分であるため、様々な回路構成を取ることが可能である。例えば、この部分に２段キャリースキップアダーを用いても、同程度の動作速度を実現することができる。
【００４６】
さて、本実施の形態及び従来の乗算器に関して、s6のワラスツリーの出力が確定するまでのゲート・ディレイを比較すると、通常の乗算器を２乗計算に用いた場合で７ゲート・ディレイとなる。また、図８に示したように２乗回路の特性を使って項数を削減した場合で６ゲート・ディレイとなる。これに対し、本実施の形態によるキャリーの先読みを行った場合、３ゲート・ディレイとなる。したがって、本実施の形態による擬似キャリー生成回路２１ａを演算装置２１に組み込むことによって、２乗回路の処理速度を大幅に高速化することができる。
【００４７】
なお、擬似キャリー生成回路２１ａを、より高位の桁に対して作ることは、論理的には可能である。しかし、擬似キャリーを組合せ回路で作るために必要な積項の数は、Carry6で６、Carry7で１０となり、桁が上がるに伴って高速化という擬似キャリー生成回路の利点が徐々になくなる。また、Carry7以上の高位の擬似キャリーを生成するには、主項だけでなく部分項が必要になるため、計算にようする時間がさらに増すこととなる。
そして、キャリーの個数が多い場合は、通常の演算回路における手法でキャリーを扱った方が回路サイズも少なくなり、回路ディレイも少なくなる。つまり高位の桁に関しては最適に組まれた擬似キャリー発生回路と真のキャリーを発生させる演算回路は一致し、擬似キャリーを用いる意義はなくなる。
【００４８】
（２）浮動小数点数の積算結果におけるＭＳＢを先見的に確定し、積算結果のまるめ処理を当該積算と並列に行う手法
浮動小数点数の乗算では、入力の有効ビット数と出力の有効ビット数とを同じにするため、仮数の積算結果に対するまるめ処理が行われる。まるめ処理では、浮動小数点数の積算結果の何桁目をラウンドビットとしてまるめるかを決めるために、当該積算結果におけるＭＳＢの「１」の位置を確定する必要がある。そのため、通常は浮動小数点数の積算が完了した後にまるめ処理が行われている。
そこで、適当な組合せ回路（ＭＳＢ先見回路２１ｂ）を用いてＭＳＢの「１」の位置を先見的に確定することができれば、これに基づいてラウンドビットの位置を確定できるため、まるめ処理を浮動小数点数の積算と並行して行うことが可能となり、これにより浮動小数点数の２乗計算を高速化することができる。
【００４９】
まず、本実施の形態によるＭＳＢの位置を先見的に確定する手法の説明の準備として、浮動小数点数の積算が完了した後にまるめ処理を行う通常の手法について説明する。
従来の技術において説明したように、ＩＥＥＥ７５４に基づく通常のまるめ処理を含む浮動小数点数の乗算処理は、図９のフローチャートにしたがう。
【００５０】
具体的な計算例を挙げて、図９にしたがった浮動小数点数の２乗算の手順を説明する。
図４は、数値４／３の２進数表記（ただし、有効桁数は２４ビット）である1.01010101010101010101011の２乗算における積算結果を示す図である。
図４に示す積算結果である
011100011100011100011100111000111000111000111001
からＭＳＢがわかるので（図９のステップ９０２参照）、ここから２４ビットを切り取り、２５ビット目をガードビットとする（ステップ９０３参照）。そして、２６ビット目以降、すなわち下位２２ビットについて、次のＯＲを取り、ラウンドビットとする（ステップ９０４参照）。
RoundBit ＝ '0' when ("1000111000111000111001"＝"0000000000000000000000")
else '1'
したがって、図４の積算結果においては、
RoundBit ＝ '1'
となる。
【００５１】
そして、下位から２３ビット目、すなわちガードビットの値が「１」であり、かつラウンドビットまたは下位から２４ビット目、すなわちｕｌｐ（Unit of Least Precis）の値が「１」である場合、ＩＥＥＥ７５４の決めるところにより、このｕｌｐのビットに１を加えてまるめ処理の結果とする（ステップ９０５参照）。その他の場合は、上述したＭＳＢから２４ビット目までの値をまるめ処理の結果とする。図４に示した積算結果においては、下位から２２ビット目、２３ビット目、２４ビット目の値がいずれも「１」であるので、下位から２４ビット目のｕｌｐに１を加える。したがって、まるめ処理の結果は、
111000111000111000111001+1 ＝ 111000111000111000111010
となる。
さらに、このまるめ処理によって桁上がりが発生しＭＳＢがずれる場合は、指数に１を加える処理を行うが（ステップ９０６参照）、図４に示した例では桁上がりは発生しないので、この処理は行われない。
以上のようにして、積算結果に基づいてＭＳＢの位置を検出し、これに続く一連の処理により、まるめ処理が行われる。
【００５２】
ここで、ＭＳＢの「１」の位置を先見的に発見する方法について考察する。
浮動小数点数の乗算では、乗算結果が２以上の値か否かによりＭＳＢの位置が変わる。これから、乗算結果が２以上となるかどうかを予め知ることができれば、ＭＳＢの位置を先見的に検出することができる。したがって、２乗算の場合は、２乗する浮動小数点数の仮数を√２（＝２1/2）と比較することにより、計算結果が２以上となるかどうかがわかり、当該計算結果におけるＭＳＢの位置を確定することが可能となる。
【００５３】
ＩＥＥＥ７５４で規定されている単精度３２ビットと倍精度６４ビットの場合について具体的に説明する。
単精度の√２は、
√２＝ 1.0110 1010 0000 1001 1110 011
であり、これを２乗すると、
1.1111 1111 1111 1111 1111 111
となる。したがって、計算対象である元の数が√２以下であれば、２乗した数は２以下になる。
同様に、倍精度の√２は、
√２
＝ 1.0110 1010 0000 1001 1110 0110 0110 0111 1111 0011 1010 0010 0000 1
であり、これを２乗すると、
1.1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1
となる。したがって、計算対象である元の数が√２以下であれば、２乗した数は２以下になる。
以上のように、単精度、倍精度ともに、乗算対象の浮動小数点数の仮数を√２と比較することにより、乗算結果におけるＭＳＢの位置を確定することができる。そして、このＭＳＢの位置に基づいて、当該乗算結果における指数とｕｌｐ、ガードビット、ラウンドビットが確定することとなる。
【００５４】
このＭＳＢを先見的に発見する手法を、上述した数値４／３の２進数表記である1.01010101010101010101011の２乗算（図４参照）に適用すると、次のようになる。
上述したように、単精度の√２は1.0110 1010 0000 1001 1110 011であり、これと1.01010101010101010101011（＝４／３）とを比較すると、
４／３＜√２
である。したがって、仮数の積算を行うまでもなく、（４／３）2は２よりも小さい値であることがわかり、乗算結果におけるＭＳＢの位置を先見的に確定することができる。
【００５５】
さて、このＭＳＢを先見的に発見する手法を用いて浮動小数点数の２乗算を行う場合、まるめ処理は仮数の積算と並列に行われる。
すなわち、仮数の積算において、まず仮数の各項における積項が生成され、生成された積項に対してワラスツリーが動作し、バイナリアダーによる加算が実行されるが、この間に、ＭＳＢ先見回路２１ｂが、上述した当該仮数と√２とを比較し、比較結果に基づいてＭＳＢの位置を確定し、さらにｕｌｐ、ガードビット、ラウンドビットの位置を確定する。
そして、ＭＳＢ先見回路２１ｂによって確定されたラウンドビットの桁まで仮数の積算が進み、ビットの値が確定すると、ラウンドビットが確定する。
引き続いて、仮数のさらに上位のビットに対する積算が行われるが、ラウンドビットが既に確定しているため、仮数の積算が終了すると同時にまるめ処理も終了する。
【００５６】
図５に示した２乗算器を用いて、ＭＳＢ先見回路２１ｂの回路構成について説明する。
Ａ＝［1   a6   a5   a4   a3   a2   a1   a0］
とすると、Ａ＞１８１の場合、
Ａ×Ａ＝１XXXXXXXXXXXXXXX
であり、Ａ≦１８１の場合、
Ａ×Ａ＝０１XXXXXXXXXXXXXX
であり、ＭＳＢの位置がずれることとなる。Ａを浮動小数点数とした場合、Ａの変域は
２５５＞Ａ＞１２８
なので、
［a6   a5   a4   a3   a2   a1   a0］＞５３
の判断を行うことによって、ＭＳＢの位置を確定できることとなる。
図５の２乗算器では、組合せ回路５０１の部分にて演算対象である浮動小数点数の下位７桁と数値５３（２進数表記で110101）とが比較され、その出力（比較結果）によって、ＭＳＢの位置が確定される。すなわち、この組合せ回路５０１がＭＳＢ先見回路２１ｂに相当する。
【００５７】
そして、
［a6   a5   a4   a3   a2   a1   a0］＞５３
の場合は、有効数字が［s15  s14  s13  s12  s11  s10   s9   s8］、ガードビットがs7、ラウンドビットがs6〜s0のＯＲとなる。このとき、s8の位に
p1 ＝ s7 ＆（s8＋（s6 ＋ r5））
を加算することにより、まるめ処理が実行される。この処理は、図５の２乗算器におけるまるめ処理実行手段としての組合せ回路５０２によって行われる。
また、
［a6   a5   a4   a3   a2   a1   a0］≦５３
の場合は、有効数字が［s14  s13  s12  s11  s10   s9   s8   s7］、ガードビットがs6、ラウンドビットがs5〜s0のＯＲとなる。このとき、s7の位に
p0 ＝ s6 ＆（s7 ＋ r5）
を加算することにより、まるめ処理が実行される。この処理は、図５の２乗算器におけるまるめ処理実行手段としての組合せ回路５０３によって行われる。
上述した
［a6   a5   a4   a3   a2   a1   a0］＞５３
の判断は、十分に速く、図５の２乗算器において浮動小数点数の仮数の積算の実行中に、上記のまるめ処理の計算を入れることができる。
【００５８】
以上のように、本実施の形態によれば、まるめ処理を浮動小数点数の仮数の積算の中に隠すことができる。すなわち、図９に示したステップ９０１の積算が完了すると同時にまるめ処理が終了するため、ステップ９０２以降の処理が省略されることとなる。これにより、浮動小数点数の２乗算の高速化を図ることができる。
また、本実施の形態では、演算装置２１にＭＳＢ先見回路２１ｂが組み込まれるが、浮動小数点数の仮数の積算結果に基づいてまるめ処理を行うための加算回路が不要となるため、全体としてゲート数が減少し、回路サイズの削減に寄与することとなる。
【００５９】
【発明の効果】
以上説明したように、本発明によれば、浮動小数点数の積算（仮数の積算）を論理圧縮することにより、浮動小数点数の２乗算器を構成する演算器の数を減少させると共に、その処理速度を向上させることができる。
【００６０】
また、本発明によれば、浮動小数点数の積算とその積算結果に対するまるめ処理とを並列に行うことにより、浮動小数点数の２乗算器の処理速度を向上させることができる。
【図面の簡単な説明】
【図１】  本実施の形態の演算装置が用いられるプロセッサの構成例を示す図である。
【図２】  本実施の形態における擬似キャリーを生成する手法を説明するフローチャートである。
【図３】  本実施の形態による擬似キャリーを用いた２乗計算を説明する図である。
【図４】  まるめ処理の具体的な計算例を説明する図である。
【図５】  本実施の形態による擬似キャリー生成回路及びＭＳＢ先見回路を含む８ビット×８ビットの２乗算器の構成例を示す図である。
【図６】  ８ビットの２変数の積算を説明する図である。
【図７】  ８ビット×８ビットの２乗算を説明する図である。
【図８】  図７の２乗算に対して積項の対称性を用い、ワラスツリーを簡単化して積項の数を減らした様子を示す図である。
【図９】  まるめ処理を含む乗算処理の手順を説明するフローチャートである。
【符号の説明】
１０…制御部、１１…アドレス生成器、１２…デコーダ、２０…データ・パス、２１…演算装置、２１ａ…擬似キャリー生成回路、２１ｂ…ＭＳＢ先見回路、２２…汎用レジスタ、３０…外部バス・インタフェース、１００…プロセッサ、２００…メモリ
【図１】
0003778489.tif 000002
【図２】
0003778489.tif 000003
【図３】
0003778489.tif 000004
【図４】
0003778489.tif 000005
【図５】
0003778489.tif 000006
【図６】
0003778489.tif 000007
【図７】
0003778489.tif 000008
【図８】
0003778489.tif 000009
【図９】
0003778489.tif 000010