(57)【特許請求の範囲】
【請求項１】
第１の浮動小数点数を第２の浮動小数点数に加算する浮動小数点加算器回路であって、前記第１の浮動小数点数は指数値ＥＡ及び仮数値ＭＡを有し、前記第２の浮動小数点数は指数値ＥＢ及び仮数値ＭＢを有し、ＥＡはＥＢ以上であり、
前記第１の浮動小数点数と前記第２の浮動小数点数とが少なくとも１つの所定の遠経路の条件に適合するときに、浮動小数点値の結果を生成するように構成された遠経路の回路を有し、
前記遠経路の回路は、
ＭＢの最下位端部から始まるＭＢの最下位ビット（ＥＡ−ＥＢ）内の後置ゼロ値のランレングスに対応した後置ゼロ値ＴＺを決定するように構成された後置ゼロ計数回路と、
第１の加算値を第２の加算値に加算するように構成された遠経路の加算器であって、前記第１の加算値は、第１のサフィックス値に連結されたＭＡを含み、前記第２の加算値は、最下位ビット（ＥＡ−ＥＢ）がないＭＢを含むとともに第２のサフィックス値に連結されている、遠経路の加算器と、
を有し、
前記第１のサフィックス値及び前記第２のサフィックス値をＴＺ及び（ＥＡ−ＥＢ）のうちのそれぞれ１つに基づき形成する、浮動小数点加算器回路。
【請求項２】
前記第１のサフィックス値及び前記第２のサフィックス値が、ＴＺ及びＮＯＴ（（ＥＡ−ＥＢ））のうちのそれぞれ１つに基づき形成される、請求項１に記載の浮動小数点加算器回路。
【請求項３】
前記第１のサフィックス値が、第１のサフィックス終端値の前に３つのパディングビットを有し、
前記第２のサフィックス値が、第２のサフィックス終端値の前に１つのパディングビットを有し、
前記第１のサフィックス終端値及び前記第２のサフィックス終端値は、（ＴＺ＋２）及びＮＯＴ（（ＥＡ−ＥＢ））のうちのそれぞれ１つを有する、請求項２に記載の浮動小数点加算器回路。
【請求項４】
前記３つのパディングビット及び前記１つのパディングビットが、前記遠経路の加算器の出力において最小精度の単位の半分に対応して値が合計される、請求項３に記載の浮動小数点加算器回路。
【請求項５】
前記第１のサフィックス値及び前記第２のサフィックス値が、ＮＯＴ（ＴＺ）及び（ＥＡ−ＥＢ）のうちのそれぞれの１つに基づき形成される、請求項１に記載の浮動小数点加算器回路。
【請求項６】
前記第１のサフィックス値が、第１のサフィックス終端値の前に３つのパディングビットを有し、
前記第２のサフィックス値が、第２のサフィックス終端値の前に１つのパディングビットを有し、
前記第１のサフィックス終端値及び前記第２のサフィックス終端値は、ＮＯＴ（ＴＺ＋２）及び（ＥＡ−ＥＢ）のうちのそれぞれ１つを有する、請求項５に記載の浮動小数点加算器回路。
【請求項７】
前記３つのパディングビット及び前記１つのパディングビットが、前記遠経路の加算器の出力において最小精度の単位の半分に対応して値が合計される、請求項６に記載の浮動小数点加算器回路。
【請求項８】
前記第２の加算値が、（ＥＡ−ＥＢ）のゼロ値のプレフィックスを有する、請求項１に記載の浮動小数点加算器回路。
【請求項９】
前記遠経路の回路が、前記後置ゼロ計数回路と並列して動作するように構成された第２の加算値シフト回路を有し、該第２の加算値シフト回路は、（ＥＡ−ＥＢ）ビット位置ぶんＭＢを論理的に右シフトさせる、請求項１に記載の浮動小数点加算器回路。
【請求項１０】
前記第２の加算値シフト回路が、前記第２の加算値の最上位（ＥＡ−ＥＢ）のビット位置に前置ゼロ値を入れる、請求項９に記載の浮動小数点加算器回路。
【請求項１１】
前記遠経路の回路が、前記後置ゼロ計数回路と並列して動作するように構成された指数差計算回路を有し、該指数差計算回路は、（ＥＡ−ＥＢ）の値を計算する、請求項１に記載の浮動小数点加算器回路。
【請求項１２】
ＭＡのビット長が２Ｘ以上（Ｘは正の整数）であり、
前記第１の加算値のビット長が２（Ｘ＋１）未満である、請求項１に記載の浮動小数点加算器回路。
【請求項１３】
第１の入力加算値及び第２の入力加算値が受け取られ、
第１の処理経路、第２の処理経路、並びに該第１の処理経路及び該第２の処理経路の１つから結果を選択するマルチプレクサを形成するように構成された二重化回路を有し、
前記第１の処理経路は、前記第１の入力加算値が前記第２の入力加算値より大きいものと仮定し、
前記第２の処理経路は、前記第２の入力加算値が前記第１の入力加算値より大きいものと仮定し、
前記マルチプレクサは、前記第１の入力加算値及び第２の前記入力加算値のどちらかがより大きいか前記二重化回路内で少なくとも部分的に加算処理を完了した後に前記第１の処理経路及び前記第２の処理経路の１つを決定したときに、前記結果を選択する、請求項１に記載の浮動小数点加算器回路。
【請求項１４】
第１の入力加算値及び第２の入力加算値が受け取られ、
比較回路と、
スイッチング回路と、
を有し、
前記比較回路は、前記第１の入力加算値と前記第２の入力加算値との大小を決定するように、該第１の入力加算値と該第２の入力加算値との比較を実行するように構成されており、
前記スイッチング回路は、前記第１の入力加算値と前記第２の入力加算値の加算の開始前に、前記第１の入力加算値の経路及び前記第２の入力加算値の経路を前記比較に従う経路へ切り換えるように構成されている、請求項１に記載の浮動小数点加算器回路。
【請求項１５】
前記遠経路の回路が反転回路を有し、該反転回路は、前記第２の浮動小数点数を前記第１の浮動小数点数から減じるように前記浮動小数点加算器回路が前記第１の加算値と前記第２の加算値を加える前に、ＭＢ内でビットを反転するように構成されている、請求項１に記載の浮動小数点加算器回路。
【請求項１６】
前記第１の浮動小数点数と前記第２の浮動小数点数とが少なくとも１つの所定の近経路の条件値に適合するときに、浮動小数点値の結果を生成するように構成された近経路の回路を有し、
前記近経路の回路は、
（ＭＡ−ＭＢ）に対応した中間仮数値ＭＩを決定するように構成された近経路の加算器と、
ＭＩの最上位端部から始まるＭＩ内の前置ゼロ値のランレングスに対応した前置ゼロ値ＬＺを決定するように構成された前置ゼロ計数回路と、
ＬＺとＥＡとの低い方の値としてシフト値結果を決定するように構成された最小値回路と、
浮動小数点数の結果の一部を形成する仮数結果ＭＲを生成するように、前記シフト値結果に対応した複数のビット位置ぶんＭＩを左シフトさせるように構成された結果シフト回路と、
を有する、請求項１に記載の浮動小数点加算器回路。
【請求項１７】
前記近経路の回路が、仮数シフト回路を有し、該仮数シフト回路は、ＥＡがＥＢに等しくないならば、ＭＢを前記近経路の加算器に入力する前にＭＢを（ＥＡ−ＥＢ）ビット位置ぶん右シフトさせるように構成されている、請求項１６に記載の浮動小数点加算器回路。
【請求項１８】
前記最小値回路が、前記シフト値結果の下位ビットを１以上生成する前に前記シフト値結果の上位ビットを１以上生成するように構成されている、請求項１６に記載の浮動小数点加算器回路。
【請求項１９】
前記結果シフト回路が、前記シフト値結果で得られた複数のビット位置ぶんＭＩを右シフトさせるように構成された対数シフト回路であり、該対数シフト回路は、前記最小値回路が前記１以上の下位ビットを生成する前に前記１以上の上位ビットに基づき任意の左シフトを開始するように構成されている、請求項１８に記載の浮動小数点加算器回路。
【請求項２０】
前記最小値回路が、ＬＺ及びＥＡに対応した２つの入力Ｐ及びＱを有するとともに、長さ２ｉの前記シフト値結果のプレフィックス部分Ｐｉの順番の決定により前記シフト値結果を決定し、該決定はｉ＝０から始まり、
Ｐｉ＝（ＬＺｉ ＡＮＤ ＮＯＴ ＧＲｉ）ＯＲ（ＥＡｉ ＡＮＤ ＧＲｉ）であって、ＬＺｉは長さ２ｉのＬＺのプレフィックス部分であり、ＥＡｉは長さ２ｉのＥＡのプレフィックス部分であり、
ｉ＝０及び降順の各ビット位置ｋについて、ＥＱｉ［ｋ］がＮＯＴ（ＬＺ［ｋ］ ＸＯＲ ＥＡ［ｋ］）であり、かつ、ＬＺ［ｋ］＞ＥＡ［ｋ］のときにＧＲｉ［ｋ］＝１であり、ＬＺ［ｋ］≦ＥＡ［ｋ］のときにＧＲｉ［ｋ］＝０であり、
ｉ＞０及び降順の各ビット位置ｋについて、ＥＱｉ［ｋ］＝ＥＱｉ−１［ｋ］ ＡＮＤ ＥＱｉ−１［ｋ＋２（ｉ−１）］であり、かつ、ＧＲｉ［ｋ］＝ＧＲｉ−１［ｋ］ ＯＲ （Ｅｉ−１［ｋ］ ＡＮＤ ＧＲｉ−１［ｋ＋２（ｉ−１）］である、請求項１６に記載の浮動小数点加算器回路。
【請求項２１】
前記近経路の所定値が１である、請求項１６に記載の浮動小数点加算器回路。
【請求項２２】
前記最小値回路が、前記浮動小数点数の結果が有効な非正規の浮動小数点数であるように前記シフト値結果を制限する、請求項１６に記載の浮動小数点加算器回路。
【請求項２３】
第１の浮動小数点数から第２の浮動小数点数を減算する浮動小数点加算器回路であって、前記第１の浮動小数点数は指数値ＥＡ及び仮数値ＭＡを有し、前記第２の浮動小数点数は指数値ＥＢ及び仮数値ＭＢを有し、ＥＡはＥＢ以上であり、
（ＥＡ−ＥＢ）が近経路の所定値未満のときに浮動小数点値の結果を生成するように構成された近経路の回路を有し、
前記近経路の回路は、
（ＭＡ−ＭＢ）に対応した中間仮数値ＭＩを決定するように構成された近経路の加算器と、
ＭＩの最上位端部から始まるＭＩ内の前置ゼロ値のランレングスに対応した前置ゼロ値ＬＺを決定するように構成された前置ゼロ計数回路と、
ＬＺとＥＡとの低い方の値としてシフト値結果を決定するように構成された最小値回路と、
浮動小数点数の結果の一部を形成する仮数結果ＭＲを生成するように、前記シフト値結果に対応した複数のビット位置ぶんＭＩを左シフトさせるように構成された結果シフト回路と、
を有する、浮動小数点加算器回路。
【請求項２４】
前記近経路の回路が、仮数シフト回路を有し、該仮数シフト回路は、ＥＡがＥＢに等しくないならば、ＭＢを前記近経路の加算器に入力する前にＭＢ上を（ＥＡ−ＥＢ）ビット位置ぶん右シフトさせるように構成されている、請求項２３に記載の浮動小数点加算器回路。
【請求項２５】
前記最小値回路が、前記シフト値結果の下位ビットを１以上生成する前に前記シフト値結果の上位ビットを１以上生成するように構成されている、請求項２３に記載の浮動小数点加算器回路。
【請求項２６】
前記結果シフト回路が、前記シフト値結果で得られた複数のビット位置ぶんＭＩを右シフトさせるように構成された対数シフト回路であり、該対数シフト回路は、前記最小値回路が前記シフト値結果の１以上の下位ビットを生成する前に前記シフト値結果の１以上の上位ビットに基づき任意の左シフトを開始するように構成されている、請求項２５に記載の浮動小数点加算器回路。
【請求項２７】
前記最小値回路が、ＬＺ及びＥＡに対応した２つの入力Ｐ及びＱを有するとともに、長さ２ｉの前記シフト値結果のプレフィックス部分Ｐｉの順番の決定により前記シフト値結果を決定し、ｉ＝０から始まり、
Ｐｉ＝（ＬＺｉ ＡＮＤ ＮＯＴ ＧＲｉ）ＯＲ（ＥＡｉ ＡＮＤ ＧＲｉ）であって、ＬＺｉは長さ２ｉのＬＺのプレフィックス部分であり、ＥＡｉは長さ２ｉのＥＡのプレフィックス部分であり、
ｉ＝０及び降順の各ビット位置ｋについて、ＥＱｉ［ｋ］がＮＯＴ（ＬＺ［ｋ］ ＸＯＲ ＥＡ［ｋ］）であり、かつ、ＬＺ［ｋ］＞ＥＡ［ｋ］のときにＧＲｉ［ｋ］＝１であり、ＬＺ［ｋ］≦ＥＡ［ｋ］のときにＧＲｉ［ｋ］＝０であり、
ｉ＞０及び降順の各ビット位置ｋについて、ＥＱｉ［ｋ］＝ＥＱｉ−１［ｋ］ ＡＮＤ ＥＱｉ−１［ｋ＋２（ｉ−１）］であり、かつ、ＧＲｉ［ｋ］＝ＧＲｉ−１［ｋ］ ＯＲ （Ｅｉ−１［ｋ］ ＡＮＤ ＧＲｉ−１［ｋ＋２（ｉ−１）］である、請求項２３に記載の浮動小数点加算器回路。
【請求項２８】
前記近経路の所定値が１である、請求項２３に記載の浮動小数点加算器回路。
【請求項２９】
前記最小値回路が、前記浮動小数点数の結果が有効な非正規の浮動小数点数であるように前記シフト値結果を制限する、請求項２３に記載の浮動小数点加算器回路。
【請求項３０】
第１の浮動小数点数を第２の浮動小数点数に加算する浮動小数点加算器回路であって、前記第１の浮動小数点数は指数値ＥＡ及び仮数値ＭＡを有し、前記第２の浮動小数点数は指数値ＥＢ及び仮数値ＭＢを有し、ＥＡはＥＢ以上であり、
前記第１の浮動小数点数と前記第２の浮動小数点数とが少なくとも１つの所定の遠経路の条件に適合するときに、浮動小数点値の結果を生成するように構成された遠経路手段を有し、
前記遠経路手段は、
ＭＢの最下位端部から始まるＭＢの最下位ビット（ＥＡ−ＥＢ）内の後置ゼロ値のランレングスに対応した後置ゼロ値ＴＺを決定する後置ゼロ計数手段と、
第１の加算値を第２の加算値に加算する遠経路加算手段であって、前記第１の加算値は、第１のサフィックス値に連結されたＭＡを含み、前記第２の加算値は、最下位ビット（ＥＡ−ＥＢ）がないＭＢを含むとともに第２のサフィックス値に連結されている、遠経路加算手段と、
を有し、
前記第１のサフィックス値及び前記第２のサフィックス値をＴＺ及び（ＥＡ−ＥＢ）のうちのそれぞれ１つに基づき形成する、浮動小数点加算器回路。
【請求項３１】
第１の浮動小数点数から第２の浮動小数点数を減算する浮動小数点加算器回路であって、前記第１の浮動小数点数は指数値ＥＡ及び仮数値ＭＡを有し、前記第２の浮動小数点数は指数値ＥＢ及び仮数値ＭＢを有し、ＥＡはＥＢ以上であり、
前記第１の浮動小数点数と前記第２の浮動小数点数とが少なくとも１つの所定の近経路の条件に適合するときに、浮動小数点値の結果を生成するように構成された近経路手段を有し、
前記近経路手段は、
（ＭＡ−ＭＢ）に対応した中間仮数値ＭＩを決定する近経路加算手段と、
ＭＩの最上位端部から始まるＭＩ内の前置ゼロ値のランレングスに対応した前置ゼロ値ＬＺを決定する前置ゼロ計数手段と、
ＬＺとＥＡとの低い方の値としてシフト値結果を決定する最小値手段と、
浮動小数点数の結果の一部を形成する仮数結果ＭＲを生成するように、前記シフト値結果に対応した複数のビット位置ぶんＭＩをシフトさせる結果シフト手段と、
を有する、浮動小数点加算器回路。
【請求項３２】
第１の浮動小数点数を第２の浮動小数点数に加算する方法であって、
前記第１の浮動小数点数は指数値ＥＡ及び仮数値ＭＡを有し、前記第２の浮動小数点数は指数値ＥＢ及び仮数値ＭＢを有し、ＥＡはＥＢ以上であり、
前記第１の浮動小数点数と前記第２の浮動小数点数とが少なくとも１つの所定の遠経路の条件に適合するときに、
ＭＢの最下位端部から始まるＭＢの最下位ビット（ＥＡ−ＥＢ）内の後置ゼロ値のランレングスに対応した後置ゼロ値ＴＺを決定するステップと、
第１の加算値を第２の加算値に加算するステップであって、前記第１の加算値は、第１のサフィックス値に連結されたＭＡを含み、前記第２の加算値は、最下位ビット（ＥＡ−ＥＢ）がないＭＢを含むとともに第２のサフィックス値に連結されている、ステップと、
を有し、
前記第１のサフィックス値及び前記第２のサフィックス値をＴＺ及び（ＥＡ−ＥＢ）のうちのそれぞれ１つに基づき形成する、方法。
【請求項３３】
第１の浮動小数点数から第２の浮動小数点数を減算する方法であって、
前記第１の浮動小数点数は指数値ＥＡ及び仮数値ＭＡを有し、前記第２の浮動小数点数は指数値ＥＢ及び仮数値ＭＢを有し、ＥＡはＥＢ以上であり、
前記第１の浮動小数点数と前記第２の浮動小数点数とが少なくとも１つの所定の近経路の条件値に適合するときに、
（ＭＡ−ＭＢ）に対応した中間仮数値ＭＩを決定するステップと、
ＭＩの最上位端部から始まるＭＩ内の前置ゼロ値のランレングスに対応した前置ゼロ値ＬＺを決定するステップと、
ＬＺとＥＡとの低い方の値としてシフト値結果を決定するステップと、
浮動小数点数の結果の一部を形成する仮数結果ＭＲを生成するように、前記シフト値結果に対応した複数のビット位置ぶんＭＩをシフトさせるステップと、
を有する、方法。
【請求項３４】
第１の浮動小数点数を第２の浮動小数点数に加算するときに用いるスティッキービットを決定する浮動小数点演算回路であって、前記第１の浮動小数点数は指数値ＥＡ及び仮数値ＭＡを有し、前記第２の浮動小数点数は指数値ＥＢ及び仮数値ＭＢを有し、ＥＡはＥＢより大きく、
（ＥＡ−ＥＢ）に基づきシフト量を決定するように構成されたシフト量決定回路であって、前記シフト量は、ＭＡに加算するＭＢのシフトバージョンを形成するようにＭＢに適用する右シフトに対応している、シフト量決定回路と、
ＭＢの最下位ビット端部から始まるＭＢの後置ゼロ値のランレングスに対応した後置ゼロ値を決定するように構成された後置ゼロ計数回路と、
ＭＡに加算するＭＢの前記シフトバージョンから任意の非ゼロビットがシフトアウトするかを示す前記スティッキービットの値を決定するように、前記シフト量を前記後置ゼロ値と比較するように構成されたスティッキービット値決定回路と、
を有する、浮動小数点演算回路。
【請求項３５】
ＥＡがＥＢより大きいことを決定する指数比較回路を有する、請求項３４に記載の浮動小数点演算回路。
【請求項３６】
前記シフト量決定回路が、ＥＡがＥＢより大きいことを前記指数比較回路が決定する前に（ＥＢ−ＥＡ）に基づき更なるシフト量を決定するように構成されている、請求項３５に記載の浮動小数点演算回路。
【請求項３７】
前記後置ゼロ計数回路が、ＭＡの最下位ビット端部から始まるＭＡの後置ゼロ値のランレングスに対応した更なる後置ゼロ値を決定するように構成されている、請求項３５に記載の浮動小数点演算回路。
【請求項３８】
第１の浮動小数点数を第２の浮動小数点数に加算するときに用いるスティッキービットを決定する浮動小数点演算回路であって、前記第１の浮動小数点数は指数値ＥＡ及び仮数値ＭＡを有し、前記第２の浮動小数点数は指数値ＥＢ及び仮数値ＭＢを有し、ＥＡはＥＢより大きく、
（ＥＡ−ＥＢ）に基づきシフト量を決定するシフト量決定手段であって、前記シフト量は、ＭＡに加算するＭＢのシフトバージョンを形成するようにＭＢに適用する右シフトに対応している、シフト量決定手段と、
ＭＢの最下位ビット端部から始まるＭＢの後置ゼロ値のランレングスに対応した後置ゼロ値を決定する後置ゼロ計数手段と、
ＭＡに加算するＭＢの前記シフトバージョンから任意の非ゼロビットがシフトアウトするかを示す前記スティッキービットの値を決定するように、前記シフト量を前記後置ゼロ値と比較するスティッキービット値決定手段と、
を有する、浮動小数点演算回路。
【請求項３９】
第１の浮動小数点数を第２の浮動小数点数に加算するときに用いるスティッキービットを決定する方法であって、前記第１の浮動小数点数は指数値ＥＡ及び仮数値ＭＡを有し、前記第２の浮動小数点数は指数値ＥＢ及び仮数値ＭＢを有し、ＥＡはＥＢより大きく、
（ＥＡ−ＥＢ）に基づきシフト量を決定するステップであって、前記シフト量は、ＭＡに加算するＭＢのシフトバージョンを形成するようにＭＢに適用する右シフトに対応している、ステップと、
ＭＢの最下位ビット端部から始まるＭＢの後置ゼロ値のランレングスに対応した後置ゼロ値を決定するステップと、
ＭＡに加算するＭＢの前記シフトバージョンから任意の非ゼロビットがシフトアウトするかを示す前記スティッキービットの値を決定するように、前記シフト量を前記後置ゼロ値と比較するステップと、
を有する、方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はデータ処理システムの分野に関する。特に、本発明は浮動小数点加算器の分野に関する。
【背景技術】
【０００２】
データ処理システムにおいて、浮動小数点数を加算及び減算可能な浮動小数点加算器を提供することが知られている。このような浮動小数点数は、符号ビット、指数部及び仮数部を有し得る。浮動小数点数の形式と浮動小数点演算の動作の実施例をＩＥＥＥ（米国電気電子技術者協会）７５４規格に見出すことができる。
【０００３】
通常、加算（又は第１の修正入力の１つを加算することで実現可能な減算）を行うときに、加算を実行する前に、小数点位置を揃えるようにより小さい指数の入力加算値を右シフトする。このような整列は仮数結果の有意な範囲から仮数値の最下位ビットをシフトするため、精度の損失がある。これにより、この結果の丸めを適切に行う必要が生じる。様々な丸めモードは浮動小数点演算でサポートされる。このような丸めモードの１つが、最近接偶数への丸めである。このような丸めを実行する際、スティッキービットを決定して保持すべきであることが知られている。このスティッキービットは、小数点位置が揃ったときに有意な範囲から右シフトした任意のビット値がゼロ以外か否かの指標となる。従来、このようなスティッキービットは、加算した仮数の整列の間に有意な範囲からシフトしたビットのすべてで実行した論理和演算によって決定できていた。このアプローチに伴う課題は、ＯＲ演算が多数のビット幅を有しかねず、ＯＲ演算の処理経路において待ち時間の程度が不利になりかねないことである。待ち時間の増加によって、使用可能な最大の動作クロック周波数を低減し、タイミング・スラックを低減し、更には他の否定的結果を導き得る。
【０００４】
浮動小数点加算器の分野では、各オペランドの大きさの差が所定の差よりも大きいとき用に遠経路（ｆａｒ−ｐａｔｈ）の加算器を与え、各オペランドの大きさの差が所定の差よりも小さいとき用に近経路（ｎｅａｒ−ｐａｔｈ）の加算器を与えることが知られている。
【発明の概要】
【課題を解決するための手段】
【０００５】
一態様を鑑みて、本発明は、第１の浮動小数点数を第２の浮動小数点数に加算する浮動小数点加算器回路であって、ここで、第１の浮動小数点数は指数値ＥＡ及び仮数値ＭＡを有し、第２の浮動小数点数は指数値ＥＢ及び仮数値ＭＢを有し、ＥＡはＥＢ以上であり、第１の浮動小数点数と第２の浮動小数点数とが少なくとも１つの所定の遠経路の条件に適合するときに、浮動小数点値の結果を生成するように構成された遠経路の回路を有し、
遠経路の回路は、
ＭＢの最下位端部から始まるＭＢの最下位ビット（ＥＡ−ＥＢ）内の後置ゼロ値のランレングスに対応した後置ゼロ値ＴＺを決定するように構成された後置ゼロ計数回路と、
第１の加算値を第２の加算値に加算するように構成された遠経路の加算器であって、第１の加算値は、第１のサフィックス値に連結されたＭＡを含み、第２の加算値は、最下位ビット（ＥＡ−ＥＢ）がないＭＢを含むとともに第２のサフィックス値に連結されている、遠経路の加算器と、
を有し、
第１のサフィックス値及び第２のサフィックス値をＴＺ及び（ＥＡ−ＥＢ）のうちのそれぞれ１つに基づき形成する、浮動小数点加算器回路を提供する。
【０００６】
本技術の認識では、有意な範囲からシフトしたビットの論理和によってスティッキービットを明示的に計算する代わりに、シフトアウトしたビットと各指数値間の差とにおける後置ゼロの計数に基づき合計からキャリーアウトを決定することで、同一値を有するビットを間接的に計算可能であり、これらの加算値の１つは、初めにＮＯＴ演算が実行される。後置ゼロの計数は、より小さい加算値で実行した右シフトと並列して実行できる。これにより、加算器を介する待ち時間（遅れ）が有利に低減される。
【０００７】
第１のサフィックス値は３つのパディングビットを有していてもよく、この３つのパディングビットは、（ｉ）後置ゼロ計数値＋２；又は（ｉｉ）各指数値間の差（これらはＮＯＴ演算が実行される）；の一方のビット値が後に続く。また、第２のサフィックス値は１つのパディングビットを有していてもよく、この１つのパディングビットは、（ｉ）後置ゼロ計数値＋２；又は（ｉｉ）各指数値間の差；の他方のビット値が後に続く。
【０００８】
３つのパディングビット及び１つのパディングビットは、次のような値を有するように選択してもよい。すなわち、この値は、浮動小数点数の合計の形式に係る遠経路の加算器によって生成されるように、出力仮数値において最小精度の半分のユニットに対応して合計される。
【０００９】
加算する仮数値に連結されたサフィックス値であって、従来のスティッキービットに等価なキャリーアウトを生じるサフィックス値が、ＮＯＴ演算が実行される後置ゼロ計数値又は指数値の差のいずれかにより形成してもよいものと理解される。
【００１０】
右シフトされる第２の加算値は、第１の加算値の仮数と同一サイズまで長さを拡張させるゼロ値のプレフィックスも有していてよい。
【００１１】
プレフィックスとして第２の加算値に加算された前置ゼロ値は、第２の加算値シフト回路を用いて挿入してもよい。
【００１２】
後置ゼロ計数回路は、指数差計算回路と並列で動作するように構成してもよい。指数差は後置ゼロ値との比較に必要であってもよく、後置ゼロ計数値に最大値を有効に設定する指数値の差によってこの指数値の差を知る前に、後置ゼロ計数動作を開始してもよい。
【００１３】
仮数値に連結されて、遠経路の加算器を通して送られたサフィックス値を用いてスティッキービットと同一の値を有するビットを計算する上記の技術は、次の場合に用いてもよい。すなわち、遠経路の加算器を通して送られる値の長さの変化が、２のべき乗のビット幅の境界を越えないときに上記の技術を用いてもよい。この制限は、多くのキャリー先読み加算器（例えば、スクランスキー加算器及びコッゲ−ストーン加算器）が動作する方法の結果として起こり、この場合、２のべき乗の境界を越えるならば、余分なゲート遅延が導入される。この制限は、浮動小数点演算が実行される実際の状況で多数遭遇する。
【００１４】
上記の浮動小数点加算メカニズムは、どの入力加算値がより大きいサイズを有するかに関する識別（少なくとも最大指数値、等しい最大指数値又は等しい最大指数値を有することに関する識別）を必要とすることが理解される。これを達成する１つの方法は、加算開始前に各指数値を比較し、その後、より大きい加算値用の経路とより小さい加算値用の経路とを適合させる好適な経路に入力加算値を切り換えることである。このアプローチは、ゲート数の増加が比較的少ないが、動作の待ち時間を増加させる。
【００１５】
別のアプローチは、加算器回路を二重化して、各入力加算値のサイズの大小に関する逆の仮定に基づきそれぞれの二重化経路を介して入力加算値を送ることである。これにより、より早く加算動作を開始でき、その後、各入力オペランドのサイズの大小を（ある指数値が他の入力オペランドの指数値以上であるという意味において）後に決定するとき、好適な二重化経路からの結果を出力用に選択できる。
【００１６】
また、先に記載したように、本技術の加算器回路は減算操作を実行できる。これは、幾つかの実施形態において、第１の加算値と第２の加算値の加算の前に第２の加算値の仮数内でビットを反転する反転回路を含むことで達成してもよい。本技術は、浮動小数点加算と浮動小数点減算に等しく適用される。
【００１７】
浮動小数点加算器が、所定の上限を超えた大きさの差を有する浮動小数点数を加算する遠経路の加算器、及び所定の上限未満の大きさの差を有する浮動小数点を加算する近経路の加算器を含んでいてもよいことは、当業者によく知られていることである。潜在的に大きな数の仮数ビットが、有意な範囲からシフトして、この有意な範囲から計算されるスティッキービットを必要としてもよいときに、丸めを制御するスティッキービットに等価なビット値を決定する上記の技術が、遠経路の加算器内で特に使用される。
【００１８】
近経路の加算器では、仮数結果内で前置ゼロを計数した後に、浮動小数点結果を正規化するように好適なシフトと指数調整を実行することが知られている。このアプローチの課題は、前置ゼロ計数、及び適用されるその後の関連左シフトによって、対応した指数値が、有効に表示可能な範囲外に存在し得るということである。この課題に対処する公知技術では、その範囲外に指数値が生成された後に、非正規の浮動小数点を生成するように結果が修正されるかどうかを識別する追加回路を提供するのが通常である。このアプローチにより、近経路の加算器内の待ち時間が不利に増加しかねない。
【００１９】
本発明の別の態様は、それ自体又は遠経路の加算器に適用された上記の技術と組み合わせて用いてもよい。また、この態様では、最小値回路が近経路内で提供されるとともに、シフト値結果を決定する機能を果たし、仮数値結果と各入力加算値のうちのより大きい方の指数値とで実行された前置ゼロ計数の各値の小さい方の結果は、シフト値結果によって左シフトしたものである（課題のケースが減算を実行している時であるとしても、加算値を依然として使用してもよいことを注記する）。より大きい加算値の指数値が最小値に近いならば、この指数値は前置ゼロ計数値より小さい。したがって、実行される動作の修正を増大させる待ち時間を必要とせずに、適切に形成された非正規化数が結果として生じるように、仮数値結果で実行される左シフトの上限が提供でき、左シフトを制御できる。
【００２０】
近経路の加算器は、入力加算値が所定の近経路の条件値に適合するときに使用してもよい。入力加算値の大きさに小さい差があるときに、仮数を近経路の加算器に入力する前に指数の差に等しい複数のビット位置ぶん、より小さい加算値の仮数を右シフトするように、仮数シフト回路を提供してもよい。
【００２１】
最小値回路は、シフト値結果の下位ビットを１以上生成する前にシフト値結果の上位ビットを１以上生成するように構成されていてもよい。これは、シフト結果値の十分な精度が利用可能である前に仮数結果値を生成するように中間仮数の右シフトを開始することにより、対数シフタ形態での結果シフト回路が可能となるときに有利である。これにより、近経路の待ち時間が減少する。
【００２２】
最小値回路は、多数の異なった形態を有し、多様な異なる方法で最小値を計算してもよい。シフト値結果の上位ビットの早期の生成を許容するに便利と判った最小値回路動作の１つの方法において、最小値回路は、２つの入力ＬＺ及びＥＡを有するとともに、長さ２ｉのシフト値結果のプレフィックス部分Ｐｉの順番の決定によりシフト値結果を決定し、この決定はｉ＝０から始まり、
Ｐｉ＝（ＬＺｉ ＡＮＤ ＮＯＴ ＧＲｉ）ＯＲ（ＥＡｉ ＡＮＤ ＧＲｉ）であって、ＬＺｉは長さ２ｉのＬＺのプレフィックス部分であり、ＥＡｉは長さ２ｉのＥＡのプレフィックス部分であり、
ｉ＝０及び降順の各ビット位置ｋについて、ＥＱｉ［ｋ］がＮＯＴ（ＬＺ［ｋ］ ＸＯＲ ＥＡ［ｋ］）であり、かつ、ＬＺ［ｋ］＞ＥＡ［ｋ］のときにＧＲｉ［ｋ］＝１であり、ＬＺ［ｋ］≦ＥＡ［ｋ］のときにＧＲｉ［ｋ］＝０であり、
ｉ＞０及び降順の各ビット位置ｋについて、ＥＱｉ［ｋ］＝ＥＱｉ−１［ｋ］ ＡＮＤ ＥＱｉ−１［ｋ＋２（ｉ−１）］であり、かつ、ＧＲｉ［ｋ］＝ＧＲｉ−１［ｋ］ ＯＲ （Ｅｉ−１［ｋ］ ＡＮＤ ＧＲｉ−１［ｋ＋２（ｉ−１）］である。
【００２３】
近経路を使用可能な制限的な状況は、近経路の所定値が１である状況である。浮動小数点結果が非正規の浮動小数点数であるときに、当技術は特に有用である。
【００２４】
更なる態様を鑑みて、本発明は、第１の浮動小数点から第２の浮動小数点を減算する浮動小数点加算器回路であって、ここで、第１の浮動小数点数は指数値ＥＡ及び仮数値ＭＡを有し、第２の浮動小数点数は指数値ＥＢ及び仮数値ＭＢを有し、ＥＡはＥＢ以上であり、（ＥＡ−ＥＢ）が近経路の所定値未満のときに浮動小数点値の結果を生成するように構成された近経路の回路を有し、
近経路の回路は、
（ＭＡ−ＭＢ）に対応した中間仮数値ＭＩを決定するように構成された近経路の加算器と、
ＭＩの最上位端部から始まるＭＩ内の前置ゼロ値のランレングスに対応した前置ゼロ値ＬＺを決定するように構成された前置ゼロ計数回路と、
ＬＺとＥＡとの低い方の値としてシフト値結果を決定するように構成された最小値回路と、
浮動小数点数の結果の一部を形成する仮数結果ＭＲを生成するように、シフト値結果に対応した複数のビット位置ぶんＭＩを左シフトさせるように構成された結果シフト回路と、
を有する、浮動小数点加算器回路を提供する。
【００２５】
近経路における待ち時間を低減する技術は、遠経路における待ち時間を低減する技術と独立して使用してもよいことが理解される。しかしながら、これらの技術を組み合わせて使用することは、近経路及び遠経路における待ち時間に関してバランスを保持できる点で有利である。
【００２６】
本発明の別の態様は、第１の浮動小数点数を第２の浮動小数点数に加算するときに用いるスティッキービットを決定する浮動小数点演算回路であって、ここで、第１の浮動小数点数は指数値ＥＡ及び仮数値ＭＡを有し、第２の浮動小数点数は指数値ＥＢ及び仮数値ＭＢを有し、ＥＡはＥＢより大きく、
（ＥＡ−ＥＢ）に基づきシフト量を決定するように構成されたシフト量決定回路であって、シフト量は、ＭＡに加算するＭＢのシフトバージョンを形成するようにＭＢに適用する右シフトに対応している、シフト量決定回路と、
ＭＢの最下位ビット端部から始まるＭＢの後置ゼロ値のランレングスに対応した後置ゼロ値を決定するように構成された後置ゼロ計数回路と、
ＭＡに加算するＭＢのシフトバージョンから任意の非ゼロビットがシフトアウトするかを示す前記スティッキービットの値を決定するように、シフト量を後置ゼロ値と比較するように構成されたスティッキービット値決定回路と、
を有する、浮動小数点演算回路を提供する。
【００２７】
本発明の更なる態様は添付の特許請求の範囲に示す。
【００２８】
上記及び他の本発明の目的、特徴及び利点は、添付の図面に関連して読むべき例示的実施形態の以下の詳細な説明から明らかとなろう。
【図面の簡単な説明】
【００２９】
【図１】浮動小数点加算器回路を含む集積回路を模式的に示す。
【図２】入力の大きさの大小が既知である入力に基づき浮動小数点加算結果を確実に生成する、２つのアプローチを模式的に示す。
【図３】入力の大きさの大小が既知である入力に基づき浮動小数点加算結果を確実に生成する、２つのアプローチを模式的に示す。
【図４】遠経路の加算器及び近経路の加算器を含む浮動小数点加算器回路を模式的に示す。
【図５】１６ビットの浮動小数点数の形式を模式的に示す。
【図６】後置ゼロ計数回路を含む遠経路の加算器を模式的に示す。
【図７】最小値回路を含む近経路の加算器回路を模式的に示す。
【図８】スティッキービットの均等物を決定するように後置計数ゼロを用いた、１６ビットの浮動小数点加算におけるデータフローを模式的に示す。
【図９】スティッキービットの均等物を決定するように後置計数ゼロを用いた、１６ビットの浮動小数点減算におけるデータフローを模式的に示す。
【発明を実施するための形態】
【００３０】
図１に、一揃いの浮動小数点レジスタ４及びデータ処理パイプライン６を含む集積回路２を模式的に示す。浮動小数点レジスタ４は浮動小数点数を格納し、データ処理パイプライン６は、浮動小数点加算器回路８に提供する少なくとも１つの処理ステージを備えた複数の処理ステージを含む。データ処理システム内の従来のパイプライン方式によると、パイプラインステージは共通のクロック信号によって作動し、この共通のクロック信号は、１つの処理ステージの結果の次の処理ステージへの進行を制御する。各処理ステージで実行される処理に関連した待ち時間を低減可能な手段が、例えば、より高いクロック周波数を使用できることで、所定量の時間内により多くのデータ処理量を達成可能である。そのため、このような手段が有利である。また、低減された待ち時間によって、設計をより強固にする利点を有する、各処理ステージ間のタイミング・スラックを増加できる。
【００３１】
本明細書に記載された例示的な実施形態に係る浮動小数点加算器回路では、最大の大きさの浮動小数点数を入力加算値Ａとして供給し、相対的に小さい大きさの浮動小数点を入力加算値Ｂとして供給するという仮定がある。浮動小数点加算器回路８への入力として２つの任意の浮動小数点数を受け取るとき、その２つのどちらがより大きい大きさを有するか予め知り得ない。図２及び図３にこの課題に対処する２つの代替的アプローチを示す。
【００３２】
図２では、比較回路１０が、２つの入力加算値の大きさ（又は、少なくとも指数の大きさ）を比較するように機能する。その後、この比較の結果は、第１の入力加算値と第２の入力加算値を導くようにマルチプレクサ１２，１４の制御に使用されて、浮動小数点加算器回路１６への入力Ａと入力Ｂの好適な各入力が形成される。このアプローチは、追加ゲート数の増加量が比較的少ないという利点を有するものの、浮動小数点加算器回路１６が動作開始可能な前に比較回路１０からの結果を決定する必要があるため、浮動小数点加算に付随した待ち時間が増加するという不利を被る。
【００３３】
図３に代替的アプローチを示す。このアプローチでは、２つの浮動小数点加算器回路１８，２０に二重化されて、浮動小数点加算器回路１８，２０の各々が２つの入力加算値を受け取る。浮動小数点加算器回路１８では、第１の入力加算値の大きさが第２の入力加算値のそれより大きいという仮定がある。第２の浮動小数点加算器回路２０では、第２の入力加算値の大きさが第１の入力加算値のそれより大きいという仮定がある。浮動小数点加算器回路１８と浮動小数点加算器回路２０の両方が、浮動小数点数の各結果の計算を並列して行う。第１の入力加算値の大きさと第２の入力加算値の大きさとのどちらが大きいかに関して、これら浮動小数点数の１つが不正確な仮定に基づくので、これらの浮動小数点数の１つは不正確になる。浮動小数点加算器回路１８と浮動小数点加算器回路２０によって実行された計算による方法の一部で、決定は、第１の入力加算値と第２の入力加算値のどちらがより大きいかに関してなされてもよい。この決定は、正確な仮定を用いていた浮動小数点加算器回路１８，２０から浮動小数点結果を選択するようにマルチプレクサ２２に供給される。このアプローチは、浮動小数点加算に付随した待ち時間の増加がより少なくなるという利点を有するものの、次のような不利な点を有する。すなわち、浮動小数点加算器回路１８，２０が、第１の仮定に基づく第１の処理経路及び第２の仮定に基づく第２の処理経路を形成するように構成された二重化回路を提供するよう複製されるため、ゲート数がより多くなるという不利な点を有する。
【００３４】
図４に、２つの浮動小数点数の加算（又は減算）に使用される浮動小数点加算器回路２４を模式的に示す。これらの浮動小数点数の各々は符号ビットＳ、指数ビット部Ｅ及び仮数ビット部Ｍを有する。当技術分野の当業者にはよく知られているように、浮動小数点加算器回路２０内には、大きさが同様の２つの浮動小数点を加算（又は減算）するときに用いる近経路の回路２８と同様、大きさが異なる２つの浮動小数点数を加算（又は減算）するときに用いる遠経路の回路２６が設けられている。マルチプレクサ３０が、遠経路の回路２６からの出力又は近経路の回路２８からの出力いずれかを浮動小数点値結果として選択するように、２つの入力加算値間の大きさの差のサイズを決定することで制御される。用いられる遠経路の回路２６と近経路の回路２８のどちらか１つを決定する遠経路の条件値と近経路の条件値は、以下の方法で評価してもよい。
１:    ２つの入力が同符号ならば、これは「有効な加算」であり、遠経路を用いる。
２:    ＥＡ−ＥＢが１以上ならば、遠経路を用いる。
３:    ＥＡ−ＥＢがゼロであり、かつ２つの入力が異符号ならば、近経路を用いる。
４:    ＥＡ−ＥＢが１であり、かつ入力が異符号ならば、仮数ビットを調べる。ＭＡの最上位ビットの次のビット（すなわち、前置１ビット後の最上位ビット）が１ならば、遠経路を用い、それ以外の場合は近経路を用いる。
【００３５】
図５に、ＩＥＥＥ−７５４−２００８規格による１６ビットの浮動小数点番号付けの形式を模式的に示す。特に、このような浮動小数点数は、単一の符号ビット、５ビットの指数部及び１０ビットの仮数部を含む。これらの領域内のビット値と浮動小数点数との関係は図５に示されている。指数値は「−１５」のオフセットを受けていることが見て取れる。これは、指数部［１４：１０］が１の最小正規値を有するときに、表現される浮動小数点が２−１４の要素を含むという結果を有する。より小さい浮動小数点を表現したいならば、指数値の更なる低減は不可能なため、非正規化数を用いる。非正規化数を用いると、指数値部はすべてゼロであるが、仮数値部は、小数点位置の左へ「１」の値をシフトする仮定に付随していない。よって、「０．０００…」などの仮数値には前置ゼロ（先行ゼロ）がある。このような非正規の値は、当技術分野の当業者にはよく知られている。
【００３６】
図６に遠経路の回路１８を模式的に示す。最大の大きさ（又は、少なくとも指数が最大）を有する入力加算値が入力Ａとして供給される。他の浮動小数点数入力値が入力Ｂとして供給される。指数値が同一ならば、入力加算値が入力Ａと入力Ｂに適用される順番は問題とはならないことが理解される。遠経路の回路１８の一般的な動作原理は、遠経路の加算器２６が２つの仮数値を加算する前に２つの加算値間の有効な指数値を均等化し、かつ仮数内で小数点位置を揃えるように、より小さい大きさの入力加算値が第２の加算値シフト回路２４によって右シフトされる。
【００３７】
従来の遠経路の回路では、遠経路の加算器２６で加算される有意な範囲から右シフトした、より小さい入力加算値の各ビットは、これらのビットが、その後仮数値に適用される丸めに影響し得る仮数値結果にキャリーインされるか否かを決定するように調べる必要がある。このようなキャリーイン値（又はスティッキービット）を決定する従来の方法では、遠経路の加算器２６の範囲から右シフトする小さい大きさの入力加算値の下位ビットすべてについて論理和を実行する。このような論理和アプローチの使用に伴う課題は、論理和を用いることで、追加待ち時間が不利な程度まで導入されてしまうことである。図６の回路は、異なるアプローチを取っている。
【００３８】
指数差計算回路２８が、各入力加算値Ａ，Ｂの２つの指数値間の差を決定する。この２つの指数値間の差は、上記のより小さい入力加算値の仮数に適用した右シフトの量を制御するように、第２の加算値シフト回路２４への入力として供給される。また、指数値（ＥＡ−ＥＢ）の差はサフィックス値３０として供給され、サフィックス値３０は、より小さい方の入力加算値の右シフトされた仮数３２に連結されている。１つのパディングビットＰＢが、シフトした仮数３２と指数差（ＥＡ−ＥＢ）の間に挿入される。第２の加算値シフト回路２４は、Ｂ経路上の遠経路の加算器２６への入力の最上位の（ＥＡ−ＥＢ）ビットをゼロ値３２で埋める。したがって、Ｂ経路上で遠経路の加算器２６に供給された第２の加算値は、（ＥＡ−ＥＢ）の最下位ビットがない入力仮数Ｂで形成され、この入力仮数Ｂは、第２の加算値シフト回路２４によって挿入される各ゼロのプレフィックス値に連結されているのと同様に、指数差計算回路２８によって計算された指数の差を表すサフィックス値と１つのパディングビットとに連結されている。
【００３９】
第２の加算値シフト回路２４の動作と並列して、付加回路３３が、Ｂ経路の仮数ＭＢに２つのゼロを付加する。後置ゼロ計数回路３４が、付加された２つのゼロビットを有する入力仮数値をＢ経路から受け取って、後置ゼロ（後続ゼロ）の数を数える（すなわち、付加された２つのゼロを有する仮数値の算術的最下位端部から、連続して現れるゼロの数を計数する）。その後、この後置ゼロ値（ＴＺ＋２）は、ＮＯＴ演算が実行された後に、Ａ経路の仮数ＭＡに対してサフィックスを形成するようにＡ経路の下方に供給された３つのパディングビットと仮数値ＭＡとに連結される。Ａ経路の仮数ＭＡは、３つのパディングビットにＮＯＴ（ＴＺ）が続くサフィックスを有し、このＡ経路の仮数ＭＡは、遠経路の加算器２６への第１の加算値として機能する。遠経路の加算器２６は、仮数値結果ＭＲを生成するように、サフィックス値を含む第１の加算値と第２の加算値を加算する。
【００４０】
２つのサフィックス部すなわちＮＯＴ（ＴＺ）及び（ＥＡ−ＥＢ）への加算の結果によって、上記の技術でスティッキービットが計算されたのと同じキャリーアウトが生成される。よって、サフィックス値の加算から生成されたこのキャリーアウトが、仮数結果の最小ビット位置に向かってキャリーチェーンを昇って送ることができるとともに、最近接偶数への丸めを実行するときに必要な丸めに達するように機能する。
【００４１】
パディングビットを合計するときに、これらが出力仮数値の最小精度の単位（ＵＬＰ）の半分に対応した結果を生むような値をパディングビットは有する。あるいは、このような半分のＵＬＰ値は、仮数の合計に別個に加算してもよい。
【００４２】
最近接偶数への丸め要件に対処するために、保護ビット、丸めビット及びスティッキービットがすべてゼロであれば、仮数結果の最下位ビットが、コンパレータ２７とマルチプレクサ３１の動作によりゼロに設定される。
【００４３】
２つのサフィックス値は、いずれかの丸め方法で経路ＡとＢに適用してもよいことが理解される。すなわち、ＮＯＴ（ＴＺ）は経路Ｂのサフィックスであってもよく、（ＥＡ−ＥＢ）は経路Ａのサフィックスであってもよい。また、サフィックス値はＴ２及びＮＯＴ（ＥＡ−ＥＢ）であってもよい。これらの可能性のすべては、本技術に含まれる。
【００４４】
遠経路の加算器２６によって加算される値の長さの増加が２のべき乗の境界を越えないときに、これらの技術は動作する。これは、ＭＡのビット長が２Ｘ以上（Ｘは正の整数）であり、第１の加算値のビット長が２（Ｘ＋１）未満であるという条件と等価である。
【００４５】
遠経路の加算器回路１８は、通常、更なる多数の処理要素を含むことが理解される。たとえば、これらの処理要素は、当技術分野の当業者によく知られる減算及び他の処理要件を実行するように、符号ビットの操作、指数値結果の生成、仮数値の１つの反転に対処してもよい。このような追加要素を含む回路は、本技術に含まれる。
【００４６】
例示によって簡略化された実施例を考えてみる。
ＭＡ＝１．０１０１０、ＥＡ＝５
ＭＢ＝１．１０１００、ＥＢ＝２
ＭＢは２つの後置ゼロを有するが、拡張（パディング）によって４つの後置ゼロを有する。
ここで、右シフトと加算を実行すると、以下のようになる。
１．０１０１０＿００＿０＿０１１  ／／  ＭＡに加え、パディングの３つのゼロ、そしてシフト量が続く
＋０．００１１０＿１０＿０＿０１１  ／／  ３桁右シフトしたＭＢであって、シフトされた仮数の２つの最下位ビットを保有するＭＢ、その後に１つのパディングビット、そしてＮＯＴ（ＴＺ＋２）が続く
＋０．０００００＿１０＿０＿０００  ／／  ＵＬＰの半分
----------------------------------------
＋１．１０００１＿００＿０＿１１０  ／／  中間結果
ＧＲ  Ｓ
ＧＲＳがすべてゼロのため、仮数結果の最下位ビット（ＬＳＢ）を消す必要がある。
＋１．１０００１ ＡＮＤ ＮＯＴ ＬＳＢ＝１．１００００が正確な結果である。
【００４７】
図７に近経路の回路２０を模式的に示す。入力加算値が同じ指数値を有するか、或いは高々１だけ異なる指数値を有するときに、近経路の回路２０を用いる。指数値が異なるならば、この指数値の違いが指数差回路３６によって検出される。したがって、指数差回路３６は、有効な各指数を均等化するとともに仮数内の小数点位置を揃えるように、仮数シフト回路３８を制御する。仮数シフト回路３８は、１つのビット位置ぶんＢ経路の入力加算値を右シフトさせる。Ａ経路からの仮数ＭＡ、及び仮数シフト回路３８によって右シフトされる場合もある仮数ＭＢを入力加算値として近経路の加算器４０に供給する。近経路の加算器４０は中間仮数値ＭＩを生成する。
【００４８】
２つの入力加算値の大きさが同様であり、減算が実行されるときに、浮動小数点数結果の大きさは、両方の入力浮動小数点数より大幅に小さくてもよいことが理解される。入力浮動小数点数自体が、用いる浮動小数点数形式でサポート可能な最小値に近いならば、生成される浮動小数点数の結果は非正規になる可能性がある。
【００４９】
中間仮数値が、できれば正規な浮動小数点数を生成するよう左シフトできるように、前置ゼロ計数回路４２が中間仮数値における前置ゼロの数（仮数の最上位端部から算術的に開始する連続したゼロ値の数）を数える。しかしながら、このような減算への入力指数値は小さいか、或いは各入力が、その差が小さいように図らずも非常に類似したものならば、前置ゼロ計数回路４２によって数えられた前置ゼロ値ＬＺぶん完全に左シフトすると、小さすぎて関連する浮動小数点数形式では適切に表せない無効な指数値が生じ得る。
【００５０】
特に、指数値部の許容最小値がゼロであり、かつ、前置ゼロ計数値ＬＺで表される左シフトが、指数値部が負であるべきことを示す（指数値部でのＮＢは、前記形式で適用された−１５のオフセットである）ならば、適切にこの指数値を表すことができない。このような結果値を生成した後にこの結果値を捕らえようとするのは可能であるだろう。しかしながら、このようなメカニズムは、結果値を生成した後に、すなわち、中間仮数値を受け取る結果シフト回路４４に左シフトを適用した後に、結果の検査が必要となることで、通常、待ち時間が増加してしまう。結果シフト回路４４は対数シフト回路であり、この対数シフト回路は、初めに大きいシフト変位を適用し、その後より小さいシフト変位を適用するように使用してもよい。
【００５１】
本技術の近経路の回路２０は最小値回路４６を含み、最小値回路４６は、前置ゼロ値ＬＺと同様に、入力オペランドのうちのより大きい方の指数値ＥＡを入力として受け取る。最小値回路は、結果シフト回路４４によって生成される左シフトの数を特定するシフト値結果を生成する。このシフト値結果は、入力ＬＺと入力ＥＡに基づいて決定される。図７に示されているのが、シフト値結果を生成するこれらの２つの入力ＬＺとＥＡを用いて実行された算術的かつ論理的な操作である。特に、最小値回路４６が２つの入力ＬＺ及びＥＡを有するならば、最小値回路４６は、長さ２ｉのシフト値結果のプレフィックス部分Ｐｉの順番の決定によりシフト値結果を決定するように構成されており、この決定はｉ＝０から始まり、
Ｐｉ＝（ＬＺｉ ＡＮＤ ＮＯＴ ＧＲｉ）ＯＲ（ＥＡｉ ＡＮＤ ＧＲｉ）であって、ＬＺｉは長さ２ｉのＬＺのプレフィックス部分であり、ＥＡｉは長さ２ｉのＥＡのプレフィックス部分であり、
ｉ＝０及び降順の各ビット位置ｋについて、ＥＱｉ［ｋ］がＮＯＴ（ＬＺ［ｋ］ ＸＯＲ ＥＡ［ｋ］）であり、かつ、ＬＺ［ｋ］＞ＥＡ［ｋ］のときにＧＲｉ［ｋ］＝１であり、ＬＺ［ｋ］≦ＥＡ［ｋ］のときにＧＲｉ［ｋ］＝０であり、
ｉ＞０及び降順の各ビット位置ｋについて、ＥＱｉ［ｋ］＝ＥＱｉ−１［ｋ］ ＡＮＤ ＥＱｉ−１［ｋ＋２（ｉ−１）］であり、かつ、ＧＲｉ［ｋ］＝ＧＲｉ−１［ｋ］ ＯＲ （Ｅｉ−１［ｋ］ ＡＮＤ ＧＲｉ−１［ｋ＋２（ｉ−１）］である。
【００５２】
このシフト値結果は、シフト値結果の下位ビットが有効である前にシフト値結果のより上位のビットが有効であるように評価される。したがって、シフト値結果のこれらの上位ビットは、シフト値結果の下位ビットが有効である前にビット値の上位シフトを制御するように、結果シフト回路４４に供給できる。これにより、最小値回路４６の評価は、結果シフト回路４４の動作と少なくとも部分的に並列して実行できる。これによって、近経路の回路２０を介する待ち時間が減少する。
【００５３】
最小値回路は最初に最上位ビットを送る。
それは以下のように作動する。
＊２つの入力値ＬＺとＥＡにおける各ビット位置に関して、２つのビット「ＥＱ」と「ＧＲ」を決定する。「ＥＱ」は、ＬＺからのビットが入力ＥＡからのビットに等しいケースに対応している。ビット「ＧＲ」は、ＬＺからのビットが入力ＥＡからのビットより大きいケースに対応している。
＊各ビット位置ＥＱ［ｋ］とＧＲ［ｋ］の「ＥＱ」と「ＧＲ」ビットに基づいて、次に、以下の「ＥＱ」と「ＧＲ」ビットを組み合わせることによって任意の２ビット列用の「ＥＱ」と「ＧＲ」ビットを計算できる。
＊ＥＱ＿ｃｏｍｂｉｎｅｄ＝ＥＱ＿ｈｉｇｈ ＡＮＤ ＥＱ＿ｌｏｗ
＊ＧＲ＿ｃｏｍｂｉｎｅｄ＝ＧＲ＿ｈｉｇｈ ＯＲ（ＥＱ＿ｈｉｇｈ ＡＮＤ ＧＲ＿ｌｏｗ）
＊次に、任意の２ビット列用の「ＥＱ」ビットと「ＧＲ」ビットから、あらゆる４ビット列用の「ＥＱ」ビットと「ＧＲ」ビットを計算するために、隣接した２ビット列からの「ＥＱ」ビットと「ＧＲ」ビットを組み合わせることができる。
＊次に、この組み合わせ手順は、あらゆる８ビット列用の「ＥＱ」と「ＧＲ」を形成する隣接した４ビット列で繰り返されるとともに、１６ビット列用の「ＥＱ」と「ＧＲ」を形成するように「ＥＱ」と「ＧＲ」を形成する隣接した８ビット列で繰り返されるなどする。
最後に、「ＧＲ」値が各ビット位置について決定される。このビットは、ＬＺとＥＡの最小値（ｍｉｎ）の選択に使用できる：ｍｉｎ（ＬＺ、ＥＡ）＝（ＬＺ ＡＮＤ ＮＯＴ ＧＲ）ＯＲ（ＥＡ ＡＮＤ ＧＲ）
この最小値自体は、初めは最上位ビットを与えない。しかしながら、最小値関数用に、入力の上位ビットのある数をただ戻す、関数ｐｒｅｆｉｘ（）を定義するならば、ｐｒｅｆｉｘ（ｍｉｎ（ａ，ｂ））＝ｍｉｎ（ｐｒｅｆｉｘ（ａ），ｐｒｅｆｉｘ（ｂ））という関係が成り立つ。
（たとえば、ｐｒｅｆｉｘ関数が上位４ビットを戻し、ａ＝０１０１１１００、及びｂ＝１０１０１１１１ならば、ｍｉｎ（ａ，ｂ）＝０１０１１１００、ｐｒｅｆｉｘ（ａ）＝０１０１、ｐｒｅｆｉｘ（ｂ）＝１０１０、ｐｒｅｆｉｘ（ｍｉｎ（ａ，ｂ）＝０１０１及びｍｉｎ（ｐｒｅｆｉｘ（ａ），ｐｒｅｆｉｘ（ｂ））＝０１０１となり、この関係は保持される）
この関係は、ｐｒｅｆｉｘ（）関数の戻すビット数の多い少ないに拘わらずに保持される。
この関係は、「ＥＱ」と「ＧＲ」ビットを用いて以下のように使用できる。
＊ＬＺとＥＡの最上位ビットがＬＺとＥＡの１ビットのｐｒｅｆｉｘ（プレフィックス）であるため、最小値結果の最上位ビットを正確に決定するように、最上位ビット用の「ＧＲ」ビットを使用できる。
＊同様に、上位２ビット用に、最小値結果の上位２ビットを正確に決定するように、上位２ビット列用の「ＧＲ」ビットを使用できる。
＊また、上位４ビット用に、最小値結果の上位４ビットを正確に決定するように、上位４ビット列用の「ＧＲ」ビットを使用できる。
＊８ビット、１６ビット、３２ビットなどについても同様である。
このようにして、正確な最小値ビットは、最上位ビットを最初に決定する方法で求めることができる。
実施例として、ビット列ＬＺ＝０１０１０１１１とＥＡ＝０１０１０１０１を与え、値Ｘ＝ｍｉｎ（ＬＺ，ＥＡ）を計算してみる。
＊最初に、「ＥＱ」と「ＧＲ」ビットを各ビット位置について計算する。これによって、ＥＱ＝１１１１１１０１とＧＲ＝００００００１０を得る。
＊この時点で、最上位ビット用の「ＧＲ」は「０」である。そのため、Ｘの最上位ビットは（ＬＺ ＡＮＤ ＮＯＴ ＧＲ）ＯＲ（ＥＡ ＡＮＤ ＧＲ）として計算され、その計算結果は、「０」となる。
＊次に、「ＥＱ」と「ＧＲ」ビットを隣接したビット位置用に組み合わせる。これにより、ＥＱ＝１１１１１００とＧＲ＝０００００１１を得る。
＊この時点で、上位２ビット列用の「ＧＲ」は「０」である。そのため、上位２ビットは（ＬＺ ＡＮＤ ＮＯＴ ＧＲ）ＯＲ（ＥＡ ＡＮＤ ＧＲ）として計算でき、その計算結果は、「０１」となる。（当然ながら、この時点で最上位ビットを計算することは、この計算は既に以前になされているため、冗長である。）
＊次に、「ＥＱ」と「ＧＲ」ビットを隣接した２ビット位置用に組み合わせる。これにより、ＥＱ＝１１１００とＧＲ＝０００１１を得る。
＊この時点で、上位４ビット列用の「ＧＲ」は「０」である。そのため、上位４ビットは（ＬＺ ＡＮＤ ＮＯＴ ＧＲ）ＯＲ（ＥＡ ＡＮＤ ＧＲ）として計算でき、その計算結果は、「０１０１」となる。（この時点で上位２ビットを計算することは、この計算は既に以前になされているため、冗長である。）
＊次に、「ＥＱ」と「ＧＲ」ビットを隣接した４ビット位置用に組み合わせる。全体としての数に関する最終的な「ＥＱ」と「ＧＲ」値は、「ＥＱ」＝０、「ＧＲ」＝１となる。
＊この時点で、８ビット全体の数用の「ＧＲ」は「１」である。そのため、上位４ビットは（ＬＺ ＡＮＤ ＮＯＴ ＧＲ）ＯＲ（ＥＡ ＡＮＤ ＧＲ）として計算でき、その計算結果は、「０１０１０１０１」となる。（この時点で上位４ビットを計算することは、この計算は既に以前になされているため、冗長である。）
１ビットのプレフィックス、２ビットのプレフィックス及び４ビットのプレフィックスの結果を８ビット全体の数の結果よりも早く得るこの方法に注意されたい。
先に記載したように、近経路は、キャンセル（減算）が起こる場合（ＡがＢに非常に近い値を取る、ＡとＢの浮動小数点の加算）を扱うのに使用される。この場合、結果として生じる浮動小数点数の仮数を正規化するように左シフトを実行する必要がある。しかしながら、このキャンセルによって、浮動小数点数は、非正規化数になるほどに小さい数となり得る。この場合、実行される左シフトを制限しなければならない。
減算後に、仮数上で前置ゼロ計数（ＣＬＺ）を実行することで正規化する。当該目的のために、ＣＬＺ前に単一の「０」ビットを追加し、次にＣＬＺ演算を実行する。次に、ＣＬＺ結果とより大きい入力数の指数との間で最小値演算を実行した後に、この最小値演算の結果を結果数に適用するシフト量として使用する。
その結果が非正規化数ではない第１の１６ビットの浮動小数点数（ＦＰ１６）の実施例を考えてみる。
＊Ａ＝０＿００１１１＿１１００００１０１０、Ｂ＝１＿００１１１＿１０００００００００とする。
＊これらの２つの数を指数と仮数（陰的な１ビットを含む）に分解すると、Ａ＿ｅｘｐ＝００１１１、Ａ＿ｍａｎｔ＝１１１００００１０１０、Ｂ＿ｅｘｐ＝００１１１、Ｂ＿ｍａｎｔ＝１１００００００００、より大きい指数は、ＭａｘＥｘｐ＝ｍａｘ（Ａ＿ｅｘｐ，Ｂ＿ｅｘｐ）＝００１１１となる。
次に、減算の前に、仮数の上位端と下位端にゼロを付加する。
Ａ＿ｍａｎｔ：＝０＿１１１００００１０１０＿０
Ｂ＿ｍａｎｔ：＝０＿１１０００００００００＿０
次に実際の減算を実行する。
Ｄｉｆｆ＝Ａ＿ｍａｎｔ−Ｂ＿ｍａｎｔ＝０００１００００１０１００
この結果に前置ゼロ計数を実行すると、Ｃｄｉｆｆ＝ＣＬＺ（Ｄｉｆｆ）＝３となる。
次に最小値を計算すると、Ｌｓｈ＝Ｍｉｎ（Ｃｄｉｆｆ，ＭａｘＥｘｐ）＝３となる。次に、仮数値結果を得るように「Ｌｓｈ」ビットぶん左シフトさせる。その結果は、Ｒｅｓ＿ｍａｎｔ＝Ｄｉｆｆ＜＜Ｌｓｈ＝１００００１０１０００００となる。この結果は正規であるため、次に指数を計算すると、その結果は、Ｒｅｓ＿ｅｘｐ＝ＭａｘＥｘｐ＋１−Ｃｄｉｆｆ＝００１００となる。次に、最下位２ビットを切り捨てるようにして仮数結果を得る。
次に最終的な結果を作ると、その結果は、Ｒｅｓ＝０＿００１００＿００００１０１０００となる（仮数のＭＳＢは陰的であるため、その結果に実際には現れないことに注意されたい）。
次に、結果が非正規化数である第２のＦＰ１６の実施例を考えてみる。
＊Ａ＝０＿０００１０＿１１００００１０１０、Ｂ＝１＿０００１０＿１１００００００００とする。
＊これらの２つの数を指数と仮数（陰的な１ビットを含む）に分解すると、
Ａ＿ｅｘｐ＝０００１０、Ａ＿ｍａｎｔ＝１１１００００１０１０、Ｂ＿ｅｘｐ＝０００１０、Ｂ＿ｍａｎｔ＝１１１００００００００、より大きい指数は、ＭａｘＥｘｐ＝ｍａｘ（Ａ＿ｅｘｐ，Ｂ＿ｅｘｐ）＝０００１０となる。
次に、減算の前に、仮数の上位端と下位端にゼロを付加する。
Ａ＿ｍａｎｔ：＝０＿１１１００００１０１０＿０
Ｂ＿ｍａｎｔ：＝０＿１１１００００００００＿０
次に実際の減算を実行する。
Ｄｉｆｆ＝Ａ＿ｍａｎｔ−Ｂ＿ｍａｎｔ＝００００００００１０１００
この結果に前置ゼロ計数を実行すると、Ｃｄｉｆｆ＝ＣＬＺ（Ｄｉｆｆ）＝８となる。
次に最小値を計算すると、Ｌｓｈ＝Ｍｉｎ（Ｃｄｉｆｆ，ＭａｘＥｘｐ）＝２となる。次に、仮数値結果を得るように「Ｌｓｈ」ビットぶん左シフトさせる。その結果は、Ｒｅｓ＿ｍａｎｔ＝Ｄｉｆｆ＜＜Ｌｓｈ＝００００００１０１００００となる。この結果は非正規であるため、指数はゼロとなる。また、最下位２ビットを切り捨てるようにして仮数結果を得る。次に最終的な結果を作ると、その結果は、Ｒｅｓ＝０＿０００００＿０００００１０１００となる（繰り返しになるが、仮数のＭＳＢは最終的な結果に現れず、この非正規のケースでは、このＭＳＢはゼロである）。
両方の実施例は、同程度の大きさの２つの入力を含む。異なる大きさの２つの入力の場合、この大きさは高々１だけ異なってもよい（これ以外の場合、システムは遠経路を使用してきた）。この場合、より小さい数の仮数は、減算の前に、上位端に２つのゼロビットを有し、下位端にゼロビットを有していない傾向がある。一方で、より大きい数の仮数は、上位端に１つのゼロビットを有し、下位端に１つのゼロビットを有している傾向がある。
【００５４】
正規結果と非正規結果の両方の場合において、加算後に仮数結果の最下位２ビットを切り捨てていることに注意されたい。等しい大きさの２つの数を減算するケースでは、シフト量が常に少なくとも１であるため、これら最下位２ビットは０であると保証される。異なった大きさの２つの数を減算するケースでは、シフト量１を得ることで、これらのビットにおいて非ゼロのデータを得ることが可能である。この場合、近経路は不正確な結果を生成するため、遠経路から戻る総合的な加算器結果を用いなければならない。
【００５５】
図７の右手下方の角部には、２つの入力を減算して、前置ゼロ数すべてに基づいて左シフトした中間仮数値を生成すると、対応する指数が対象の形式で有効に表現可能な値より小さいために無効な数を生成する様子が示されている。この場合、最小値回路４６は、適用される左シフトを、前置ゼロ値ＬＺとより大きい入力の指数ＥＡのうちのより小さい方となるように制限する。最小値回路４６によって決定されたシフト値結果は、結果シフト回路４４の動作と並列して決定されるため、近経路の回路２０内の待ち時間を低減できる。
【００５６】
図８は、２つの１６ビットの浮動小数点数の領域と、浮動小数点加算の間に遠経路の加算器内で計算された（又は、集められた）値との関係を模式的に示す図である。特に、図８では、各指数値の差は、ステージ４８にて５ビットのシフト値ＳＨを形成するように使用される。後置ゼロ値（ＴＺ＋２）は、ステージ５０にて最小の大きさの入力仮数の拡張バージョン（２つゼロビットが付加されたもの）から計算される。高度に仮定された結果経路と低度に仮定された結果経路の両方において、次のような複数のサフィックスを有する仮数値が形成される。すなわち、これらサフィックスは、それぞれ指数値５２と後置ゼロ計数値５４の否定値との差を有する。一定の値を有する追加パディングビット５３が、図８に示すように、加算される仮数に挿入される。追加パディングビット５３は、仮数結果の最小精度の単位（ＵＬＰ）の半分に等しい値を合計に加算するように機能する。２つのサフィックス値５２，５４を加算する効果は、次のようなものである。すなわち、指数均等化と小数点整列動作の間に有意な範囲から右シフトする仮数ＭＢのビット上で、２つのサフィックス値５２，５４の加算によるキャリーアウトが実行されたならば、このキャリーアウトは、多数のビットのＯＲ演算で生成されたスティッキービットを表すように生成されるというものである。当技術分野の当業者にはよく知られているように、このキャリーアウト値（スティッキービットの代替物）は、最近接値への丸めモード用の好適な丸めに適用するように、必要に応じて仮数の加算により連鎖するように機能する。
【００５７】
図９は、減算に対応している点を除いて図８と同様である。この場合、その減算は、一方のサフィックス５６として使用される指数（ＥＡ−ＥＢ）と、後置ゼロ値５８によって与えられる他方のサフィックスとの差のＮＯＴ演算である。パディングビット５７は、ＵＬＰ加算の半分を達成する異なった値を有する。さらに、遠経路の加算器２６の動作が加算よりむしろ減算であるように、Ｂ経路上のより小さい大きさの入力の仮数は、領域６０が示すように遠経路の加算器２６に供給される前にＮＯＴ演算が実行される。
【００５８】
スティッキービットは、図６と関連して議論したように、存在する任意の主加算器とは別個のスティッキービット自体の浮動小数点演算回路で計算してもよい。スティッキービットは、主な合計計算を実行するときに、一部の非ゼロビットが主な合計計算からシフトすることの指標である。シフト量は指数差ＥＡ−ＥＢから計算される（シフト量は、必ずしもその差に等しいというわけではなく、この差を用いて計算されるものである）。Ｂ加算値における後置ゼロの数が計数されるならば、主な合計計算が実行されるときに、シフト量と後置ゼロ計数値との比較によって、任意の非ゼロビットがシフトアウトするか否かが示される（すなわち、スティッキービットを設定すべきか否かを決定できる）。このスティッキービットを設定すべきか否かは、Ｂ加算値がシフトする前に決定できる。
【００５９】
幾つかの実施形態では、後置ゼロ計数は、両方のオペランドの大小を決定する前にこれらオペランド上で実行又は少なくとも開始してもよい。同様に、２つのシフト量ＥＡ−ＥＢ及びＥＢ−ＥＡが、両方のオペランドの大小を決定する前に計算又は少なくとも開始してもよい。回路を決定するこのスティッキービットは、先に記載した他の特徴と組み合わせて用いてもよい。
【００６０】
本発明の例示的な実施形態を添付の図面を参照して本明細書で詳細に説明してきたが、本発明は、それらの詳細な実施形態に限定されないこと、並びに、添付の特許請求の範囲で定義される本発明の範囲及び精神から逸脱せずに、当業者が様々な変形及び修正を施すことが可能であることを理解すべきである。
【符号の説明】
【００６１】
２  集積回路
４  浮動小数点レジスタ
６  データ処理パイプライン
８，１６，１８，２０，２４  浮動小数点加算器回路
１０  比較回路
１２，１４，２２，３０  マルチプレクサ
２６  遠経路の加算器
２８  近経路の加算器
【図１】
0005996946.tif 000002
【図２】
0005996946.tif 000003
【図３】
0005996946.tif 000004
【図４】
0005996946.tif 000005
【図５】
0005996946.tif 000006
【図６】
0005996946.tif 000007
【図７】
0005996946.tif 000008
【図８】
0005996946.tif 000009
【図９】
0005996946.tif 000010