(57)【要約】【課題】  演算結果を正規化する積和演算命令を高速に実行する積和演算器を提供することにある。【解決手段】  積和演算器は、桁合せシフト数指数生成部、加数桁合せ符号合せ部、乗算アレイ、加数下位スティッキービット生成部、最上位桁検出部、キャリー伝搬加算部、指数正規化部、加数上位インクリメンタ部、スティッキービット生成部、正規化シフタ、正数化丸め部、指数補正部からなる。乗算アレイはキャリー保存加算器のアレイからなり、最上位桁検出部は乗算アレイの２項の出力であるキャリー部分と和の部分を入力して、該各部分の対応する桁の‘１’、‘０’からなるビット対を上位の桁から順次調べることにより、上位の桁から下位の桁にかけてビット対の値（１１、００、１０、０１）がどのような値を取るかによって絶対値の０でない最上位桁を検出する。【選択図】        図１
2007073061.tif 000002
【特許請求の範囲】
【請求項１】
データ処理装置において、
演算に必要な情報をストアするメモリと、
前記メモリ内の前記情報を読み出してデコードして前記演算部に与える命令フェッチ部と、
前記デコードされた情報に基づき前記乗数、被乗数、加数との積和演算を行う積和演算器を有する演算部とを備え、
前記積和演算器は、
前記乗数の指数部と前記被乗数の指数部と前記加数の指数部とに基づき、桁合わせシフト数及び正規化前の積和演算結果の指数を得る桁合わせシフト数生成部と、
該桁合わせシフト数に基づき前記加数の仮数部のなかで積に対応する桁より上位にはみ出した部分からなる前記加数の第１の仮数部からなる前記加数の第１の仮数部を出力すると共に、前記加数の仮数部のうちで前記第１の仮数部を除いた部分からなる前記加数の第２の仮数部を前記桁合わせシフト数に基づいてシフトして出力する加数桁合わせ部と、
前記乗数の仮数部と前記被乗数の仮数部と前記加数桁合わせ部からの前記加数の第２の仮数部とを入力してこれらの積和演算を行い２つの項を出力する積和演算アレイと、
前記積和演算アレイからの前記２つの項を入力して、前記２つの項に基づきキャリー伝搬加算を行い正規化前の積和演算結果の下位側の仮数部を出力するキャリー伝搬加算部と、
前記積和演算アレイからの前記２つの項、積と加数部が異符号であることを示す乗数と被乗数と加数の符号部の排他的論理和との一方、及び前記桁合わせシフト数を入力して、これらに基づき前記正規化前の積和演算結果の仮数部の絶対値の０でない最上位桁を検出する最上位桁検出部であり、前記２つの項の和または前記下位側の仮数部と桁合わせシフト数の和が正か負かを決定する決定部と、前記和が正のとき、前記２つの項または前記下位側の仮数部と桁合わせシフト数に基づき前記正規化前の積和演算結果の仮数部の絶対値のうち０でない最上位桁を検出する第１の検出部と、前記和が負のとき、前記２つの項または前記下位側の仮数部と桁合わせシフト数に基づき前記正規化前の積和演算結果の仮数部の絶対値のうち０でない最上位桁を検出する第２の検出部と、上位から下位へ、前記和の符号を判定する正負判定モード、前記和が正のときの正数検索モード、前記和が負のときの負数検索モード、及び前記最上位桁を検出した後の検索終了モードのいずれのモードであるかを伝える信号を備え、０でない最上位桁は、該最上位桁の検出が前記第１の検出部と第２の検出部のいずれで行われても、最初の検出により最終的に決定する最上位桁検出部と、
前記最上位桁検出部で検出された前記最上位桁に基づき、前記キャリー伝搬加算部からの前記正規化前の積和演算結果の下位側の仮数部の正規化を行い、正規化された積和演算結果の下位側の仮数部を得る正規化部と、
前記加数桁合わせ部からの前記加数の第１の仮数部を前記キャリー伝搬加算部からのキャリーに基づいて選択的にインクリメントする加数上位インクリメント部と、
前記正規化部から前記正規化された積和演算結果の下位側の仮数部と、前記加数上位インクリメント部からの前記インクリメントされた前記加数の第１の仮数部との論理和をとり正規化された積和演算結果の仮数部を得る手段と、
前記最上位桁検出部で検出された前記最上位桁に基づき、前記桁合わせシフト数生成部からの前記正規化前の積和演算結果の指数の正規化を行い、正規化された積和演算結果の指数を得る指数正規化部とを備える、
ことを特徴とするデータ処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はマイクロプロセッサ等のデータ処理装置における積和演算器に係り、特に演算結果を正規化する積和演算命令を高速に実行する積和演算器および該積和演算器を備えるデータ処理装置に関する。
【背景技術】
【０００２】
従来のマイクロプロセッサで演算結果を正規化する積和演算命令を実行している例としては、ＰｏｗｅｒＰＣ  ６０３が挙げられる（例えば、非特許文献１参照）。
該プロセッサはキャリー伝搬加算後の値から最上位桁の検出を行っている。また、加数が積よりも上位にはみ出した場合に、このはみ出した加数を下位の部分に桁位置を合わせて、下位からのキャリーによってインクリメントしている。
【０００３】
【非特許文献１】Ｔｈｅ  ＰｏｗｅｒＰＣ  ６０３  Ｍｉｃｒｏｐｒｏｃｅｓｓｏｒ：  Ａ  Ｈｉｇｈ  Ｐｅｒｆｏｒｍａｎｃｅ，  Ｌｏｗ  Ｐｏｗｅｒ，  Ｓｕｐｅｒｓｃａｌａｒ  ＲＩＳＣ  Ｍｉｃｒｏｐｒｏｃｅｓｓｏｒ（ｄｉｇｅｓｔ  ｏｆ  ｐａｐｅｒｓ  ＳＰＲＩＮＧ  ＣＯＭＰＣＯＮ  ９４  ｐｐ３００−３０６）
【発明の開示】
【発明が解決しようとする課題】
【０００４】
上記文献のプロセッサは、上記したようにキャリー伝搬加算後に該キャリー伝搬加算で得た値に基づき最上位検出を行っているため、キャリー伝搬加算と最上位検出の処理に必要な時間がこれらの合計の処理時間となり、積和演算命令を高速に実行できなかった。
また、加数が積よりも上位にはみ出した場合に、このはみ出した加数を下位の部分に桁合わせして、下位からのキャリーによってインクメントとしているため、最上位桁検出及び正規化の桁数が大きくなっている。
本発明の目的は、演算結果を正規化する積和演算命令を高速に実行する積和演算器および該積和演算器を備えるデータ処理装置を提供することにある。
【課題を解決するための手段】
【０００５】
上記目的を達成するため、本発明は、
積和演算の最後に乗算アレイの２項の演算出力に基づきキャリー伝搬加算を行い、該演算結果の絶対値の０でない最上位桁を検出して正規化を行う積和演算器において、
前記乗算アレイの２項の演算出力を入力とし、キャリー伝搬加算前の該２項の演算出力に基づき絶対値の０でない最上位桁を検出する最上位桁検出回路を備え、キャリー伝搬加算と前記最上位桁の検出を並列に実行するようにしている。
また、前記最上位桁検出回路を検出精度に１桁の誤差を許す最上位桁検出回路とし、該最上位桁検出回路出力に基づく正規化出力に対して１桁の補正を行う手段を備えるようにしている。
また、正規化を行う積和演算器において、該積和演算器における桁合せシフト数指数生成出力部の出力である桁合せシフト数と加数仮数部を入力とする加数桁合せ符号合せ部は、積よりも上位にはみ出した加数部分を出力する構成とし、該加数部分を最上位桁位置を動かさないで処理する手段を設け、前記加数部分の正規化を不要とし、該加数部分の処理と他の部分の正規化を並列に実行するようにしている。
また、データ処理装置に前記いずれかの積和演算器を備えるようにしている。
【発明の効果】
【０００６】
本発明により、キャリー伝搬加算前の値からキャリー伝搬加算後の値の絶対値の０でない最上位桁の検出を行って、キャリー伝搬加算と最上位桁の検出を並列に実行することが可能となる。そして、キャリー伝搬加算と最上位桁の検出のうち、所要時間の短い方がもう一方の時間に隠れる。また、積よりも上位にはみ出した加数のインクリメントを他の部分の正規化終了までに完了すればよくなる。そして、下位からのキャリーが生成されてからインクリメントを完了するまでの時間と正規化の時間のうち、所要時間の短い方がもう一方の時間に隠れる。以上により、積和演算が高速化される。
【発明を実施するための最良の形態】
【０００７】
本発明の一実施例を図によって、説明する。
【実施例１】
【０００８】
本発明による積和演算器の各実施例を添付図面を参照して詳細に説明する。
以下の実施例においては、同一機能を有するものには同一符号を付し、その重複説明を省略する。
本発明における積和演算とは（被乗数）×（乗数）＋（加数）を計算する浮動小数演算である。また、正規化とは小数点を０でない最上位桁の右側にすることである。例えば、０．００１×２２を１．０００×２~１とすることである。
図１は本発明による積和演算を高速化した積和演算器の一実施例の構成図であり、桁合せシフト数指数生成部１、加数桁合せ符号合せ部２、加数下位スティッキービット生成部３、乗算アレイ（積和演算アレイ）４、最上位桁検出部５、キャリー伝搬加算器６、加数上位インクリメンタ７、指数正規化部８、スティッキービット生成部９、正規化シフタ１０、正数化丸め部１１、指数補正部１２からなる。
【０００９】
次に、図１の各部の構成及び動作を説明する。
桁合せシフト数指数生成部１は、加数、被乗数、および乗数の指数部を入力とし、桁合せシフト数Ｄ１および正規化前の積和演算結果の指数Ｄ２を生成して、それぞれ加数桁合せ符号合せ部２および指数正規化部８へ出力する。
桁合せシフト数は、ここでは被乗数の指数部と乗数の指数部の和すなわち積の指数部から加数指数部を引いて生成する。
指数正規化部８へ出力する指数Ｄ２は、桁合せシフト数が−３以下の場合、即ち、最上位桁が必ず加数上位にある場合は加数指数部を、桁合せシフト数が−２以上の場合、即ち、最上位桁が必ずしも加数上位にない場合は積の指数部を選択する。
加数桁合せ符号合せ部２は、加数仮数部および桁合せシフト数Ｄ１を入力とし、加数の桁合せおよび符号合せを行い、積に対応する桁を加数中位として乗算アレイ４に、加数中位より上位にはみ出した部分を加数上位として加数上位インクリメンタ９に、下位にはみ出した部分を加数下位として加数下位スティッキービット生成部３に出力する。
符号合せは、加数の符号および乗数と被乗数との積の符号を比較して符号が互いに異なる場合に、加数部を符号反転して２の補数にするために、各ビットの０、１の反転を行い、１を加算することである。しかし、ここでは加数上位および加数中位の０、１の反転のみ行う。加数上位は正規化シフタ１０での正規化シフトが不要となるように桁合せ時に下位側にシフトしない。加数上位を下位側にシフトしない場合、加数上位の桁数に応じて加数上位の最下位桁位置が変化する。そこで、加数上位最下位も加数上位インクリメンタ９に出力する。加数上位最下位とは加数上位の最下位桁位置に１を立てた値で、加数上位と加算すると加数上位のインクリメントが行える値である。
【００１０】
加数下位スティッキービット生成部３は、加数桁合せ符号合せ部２からの加数下位を入力とし、加数下位スティッキービットＤ５を生成してキャリー伝搬加算器６およびスティッキービット生成部９へ出力する。
スティッキービットとは演算結果の丸めの際に使用する値で、入力データの桁数および丸め後の桁数をｎとすると、丸め前の演算結果の上位ｎ＋１桁以外の値が０でない場合に立てるビットである。
加数下位が０桁でない場合、積和演算による桁落ちは最大１桁であるため、キャリー伝搬加算器６出力は少なくとも２ｎ−２桁ある。
尚、２桁以上の桁落ちが発生するのは桁合せシフト数が−２〜１の場合であり、この時、加数下位は０桁である。したがって、加数下位は常にスティッキービット生成にのみ用いられるので、加数下位の値自身は不要であり、加数下位が０でない場合に１となる加数下位スティッキービットとして残しておけばよい。
加数桁合せ符号合せ部２で加数下位の符号合せを行っていないが、符号合せしてもしなくても０か０でないかは変らないので、加数下位スティッキービットの値は変らない。
【００１１】
乗算アレイ４は被乗数仮数部、乗数仮数部、および加数桁合せ符号合せ部２からの加数中位を入力とし、被乗数仮数部と乗数仮数部の積と加数中位の和を、キャリー保存加算器、冗長２進加算器等のアレイを用いて計算し、結果を最上位桁検出部５およびキャリー伝搬加算器６に出力する。
乗算アレイ４の出力は、キャリー伝搬加算器６で加算すると正規化前の積和演算結果の仮数部となる２つの値（２つの項）である。この２つの項は例えば、乗算アレイがキャリー保存加算器ならばキャリー部分と和の部分、冗長２進加算器ならば正数部分と負数部分である。
【００１２】
最上位桁検出部５は、桁合せシフト数指数生成部１からの桁合せシフト数Ｓ１、および乗算アレイ４の出力から、正規化前の積和演算結果の仮数部の絶対値のうち０でない最上位桁を検出し、検出結果に基づいて、指数正規化部８へは指数正規化値Ｄ７、スティッキービット生成部９へはスティッキービット生成用のマスクＤ８、そして正規化シフタ１０へは正規化シフト数Ｄ９を出力する。該最上位桁検出は以下のように行う。
桁合せシフト数が−３以下の場合は、該最上位桁は加数上位にある。そして、積と加数が同符号ならば１桁の桁上がりが、異符号ならば１桁の桁落ちが生じる可能性がある。
そこで、該最上位桁検出に上位側への１桁の誤差を認めることにして、この桁上がりおよび桁落ちの有無を使用せずに該最上位桁を決められるようにすると、該最上位桁は積と加数が同符号の場合は加数上位の最上位桁、異符号の場合は加数上位の最上位桁の１桁下位となる。
桁合せシフト数が−３以下の場合の桁合せシフト数指数生成部１の出力する指数は加数指数部である。したがって、指数正規化値は、積と加数が同符号ならば加数を基準にすると最上位桁が動かないので０であり、異符号ならば１桁上位に動くので−１である。また、正規化シフト数は、積と加数が同符号ならば桁合せシフト時の加数の左シフト数だけ右シフトすればよいので、桁合せシフト数を符号反転した値になり、異符号ならば同符号の場合より１桁上位にずれるので、桁合せシフト数に１を加算して符号反転した値となる。
丸め後の桁数をｎとすると、正規化シフタ１０では該最上位桁の１桁上位からｎ＋２桁を抽出する。そして、抽出した値より下位の桁からスティッキービットを生成する。したがって、スティッキービット生成用のマスクは該最上位桁より下位方向に数え始めてｎ＋２桁目以降、即ち、最上位桁のｎ＋１桁下位の桁以降に全て“１”を立てればよい。
【００１３】
桁合せシフト数が−２以上の場合は、絶対値の０でない最上位桁はキャリー伝搬加算器６出力または加数上位の下位２桁にある。この場合の詳細な処理は後述する。指数正規化値および正規化シフト数は求めた最上位桁と正規化前の小数点位置との差で決る。スティッキービット生成用のマスクは前述の場合と同様に該最上位桁の下位ｎ＋１桁目以降を全て立てればよい。
【００１４】
キャリー伝搬加算器６は乗算アレイ４出力の２つの値を加算して正規化前の積和演算結果の仮数部を生成し、スティッキービット生成部９および正数化丸め部１１へ出力する。この時、積と加数が異符号かつ加数下位スティッキービットが０の場合は加算の際に最下位に１を加算する。
加数桁合せ符号合せ部２では、符号反転処理のうち加数中位と加数上位の０、１の反転のみを行ったので、最下位への１の加算により符号反転処理が完了する。
加数下位スティッキービットが０の場合のみ１を加算するのは以下の理由による。仮に、加数下位を０、１反転して最下位に１を加算したとすると加数中位までキャリーが伝わるのは、反転後に加数下位が全て１になった場合、すなわち、反転前に加数下位が０の場合である。これは加数下位スティッキービットが０の場合に相当する。キャリーが伝わらなければ１を加算する必要はない。
【００１５】
加数上位インクリメンタ７は、加数桁合せ符号合せ部２からの加数上位および加数上位最下位並びにキャリー伝搬加算器６からのキャリーを入力とし、キャリーが１の場合には加数上位と加数上位最下位を加算した値、キャリーが０の場合には加数上位を選択する。
さらに、正規化シフタ１０の抽出値と桁位置が合うように、積と加数が同符号および異符号の場合に、加数上位の最上位桁が加数上位インクリメンタ７出力のそれぞれ最上位桁の１桁下位および最上位桁になるようにして正規化シフタ１０に出力する。
桁合せシフト数が−２以上の場合、上記処理では正規化シフタ１０の抽出値と桁位置が合わない可能性がある。そこで、最上位桁検出部５から正規化シフト数の情報をもらって、正規化シフト数が１および２の場合に、加数上位の最上位桁が加数上位インクリメンタ７出力のそれぞれ最上位桁および最上位桁の１桁下位になるようにする。そして、正規化シフト数が上記以外の場合は加数上位インクリメンタ７出力を０とする。
【００１６】
指数正規化部８は桁合せシフト数指数生成部１からの指数、即ち、正規化前の積和演算結果の指数と最上位桁検出部５からの指数正規化値を加算し、加算結果を正規化された指数Ｄ１１として指数補正部１２へ出力する。
スティッキービット生成部９は、キャリー伝搬加算器６からの正規化前の積和演算結果の仮数部を最上位桁検出部５からのマスクでマスクして論理和をとり、さらに加数下位スティッキービットとの論理和をとって、結果をスティッキービットとして正数化丸め部１１へ出力する。
正規化シフタ１０は、キャリー伝搬加算器６からの正規化前の積和演算結果の仮数部を最上位桁検出部５からの正規化シフト数を用いて正規化し、加数上位インクリメンタ７出力との論理和をとって、結果を正数化丸め部１１へ出力する。
正数化丸め部１１は、正規化シフタ１０の出力を入力とし、正数化、丸めを行って、最終的な正規化された積和演算結果の仮数部を出力する。正数化処理は加数上位が負または加数上位が０かつキャリー伝搬加算器６出力が負の場合に行い、０、１反転の後、キャリー伝搬加算器６の場合と同様にスティッキービットが０の場合のみ１を加算する。
指数補正部１２は正数化、丸めによって生じる桁上がりによる指数部の補正を行い、最終的な正規化された積和演算結果の指数部を出力する。
【００１７】
次に、上記積和演算器の動作を仮数部が４ビットの具体的な数値を用いて図１−図３を参照して説明する。
ここでは、先ず以下の式（１）を計算する場合について図１，２を参照して説明する。図２は図１の積和演算器によりこの式（１）を計算する場合の図１の各構成要素での処理の流れを示す動作説明図である。
（１．１１０×２２）×（１．１０１×２３）＋（１．０１１×２~１）…（１）
まず、桁合せシフト数指数生成部１で積の結果と加数との間で桁合わせに必要なシフト数（桁合せシフト数）として２＋３−（−１）＝６を生成する。
この場合、桁合せシフト数６は−２以上なので、指数として、積部の指数の和（２＋３＝５）と仮数部の指数−１とのうち積部の指数の和５を選択して出力する（図２のステップＳ１）。
次に、加数桁合せ符号合せ部２で、ステップＳ１で得られた桁合わせシフト数６に従い、加数の仮数部１．０１１を６桁右（下位側）にシフトして０．０００００１０１０を得る。
先ず、これから加数中位００．０００００１（４桁×４桁の乗算なので８桁を有効数字とする）を得る（ステップＳ２）。
さらに、加数の仮数部１．０１１とマスク０．０００（６桁右シフトにより仮数部１．０１１が上位にはみ出したビットはないのでマスクビットは全て０であるとの論理積から）加数上位０．０００を得（ステップＳ３）、
またさらに加数の仮数部１．０１１とますく０．１１１（６桁右シフトにより仮数部１．０１１が下位にはみ出したビットは仮数部の下位側３ビットなので、この下位側３ビットを有効とすべくマスクビットは０．１１１となる）との論理積から加数下位００１１を得る（ステップＳ４）。
さらに、この場合上位は０しかないため下位からの桁上がりが考えられるために加数上位最下位として少数点の左に１を立てて１．０００を得る（ステップＳ５）。
【００１８】
次に、加数下位スティッキービット生成部３において加数下位に基づき加数下位スティッキービットを生成するが、この場合、加数下位００１１は全てが０ではないので加数下位スティッキービットとして１を生成する（ステップＳ６）。
また、積の結果と加数が同符号（共に＋）なので（即ち、図２のｅｘｃｌｕｓｉｘｅ  ＯＲ（以下、ＥＯＲと称す）ゲートＥＯＲ１出力が０なので）、ＡＮＤゲートＡＮＤ１の出力は０であり、この値０はキャリー伝搬加算部６に与えられる。これは積の結果と加数が同符号の時はｎｅｇａｔｅする必要がないからである。なお、ゲートＥＯＲ１は桁合わせシフト数指数生成部１に含ませても良い。
これらの操作により、（１）式は次式（２）のようになる。
｛（１．１１０×１．１０１＋加数中位）×２５｝＋加数下位スティッキー
ビット＝｛（１．１１０×１．１０１＋００．０００００１）×２５｝＋加    数下位スティッキービット……（２）
次に、乗算アレイ４において、上式（２）の
（１．１１０×１．１０１＋００．０００００１）内の計算を行うが、先ずその乗算部分を加算部（３−１）〜（３−４）に直して以下のようにする。
【００１９】
０．００１１１０    ……（３−１）
＋    ０．０００００      ……（３−２）
＋    ０．１１１０        ……（３−３）
＋    １．１１０          ……（３−４）
＋  ００．０００００１    ……（３−５）
値（３−５）は式（２）の加算部である。
乗算アレイ４は、ここでは例えばキャリー保存加算器とする。キャリー保存加算器は３つの数を加算してキャリー部分と和の部分の２つの数（２つの項）を出力する。キャリー部分は各桁に２つ以上１がある場合に次の桁に１を立てることによって生成する。和の部分は各桁に１つまたは３つ１がある場合にその桁に１を立てることによって生成する。
まず、最初の３項（３−１）〜（３−３）を加算すると、この部分がキャリー部分（３−６）と和の部分（３−７）の２つの項となって、
０．０１００００    ……（３−６）
＋    ０．１１０１１０    ……（３−７）
＋    １．１１０          ……（３−４）
＋  ００．０００００１    ……（３−５）
となる。
さらにこの結果の最初の３項（３−６），（３−７），（３−４）を加算すると、この部分が２項（３−８），（３−９）となって、
０１．１０００００    ……（３−８）
＋    １．０１０１１０    ……（３−９）
＋  ００．０００００１    ……（３−５）
となる。
さらにこの３項（３−８），（３−９），（３−５）を加算すると、
０１０．００００００    ……（３−１０）
＋  ００．１１０１１１    ……（３−１１）
＼４＋２桁／
となる。この２項が乗算アレイ４の出力であり、値（３−１０）がキャリー部分、（３−１１）が和の部分である（ステップＳ７）。
桁合せシフト数が−２以上の場合の最上位桁検出部５の動作の詳細は図５〜７等で詳細に後述する。
【００２０】
最上位桁検出部５は乗算アレイ４の出力（式（３−１０），（３−１１））および桁合せシフト数指数生成部１６から桁合せシフト数に基づき、指数正規化値、スティッキービット生成用のマスク、正規化シフト数を生成する。
先ず、後述する図７の第１ステップにおいて、乗算アレイ４の出力の上位側に、即ち、乗算アレイ４の和部の上位側に加数上位の最上位桁“０”を付け加えて、キャリー部分と共に最上位桁検出部５に入力する。次いで、積と加数が同符号か、異符号か判定する。
上記したように積と加数とは同符号（ＥＯＲゲートＥＯＲ１の出力が０）であるため、第３＋ステップに進み、乗算アレイ４の出力（式（３−１０），（３−１１））の最初の桁“００”から下位に向かって“００”以外の桁を探すと２桁目に“１０”があり、したがってこの桁が最上位桁となる。
【００２１】
従って、小数点から左に２桁目に最上位桁があるため、指数正規化値としては１を指数正規化部８へ出力する。（ステップＳ８）
尚、小数点から左に１桁目、２桁目、３桁目…に最上位桁がある場合は、それぞれ指数正規化値は０，１，２…となる。
一方、小数点から右に１桁目、２桁目、３桁目…に最上位桁がある場合は、それぞれ指数正規化値は−１，−２，−３…となる。
マスクとしては、最上位桁（小数点から左に２桁目）の下位ｎ＋１（＝４＋１＝５桁目（小数点から右に４桁目）以下に“１”を立てて００．０００１１１を得る（ステップＳ９）。
また、小数点から左に２桁目に最上位桁があるため、正規化シフト数としては１を正規化シフタ１０へ出力する（ステップＳ１０）。桁合わせシフト数−２以上の場合、正規化シフト数の値は指数正規化値と同じとなる。
【００２２】
尚、図７の第１ステップにおいて積の結果と加数とは同符号と判定されると符号反転（ｓｉｇｎ  ｃｈａｎｇｅ）信号として０がＥＯＲゲートＥＯＲ２及び正数化丸め部１１に出力される。
また、第１ステップにおいて、積の結果と加数とが異符号と判定されると、図６の第２ステップに進み、該第２ステップにおいて下位の桁に“００”が発見されると加算結果は負であるので符号反転信号として０をそれぞれ出力する（ステップＳ２２）。従って、本例の場合は同符号であるので符号反転信号として０を出力する。
正数化丸め部１１においては符号反転信号が１の場合に正規化シフタ１０の出力を符号反転する。
【００２３】
キャリー伝搬加算器６では、乗算アレイ４の出力のキャリー部（３−１０）と加算部（３−１１）とＡＮＤゲートＡＮＤ１の出力とを加算して１０．１１０１１１を生成し（ステップＳ１１）、スティッキービット生成部９及び正規化シフタ１０へ出力する。また、ステップＳ１１で得た加算値１０．１１０１１１の最上位からのキャリー０を加数上位インクリメンタ７へ出力する（ステップＳ１２）。
加数上位インクリメンタ７では加数上位０．０００と加数上位最下位１．０００とキャリーを入力し、キャリーに応じて加数上位０．０００と加数上位最下位１．０００の和０１．０００と加数上位０．０００の一方を選択する。さらに、選択した出力を図２のＥＯＲゲートＥＯＲ１の出力に応じてシフトして出力する。
このケースでは、キャリーが０なので加数上位００．０００を選択し、また積の結果と加数が同符号なので（即ち、ＥＯＲゲートＥＯＲ１の出力が０なので）シフトを行わずにそのまま加数上位００．０００を出力する（ステップＳ１３）。
この時、式（１）は、ステップＳ１１で得られた加算値、ステップＳ１で得られた指数５から以下の式（４）のように表わされる。
（１０．１１０１１１×２５）＋加数下位スティッキービット    ……（４）
次に、指数正規化部８で、桁合せシフト数指数生成部１からの指数５と最上位桁検出部５からの指数正規化値１を加算して６を出力する（ステップＳ１４）。
【００２４】
スティッキービット生成部９では、キャリー伝搬加算器６の出力１０．１１０１１１を最上位桁検出部５からの出力であるマスクビット００．０００１１１でマスクしてそれらの論理和をとり（ステップＳ１５）、さらに該論理和と加数下位スティッキービット生成部からの１と論理和をとった値１を出力する（ステップＳ１６）。
正規化シフタ１０では、ステップＳ１０で得られた最上位桁検出部５からの正規化シフト数が１であるからキャリー伝搬加算器６の出力１０．１１０１１１を１桁右シフトして上位６ビットの０１．０１１０を抽出し（ステップＳ１７）、加数上位インクリメンタ７の出力００．０００と論理和をとって、０１．０１１０を得て出力する（ステップＳ１８）。
この時、最初の式（１）は
（０１．０１１０×２６）＋スティッキービット    ……（５）
となっている。
正数化丸め部１１は丸めモードによって動作が異なる。ここでは、値の近い方または偶数方向に丸めるものとすると、正規化シフタ１０の出力が０１．０１１０でスティッキービット生成部９からのスティッキービットが１であるから、正数化丸め部１１の出力は１．０１１である（ステップＳ１９）。
指数補正部１２では、正数化丸め部１１で最上位桁位置の補正が不要だったので、指数正規化部８の出力６をそのまま出力する（ステップＳ２０）。
この結果、演算結果は１．０１１×２６となる（ステップＳ２１）。
【００２５】
次に、以下の式（６）を計算する場合について図１、図３を参照して説明する。
図３は図１の積和演算器によりこの式（６）を計算する場合の図１の各構成要素での演算の流れを示す動作説明図である。
（−１．１１０×２~１）×（１．１０１×２~２）＋（１．０１１×２１）
……（６）
先ず、桁合せシフト数指数生成部１で、桁合せシフト数として（６）式の指数に基づき−１＋（−２）−１＝−４を生成する（ステップＳ３０）。
この場合、桁合せシフト数−４は−３以下なので、指数として、積部の指数の和（−１＋（−２）＝−３）と加数部の指数１とのうち加数部の指数の値１を選択して出力する（図３のステップＳ３１）。
次に、加数桁合せ符号合せ部２で、ステップＳ３０で得られた桁合せシフト数−４に従い、加数の仮数部１．０１１を４桁左（上位側）にシフトして１０１１０．００００００を得る。
先ず、加数中位１０．００００００（４桁×４桁の乗算なので８桁を有効数字とする）を得（ステップＳ３２）。
ここで、式（６）の積の結果と加数が異符号なのでＥＯＲゲートＥＯＲ１の出力は１であり、従ってステップＳ３２で得られた加数中位１０．００００００を反転して０１．１１１１１１を得て乗算アレイ４に出力する（ステップＳ３３）。
さらに、加数の仮数部１．０１１を反転したもの０．１００とマスク１．１１０（４桁左シフトにより仮数部１．０１１が上位にはみ出したビットは３ビットなので、この上位側３ビットを有効とすべくマスクビットは１．１１０である）との論理積から加数上位０．１００を得て加数上位インクリメント部７に出力する（ステップＳ３４）。
また、さらに加数の仮数部１．０１１とマスク０．０００（４桁左シフトにより仮数部１．０１１が下位にはみ出したビットはないのでマスクビットは全て０となる）との論理積から加数下位０．０００を得て加数下位スティッキービット生成部３に出力する（ステップＳ３５）。
さらに、上記のように加数上位は上位側３ビットが有効なので、上位から３ビット目が加数上位の最下位にに対応するため、その位置に１を立てて加数上位最下位として０．０１０を得て、加数上位インクリメント部７に出力する（ステップＳ３６）。
尚、加数上位の２の補数は１０．１００であるが、最上位桁は符号を表していて計算には不要なので省く。
【００２６】
次に、加数下位スティッキービット生成部３において加数下位に基づき加数下位スティッキービットを生成するが、この場合加数下位が００００で全て０であるため加数下位スティッキービットとして０を生成してスティッキービット生成部９に出力する（ステップＳ３７）。
また、積の結果と加数が異符号（−と＋）（即ち、図２のＥＯＲゲートＥＯＲ１の出力が１）であり、かつスティッキービットが０なので、ＡＮＤゲートＡＮＤ１（スティッキービットは反転されてＡＮＤ１に入力されるので）であり、この値１はキャリー伝搬加算部６に与えられる（ステップＳ３８）。これは積の結果と加数が異符号の時はｎｅｇａｔｅする必要があるからである。
【００２７】
これらの操作により、（６）式は次式（７）のようになる。
−（０．１００×２１）＋｛（１．１１０×１．１０１＋０１．１１１１１１）×２~３｝    ……（７）
次に、乗算アレイ４において、上式（７）の
（１．１１０×１．１０１＋０１．１１１１１１）内の計算を行うが、先ず乗算部分を加算部に直して上記の場合と同様に３項ずつ加算して以下の様にキャリー部（８−１）と和の部（８−２）を得る（ステップＳ３９）。
０１１．１０１１００    ……（８−１）
＋  ０１．００１００１    ……（８−２）
この２項が（８−１），（８−２）が乗算アレイ４出力である。
【００２８】
最上位桁検出部５は乗算アレイ４の出力（式（８−１），（８−２））及び桁合せシフト数指数生成部１からの桁合せシフト数に基づき、指数正規化値、スティッキービット生成用のマスク、正規化シフト数を生成する。
上記したように、桁合せシフト数が−３以下であり、またこの場合、乗数と被乗数との積の結果とは異符号であるので最上位桁は加数上位の最上位桁の１桁下位となる。また、積の結果と加数とが異符号であるため、指数正規化値としては−１を指数正規化部８へ出力する（ステップＳ４０）。
マスクとしては、最上位桁（小数点から左に４桁目）の下位ｎ＋１（＝４＋１＝５）桁目（小数点から右に２桁目）以下に“１”を立てて００．０１１１１１を得る（ステップＳ４０）。
また、正規化シフト数としては、桁合せシフト数−４に１を加算して符号反転した値３であり、この値を正規化シフタ１０へ出力する（ステップＳ４１）。
また、桁合せシフト数が−３以下の場合、積の結果と加数とが同符号の場合は符号反転信号として０を、異符号の場合は符号反転信号として１を出力する。従って、この場合は異符号のため１を出力する（ステップＳ４８）。
【００２９】
キャリー伝搬加算器６では、乗算アレイ４の出力のキャリー部（８−１）と加算部（８−２）とＡＮＤゲートＡＮＤ１の出力１を加算して１００．１１０１１０を生成し（ステップＳ４２）、スティッキービット生成部９および正規化シフタ１０へ出力する。また、ステップＳ４２で得た加算値１００．１１０１１０の最上位からのキャリー１を加数上位インクリメンタ７へ出力する（ステップＳ４３）。
【００３０】
加数上位インクリメンタ７では、加数上位０．１００と加数上位最下位０．０１０とキャリー１を入力し、キャリーに応じて、加数上位と加数上位最下位の和００．１１０と加数上位０．１００の一方を選択する。
このケースでは、キャリーが１なので、和００．１１０を選択し、また、積の結果と加数が異符号なので（即ち、図２のＥＯＲゲートＥＯＲ１の出力が１なので）左に１桁シフトを行って（即ち、桁合わせを行って）シフト後の値０１．１００を正規化シフタ１０に出力する（ステップＳ４４）。
【００３１】
指数正規化部８では、桁合せシフト数指数生成部１からの指数１と最上位桁検出部５からの指数正規化値−１を加算して０を出力する（ステップＳ４５）。
この時、最初の式は
−｛（０１．１０×２０）＋（００．１１０１１０×２~３）｝    ……（８）
となっている。
次に、スティッキービット生成部９で、キャリー伝搬加算器６の出力００．１１０１１０を最上位桁検出部５からの出力であるマスクビット００．０１１１１１でマスクしてそれらの論理和をとり、さらに該論理和と加数下位スティッキービット生成部からの０との論理和をとった値１を出力する（ステップＳ４６）。
正規化シフタ１０では、正規化シフト数が３であるからキャリー伝搬加算器６出力００．１１０１０１を３桁右シフトして上位６ビットの００．０００１を抽出し、加数上位インクリメンタ７の出力０１．１００と論理和をとって、０１．１００１として出力する（ステップＳ４７）。
この時、最初の式（６）は
−（（０１．１００１×２０）＋スティッキービット）    ……（９）
となっている。
正数化丸め部１１では、まず、加数上位が負であるから、最上位桁検出部５からの符号反転信号１に応答して正数化のために正規化シフタ１０の出力０１．１００１をその０、１を反転して１０．０１１０とする（ステップＳ４９）。
スティッキービットが０でないので正数化のために１を加算する必要はない。さらに、正規化すべく最上位桁位置を補正して１．００１１０とする（ステップＳ５０）。
値の近い方または偶数方向に丸めるものとすると、スティッキービットが１であるから、正数化丸め部１１出力は１．０１０である（ステップＳ５１）。
指数補正部１２では、正数化丸め部１１で１桁補正したので、指数正規化部８出力０に１を加算して１を出力する（ステップＳ５２）。
この結果、最終的な演算結果は１．０１０×２１となる（ステップＳ５３）。
【００３２】
このように、本例では、積より加数の方が大きい場合に、積より上位にはみ出した加数上位部分を最上位桁を動かさずに処理し、該はみ出した部分以外の加数と積との積和演算結果を正規化したものと最終的に加算を行って最終的な正規化した積和演算結果を得ている。従って、上記積より上位にはみ出した加数上位部分の正規化が不要なため、積和演算が高速化される。
【００３３】
ここで、最上位桁検出部５において、乗算アレイ４の出力である２項から、正規化前の積和演算結果の仮数部の絶対値のうち０でない最上位桁を求める処理を図４のフローチャートを用いて説明する。
先ず、ステップ４０１において、桁合わせシフト数が−３以下か−２以上かを判断し、−２以上の場合は図５〜図７の処理（本実施例では図７の処理）を行う。
一方、桁合わせシフト数が−３以下の場合は、ステップ４０２に進み、乗数と被乗数との積と加数とが異符号か同符号かを判定する。
同符号と判定された場合は、加数上位の最上位桁を上記正規化前の積和演算結果の仮数部の絶対値のうち０でない最上位桁と判定する（ステップ４０３）。
一方、異符号と判定された場合は、加数上位の最上位桁の１桁下位の桁を上記正規化前の積和演算結果の仮数部の絶対値のうち０でない最上位桁と判定する（ステップ４０４）。
【００３４】
次に、桁合せシフト数が−２以上の場合の、最上位桁検出部５において、乗算アレイ４の出力である２項から、正規化前の積和演算結果の仮数部の絶対値のうち０でない最上位桁を誤差なしで求める処理を説明する。
まず、最上位桁検出部５において、一般に２の補数表現の入力を検出部５の加算器に与え、それらの加算結果の絶対値の０でない最上位桁を誤差なしで求める方式を説明し、次に、１桁の誤差を認めることによってこの処理を簡素化し、最後に、実際に最上位桁検出部５に適用した場合について説明する。
図５は、加算器への入力から加算結果の絶対値のうち０でない最上位桁を誤差なしで求める処理である。
加算結果が正の場合は加算結果がそのまま絶対値であるので、加算結果の０でない最上位桁を求めればよい。これに対して、加算結果が負の場合は、絶対値にするために加算結果を０、１反転して１を加算する。この時、通常は最上位からみて最初の０の桁が、絶対値の０でない最上位桁となる。しかし、加算結果が最上位から途中まですべて１で残りが全て０の場合は、０、１反転して１を加算するとキャリーが伝わるので、最上位からみて最初の０の桁の１桁上位が０でない最上位桁となる。このことを踏まえると処理は以下のようになる。
【００３５】
第１、第２ステップは正負のチェック、第３ステップは最上位桁の検索、第４ステップはキャリーの有無による最上位桁の補正、第５ステップは負数の正数化時のキャリーの有無による最上位桁の補正を行っている。
まず、第１ステップで、乗算アレイ４の２つの項の出力であるキャリー部と和部の対応する桁、先ず最上位桁のビット対、即ち入力２ビットの値をチェックする。“００”または“１１”の場合は第２ステップを飛ばして第３ステップを行う。“０１”または“１０”の場合は第２ステップを行う。
第２ステップでは、次の桁から下位に向かって入力２ビットの値が“００”または“１１”の桁を探す。発見できなかった場合は図５の（１１）に該当し加算結果はオール１すなわち−１なので、０でない最上位桁は最下位桁である。
第３ステップは第１、第２ステップの結果によって２通りに分かれる。
一方は第１ステップで最上位桁の入力２ビットの値が“１１”の場合または第２ステップで“００”を発見した場合である。この場合の加算結果は負であるので、第３−ステップを行う。他方は第１ステップで最上位桁の入力２ビットの値が“００”の場合および第２ステップで“１１”を発見した場合である。この場合の加算結果は正であるので、第３＋ステップを行う。
第３−ステップでは、次の桁から下位に向かって入力２ビットの値が“１１”以外の桁を探す。発見できなかった場合は図５の（６）に該当し加算結果は−２なので、０でない最上位桁は最下位桁の１桁上位である。“０１”または“１０”を発見した場合は、下位からのキャリーの有無によって０でない最上桁が１桁動くので、第４−ステップを行う。“００”を発見した場合は、第５−Ｂステップを行う。
第３＋ステップでは、次の桁から下位に向かって入力２ビットの値が“００”以外の桁を探す。発見できなかった場合は図５の（１０）に該当し加算結果は０なので、０でない最上位桁は存在しない。“０１”または“１０”を発見した場合は、下位からのキャリーの有無によって０でない最上桁が１桁動くので、第４＋ステップを行う。“１１”を発見した場合は図５の（９）に該当し、この桁でキャリーが発生して１桁上位が１となるので、この桁の１桁上位が０でない最上位桁である。
第４−ステップでは、次の桁から下位に向かって入力２ビットの値が“００”または“１１”の桁を探す。“１１”を発見した場合は第５−Ａステップを行う。“００”を発見した場合または発見できなかった場合は図５の（３）に該当しキャリーが発生しないので、第３−ステップで発見した桁の１桁上位が０でない最上位桁である。
第４＋ステップでは、次の桁から下位に向かって入力２ビットの値が“００”または“１１”の桁を探す。“１１”を発見した場合は図５の（８）に該当し、この桁から第３＋ステップで発見した桁の１桁上位までキャリーが伝わって、第３＋ステップで発見した桁の１桁上位が０でない最上位桁になる。“００”を発見した場合または発見できなかった場合は図５の（７）に該当しキャリーが発生しないので、第３＋ステップで発見した桁が０でない最上位桁である。
第５−Ａステップでは、次の桁から下位に向かって入力２ビットの値が“００”以外の桁を探す。発見した場合は図５の（１）に該当し、第４−ステップで発見した桁から第３−ステップで発見した桁の１桁上位までキャリーが伝わって、第３−ステップで発見した桁が０でない最上位桁になる。発見しなかった場合は図５の（２）に該当し、０、１反転して１を加算するとさらにキャリーが伝わるので、３−ステップで発見した桁の１桁上位が０でない最上位桁である。
第５−Ｂステップでは、次の桁から下位に向かって入力２ビットの値が“００”以外の桁を探す。発見した場合は図５の（４）に該当し、３−ステップで発見した桁の１桁上位が０でない最上位桁である。発見しなかった場合は図５の（５）に該当し、０、１反転して１を加算するとキャリーが伝わるので、３−ステップで発見した桁の２桁上位が０でない最上位桁である。
以上が加算器入力から加算結果の絶対値の０でない最上位桁を求める処理である。
【００３６】
次に、上記処理を４ビットの具体的な数値を使用して説明する。
図５のように本処理では１１通りの場合があるのでそれぞれの場合について説明する。
加算器入力を１０１１と１１１０とすると、第１ステップで最上位桁は“１１”であるから、次に第３−ステップを行う。上位から第２桁で“０１”を発見するので、次に第４−ステップを行う。次の桁で“１１”を発見するので、次に第５−Ａステップを行う。次の桁で“００”以外を発見するので（１）に該当し、０でない最上位桁は第２桁である。実際に加算して符号反転すると０１１１となり正しい結果を得ている。
加算器入力を１１０１と１１１１とすると、第１ステップで最上位桁は“１１”であるから、次に第３−ステップを行う。上位から第３桁で“０１”を発見するので、次に第４−ステップを行う。次の桁で“１１”を発見するので、次に第５−Ａステップを行う。既に最下位に達しているので発見できない場合になって（２）に該当し、０でない最上位桁は第２桁である。実際に加算して符号反転すると０１００となり正しい結果を得ている。
加算器入力を００１０と１０００とすると、第１ステップで最上位桁は“０１”であるから、次に第２ステップを行う。次の桁で“００”を発見するので第３−ステップを行う。上位から第３桁で“１０”を発見するので、次に第４−ステップを行う。次の桁で“００”を発見するので（３）に該当し、０でない最上位桁は第２桁である。実際に加算して符号反転すると０１１０となり正しい結果を得ている。
加算器入力を１０００と０００１とすると、第１ステップで最上位桁は“１０”であるから、次に第２ステップを行う。次の桁で“００”を発見するので第３−ステップを行う。上位から第３桁で“００”を発見するので、次に第５−Ｂステップを行う。次の桁で“００”以外を発見するので（４）に該当し、０でない最上位桁は第２桁である。実際に加算して符号反転すると０１１１となり正しい結果を得ている。
加算器入力を１１００と１１００とすると、第１ステップで最上位桁は“１１”であるから、第３−ステップを行う。上位から第３桁で“００”を発見するので、第５−Ｂステップを行う。“００”以外を発見しないので（５）に該当し、０でない最上位桁は第１桁である。実際に加算して符号反転すると１０００となり正しい結果を得ている。
加算器入力を０１０１と１００１とすると、第１ステップで最上位桁は“０１”であるから、次に第２ステップを行う。次の次の桁で“００”を発見するので第３−ステップを行う。“１１”以外を発見しないので、（６）に該当し、０でない最上位桁は第３桁である。実際に加算して符号反転すると００１０となり正しい結果を得ている。
加算器入力を０１１０と１１０１とすると、第１ステップで最上位桁は“０１”であるから、次に第２ステップを行う。次の桁で“１１”を発見するので第３＋ステップを行う。上位から第３桁で“１０”を発見するので、次に第４＋ステップを行う。“００”も“１１”も発見しないので（７）に該当し、０でない最上位桁は第３桁である。実際に加算すると００１１となり正しい結果を得ている。
加算器入力を００１１と０１０１とすると、第１ステップで最上位桁は“００”であるから、次に第３＋ステップを行う。上位から第２桁で“０１”を発見するので、次に第４＋ステップを行う。次の次の桁で“１１”も発見するので（８）に該当し、０でない最上位桁は第１桁である。実際に加算すると１０００となり正しい結果を得ている。
加算器入力を００１１と００１０とすると、第１ステップで最上位桁は“００”であるから、次に第３＋ステップを行う。上位から第３桁で“１１”を発見するので（９）に該当し、０でない最上位桁は第２桁である。実際に加算すると０１０１となり正しい結果を得ている。
加算器入力を０１１０と１０１０とすると、第１ステップで最上位桁は“０１”であるから、次に第２ステップを行う。次の次の桁で“１１”を発見するので第３＋ステップを行う。“００”以外の桁を発見しないので（１０）に該当し、値が０となって０でない最上位桁は存在しない。実際に加算すると００００となり正しい結果を得ている。
加算器入力を０１１０と１００１とすると、第１ステップで最上位桁は“０１”であるから、次に第２ステップを行う。“００”も“１１”も発見しないので（１１）に該当し、０でない最上位桁は最下位である。実際に加算して符号反転すると０００１となり正しい結果を得ている。
以上が加算器入力から加算結果の絶対値の０でない最上位桁を誤差なしで求める処理の具体例である。
【００３７】
上記図５の処理は比較的複雑でハードウェア量および検出時間の増大を招く恐れがある。これに対して、０でない最上位桁を求める際に１桁の誤差を認めれば、上記処理は大幅に簡素化される。
図６は加算器入力から加算結果の絶対値の０でない最上位桁を１桁の誤差で求める処理である。
第１、第２ステップは図５の処理と同一である。第３−ステップおよび第３＋ステップでは、次の桁から下位に向かって入力２ビットの値がそれぞれ“１１”以外および“００”以外の桁を探し、発見した桁を０でない最上位桁とする。発見できなかった場合は最下位桁を０でない最上位桁とする。
こうすると図５の（１）〜（１１）のうち、（５）以外は１桁の誤差に収る。（５）の場合は発見した桁の２桁上位が０でない最上位桁であり１桁の誤差に収まらない。
しかし、この場合は正数化丸め部１１において以下のように処理すればよい。上記の場合、正数化丸め部１１において符号反転した時点では、まだ発見した桁の１桁上位が０でない最上位桁であり１桁の誤差に収まっていて、値はオール１である。そして、１を加算するとキャリーが最上位まで伝わって１００．０となる。この結果を２桁右シフトすると正しい仮数部が得られるので、指数補正部１２に２を送り、指数を補正する。一方、仮数部は最上位以外は全て０でありシフトしなくても値は正しく、２桁右シフト回路は不要である。最上位のみ２桁右シフトを行う。
【００３８】
上記図６の処理を最上位桁検出部５に適用するには以下のようにする。
桁合せシフト数が−１以上の場合は加数上位は０桁であるが、桁合せシフト数が−２の場合は加数上位は１桁である。したがって、該最上位桁検出はキャリー伝搬加算器６の入力である乗算アレイ４の出力にこの加数上位１桁を加えた値に対して行う（図７の第１ステップ）。
乗算アレイ４の出力はそれぞれの入力がｎ桁とすると、２ｎ＋１桁と２ｎ桁の２値になる。例えば、乗算アレイ４がキャリー保存加算器であれば、キャリー部分が２ｎ＋１桁、和の部分が２ｎ桁となる。加数上位１桁は２ｎ桁側に加える。こうすると、どちらも２ｎ＋１桁なる。図６の処理をそのまま適用するにはさらにキャリー部分、和の部分の最上位に符号ビットを加える必要がある。積と加数が同符号なら双方（キャリー部分、和の部分の最上位に）０、異符号なら一方の最上位に０、他方の最上位に１を加える。しかし、同符号なら第３＋ステップから、異符号なら第２ステップから始めれば、符号ビットを付加しないで済む。結局、図６の処理の第１ステップを図７の第１ステップのように修正すればよい。
【００３９】
図８は図７の処理を実現する図１の最上位桁検出部５の構成例を示すブロック図である。
最上位桁検出部５は桁シフト数判定部８２と、符号判定部８４と、最上位桁判定部８６と、検索回路８０と、エンコーダ８８とを含む。ここではスティッキービット生成用のマスクの生成部の構成は省略する。
桁シフト数判定部８２は入力された桁シフト数Ｓ１の値が−２以上か、−３以下かを判定する。桁シフト数が−３以下と判定された場合は、最上位桁判定部８６において、ゲートＥＯＲ１の出力に基づき図４のステップ４０２−４０４の処理を行うと共に、検索回路８０に後述する検索完了モード（０１）を出力して検索回路８０での検索処理を行わない。
桁シフト数が−２以上と判定された場合は、符号判定部８４において図７の第１ステップを行う。即ち、ゲートＥＯＲ１からの出力に基づき積と加数とが異符号か同符号かを判定し、その判定結果に基づいたモード（ｍｏｄｅ［Ｋ−１］）を出力して検索回路８０に与える。
検索回路８０は図７の第２ステップ、第３＋ステップ、第３−ステップを行うものである。
乗算アレイ４からの２項のビット幅が例えば４ｎ桁（ｎは１又は２以上の整数）であるとすると、検索回路８０はｎ−１個の４桁検索回路８０２〜８０ｎと１つの最下位４桁検索回路８０１とから構成される。
図８において、各４桁検索回路への各入力ｉｎｐｕｔ［］は、乗算アレイ４からの２項の対応する桁の１ビットずつ（即ち、キャリー部の１ビットと和部の１ビットからなるビット対）の計２ビットの組（桁の組）である。
各４桁検索回路は、各２ビットの組が図７の対応するステップに該当する数字の組であるかどうか判定し、判定結果をｆｏｕｎｄ［］として出力すると共に、該回路への全ての入力の判定結果に従い検索モード信号ｍｏｄｅ［］を出力し、次段の検索回路に与える。
出力信号ｆｏｕｎｄ［］は入力に対応する桁の数字が図７に対応するステップに該当する数字の組であれば“１”、そうでなければ“０”となる。
検索回路８０の全ての出力ｆｏｕｎｄ［４ｎ−１］〜ｆｏｕｎｄ［４ｋ−４］はエンコーダ８８でエンコードされ指数正規化値Ｄ７、正規化シフト数Ｄ９として出力される。
このように、本例では、検索回路８０を４桁ごとに分割して複数の４桁検索回路を構成し、各４桁検索回路では乗算アレイ４からの２項の入力（ｉｎｐｕｔ［］）と前段の回路（または上位の４桁検索回路）からの検索モード（ｍｏｄｅ［］）に基づき検索を行い、検索結果（ｆｏｕｎｄ［］）を出力すると共に、下位の４桁検索回路に検索結果に基づく検索モードを与える。
本例では、検索モードは図９のように４種類ある。即ち、図７の第２ステップに対応する正負判定モード、第３＋ステップに対応する正数検索モード、第３−ステップに対応する負数検索モード、および検索終了モードであり、これら４種類のモードにはモードの種別を示す２ビットコード“００”“１０”“１１”“０１”を割り当てている。
【００４０】
図１０、図１１はそれぞれ図８の４桁検索回路、最下位４桁検索回路における論理の例を示す表である。図１０、図１１において、¬（００）、¬（１１）（¬は否定を表わす）はそれぞれ００以外、１１以外の２ビットの組み合わせを示す。
図８の検索回路８０の動作を図７のフローチャート及び図１０、図１１に示す論理を用いて説明する。
符号判定部８４は図７の第１ステップを実行するものであり、ゲートＥＯＲ１の出力が“１”であれば異符号であるのでモード信号ｍｏｄｅ［ｋ−１］として正負判定モード［００］を出力し、ゲートＥＯＲ１の出力が“０”であれば同符号であるのでモード信号ｍｏｄｅ［ｋ−１］として整数検索モード［１０］を出力する。
各４桁検索回路８０２〜８０ｎの動作を以下に説明する。
各４桁検索回路８０２〜８０ｎにおいては、入力されるモード信号ｍｏｄｅ［ｋ−１］のモードが正負判定モード［００］であれば（図１０の（１）〜（２２）該当する）、第２ステップを実行すべく、次の桁から下位に向かって２ビットの組が“００”または“１１”の桁を探す。
該４桁検索回路の４組の入力ｉｎｐｕｔ［４ｋ−４］〜ｉｎｐｕｔ［４ｋ−１］に“００”の桁があれば（図１０の（１）〜（１０）該当）加算結果は負であるので、第３−ステップを実行し、該“００”が発見された桁から下位の桁に向かって“１１”以外の桁を探す。“１１”以外の桁が発見されれば、該発見された“１１”以外の桁が求める最上位桁である。従って、この場合は次段以降の４桁検索回路での検索が不要であるのでモード信号ｍｏｄｅ［ｋ］として検索完了モード［０１］を出力する（図１０の（１）〜（３）、（５）、（６）、（８））。“１１”以外の桁が発見されなければ、モード信号ｍｏｄｅ［ｋ］として負数検索モード［１１］を出力し、次段の４桁検索回路において第３−ステップを実行する（図１０の（４）、（７）、（９）、（１０））。
【００４１】
一方、第２ステップにおいて、“１１”の桁が発見されれば（図１０の（１３）〜（２２）に該当）加算結果は正であるので、第３＋ステップを実行し、該“１１”が発見された桁から下位の桁に向かって“００”以外の桁を探す。
“００”以外の桁が発見されれば、該発見された“００”以外の桁が求める最上位桁である。従って、この場合は次段以降の４桁検索回路での検索が不要であるのでモード信号ｍｏｄｅ［ｋ］として検索完了モード［０１］を出力する（（１５）、（１７）、（１８）、（２０）〜（２２））。
“００”以外の桁が発見されなければ、モード信号ｍｏｄｅ［ｋ］として正数検索モード［１０］を出力し、次段の４桁検索回路において第３＋ステップを実行する（図１０の（１３）、（１４）、（１６）、（１９））。
また、第２ステップにおいて、“００”、“１１”いずれの桁も発見されなければ、モード信号ｍｏｄｅ［ｋ］として正負判定モード［００］を出力し、次段の４桁検索回路において第２ステップを実行する（図１０の（１１）、（１２））。
【００４２】
一方、各４桁検索回路８０２〜８０ｎにおいては、入力されるモード信号ｍｏｄｅ［ｋ−１］のモードが正数検索モード［１０］であれば（図１０の（２４）〜（２８））、第３＋ステップを上記と同様に実行する。
また、各４桁検索回路８０２〜８０ｎにおいては、入力されるモード信号ｍｏｄｅ［ｋ−１］のモードが負数検索モード［１１］であれば（図１０の（２９）〜（３３））、第３−ステップを上記と同様に実行する。
また、各４桁検索回路８０２〜８０ｎにおいては、入力されるモード信号ｍｏｄｅ［ｋ−１］のモードが検索完了モード［０１］であれば（図１０の（２３））、そのまま検索を行わずに検索完了モード［０１］を出力する。
最下位４桁検索回路８０１の論理は、４桁検索回路８０２〜８０ｎとほぼ同じであるが、第２ステップ又は第３＋ステップ又は第３−ステップを実行した際に、該当する桁が発見されなかった場合は、最下位桁が求める最上位桁と判定する。また、最下位４桁検索回路８０１においてはモード信号は出力しない。
【００４３】
次に、図８の検索回路８０の動作を図２の例を用いて説明する。
図２の例では検索回路８０は１つの４桁検索回路８０２と最下位４桁検索回路８０１で構成されるが、ここでは例えば最下位４桁検索回路８０１の入力を５桁とする。ゲートＥＯＲ１の出力が“０”であり積と加数が同符号であるのでモード信号ｍｏｄｅ［ｋ−１］として４桁検索回路８０２に正数検索モード［１０］が与えられ、４桁検索回路８０２は第３＋ステップを実行する。
すなわち、下位に向かって“００”以外の桁を探すと“１０”がｉｎｐｕｔ
［４ｋ−３］にあるため出力ｆｏｕｎｄ［４ｋ−４］、ｆｏｕｎｄ［４ｋ−３］、ｆｏｕｎｄ［４ｋ−２］、ｆｏｕｎｄ［４ｋ−１］として“０１００”を出力し、、さらに、モード信号ｍｏｄｅ［ｋ］として検索完了モード［０１］を出力する。したがって、最下位桁検索回路８０では出力ｆｏｕｎｄ［４ｎ−４］、ｆｏｕｎｄ［４ｎ−３］、ｆｏｕｎｄ［４ｎ−２］、ｆｏｕｎｄ［４ｎ−１］として“００００”を出力する。
こうして、入力ｉｎｐｕｔ［４ｋ−３］に求める最上位桁があると判定される。
【００４４】
図８の回路は乗算アレイ４の出力のビット幅が小さい場合は単純で良い回路であるが、ビット幅が大きくなると検索時間が増大する。また、ビット幅が大きい場合に正規化シフタ１０による正規化を１段階のシフトで行うとシフタの負荷が重くなって遅くなる。
図１２の検索回路はビット幅が大きい場合に対応して図８の検索回路８０を改良した回路である。
ビット幅はこの例では６４桁である。ここでは、検索回路１１０は、７個のモード先見および第１段シフト制御回路３０〜３６、最下位モード先見および第１段シフト制御回路３７、１５個の４桁検索回路３８〜５２、最下位４桁検索回路５３、８個の８ビット論理和５４〜６１（図１３）から成る。
検索を高速化するために検索モード信号を高速に下位に伝えるモード先見回路を付加し、正規化シフタ１０による正規化を２段階にした場合に対応する第１段シフト制御信号ｓｈｉｆｔ＿１ｓｔ［１〜８］および第２段シフト制御信号ｓｈｉｆｔ＿２ｎｄ［１〜８］を出力している。
【００４５】
ここでは、各モード先見及び第１段シフト制御回路３０〜３６、及び最下位第１段シフト制御回路３７への入力は８桁とする。これら８桁の入力のうち上位４桁と下位４桁とはそれぞれさらに２つの４桁検索回路（図８の４桁検索回路と同様の構成）に入力される。
各第１段シフト制御回路３０〜３７の出力である第１段シフト制御信号
ｓｈｉｆｔ＿１ｓｔ［１］〜［８］はエンコーダ９０に与えられる。各第１段シフト制御回路３０〜３７に関連する２つの４桁検索回路の８つの出力（ｆｏｕｎｄ［８ｋ−８］〜ｆｏｕｎｄ［８ｋ−１］、本例ではｋ＝１〜８）の対応する１つの対応するオアゲート５４〜６１の１つに入力されている。即ち、８つの出力ｆｏｕｎｄ［８ｋ−８］、ｆｏｕｎｄ［８（ｋ＋１）−８］…ｆｏｕｎｄ［５６］はオアゲート５４に入力され、８つの出力ｆｏｕｎｄ［８ｋ−７］、ｆｏｕｎｄ［８（ｋ＋１）−７］…ｆｏｕｎｄ［５７］はオアゲート（第２段シフト制御回路）５５に入力される。これらおあげーと５４〜６１の出力である第２段シフト制御信号ｓｈｉｆｔ＿２ｎｄ［ｉ］は同様にエンコーダ９０に与えられる。
各モード先見及び第１段シフト制御回路３０〜３６は前段からのモード信号ｍｏｄｅ［］に従ったモードで検索を行い、８桁の入力内に求める最上位桁があるかどうか判定し、あれば第１段シフト制御信号ｓｈｉｆｔ＿１ｓｔ［ｋ］を“１”、なければ“０”としてエンコーダに与える。さらに、該判定結果に従ったモード信号を次段に与える。
【００４６】
図１４、１５はそれぞれ図１２のモード先見及び第１段シフト制御回路、最下位第１段シフト制御回路の動作論理の例を示す表である。
次に、モード先見及び第１段シフト制御回路３０〜３６の動作論理を説明する。図１４において、“−”はｄｏｎ’ｔ  ｃａｒｅを示す。
【００４７】
図において、例（１）〜（１８）は入力モードが［００］、即ち正負判定モードであり、該回路において第２ステップを実行する事を示す。そのうち例（１）〜（８）は、該回路で８桁の入力について第２ステップを実行した結果“１１”が発見されたため出力モード信号として負数検索モード［１１］を出力する場合を示す。従って、次段では第３−ステップを実行する。
同様に、例（１１）〜（１８）は、該回路で８桁の入力について第２ステップを実行した結果“００”が発見されたため出力モード信号として正数検索モード［１０］を出力する場合を示す。従って、次段では第３＋ステップを実行する。
また、例（９）、（１０）は、該回路で８桁の入力について第２ステップを実行した結果“００”、“１１”いずれも発見されないため出力モード信号として正負判定モード［００］を出力する場合を示す。従って、次段では第２ステップを依然として実行する。
例（１９）は、前段において、求める最上位桁が発見されたため入力モードが［０１］、即ち、検索完了モードであり、従って同様に出力モード信号として検索完了モード［０１］を出力する。
【００４８】
例（２０）は、入力モードが［１０］、即ち、正数検索モードであり、該回路において第３＋ステップを実行した結果、“００”以外の桁が発見されず、出力モード信号として正数検索モード［１０］を出力する場合を示す。従って、次段では第３＋ステップを依然として実行する。
例（２１）は、入力モードが［１１］、即ち、負数検索モードであり、該回路において第３−ステップを実行した結果、“１１”以外の桁が発見されず、出力モード信号として負数検索モード［１１］を出力する場合を示す。従って、次段では第３−ステップを依然として実行する。
上記いずれの場合も第１段シフト制御信号ｓｈｉｆｔ＿１ｓｔ［ｋ］は“０”である。
一方、例（２２）は、上記以外の場合であり、モード先見及び第１段シフト制御回路において求める最上位桁が発見され、出力モード信号として検索完了モード［０１］を出力すると共に第１段シフト制御信号ｓｈｉｆｔ＿１ｓｔ［ｋ］として“１”を出力する。
【００４９】
最下位第１段シフト制御回路３７の動作論理は図１５に示す通りである。
即ち、前段以前の段において、求める最上位桁が発見されたため入力モードが［０１］、即ち、検索完了モードであり、従って第１段シフト制御信号ｓｈｉｆｔ＿１ｓｔ［８］として“０”を出力する。
また、入力モードが［０１］以外の場合、即ち、［００］［１０］［１１］のいずれの場合も、前段以前の段において求める最上位桁が発見されなかったため、この最下位８桁で発見されるか、またはこの最下位８桁で発見されない場合は最下位桁で発見されたとみなす。従って、いずれにしてもこの最下位８桁で発見されるため第１段シフト制御信号ｓｈｉｆｔ＿１ｓｔ［８］として“１”を出力する。
【００５０】
従って、各モード先見及び第１段シフト制御回路からの第１段シフト制御信号ｓｈｉｆｔ＿１ｓｔ［ｋ］により８桁単位で求める最上位桁位置（シフト量）が分かり、さらにオアゲート５４〜６１からの第２段シフト制御信号ｓｈｉｆｔ＿２ｎｄ［ｉ］により１桁単位で最上位桁位置（シフト量）が分かる。従って、これら第１段、第２段シフト制御信号から最上位桁位置が分かり、これをエンコードすれば指数正規化値、正規化シフト数が求まる。
【００５１】
このように、各モード先見及び第１段シフト制御回路において図７の対応するステップを実行した結果、目的の桁が発見されなかった場合は次段のモード先見及び第１段シフト制御回路において同様のステップを実行する必要がある（図１４の例（１０）、（１９）〜（２１））。
従ってそのような場合に、図８の構成では４桁検索回路での検索動作を介してモードが伝送されるが、図１２の構成ではモード先見及び第１段シフト制御回路のみの処理で速やかに次段に実行すべきモードを指示できるので、図８の構成に比べ出力モードを高速に下位に伝送でき、その結果、速やかに求める最上位桁を検出できる。
【００５２】
モード先見論理は一見複雑で高速なモード信号の伝達ができないかのように見える。しかし、検索モードの切り替わりは、正負判定モードから正数検索モードまたは負数検索モードへの切り替わりと、その検索モードから検索完了モードへの切り替わりの２回である。すなわち、８桁ずつ８個あるモード先見回路のうち、少なくとも６個では検索モードが切り替わらない。
したがって、検索モードが切り替わらない場合を高速化すれば高速なモード信号の伝達が可能となる。検索モードが切り替わらない場合は、入力が全て０（図１４の例（２０））、全て１（例２１）、入力の排他的論理和が全て１（）例（９）、（１０）の３通りであり、回路のこの部分の高速化は容易である。
また、第１段シフト制御論理は８桁のどこかに最上位桁があるかないかを判定しているので、検索結果であるｆｏｕｎｄ［０〜６３］に比べて生成論理が単純で高速に生成できる。
第２段シフト制御論理はｆｏｕｎｄ［０〜６３］から８入力論理和回路を通して生成するので遅くなるが、第１段シフトの完了時に間に合えばよいので問題ない。
例えば倍精度浮動小数の積和演算を行った場合、入力の仮数部は５３桁あり、キャリー伝搬加算器６の出力は１０６桁＋上位へのキャリーとなる。そして、桁落ちが発生すると１０６桁のどこにでも絶対値の０でない最上位桁が来る可能性がある。しかし、該最上位桁が下位５３桁に来る可能性は極めて低い。しかも、このような大幅な桁落ちが発生すると有効数字は０桁になる。更に、該最上位桁が下位５３桁にあれば丸めが不要となり正規化しなくとも正確な値を出力できる。したがって、このような場合は実行サイクル数が伸びても一旦正規化していない値を結果として出力し、その後実行サイクル数を伸して正規化を行えば十分である。
以上から最上位桁検出部５と正規化シフタ１０を、キャリー伝搬加算器６の出力の下位から５２桁以上に該最上位桁がある場合に正しく正規化を行い、そうでない場合には下位５３桁を正規化しないまま出力するようにしても性能に影響はない。そして、こうすることにより最上位桁検出部５と正規化シフタ１０を簡素化することができる。
【００５３】
このような構成の積和演算器の動作を図１６を参照して説明する。
【００５４】
ここでは、仮数部が４桁の場合で具体的な数値を用いて説明する。
（１．００１×２１）×（１．００１×２２）＋（−１．０１０×２３）を計算すると以下のようになる。
まず、桁合せシフト数指数生成部１で、桁合せシフト数として１＋２−３＝０を生成し、桁合せシフト数が−２以上なので指数として１＋２＝３を生成する。
次に、加数桁合せ符号合せ部２で、加数仮数部１．０１０を０桁右シフトし、異符号なので加数中位と加数上位の０、１反転をして、加数中位１０．１０１１１１、加数上位１．０００、仮数下位００００、および加数上位最下位１．０００を生成する。次に、加数下位スティッキービット生成部３で、加数下位００００が０なのでスティッキービットとして０を生成する。
これらの操作によって、上式は
（１．０００×２５）＋（（１．００１×１．００１＋１０．１０１１１１）×２３）
となる。２５は加数上位の１が加数中位の最上位の１桁上位であることを示している。
次に、乗算アレイ４で、
１．００１×１．００１＋１０．１０１１１１
を前述のように乗算部分を加算に直して３項ずつ加算すると、
０００．００００１０
＋  １１．１１１１１０
となる。この２項が乗算アレイ４出力である。
【００５５】
最上位桁検出部５では、乗算アレイ４出力および桁合せシフト数０とから、０でない最上位桁は最下位桁であるので、下位から４桁目で検索を打切って、指数正規化部８へ指数正規化値−３を、スティッキービット生成部９へマスク００００００００を、正規化シフタ１０へ正規化シフト数−３を出力する。
キャリー伝搬加算器６では、乗算アレイ４出力を加算し、さらに積と加数が異符号かつ加数下位スティッキービットが０なので最下位に１を加算して００．０００００１を生成し、スティッキービット生成部９および正規化シフタ１０へ出力する。また、最上位からのキャリー１を加数上位インクリメンタ７へ出力する。
加数上位インクリメンタ７では、桁合せシフト数０が−２以上で正規化シフト数−３が１、２以外なので００．０００を生成する。
この時、最初の式は
（００．０００×２３）＋（００．０００００１×２３）
となっている。
指数正規化部８では、桁合せシフト数指数生成部１からの指数３と最上位桁検出部５からの−３を加算して０を出力する。
スティッキービット生成部９では、キャリー伝搬加算器６出力００．０００００１を最上位桁検出部５出力００００００００でマスクして論理和をとり、さらに加数下位スティッキービット生成部からの０と論理和をとった値０を出力する。
正規化シフタ１０では、正規化シフト数が−３であるからキャリー伝搬加算器６出力００．０００００１を３桁左シフトして上位６ビットの００．００１０を抽出し、加数上位インクリメンタ７出力００．０００と論理和をとって、００．００１０として出力する。
この時、最初の式は
００．００１０×２０
となっている。正数化丸め部１１では、正規化シフタ１０出力が００．００１０でスティッキービットが０であるから、正数化丸め部１１出力は０．００１である。指数補正部１２では、正数化丸め部１１で最上位桁位置の補正が不要だったので、指数正規化部８出力０をそのまま出力する。
この結果、最終的な演算結果は０．００１×２０となる。そして、この値を改めて正規化すると、１．０００×２~３となる。
【００５６】
図１７は本発明の更に別の実施例による積和演算器の構成図である。
本積和演算器は浮動小数積和演算で一般的に行われている符号合わせ、正数化、及び様々な丸めモードによる丸めを行わない。したがって、本実施例は、被乗数、乗数、及び加数が全て同符号で丸めは切捨てのみを行う浮動小数積和演算器である。本分野を専門とする技術者であれば、本実施例に該符号合わせ、正数化、及び丸め処理を付け加えて一般的な浮動小数積和演算器を構成することが可能である。
【００５７】
本実施例は、桁合せシフト数指数生成部１、加数桁合せ部２、積和演算アレイ４、再上位桁検出部５、キャリー伝搬加算器６、指数正規化部８、及び正規化シフタ１０から成る。
桁合せシフト数指数生成部１は、加数、被乗数、及び乗数の指数部を入力とし、桁合せシフト数および正規化前の指数を生成して、それぞれ加数桁合せ符号合せ部２および指数正規化部８へ出力する。正規化前の指数としては被乗数と乗数の指数部の和すなわち積の指数部を出力する。桁合せシフト数は、該積の指数部から加数指数部を引いて生成する。
尚、桁合せシフト数が（−仮数部の桁数−１）以下の場合を統一的に処理しようとすると仮数部を処理する加数桁合せ部２、積和演算アレイ４、再上位桁検出部５、キャリー伝搬加算器６、及び正規化シフタ１０のビット幅が膨大となり現実的でない。この場合は、丸めが切捨てであれば積の部分が切捨てられて結果は加数そのものとなるので、本実施例とは別にこの場合を検出して結果として加数を出力する回路を付け加えることにより、仮数部を処理する部分の桁数を（仮数部の桁数×３）にすることができる。
【００５８】
加数桁合せ部２は、加数仮数部および桁合せシフト数を入力とし、加数仮数部の桁合せを行い桁合せ後の加数仮数部として積和演算アレイ４に出力する。通常は桁合せシフト数に応じたシフトを行う。しかし、前節で説明したように桁合せシフト数が（−仮数部の桁数−１）以下の場合は本実施例の回路の処理結果は使用しないため出力値は任意である。一方、桁合せシフト数が（仮数部の桁数×２−１）以上の場合は加数が切り捨てられて結果は被乗数と乗数の積となる。この場合は、桁合せ後の加数仮数部として０を出力する。
【００５９】
積和演算アレイ４は被乗数仮数部、乗数仮数部、および桁合せ後の加数仮数部を入力とし、被乗数仮数部と乗数仮数部の積と桁合せ後の加数仮数部の和を、キャリー保存加算器、冗長２進加算器等のアレイを用いて計算し、結果を最上位桁検出部５およびキャリー伝搬加算器６に出力する。積和演算アレイ４の出力は、キャリー伝搬加算器６で加算すると積和演算結果となる２つの値である。
【００６０】
最上位桁検出部５は、積和演算アレイ４出力から、積和演算結果の絶対値の０でない最上位桁を検出し、検出結果に基づいて、指数正規化部８へは指数正規化値、正規化シフタ１０へは正規化シフト数を出力する。
本実施例では該指数正規化値及び正規化シフト数は常に同一である。該最上位桁検出は図５の処理に基づいて行う。但し、本実施例では該積和演算アレイ４出力は２の補数ではなく絶対値である。図５の処理を適用するには入力の２つの値のそれぞれの最上位桁の上位に０を加えて２の補数とすればよい。指数正規化値および正規化シフト数は、求めた最上位桁と正規化前の小数点の左の桁との桁位置の差である。
【００６１】
キャリー伝搬加算器６は積和演算アレイ４出力の２つの値を加算して正規化前の積和演算結果仮数部を生成し、正規化シフタ１０へ出力する。
指数正規化部８は正規化前の指数に最上位桁検出部５からの指数正規化値を加算して正規化し、加算結果を最終的な積和演算結果指数部として出力する。
正規化シフタ１０は、キャリー伝搬加算器６からの正規化前の積和演算結果仮数部を最上位桁検出部５からの正規化シフト数を用いて正規化し、最終的な積和演算結果仮数部として出力する。
【００６２】
図１８は本実施例の仮数部が４ビットの具体的な数値による動作例である。
（１．１１０×２２）×（１．１０１×２３）＋（１．０１１×２７）を計算すると以下のようになる。
まず、桁合せシフト数指数生成部１で、桁合せシフト数として２＋３−７＝−２を生成し、正規化前の指数として２＋３＝５を生成する。次に、加数桁合せ符号合せ部２で、加数仮数部１．０１１を２桁左シフトして、桁合せ後の加数仮数部０００１０１．１０００００を生成する。これらの操作によって、上式は
（（１．１１０×１．１０１＋０００１０１．１０００００）×２５）
となる。次に、積和演算アレイ４で、
１．１１０×１．１０１＋０００１０１．１０００００
の乗算部分を加算に直して、
０．００１１１０
＋          ０．０００００
＋          ０．１１１０
＋          １．１１０
＋０００１０１．１０００００
とし、以下のように計算する。
【００６３】
積和演算アレイ４はキャリー保存加算器とする。キャリー保存加算器は３つの数を加算してキャリー部分と和の部分の２つの数を出力する。キャリー部分は各桁に２つ以上１がある場合に次の桁に１を立てることによって生成する。和の部分は各桁に１つまたは３つ１がある場合にその桁に１を立てることによって生成する。まず、最初の３項を加算すると、この部分がキャリー部分と和の部分の２項となって、
０．０１００００
＋          ０．１１０１１０
＋          １．１１０
＋０００１０１．１０００００
となる。
さらにこの結果の最初の３項を加算すると、この部分が２項となって、
０１．１０００００
１．０１０１１０
＋０００１０１．１０００００
となる。
さらにこの３項を加算すると、
００００１１．００００００
＋０００１０１．０１０１１０
となる。
この２項が積和演算アレイ４の出力である。
【００６４】
次に、最上位桁検出部５で、該積和演算アレイ４出力の２項の最上位桁の上位に０を加えて２の補数とし図５の処理に基づいて最上位桁検出を行う。
まず、第１ステップで、最上位桁が００であるから次に第３＋ステップを行う。
第３＋ステップでは、正規化前の小数点の左の桁を基準桁として２桁左で０１を発見するので、次に第４＋ステップを行う。
第４＋ステップでは１１を発見するので、図５の(８)の場合に該当し絶対値の０でない最上位桁として第３＋ステップで発見した桁の１桁上位すなわち基準桁の３桁左が求める最上位桁である。
したがって、指数正規化部８及びへ正規化シフタ１０へ指数正規化値及び正規化シフト数として３を出力する。
キャリー伝搬加算器６では、積和演算アレイ４出力を加算して０００１０００．０１０１１０を生成し、正規化シフタ１０へ出力する。この時、最初の式は
（０００１０００．０１０１１０×２５）
となっている。
次に、指数正規化部８で、正規化前の指数５と最上位桁検出部５からの指数正規化値３を加算して８を出力する。正規化シフタ１０では、正規化シフト数が３であるからキャリー伝搬加算器６出力０００１０００．０１０１１０を３桁右シフトして小数点の左の桁から４ビットの１．０００を出力する。この結果、演算結果は１．０００×２８となる。
【００６５】
なお、上記実施例においては、乗算アレイとしてキャリー保存加算器のアレイを用い、最上位桁検出部は該乗算アレイの２項の演算出力であるキャリー部分と和の部分を入力として絶対値の０でない最上位桁を検出しているが、乗算アレイとして冗長２進加算器等のアレイを用い、該アレイの２項の演算出力を入力として絶対値の０でない最上位桁を検出する最上位桁検出部を実施例の場合と同様に構成することができることは云うまでもない。
【００６６】
尚、図３の例のように、積より加数の方が大きい場合に、積より上位にはみ出した加数上位部分を最上位桁を動かさずに処理し、該はみ出した部分以外の加数と積との積和演算結果を正規化したものと最終的に加算を行って最終的な正規化した積和演算結果を得ている実施例においては、最上位検出部への入力を乗算アレイからの２つの項の代わりにキャリー伝搬加算部６からの正規化前の積和演算結果の仮数部を用いてもよい。
【００６７】
次に、上記の本発明による積和演算器を用いたデータ処理装置の一例を図１９を参照して説明する。
該データ処理装置は命令フェッチデコード部１００、演算部２００、メモリアクセス部３００、メモリ４００から成る。本発明に基づく積和演算器２１０は演算部２００内にある。
【００６８】
次に、図１９の各部の構成及び動作を説明する。
命令フェッチデコード部１００は、メモリアクセス部３００に命令アドレス１１０を出力して命令フェッチ要求を行ってメモリ４００から命令を読み出して該メモリアクセス部３００を介して命令１２０を受取り、該命令をデコードして演算部２００に制御情報１３０を出力する。通常は連続する命令アドレスに対して該命令フェッチ及びデコード処理を行い、演算部２００が分岐アドレス１４０を出力して分岐要求を行った場合は、該処理を分岐アドレス１４０に対して行う。
演算部２００は命令フェッチデコード部１００からの制御情報１３０に基づいて演算、データフェッチ及びストア等を行う。特に、演算が浮動少数積和演算の場合は本発明に基づく積和演算器２１０を用いて処理する。
また、データフェッチ又はストアを行う場合は、メモリアクセス部３００にアドレス２２０を出力し、更にストア時にはデータ２３０も出力して、フェッチ又はストア要求を行い、フェッチ時には該メモリアクセス部３００からデータ２３０を受取る。
メモリアクセス部３００は、命令フェッチデコード部１００からの命令フェッチ要求及び演算部２００からのデータフェッチ又はストア要求に基づいて、メモリ４００にアドレス３１０を出力し、更にストア時にはデータ３２０も出力してアクセスを行い、要求がフェッチの場合はメモリ４００からフェッチしたデータ３２０を要求元に出力する。
メモリ４００はメモリアクセス部３００からアドレス３１０を受取り、更にストア時にはデータ３２０も受取って、フェッチ又はストア動作を行い、要求がフェッチの場合はデータ３２０をメモリアクセス部３００に出力する。
【００６９】
次に、積和演算器２１０による演算動作を説明する。
先ず、命令フェッチデコード部１００は、上記のようにメモリアクセス部３００に命令アドレス１１０を出力してメモリアクセス部３００より命令１２０を受け取り、該命令をデコードして制御情報１３０を得る。制御情報１３０としてはオペランド、加算、乗算、浮動小数点演算等の演算に関する情報がある。積和演算器２１０は該制御情報に基づき、メモリ４００から読み出したデータ（加数、乗数、被乗数）、または演算部２００内のレジスタ２１２から読み出したデータの積和演算を上記各実施例のように行う。演算結果はレジスタ２１２またはメモリアクセス部３００を介してメモリ４００にストアされる。
【００７０】
本実施例は、具体的にはメモリ４００以外の部分を１つのチップに納めればいわゆるマイクロプロセッサであり、複数チップに納めてボードに実装すればプロセッサボードとなる。
本実施例は本発明に基づく積和演算器を用いたデータ処理装置の一例であるが、一般に、浮動小数積和演算器を使用するデータ処理装置であれば、本発明による積和演算器を適用することができる。
【図面の簡単な説明】
【００７１】
【図１】本発明の実施例による積和演算器の構成を示すブロック図である。
【図２】図１の積和演算器によりある式の積和演算を行う場合の図１の各構成要素での処理の流れを示す動作説明のための図である。
【図３】図１の積和演算器により別の式の積和演算を行う場合の図１の各構成要素での処理の流れを示す動作説明のための図である。
【図４】図１の最上位桁検出部において、乗算アレイの出力である２項から、正規化前の積和演算結果の仮数部の絶対値のうち０でない最上位桁を求める処理の一例を示すフローチャートである。
【図５】桁合わせシフト数が−２以上の場合の、最上位桁検出部において、乗算アレイの出力である２項から、正規化前の積和演算結果の仮数部の絶対値のうち０でない最上位桁を誤差なしで求める処理を示すフローチャートである。
【図６】正規化前の積和演算結果の仮数部の絶対値のうち０でない最上位桁を１桁の誤差で求めるように図５の処理修正した処理を示すフローチャートである。
【図７】図６の処理を図１の積和演算結果の最上位桁検出部に適用可能に修正した処理を示すフローチャートである。
【図８】図７の処理を実現する図１の最上位桁検出部の構成例を示すブロック図である。
【図９】図８の検索回路におけるモードの例を示す図である。
【図１０】図８の検索回路における動作論理の例を示す図である。
【図１１】図８の検索回路における動作論理の例を示す図である。
【図１２】図８の最上位桁検出部の検索回路の別の構成例を示すブロック図である。
【図１３】図１２の検索回路の第２段シフト制御回路の構成を示す図である。
【図１４】図１２のモード先見及び第１段シフト制御回路の動作論理の例を示す図である。
【図１５】図１２の最下位第１段シフト制御回路の動作論理の例を示す図である。
【図１６】本発明の別実施例による積和演算器により積和演算を行う場合の各構成要素での処理の流れを示す動作説明のための図である。
【図１７】本発明のさらに別の実施例による積和演算器の構成を示すブロック図である。
【図１８】図１７の積和演算器によりある式の積和演算を行う場合の図１７の各構成要素での処理の流れを示す動作説明のための図である。
【図１９】本発明による積和演算器を用いたデータ処理装置の一例を示すブロック図である。
【符号の説明】
【００７２】
１  桁合せシフト数指数生成部
２  加数桁合せ符号合せ部
３  加数下位スティッキービット生成部
４  乗算アレイ
５  最上位桁検出部
６  キャリー伝搬加算器
７  加数上位インクリメンタ
８  指数正規化部
９  スティッキービット生成部
１０  正規化シフタ
１１  正規化丸め部
１２  指数補正部
【図１】
2007073061.tif 000003
【図２】
2007073061.tif 000004
【図３】
2007073061.tif 000005
【図４】
2007073061.tif 000006
【図５】
2007073061.tif 000007
【図６】
2007073061.tif 000008
【図７】
2007073061.tif 000009
【図８】
2007073061.tif 000010
【図９】
2007073061.tif 000011
【図１０】
2007073061.tif 000012
【図１１】
2007073061.tif 000013
【図１２】
2007073061.tif 000014
【図１３】
2007073061.tif 000015
【図１４】
2007073061.tif 000016
【図１５】
2007073061.tif 000017
【図１６】
2007073061.tif 000018
【図１７】
2007073061.tif 000019
【図１８】
2007073061.tif 000020
【図１９】
2007073061.tif 000021