(57)【特許請求の範囲】
【請求項１】
累算演算(Ａ×Ｂ)＋Ｃを実行する浮動小数点乗算累算装置すなわちＦＭＡＣ装置であって、入力Ａ，ＢおよびＣそれぞれが仮数と指数とを備え、乗算装置が(Ａ×Ｂ)の仮数を(Ａ×Ｂ)レジスタに配置し、
ＣＨＩレジスタであって、(Ａ×Ｂ)の仮数の範囲を越えるＣの仮数のビットを、ＣＨＩレジスタに転送する手段に接続されたＣＨＩレジスタと、
ＣＢＵＳレジスタであって、(Ａ×Ｂ)の仮数の範囲と重ね合うＣの仮数のビットを、(Ａ×Ｂ)レジスタおよびＣＢＵＳレジスタに含まれる仮数の重なるビットを加算のため位置調整するように、ＣＢＵＳレジスタに配置する第１シフト器に接続されたＣＢＵＳレジスタと、
(Ａ×Ｂ)レジスタおよびＣＢＵＳレジスタに接続され、(Ａ×Ｂ)＋ＣＢＵＳ出力を提供する加算器と、
加算器の(Ａ×Ｂ)＋ＣＢＵＳ出力部に接続する先頭ビット予測器と、
先頭ビット予測器に接続され、一時的出力を提供する第２シフト器と、
(Ａ×Ｂ)の仮数の範囲を越えるＣの仮数のビットを格納するＣＨＩレジスタのビットと一時的出力の１つ以上の上位ビットを結合させ、(Ａ×Ｂ)＋Ｃ累算出力を作成する結合手段と、を備えるＦＭＡＣ装置。
【請求項２】
(Ａ×Ｂ)の仮数部が「２ｍ＋１」ビットを含み、(Ａ×Ｂ)＋ＣＢＵＳ出力が「２ｍ＋１」ビットを含み、加算器が「２ｍ＋１」ビットの最大幅を持つ、請求項1に記載のＦＭＡＣ装置。
【請求項３】
数値Ａ、ＢおよびＣが各々ｍビットの仮数および指数を含み、乗算(Ａ×Ｂ)の結果が「２ｍ＋１」ビットの仮数および指数を含む累算演算(Ａ×Ｂ)＋Ｃを実行する浮動小数点乗算累算装置すなわちＦＭＡＣ装置において、Ｃを(Ａ×Ｂ)の結果に加算する方法であって、(Ａ×Ｂ)とＣの指数部を比較して(Ａ×Ｂ)とＣの仮数が重ね合う範囲があるか否かを判断するステップと、(Ａ×Ｂ)仮数部の範囲を越えるＣ仮数部分をすべてＣＨＩレジスタへ転送するステップと、(Ａ×Ｂ)仮数部と重なり合うＣの仮数部分をシフトさせて、(Ａ×Ｂ)およびＣの仮数のビットをそれぞれの大きさに従って位置調整するステップと、Ｃの仮数のシフトされた部分を(Ａ×Ｂ)の仮数部に加算して一時的結果を生成するステップと、Ｃ仮数の一部がＣＨＩレジスタへ転送されている場合、ＣＨＩバッファへ転送されたビット数に応じて、1つまたは複数の下位ビットを一時的結果からシフトさせるステップと、ＣＨＩレジスタへ転送されたＣ仮数部のビットを一時的結果の１つ以上の上位ビット位置にマージさせて、累算結果を生成するステップと、を含むＣを(Ａ×Ｂ)の結果に加算する方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、浮動小数点乗算累算装置であるＦＭＡＣ装置において乗算結果に対する加数の高位部分の結合を行わないことによって演算機構のデータ経路幅の拡大を抑える方法および装置に関するものである。
【０００２】
【従来の技術】
マイクロプロセッサのアーキテクチャの設計において、速度、正確度およびコストという３つの非常に重要な考慮点がある。優れた正確度および高速での乗算、加算およびその他の演算を実行するマイクロプロセサ(ＣＰＵ)を設計することは望ましいことではあるが、コストの観点から効率的に製造することことができるＣＰＵを設計することもまた望まれる。ＲＩＳＣ(すなわち減少命令セット・コンピュータ）のＣＰＵにおいて乗算および加算を累計演算すなわち(Ａ＊Ｂ)＋Ｃに融合させることによって速度および正確度が顕著に向上した。単に２つの数を加算または乗算することが必要ならば、Ｃ＝０をセットすることによって演算Ａ＊Ｂを実行し、またＢ＝1をセットすることによっ演算Ａ＋Ｃを実行することができる。演算(Ａ＊Ｂ)＋Ｃを実行するＣＰＵコンポーネントは、(浮動小数点乗算累算装置を意味するFloating-point Multiply Accumulate Unitの頭文字である)ＦＭＡＣまたは(乗算加算融合浮動小数点装置を意味するMultiply-Add-Fused Floating-Point Unitの頭文字である)ＭＡＦ／ＦＰＵと一般に呼ばれる。
【０００３】
ＦＭＡＣへの入力は、オペランドＡ(被乗数)、Ｂ(乗数)およびＣ(加数)であり、この場合、Ａ、ＢおよびＣは固定または浮動小数点数のいずれかである。２進数形式で単精度(３２ビット)または倍精度(６４ビット)を表現するためのＩＥＥＥ表記法は〔Ｓ，Ｅ，Ｍ]であって、この場合、Ｓは数値の符号を表す１ビットで、Ｅが指数部で、Ｍが(先頭ビットを削られた)仮数部であるとされる。従って、ＩＥＥＥ浮動小数点数形式は、Ｓ＊Ｍ＊２Eである。単精度系においては、Ｅは８ビットによって表現され、Ｍは２３ビットによって表現される(但し浮動小数点数がＦＭＡＣへ入力される時、ＦＭＡＣにとって内部的に実行される演算が仮数が含む先頭の１が存在することを必要とするので、２３ビット仮数は２４ビット仮数になる)。倍精度系においては、Ｅは１１ビットによって表現され、Ｍは５２ビットによって表現される(但しＦＭＡＣの内部では５３ビットである)。
【０００４】
ＦＭＡＣの物理的なレイアウトは、Ａ、ＢおよびＣの仮数を加算し乗算する場合に実行されねばならない演算によって大部分決定される。この点は、Ａ、ＢおよびＣが倍精度数値で、それらの仮数部(５３ビット)がそれらの指数部(１１ビット)のサイズのほぼ５倍である場合に特に該当する。図２は従来技術のＦＭＡＣの物理的レイアウトを示す。
【０００５】
ＡとＢの乗算は、それらの仮数の乗算およびそれらの指数の加算を必要とする。Ａの仮数がｍビットを含みＢの仮数がｎビットを含むとすれば、それらの仮数の乗算は、各回毎にＡのｍビットを左へ１ビットずつシフトさせながらＡにそれ自身をｎ回加算することを必要とする。乗算の結果は、「ｍ＋ｎ＋１」ビットの仮数であり、ＦＭＡＣのデータ経路をｍビットから「ｍ＋ｎ＋1」ビットへ拡大することを必要とする。もしもＡおよびＢが各々ｍビット仮数を持つ倍精度数値であれば、それらの仮数を乗算した結果は、「２ｍ＋１」ビット、すなわち１０７ビット数値である。このように、倍精度系においては、図２のＦＭＡＣのデータ経路は、５３ビットから１０７ビットへデータ経路を拡張することが許容される乗算機構を必要とするであろう。
【０００６】
(Ａ＊Ｂ)とＣの加算は、それらの仮数の加算の前に、それらの指数の大きさの比較を通してそれらの仮数の調整(alignmenntすなわち小数点位置合わせの意)を必要とする。その場合、次のような４つの可能な加算のケースが考察されねばならない(注：以下ＥＸＰは指数を示す)。
１)ＥＸＰ(Ｃ)＜＜ＥＸＰ(Ａ＊Ｂ)
２)ＥＸＰ(Ｃ)＜ＥＸＰ(Ａ＊Ｂ)
３)ＥＸＰ(Ｃ)＞＞ＥＸＰ(Ａ＊Ｂ)
４)ＥＸＰ(Ｃ)＞ＥＸＰ(Ａ＊Ｂ)
第１のケースでは、(Ａ＊Ｂ)とＣの仮数を調整させる試みが加数Ｃの右へのオーバーシフトを引き起こすので、Ｃのみが(Ａ＊Ｂ)の丸めに影響を及ぼす。
【０００７】
第２のケースでは、(Ａ＊Ｂ)およびＣの仮数の調整がＣを右へシフトさせる結果となる。Ｃの仮数のビットの一部は、オーバーシフトされる可能性があるので、丸め計算(スティッキー・ビット情報)に入るであろう。Ｃの残りのビットは、(Ａ＊Ｂ)演算結果の該当するビットに加えられる。
【０００８】
第３と第４のケースでは、(Ａ＊Ｂ)およびＣの仮数の調整はＣを左へシフトさせる結果となる。左シフトは、倍精度ＦＭＡＣのデータ経路が更に５３ビット(すなわち合計「３ｍ＋１」ビットに）拡幅されることを必要とする。ひとたびＣが(Ａ＊Ｂ)の仮数の範囲外へシフトされると、(Ａ＊Ｂ)結果のみがＣの丸めを始めることができるだけであり、Ｃをさらに左へシフトさせる必要がない。(Ａ＊Ｂ)およびＣの仮数がなんらかの重なり部分を持てば、それらの仮数の調整されたビットが加算される。
【０００９】
先頭ビット予測器(leading bit anticipator)および／または丸め器を使用して出力されるＦＭＡＣの累算結果は、Ｓ、ＥおよびＭの形式での(先頭１ビットが再び取り除かれた)「ｍ‐1」ビット仮数、指数および符号ビットである。「ｍ‐1」ビット仮数から切り捨てられたあるいはその範囲外へシフトされたビットは丸め計算において使用される。
【００１０】
【発明が解決しようとする課題】
「３ｍ＋１」ビットの加算器、シフト器および先頭ビット予測器によって必要とされる物理的な空間は従来技術のＦＭＡＣの欠点であると認められる。これらのコンポーネントによって底部でまた乗算機構の傾斜によって片側に飛び出した半端な形状のチップ面積を効率的に利用することは難しい。チップ面積は高価であるので、空間の浪費は非常にコスト高となる。
【００１１】
更に、大きな加算器、シフト器および先頭ビット予測器のデータ経路に関する要件によって、ＦＭＡＣ製造コストが増大し、システム処理性能が低下する(信号経路の距離増加のため演算速度が低下する)。従って、ＦＭＡＣデータ経路を「３ｍ＋１」ビット幅に拡張する必要性を除去しそれによってＦＭＡＣデータ経路を「２ｍ＋１」ビット幅にとどめるＦＭＡＣおよびこれを使用する方法を提供することが本発明の主要目的である。
【００１２】
また、最高「２ｍ＋１」ビットの加算器、シフト器および先頭ビット予測器の使用のみを必要とするＦＭＡＣおよびこれを使用する方法を提供することが本発明の別の目的である。更に、ＦＭＡＣによって必要とされる物理的チップ面積減少を通して顕著なコスト節減を実現するＦＭＡＣおよびこれを使用する方法を提供することが本発明の別の目的である。更にまた、信号経路の短絡によってシステム処理性能を向上させるＦＭＡＣおよびこれを使用する方法を提供することが本発明の更にまた別の目的である。
【００１３】
【課題を解決するための手段】
上記発明の課題を解決するため、本発明は、Ａ、ＢおよびＣが各々ｍビットの仮数および指数を含み、(Ａ×Ｂ)の結果が２ｍビットの仮数および指数を含む演算(Ａ×Ｂ)＋Ｃを実行する浮動小数点乗算累算装置(すなわちＦＭＡＣ)を提供する。ＦＭＡＣは先ず(Ａ×Ｂ)とＣの指数部を比較して(Ａ×Ｂ)とＣの仮数に重ね合わせ範囲があるか否かを判断する。(Ａ×Ｂ)仮数部の範囲を越えるＣ仮数部分はすべてＣＨＩバッファへ転送される。Ｃの残りの部分または(Ａ×Ｂ)仮数部と重なり合うＣの仮数部分をシフトさせて、(Ａ×Ｂ)およびＣの仮数のビットをそれぞれの大きさに従って調整させる。その後、Ｃの仮数のシフトされた部分が(Ａ×Ｂ)の仮数部に加算され一時的結果が生成される。Ｃ仮数の一部がＣＨＩバッファへ転送されている場合、(ＣＨＩバッファへ転送されたビット数に応じて)1つまたは複数の最下位ビットが一時的結果からシフトされる。最後に、ＣＨＩバッファへ転送されたＣ仮数部のビットが一時的結果の１つまたは複数の最上位ビット位置にマージされる。
【００１４】
上記ステップのすべては、「２ｍ＋１」ビット幅のデータ経路境界内で実行することができる。このようにして、１)ＦＭＡＣを実行するために必要とされるチップ面積が減少され、２)信号経路が短縮され、３)システム処理性能が向上し、４)より小さくより低コストの加算器、シフト器および先頭ビット予測器が使用され、５)顕著なコスト節減が実現する。
【００１５】
本発明は、更に、発明の課題を解決する手段として、数値Ａ，ＢおよびＣそれぞれの入力部、乗算(Ａ×Ｂ)の結果の仮数の範囲を越えるＣの仮数の１つ以上のビットを格納するＣＨＩレジスタ、(Ａ×Ｂ)の仮数の範囲と重なるＣの仮数の１つ以上のビットを格納するＣＢＵＳレジスタ、Ｃと(Ａ×Ｂ)の指数の差に対応する数のビットだけＣの仮数を左へシフトさせてシフトさせたビット位置をＣＢＵＳレジスタに格納させる第１シフト器、(Ａ×Ｂ)＋ＣＢＵＳを出力する加算器、加算器の(Ａ×Ｂ)＋ＣＢＵＳ出力に接続する先頭ビット予測器、(Ａ×Ｂ)＋Ｃ累算結果出力部、先頭ビット予測器の出力をＣと(Ａ×Ｂ)の指数の間の差に等しいビット数だけ右へシフトさせてシフトさせた結果を累算結果出力部に出力する第２シフト器、および(Ａ×Ｂ)の仮数の範囲を越えるＣの仮数の１つ以上のビットを格納するＣＨＩレジスタのビットと累算結果出力の１つ以上の上位ビットを結合させる結合手段を備えた累算演算(Ａ×Ｂ)＋Ｃを実行する浮動小数点乗算累算装置すなわちＦＭＡＣ装置を含む。
【００１６】
【発明の実施の形態】
累計演算(Ａ×Ｂ)＋Ｃを実行するＦＭＡＣ(浮動小数点乗算累計装置)２０において乗算結果２８に対する加数の高位部分の結合を取り除く方法が図３ないし図６に示されている。ここで、Ａ、ＢおよびＣ２２、２４、３０は各々ｍビットの仮数部および指数部を持ち、(Ａ×Ｂ)の結果は、「２ｍ＋１」ビットの仮数部および指数部を持つ。本発明の方法は、一般的に以下のステップを含む。すなわち、先ず、(Ａ×Ｂ)２８とＣ３０の指数部を比較して(Ａ×Ｂ)２８とＣ３０の仮数部の重なり範囲があるか否かを判断し、(Ａ×Ｂ)２８の仮数部の範囲を越えるＣ３０の仮数部分をＣＨＩレジスタ３２へ転送する。次に、(Ａ×Ｂ)２８およびＣ３０の仮数部のビットをそれぞれの大きさに応じて調整させるため、(Ａ×Ｂ)２８の仮数部の範囲と重なるＣ３０仮数のすべての部分をシフトさせ、Ｃ３０仮数部のシフトされた部分３６を(Ａ×Ｂ)２８の仮数部に加算して一時的加算結果を生成する。Ｃの仮数部３０の一部がＣＨＩレジスタ３２へ転送されていれば、ＣＨＩレジスタ３２に転送されたビット数に対応する１つまたは複数の下位ビットを一時的加算結果からシフトさせる。最後に、ＣＨＩレジスタ３２へ転送されたＣ仮数部３０のビットを一時的加算結果の１つまたは複数の上位ビット位置にマージさせて、累算結果４４を生成する。
【００１７】
上記本発明の方法を実施することができるＦＭＡＣ２０が図１に示されている。本装置は、一般的に、数値Ａ，ＢおよびＣ２２、２４、３０それぞれの入力部、乗算(Ａ×Ｂ)の結果の仮数部２８の範囲を越えるＣの仮数部３０の１つ以上のビットを格納するＣＨＩレジスタ３２、(Ａ×Ｂ)仮数２８の範囲と重なるＣの仮数３０の１つ以上のビット(重ね合うビットは適切に位置調整される)を格納するＣＢＵＳレジスタ３６、Ｃ３０と(Ａ＊Ｂ)２８の指数の差に対応する数のビットだけＣ３０の仮数を左へシフトさせて、シフトさせたビット位置をＣＢＵＳレジスタ３６に格納させる第１シフト器３４、(Ａ×Ｂ)＋ＣＢＵＳを出力する加算器３８、加算器３８の(Ａ×Ｂ)＋ＣＢＵＳ出力に接続する先頭ビット予測器４０、(Ａ×Ｂ)＋Ｃ累算結果出力部４４、先頭ビット予測器４０の出力をＣと(Ａ＊Ｂ)の指数の間の差に等しいビット数だけ右へシフトさせて、シフトさせた結果を累算結果出力部４４に出力する第２シフト器４２、および(Ａ×Ｂ)２８の仮数の範囲を越えるＣ３０の仮数の１つ以上のビットを格納するＣＨＩレジスタ３２のビットと累算結果出力４４の１つ以上の上位ビットを結合させる結合手段を備える。
【００１８】
以下にＦＭＡＣ２０の詳細を記述する。本発明の好ましい方法のプロセスは、ＦＭＡＣ２０のオペランド(Ａ＊Ｂ)２８およびＣ３０から始まる。ここで、(Ａ＊Ｂ)２８は「２ｍ＋１」ビットの仮数部を持つ乗算結果であり、Ｃ３０は、ｍビットの仮数部を持つ加数である。各オペランド２８、３０は更に指数および符号ビットと関連づけられている。累計演算(Ａ＊Ｂ)＋ＣがＦＭＡＣ２０内で分割できない演算として実行されるが、(Ａ＊Ｂ)の結果２８に対するＣ３０の高位部分の結合を行わずに(Ａ＊Ｂ)をＣに加算する方法は、Ａ２２とＢ２４の乗算とは無関係であり、従って、ＦＭＡＣ２０の乗算機構２６について知らなければならないことは、キャリ保存加算器または同等の機構を使用してオペランドＡ２２およびＢ２４(被乗数および乗数)のｍビット仮数部を乗算して「２ｍ＋１」ビット仮数部を持つ(Ａ＊Ｂ)乗算結果２８をこの機構が作成するということだけでよい。
【００１９】
(Ａ＊Ｂ)の結果２８が作成された後、(Ａ＊Ｂ)３０とＣ２８の指数部の大きさが比較され、次の４つの可能なケースのどれが存在するか判断される。４つのケースは、
１)ＥＸＰ(Ｃ)＜＜ＥＸＰ(Ａ＊Ｂ)
２)ＥＸＰ(Ｃ)＜ＥＸＰ(Ａ＊Ｂ)
３)ＥＸＰ(Ｃ)＞＞ＥＸＰ(Ａ＊Ｂ)
４)ＥＸＰ(Ｃ)＞ＥＸＰ(Ａ＊Ｂ)
である。
これらの４つのケースの各々は、図３ないし図６の水平分割線より上方に描かれた(Ａ＊Ｂ)２８とＣ３０の仮数によって表されている。より小(＜)およびより大(＞)は、(Ａ＊Ｂ)２８とＣ３０の指数が相違してはいるが、それらの仮数の範囲の間にある程度の重ね合わせが存在することを意味する。非常に小(＜＜)および非常に大(＞＞)は、(Ａ＊Ｂ)２８とＣ３０の指数の相違が非常に大きいためそれらの仮数の範囲が重ならないことを意味する。
【００２０】
ＥＸＰ(Ｃ)＞ＥＸＰ(Ａ＊Ｂ)である図５の第３のケースが、本発明のＦＭＡＣおよびそれを使用する方法によって最も影響を受けるので、このケースを最初に考察する。Ｃ３０の仮数が「２ｍ＋１」ビット幅のデータ経路の限界内でＦＭＡＣ２０に入力されるが、(Ａ＊Ｂ)２８とＣ３０の指数の比較によって、Ｃ３０の下位ビットのいくつかが(Ａ＊Ｂ)２８の上位ビットのいくつかと重ね合うことが示されている。従来技術の(図２の)ＦＭＡＣ５０においては、このケースでは、「３ｍ＋１」ビットの加算器５４、シフト器５２、５８および先頭ビット予測器５６が必要とされるので、ＦＭＡＣ５０のデータ経路は「２ｍ＋１」ビットから「３ｍ＋１」ビットへ拡幅されねばならない。しかし、Ｃ３０の高位部分すなわち(Ａ＊Ｂ)結果２８と重ならないＣ３０部分を取り外すことによって、データ経路拡張を不要にさせることが可能である。
【００２１】
Ｃ３０と(Ａ＊Ｂ)２８の指数の間の差に等しいＣ３０のビット数がＣＨＩレジスタ３２の対応する位置に転送される。ＣＨＩ３２ビット位置の残りは、１で埋められる。Ｃ３０の高位ビットがＣＨＩ３２へ転送されたならば、Ｃ３０の高位ビット位置に何が残っていようと問題ではない。Ｃ３０の高位ビット位置はＣ３０の残存内容としてマスクされ、「２ｍ＋１」ビットＣＢＵＳレジスタ３６へ転送される。Ｃ３０の内容がＣＢＵＳ３６へ転送されると、その内容は、Ｃ３０と(Ａ＊Ｂ)２８の指数の差に対応する数のビットだけ左へシフトされる。Ｃ３０の高位部分がＣＢＵＳ３６からマスクされ、Ｃ３０と(Ａ＊Ｂ)２８の重なり合うビットが今や調整されたことが観察される。ＣＢＵＳ３６の下位ビットはゼロで埋められる。Ｃ３０と(Ａ＊Ｂ)２８の重なり合うビットが調整された後、「２ｍ＋１」ビット幅加算器を使用して(Ａ＊Ｂ)＋ＣＢＵＳの一時的結果(図５でＴＥＭＰ４６として表されている)が生成される。スティッキー・ビット情報を使用してＴＥＭＰ結果４６を丸めることができるであろうし、また、ＴＥＭＰ４６からのどのようなキャリもＣＨＩ３２を増加させるために使用することができる。ＣＨＩ３２の下位ビットはゼロで埋められるので、ＴＥＭＰ４６からのキャリは、ＣＨＩ３２の下位ビットからＣ３０の高位部分を表すＣＨＩ３２のビットに伝播する点に注意する必要がある。
【００２２】
ＴＥＭＰ結果４６を作成した後、ＴＥＭＰ結果４６は、Ｃ３０と(Ａ＊Ｂ)２８の指数の間の差に等しいビット数だけ右へシフトされなければならない。ＴＥＭＰ４６のビットが右にシフトされると、ＴＥＭＰ４６の上位ビットはゼロで埋められる。シフトされたＴＥＭＰレジスタは、図５においてＳＨＩＦＴＥＤ_ＴＥＭＰ４８と表記されている。ＣＨＩ３２に含まれるＣ３０の高位部分は、ＳＨＩＦＴＥＤ_ＴＥＭＰ４８の一時的(Ａ＊Ｂ)＋Ｃの結果と調整され、今やＳＨＩＦＴＥＤ_ＴＥＭＰ４８とマージされる。「２ｍ＋ｌ」ビット結果が、先頭ビット予測器および／またはシフト器に送られ、所望の「ｍ−１」ビット仮数結果ＲＥＳＵＬＴが得られる。結果の指数および符号は従来技術の方法を使用して調節される。
【００２３】
次に、ＥＸＰ(Ｃ)＞＞ＥＸＰ(Ａ＊Ｂ)である図６の第４のケースを考察する。第４のケースでは、Ｃ３０と(Ａ＊Ｂ)２８の指数の比較は、Ｃ３０と(Ａ＊Ｂ)２８の仮数が重ならないことを示す。従って、Ｃ３０のすべてのビットがＣＨＩ３２へ転送され、ＦＭＡＣ２０の出力はＣＨＩ３２に等しく、使用する丸め方式に依存するがおそらく最下位ビットの±１によって丸めが行われるであろう。ＣＢＵＳ３６、ＴＥＭＰ４６およびＳＨＩＦＴＥＤ_ＴＥＭＰ４８のレジスタの値は、ＦＭＡＣ２０の結果として生じる出力に関しては無関係である。Ｃ３０の存在しない低位ビットがＣＢＵＳ３６にシフトされる時、オーバーシフトが発生し無意味なＣＢＵＳ３６を作成する(ＣＢＵＳ３６はおそらくすべてゼロで埋められる)。一時的な(Ａ＊Ｂ)＋Ｃ結果(ＴＥＭＰレジスタ４６)がシフトされると、オーバーシフトが発生し、ＳＨＩＦＴＥＤ＿ＴＥＭＰレジスタ４８はおそらくすべてゼロで埋められる。ＴＥＭＰレジスタ４６からシフト・アウトされるたビットは、ＣＨＩ結果４４の丸めのためのスティッキー・ビットを計算する際に使用することができる。
【００２４】
次に第１のケースおよび第２のケースを考察する。ＥＸＰ(Ｃ)＜＜ＥＸＰ(Ａ＊Ｂ)である図３の第１のケースでは、Ｃ３０と(Ａ＊Ｂ)２８の指数の比較がＣ３０と(Ａ＊Ｂ)２８の仮数が重ならないことを示す。Ｃ３０の大きさが(Ａ＊Ｂ)２８より小さいので、Ｃ３０のビットはＣＨＩ３２にシフトされない。Ｃ３０が(Ａ＊Ｂ)２８より非常に小さいので、ＣＢＵＳ３６はゼロで埋められれ、ＦＭＡＣ２０の結果４４は(Ａ＊Ｂ)の出力であり、使用する丸め方式に依存するがおそらく最下位ビットの±１によって丸めが行われるであろう。
【００２５】
ＥＸＰ(Ｃ)＜ＥＸＰ(Ａ＊Ｂ)である図４の第２のケースでは、Ｃ３０と(Ａ＊Ｂ)２８の指数の比較がＣ３０の一部またはすべてが(Ａ＊Ｂ)と重ね合うことを示す。このケースでもまたＣ３０のビットはＣＨＩ３２にシフトされない。Ｃ３０はＣＢＵＳ３６に転送される際右へシフトされる。ＣＢＵＳ３６の下位ビットがゼロで埋められ、ＣＢＵＳ３６の上位ビットは符号拡張ビットで埋められる(すなわちＣ３０が正ならゼロで、負なら１で埋められる)。Ｃ３０の１つまたは複数のビットがＣＢＵＳ３６の範囲外へシフトされる可能性がある。これらのビットは丸めのため使用することもできる。ＴＥＭＰ結果４６が計算された後、先頭ビット予測器およびシフト器が、ＳＨＩＦＴＥＤ＿ＴＥＭＰ４８のＴＥＭＰ結果４６を左にシフトさせる。
【００２６】
上記の方法を実行することができるＦＭＡＣ２０が図１に示されている。ＦＭＡＣ２０がその最大データ経路幅が「３ｍ＋１」ビットではなく「２ｍ＋１」ビットに限定されている点において従来技術のＦＭＡＣ５０と相違することに注意する必要がある。図１のＦＭＡＣ２０の乗算機構は、従来技術のＦＭＡＣ５０のものと同じである。しかし、加算器３８、先頭ビット予測器４０およびシフト器３４、４２は同じではない。ＣＢＵＳ３６が(Ａ＊Ｂ)２８と重なるＣ３０部分のみを含むので、それは「２ｍ＋１」ビット幅に限定される。この結果、ＣＢＵＳ３６に先行するシフト器３４、４２および累算結果レジスタ４４は、「２ｍ＋ｌ」ビット幅に限定することができる。更に、先頭ビット予測器４０もまた「２ｍ＋１」ビット幅に限定することができる。ＦＭＡＣのデータ経路の最大幅の制限はＦＭＡＣ２０を構成する際に必要なチップ面積を減少させるだけでなく、信号経路の距離をも減少させる。信号経路指定が「２ｍ＋１」ビット・シフトでなくレジスタ・ビットの「３ｍ＋１」ビット・シフトを可能にさせなければならないなら、ＦＭＡＣは一層長い配線を必要とし、システムの全般的遅延が生じる。
【００２７】
従来技術のＦＭＡＣ５０における場合と同様に、上記方法の諸ステップは並列的に実行することができる。可能な整相シナリオが図７に示されている。クロック段階ゼロ(図の符号５８)において、オペランドＡ、ＢおよびＣがＦＭＡＣ２０へ入力される。段階１(図の符号６０)において、(比較その他)の指数演算が実行される。段階２(図の符号６２)において、ＡおよびＢが乗算機構の多数のキャリ保存加算器を使用して乗算される。段階３(図の符号６４)において、Ｃの高位部分がマスクされＣＨＩに転送される。更に、キャリ保存加算器によって生成された部分的結果をマージして(Ａ＊Ｂ)が作成され、(Ａ＊Ｂ)と重なるＣの部分がシフトされて、(Ａ＊Ｂ)結果と適切に調整されたＣのビットを含むＣＢＵＳが作成される。段階４(図の符号６６)において、(Ａ＊Ｂ)およびＣＢＵＳが、「２ｍ＋１」ビット幅の加算器において加算され、ＴＥＭＰ結果が作成される。ＴＥＭＰ結果が先頭ビット予測器に供給され、上位ビット・シフト(１６シフト)が実行される。上位スティッキー情報が判断され、必要な場合ＣＨＩレジスタが増分される。段階５(図の符号６８)において、低位シフト(すなわち４ビット・シフト、１ビット・シフトおよび調整シフト)が実行される。丸め方式に従ってＴＥＭＰレジスタが丸められ、(Ａ×Ｂ)＋ＣＢＵＳ加算器からのキャリに応じてＣＨＩが増分させられる。ＥＸＰ(Ｃ)＞(あるいは＞＞)ＥＸＰ(Ａ＊Ｂ)の場合、ＣＨＩはシフトされたＴＥＭＰレジスタ(ＳＨＩＦＴＥＤ＿ＴＥＭＰ)にマージされ、累算結果(すなわちＲＥＳＵＬＴ)が作成される。事後シフト方向に従って、(Ａ＊Ｂ)あるいはＣレジスタに関連する指数が選択される。(事後シフト方向が左のため)ＥＸＰ(Ａ＊Ｂ)が選択される場合、指数は、事後左シフトの量によって調節される。(事後シフト方向が右のため)ＥＸＰ(Ｃ)が選択される場合、指数は、±１だけの調整を必要とすることがある。段階６(図の符号７０)において、(すべて１またはすべてゼロという)例外的な仮数が出力されるアンダーフローまたはオーバーフローが発生しな限り、ＲＥＳＵＬＴレジスタがＦＭＡＣ２０から出力される。
【００２８】
上述のＦＭＡＣ２０およびそれを使用する方法が、先頭ビット１を含めオペランドの仮数部のビット数をｍと仮定して、ＦＭＡＣのデータ経路幅を「２ｍ＋１」を越える幅に増加させる必要性を除去する点は認識されるであろう。幅を３分の１減少された加算器、先頭ビット予測器およびシフト器が物理的チップ面積を減少させるだけではなく、必要とされる信号経路配線の長さを減少させ、それによって上記コンポーネントの演算速度が上昇する。
【００２９】
以上本発明の実施形態を詳細に記述したが、本発明の概念はその他の種々の実施形態で実現することは可能であり、従来技術によって制約されている場合を除き、本発明がそのような種々のバリエーションを含むものとみなされるべきである点は理解されるべきである。上記の記述は、有効範囲の点においてＦＭＡＣを通る数値の流れを正の数に限定した。本発明は正負両方の数に関連してＦＭＡＣを使用することができるように考慮されているが、(２の補数形式への変換やビット反転などの符号付き数値の取り扱いに関する従来技術について知識を持つ)当業者が負数を使用する上述の方法を完全に実施することができる点は認められるであろう。
【００３０】
本発明には、例として次のような実施様態が含まれる。
（１）累算演算(Ａ×Ｂ)＋Ｃを実行する浮動小数点乗算累算装置すなわちＦＭＡＣ装置であって、数値Ａ，ＢおよびＣそれぞれの入力部と、乗算(Ａ×Ｂ)の結果の仮数の範囲を越えるＣの仮数の１つ以上のビットを格納するＣＨＩレジスタと、(Ａ×Ｂ)の仮数の範囲と重なるＣの仮数の１つ以上のビットを格納するＣＢＵＳレジスタと、Ｃと(Ａ×Ｂ)の指数の差に対応する数のビットだけＣの仮数を左へシフトさせて、シフトさせたビット位置をＣＢＵＳレジスタに格納させる第１シフト器と、(Ａ×Ｂ)＋ＣＢＵＳを出力する加算器と、加算器の(Ａ×Ｂ)＋ＣＢＵＳ出力に接続する先頭ビット予測器と、(Ａ×Ｂ)＋Ｃ累算結果出力部と、先頭ビット予測器の出力をＣと(Ａ×Ｂ)の指数の間の差に等しいビット数だけ右へシフトさせて、シフトさせた結果を累算結果出力部に出力する第２シフト器と、(Ａ×Ｂ)の仮数の範囲を越えるＣの仮数の１つ以上のビットを格納するＣＨＩレジスタのビットと累算結果出力の１つ以上の上位ビットを結合させる結合手段と、を備えるＦＭＡＣ装置。
（２）数値Ａ，ＢおよびＣがそれぞれｍビットの仮数部および指数部を持ち、(Ａ×Ｂ)の仮数部が「２ｍ＋１」ビットを含み、(Ａ×Ｂ)＋ＣＢＵＳ出力が「２ｍ＋１」ビットを含み、加算器が「２ｍ＋１」ビットの最大幅を持つ、上記（１）に記載のＦＭＡＣ装置。
（３）第１シフト器および第２シフト器が「２ｍ＋１」ビットの最大幅を持つ、上記（２）に記載のＦＭＡＣ装置。
（４）先頭ビット予測器が「２ｍ＋１」ビットの最大幅を持つ、上記（３）に記載のＦＭＡＣ装置。
（５）「２ｍ＋１」ビットの最大データ経路幅を備える上記（４）に記載のＦＭＡＣ装置。
（６）ＡおよびＢの入力部に接続し、乗算(Ａ×Ｂ)を実行して「２ｍ＋１」ビットの仮数部の積を出力する乗算機構を更に備える上記（１）に記載のＦＭＡＣ装置。
【００３１】
（７）数値Ａ、ＢおよびＣが各々ｍビットの仮数および指数を含み、乗算(Ａ×Ｂ)の結果が「２ｍ＋１」ビットの仮数および指数を含む累算演算(Ａ×Ｂ)＋Ｃを実行する浮動小数点乗算累算装置すなわちＦＭＡＣ装置において、(Ａ×Ｂ)とＣの指数部を比較して(Ａ×Ｂ)とＣの仮数が重ね合う範囲があるか否かを判断するステップと、(Ａ×Ｂ)仮数部の範囲を越えるＣ仮数部分をすべてＣＨＩレジスタへ転送するステップと、(Ａ×Ｂ)仮数部と重なり合うＣの仮数部分をシフトさせて、(Ａ×Ｂ)およびＣの仮数のビットをそれぞれの大きさに従って位置調整するステップと、Ｃの仮数のシフトされた部分を(Ａ×Ｂ)の仮数部に加算して一時的結果を生成するステップと、Ｃ仮数の一部がＣＨＩバッファへ転送されている場合、ＣＨＩバッファへ転送されたビット数に応じて、1つまたは複数の最下位ビットを一時的結果からシフトさせるステップと、ＣＨＩバッファへ転送されたＣ仮数部のビットを一時的結果の１つまたは複数の最上位ビット位置にマージさせて、累算結果を生成するステップと、を含むＣを(Ａ×Ｂ)に加算する方法。
（８）一時的結果が「２ｍ＋１」ビットの仮数部を含む上記（１）に記載の方法。
（９）累算結果に対し切り捨て演算を実行して「ｍ−１」ビットの累算結果を作成するステップを更に含む上記（８）に記載の方法。
（１０）上記切り捨て演算が、ＣＨＩバッファへ転送されたＣ仮数部のビットを一時的結果の１つまたは複数の最上位ビット位置にマージさせて累算結果を生成するステップと同時に実行される、上記（９）に記載の方法。
【００３２】
【発明の効果】
本発明の装置およびその装置を使用する方法は、(Ａ×Ｂ)＋Ｃのすべての演算を「２ｍ＋１」ビット幅のデータ経路境界内で実行することを可能とし、これによって、ＦＭＡＣを実行するために必要とされるチップ面積の減少、信号経路の短縮、システム処理性能の向上、より小さくより低コストの加算器、シフト器等のコンポーネントの使用および顕著なコスト節減という効果を奏する。
【図面の簡単な説明】
【図１】加数上位部の除去によって「２ｍ＋１」ビット幅に制限されたデータ経路を備えたＦＭＡＣ装置のブロック図である。
【図２】「３ｍ＋１」ビット幅のデータ経路を備えた従来技術のＦＭＡＣ装置のブロック図である。
【図３】ＥＸＰ(Ｃ)＜＜ＥＸＰ(Ａ＊Ｂ)の場合のＦＭＡＣを通過するデータの流れを示すブロック図である。
【図４】ＥＸＰ(Ｃ)＜ＥＸＰ(Ａ＊Ｂ)の場合のＦＭＡＣを通過するデータの流れを示すブロック図である。
【図５】ＥＸＰ(Ｃ)＞＞ＥＸＰ(Ａ＊Ｂ)の場合のＦＭＡＣを通過するデータの流れを示すブロック図である。
【図６】ＥＸＰ(Ｃ)＞ＥＸＰ(Ａ＊Ｂ)の場合のＦＭＡＣを通過するデータの流れを示すブロック図である。
【図７】図１のＦＭＡＣを制御するクロック信号を示すブロック図である。
【符号の説明】
２０    本発明のＦＭＡＣ装置
２２    浮動小数点数値Ａ
２４    浮動小数点数値Ｂ
２６    乗算機構
２８    Ａ×Ｂ
３０    浮動小数点数値Ｃ
３２    ＣＨＩレジスタ
３４    第１シフト器
３６    ＣＢＵＳレジスタ
３８、５４    加算器
４０、５６    先頭ビット予測器
４２    第２シフト器
４４    累算結果ＲＥＳＵＬＴ
４６    一時的結果ＴＥＭＰ
４８    シフトされた一時的結果ＳＨＩＦＴＥＤ＿ＴＥＭＰ
５０    従来技術のＦＭＡＣ装置
５２、５８    シフト器
【図１】
0003803438.tif 000002
【図２】
0003803438.tif 000003
【図３】
0003803438.tif 000004
【図４】
0003803438.tif 000005
【図５】
0003803438.tif 000006
【図６】
0003803438.tif 000007
【図７】
0003803438.tif 000008