説明

浮動小数点加算器

【課題】浮動小数点数の演算回路及び演算方法を提供する。
【解決手段】浮動小数点加算器回路16,18,20は遠経路の回路18及び近経路の回路20を備えている。遠経路の回路は、後置ゼロTZ及び入力オペランド指数の差を利用して、入力加算値の仮数に連結される各サフィックス値を形成する。各サフィックス値は、従来計算されるスティッキービットの代わりのキャリーアウトを生成するよう合計するときに機能する。近経路では、最小値回路46は、減算で生成された中間仮数の各前置ゼロ計数値のうちの小さい値と、各入力オペランド指数値のうちの大きい値とを計算するために用いられる。そのため、大きすぎることで有効に表示できない指数に対応する前置ゼロを取り除くように左シフトを適用することで、中間仮数値に適用された左シフトにより、有効な浮動小数点結果を生成できる。

【発明の詳細な説明】
【技術分野】
【0001】
本発明はデータ処理システムの分野に関する。特に、本発明は浮動小数点加算器の分野に関する。
【背景技術】
【0002】
データ処理システムにおいて、浮動小数点数を加算及び減算可能な浮動小数点加算器を提供することが知られている。このような浮動小数点数は、符号ビット、指数部及び仮数部を有し得る。浮動小数点数の形式と浮動小数点演算の動作の実施例をIEEE(米国電気電子技術者協会)754規格に見出すことができる。
【0003】
通常、加算(又は第1の修正入力の1つを加算することで実現可能な減算)を行うときに、加算を実行する前に、小数点位置を揃えるようにより小さい指数の入力加算値を右シフトする。このような整列は仮数結果の有意な範囲から仮数値の最下位ビットをシフトするため、精度の損失がある。これにより、この結果の丸めを適切に行う必要が生じる。様々な丸めモードは浮動小数点演算でサポートされる。このような丸めモードの1つが、最近接偶数への丸めである。このような丸めを実行する際、スティッキービットを決定して保持すべきであることが知られている。このスティッキービットは、小数点位置が揃ったときに有意な範囲から右シフトした任意のビット値がゼロ以外か否かの指標となる。従来、このようなスティッキービットは、加算した仮数の整列の間に有意な範囲からシフトしたビットのすべてで実行した論理和演算によって決定できていた。このアプローチに伴う課題は、OR演算が多数のビット幅を有しかねず、OR演算の処理経路において待ち時間の程度が不利になりかねないことである。待ち時間の増加によって、使用可能な最大の動作クロック周波数を低減し、タイミング・スラックを低減し、更には他の否定的結果を導き得る。
【0004】
浮動小数点加算器の分野では、各オペランドの大きさの差が所定の差よりも大きいとき用に遠経路(far−path)の加算器を与え、各オペランドの大きさの差が所定の差よりも小さいとき用に近経路(near−path)の加算器を与えることが知られている。
【発明の概要】
【課題を解決するための手段】
【0005】
一態様を鑑みて、本発明は、第1の浮動小数点数を第2の浮動小数点数に加算する浮動小数点加算器回路であって、ここで、第1の浮動小数点数は指数値E及び仮数値Mを有し、第2の浮動小数点数は指数値E及び仮数値Mを有し、EはE以上であり、第1の浮動小数点数と第2の浮動小数点数とが少なくとも1つの所定の遠経路の条件に適合するときに、浮動小数点値の結果を生成するように構成された遠経路の回路を有し、
遠経路の回路は、
の最下位端部から始まるMの最下位ビット(E−E)内の後置ゼロ値のランレングスに対応した後置ゼロ値TZを決定するように構成された後置ゼロ計数回路と、
第1の加算値を第2の加算値に加算するように構成された遠経路の加算器であって、第1の加算値は、第1のサフィックス値に連結されたMを含み、第2の加算値は、最下位ビット(E−E)がないMを含むとともに第2のサフィックス値に連結されている、遠経路の加算器と、
を有し、
第1のサフィックス値及び第2のサフィックス値をTZ及び(E−E)のうちのそれぞれ1つに基づき形成する、浮動小数点加算器回路を提供する。
【0006】
本技術の認識では、有意な範囲からシフトしたビットの論理和によってスティッキービットを明示的に計算する代わりに、シフトアウトしたビットと各指数値間の差とにおける後置ゼロの計数に基づき合計からキャリーアウトを決定することで、同一値を有するビットを間接的に計算可能であり、これらの加算値の1つは、初めにNOT演算が実行される。後置ゼロの計数は、より小さい加算値で実行した右シフトと並列して実行できる。これにより、加算器を介する待ち時間(遅れ)が有利に低減される。
【0007】
第1のサフィックス値は3つのパディングビットを有していてもよく、この3つのパディングビットは、(i)後置ゼロ計数値+2;又は(ii)各指数値間の差(これらはNOT演算が実行される);の一方のビット値が後に続く。また、第2のサフィックス値は1つのパディングビットを有していてもよく、この1つのパディングビットは、(i)後置ゼロ計数値+2;又は(ii)各指数値間の差;の他方のビット値が後に続く。
【0008】
3つのパディングビット及び1つのパディングビットは、次のような値を有するように選択してもよい。すなわち、この値は、浮動小数点数の合計の形式に係る遠経路の加算器によって生成されるように、出力仮数値において最小精度の半分のユニットに対応して合計される。
【0009】
加算する仮数値に連結されたサフィックス値であって、従来のスティッキービットに等価なキャリーアウトを生じるサフィックス値が、NOT演算が実行される後置ゼロ計数値又は指数値の差のいずれかにより形成してもよいものと理解される。
【0010】
右シフトされる第2の加算値は、第1の加算値の仮数と同一サイズまで長さを拡張させるゼロ値のプレフィックスも有していてよい。
【0011】
プレフィックスとして第2の加算値に加算された前置ゼロ値は、第2の加算値シフト回路を用いて挿入してもよい。
【0012】
後置ゼロ計数回路は、指数差計算回路と並列で動作するように構成してもよい。指数差は後置ゼロ値との比較に必要であってもよく、後置ゼロ計数値に最大値を有効に設定する指数値の差によってこの指数値の差を知る前に、後置ゼロ計数動作を開始してもよい。
【0013】
仮数値に連結されて、遠経路の加算器を通して送られたサフィックス値を用いてスティッキービットと同一の値を有するビットを計算する上記の技術は、次の場合に用いてもよい。すなわち、遠経路の加算器を通して送られる値の長さの変化が、2のべき乗のビット幅の境界を越えないときに上記の技術を用いてもよい。この制限は、多くのキャリー先読み加算器(例えば、スクランスキー加算器及びコッゲ−ストーン加算器)が動作する方法の結果として起こり、この場合、2のべき乗の境界を越えるならば、余分なゲート遅延が導入される。この制限は、浮動小数点演算が実行される実際の状況で多数遭遇する。
【0014】
上記の浮動小数点加算メカニズムは、どの入力加算値がより大きいサイズを有するかに関する識別(少なくとも最大指数値、等しい最大指数値又は等しい最大指数値を有することに関する識別)を必要とすることが理解される。これを達成する1つの方法は、加算開始前に各指数値を比較し、その後、より大きい加算値用の経路とより小さい加算値用の経路とを適合させる好適な経路に入力加算値を切り換えることである。このアプローチは、ゲート数の増加が比較的少ないが、動作の待ち時間を増加させる。
【0015】
別のアプローチは、加算器回路を二重化して、各入力加算値のサイズの大小に関する逆の仮定に基づきそれぞれの二重化経路を介して入力加算値を送ることである。これにより、より早く加算動作を開始でき、その後、各入力オペランドのサイズの大小を(ある指数値が他の入力オペランドの指数値以上であるという意味において)後に決定するとき、好適な二重化経路からの結果を出力用に選択できる。
【0016】
また、先に記載したように、本技術の加算器回路は減算操作を実行できる。これは、幾つかの実施形態において、第1の加算値と第2の加算値の加算の前に第2の加算値の仮数内でビットを反転する反転回路を含むことで達成してもよい。本技術は、浮動小数点加算と浮動小数点減算に等しく適用される。
【0017】
浮動小数点加算器が、所定の上限を超えた大きさの差を有する浮動小数点数を加算する遠経路の加算器、及び所定の上限未満の大きさの差を有する浮動小数点を加算する近経路の加算器を含んでいてもよいことは、当業者によく知られていることである。潜在的に大きな数の仮数ビットが、有意な範囲からシフトして、この有意な範囲から計算されるスティッキービットを必要としてもよいときに、丸めを制御するスティッキービットに等価なビット値を決定する上記の技術が、遠経路の加算器内で特に使用される。
【0018】
近経路の加算器では、仮数結果内で前置ゼロを計数した後に、浮動小数点結果を正規化するように好適なシフトと指数調整を実行することが知られている。このアプローチの課題は、前置ゼロ計数、及び適用されるその後の関連左シフトによって、対応した指数値が、有効に表示可能な範囲外に存在し得るということである。この課題に対処する公知技術では、その範囲外に指数値が生成された後に、非正規の浮動小数点を生成するように結果が修正されるかどうかを識別する追加回路を提供するのが通常である。このアプローチにより、近経路の加算器内の待ち時間が不利に増加しかねない。
【0019】
本発明の別の態様は、それ自体又は遠経路の加算器に適用された上記の技術と組み合わせて用いてもよい。また、この態様では、最小値回路が近経路内で提供されるとともに、シフト値結果を決定する機能を果たし、仮数値結果と各入力加算値のうちのより大きい方の指数値とで実行された前置ゼロ計数の各値の小さい方の結果は、シフト値結果によって左シフトしたものである(課題のケースが減算を実行している時であるとしても、加算値を依然として使用してもよいことを注記する)。より大きい加算値の指数値が最小値に近いならば、この指数値は前置ゼロ計数値より小さい。したがって、実行される動作の修正を増大させる待ち時間を必要とせずに、適切に形成された非正規化数が結果として生じるように、仮数値結果で実行される左シフトの上限が提供でき、左シフトを制御できる。
【0020】
近経路の加算器は、入力加算値が所定の近経路の条件値に適合するときに使用してもよい。入力加算値の大きさに小さい差があるときに、仮数を近経路の加算器に入力する前に指数の差に等しい複数のビット位置ぶん、より小さい加算値の仮数を右シフトするように、仮数シフト回路を提供してもよい。
【0021】
最小値回路は、シフト値結果の下位ビットを1以上生成する前にシフト値結果の上位ビットを1以上生成するように構成されていてもよい。これは、シフト結果値の十分な精度が利用可能である前に仮数結果値を生成するように中間仮数の右シフトを開始することにより、対数シフタ形態での結果シフト回路が可能となるときに有利である。これにより、近経路の待ち時間が減少する。
【0022】
最小値回路は、多数の異なった形態を有し、多様な異なる方法で最小値を計算してもよい。シフト値結果の上位ビットの早期の生成を許容するに便利と判った最小値回路動作の1つの方法において、最小値回路は、2つの入力LZ及びEを有するとともに、長さ2のシフト値結果のプレフィックス部分Pの順番の決定によりシフト値結果を決定し、この決定はi=0から始まり、
=(LZAND NOT GR)OR(EAi AND GR)であって、LZは長さ2のLZのプレフィックス部分であり、EAiは長さ2のEのプレフィックス部分であり、
i=0及び降順の各ビット位置kについて、EQ[k]がNOT(LZ[k] XOR E[k])であり、かつ、LZ[k]>E[k]のときにGR[k]=1であり、LZ[k]≦E[k]のときにGR[k]=0であり、
i>0及び降順の各ビット位置kについて、EQ[k]=EQi−1[k] AND EQi−1[k+2(i−1)]であり、かつ、GR[k]=GRi−1[k] OR (Ei−1[k] AND GRi−1[k+2(i−1)]である。
【0023】
近経路を使用可能な制限的な状況は、近経路の所定値が1である状況である。浮動小数点結果が非正規の浮動小数点数であるときに、当技術は特に有用である。
【0024】
更なる態様を鑑みて、本発明は、第1の浮動小数点から第2の浮動小数点を減算する浮動小数点加算器回路であって、ここで、第1の浮動小数点数は指数値E及び仮数値Mを有し、第2の浮動小数点数は指数値E及び仮数値Mを有し、EはE以上であり、(E−E)が近経路の所定値未満のときに浮動小数点値の結果を生成するように構成された近経路の回路を有し、
近経路の回路は、
(M−M)に対応した中間仮数値Mを決定するように構成された近経路の加算器と、
の最上位端部から始まるM内の前置ゼロ値のランレングスに対応した前置ゼロ値LZを決定するように構成された前置ゼロ計数回路と、
LZとEとの低い方の値としてシフト値結果を決定するように構成された最小値回路と、
浮動小数点数の結果の一部を形成する仮数結果Mを生成するように、シフト値結果に対応した複数のビット位置ぶんMを左シフトさせるように構成された結果シフト回路と、
を有する、浮動小数点加算器回路を提供する。
【0025】
近経路における待ち時間を低減する技術は、遠経路における待ち時間を低減する技術と独立して使用してもよいことが理解される。しかしながら、これらの技術を組み合わせて使用することは、近経路及び遠経路における待ち時間に関してバランスを保持できる点で有利である。
【0026】
本発明の別の態様は、第1の浮動小数点数を第2の浮動小数点数に加算するときに用いるスティッキービットを決定する浮動小数点演算回路であって、ここで、第1の浮動小数点数は指数値E及び仮数値Mを有し、第2の浮動小数点数は指数値E及び仮数値Mを有し、EはEより大きく、
(E−E)に基づきシフト量を決定するように構成されたシフト量決定回路であって、シフト量は、Mに加算するMのシフトバージョンを形成するようにMに適用する右シフトに対応している、シフト量決定回路と、
の最下位ビット端部から始まるMの後置ゼロ値のランレングスに対応した後置ゼロ値を決定するように構成された後置ゼロ計数回路と、
に加算するMのシフトバージョンから任意の非ゼロビットがシフトアウトするかを示す前記スティッキービットの値を決定するように、シフト量を後置ゼロ値と比較するように構成されたスティッキービット値決定回路と、
を有する、浮動小数点演算回路を提供する。
【0027】
本発明の更なる態様は添付の特許請求の範囲に示す。
【0028】
上記及び他の本発明の目的、特徴及び利点は、添付の図面に関連して読むべき例示的実施形態の以下の詳細な説明から明らかとなろう。
【図面の簡単な説明】
【0029】
【図1】浮動小数点加算器回路を含む集積回路を模式的に示す。
【図2】入力の大きさの大小が既知である入力に基づき浮動小数点加算結果を確実に生成する、2つのアプローチを模式的に示す。
【図3】入力の大きさの大小が既知である入力に基づき浮動小数点加算結果を確実に生成する、2つのアプローチを模式的に示す。
【図4】遠経路の加算器及び近経路の加算器を含む浮動小数点加算器回路を模式的に示す。
【図5】16ビットの浮動小数点数の形式を模式的に示す。
【図6】後置ゼロ計数回路を含む遠経路の加算器を模式的に示す。
【図7】最小値回路を含む近経路の加算器回路を模式的に示す。
【図8】スティッキービットの均等物を決定するように後置計数ゼロを用いた、16ビットの浮動小数点加算におけるデータフローを模式的に示す。
【図9】スティッキービットの均等物を決定するように後置計数ゼロを用いた、16ビットの浮動小数点減算におけるデータフローを模式的に示す。
【発明を実施するための形態】
【0030】
図1に、一揃いの浮動小数点レジスタ4及びデータ処理パイプライン6を含む集積回路2を模式的に示す。浮動小数点レジスタ4は浮動小数点数を格納し、データ処理パイプライン6は、浮動小数点加算器回路8に提供する少なくとも1つの処理ステージを備えた複数の処理ステージを含む。データ処理システム内の従来のパイプライン方式によると、パイプラインステージは共通のクロック信号によって作動し、この共通のクロック信号は、1つの処理ステージの結果の次の処理ステージへの進行を制御する。各処理ステージで実行される処理に関連した待ち時間を低減可能な手段が、例えば、より高いクロック周波数を使用できることで、所定量の時間内により多くのデータ処理量を達成可能である。そのため、このような手段が有利である。また、低減された待ち時間によって、設計をより強固にする利点を有する、各処理ステージ間のタイミング・スラックを増加できる。
【0031】
本明細書に記載された例示的な実施形態に係る浮動小数点加算器回路では、最大の大きさの浮動小数点数を入力加算値Aとして供給し、相対的に小さい大きさの浮動小数点を入力加算値Bとして供給するという仮定がある。浮動小数点加算器回路8への入力として2つの任意の浮動小数点数を受け取るとき、その2つのどちらがより大きい大きさを有するか予め知り得ない。図2及び図3にこの課題に対処する2つの代替的アプローチを示す。
【0032】
図2では、比較回路10が、2つの入力加算値の大きさ(又は、少なくとも指数の大きさ)を比較するように機能する。その後、この比較の結果は、第1の入力加算値と第2の入力加算値を導くようにマルチプレクサ12,14の制御に使用されて、浮動小数点加算器回路16への入力Aと入力Bの好適な各入力が形成される。このアプローチは、追加ゲート数の増加量が比較的少ないという利点を有するものの、浮動小数点加算器回路16が動作開始可能な前に比較回路10からの結果を決定する必要があるため、浮動小数点加算に付随した待ち時間が増加するという不利を被る。
【0033】
図3に代替的アプローチを示す。このアプローチでは、2つの浮動小数点加算器回路18,20に二重化されて、浮動小数点加算器回路18,20の各々が2つの入力加算値を受け取る。浮動小数点加算器回路18では、第1の入力加算値の大きさが第2の入力加算値のそれより大きいという仮定がある。第2の浮動小数点加算器回路20では、第2の入力加算値の大きさが第1の入力加算値のそれより大きいという仮定がある。浮動小数点加算器回路18と浮動小数点加算器回路20の両方が、浮動小数点数の各結果の計算を並列して行う。第1の入力加算値の大きさと第2の入力加算値の大きさとのどちらが大きいかに関して、これら浮動小数点数の1つが不正確な仮定に基づくので、これらの浮動小数点数の1つは不正確になる。浮動小数点加算器回路18と浮動小数点加算器回路20によって実行された計算による方法の一部で、決定は、第1の入力加算値と第2の入力加算値のどちらがより大きいかに関してなされてもよい。この決定は、正確な仮定を用いていた浮動小数点加算器回路18,20から浮動小数点結果を選択するようにマルチプレクサ22に供給される。このアプローチは、浮動小数点加算に付随した待ち時間の増加がより少なくなるという利点を有するものの、次のような不利な点を有する。すなわち、浮動小数点加算器回路18,20が、第1の仮定に基づく第1の処理経路及び第2の仮定に基づく第2の処理経路を形成するように構成された二重化回路を提供するよう複製されるため、ゲート数がより多くなるという不利な点を有する。
【0034】
図4に、2つの浮動小数点数の加算(又は減算)に使用される浮動小数点加算器回路24を模式的に示す。これらの浮動小数点数の各々は符号ビットS、指数ビット部E及び仮数ビット部Mを有する。当技術分野の当業者にはよく知られているように、浮動小数点加算器回路20内には、大きさが同様の2つの浮動小数点を加算(又は減算)するときに用いる近経路の回路28と同様、大きさが異なる2つの浮動小数点数を加算(又は減算)するときに用いる遠経路の回路26が設けられている。マルチプレクサ30が、遠経路の回路26からの出力又は近経路の回路28からの出力いずれかを浮動小数点値結果として選択するように、2つの入力加算値間の大きさの差のサイズを決定することで制御される。用いられる遠経路の回路26と近経路の回路28のどちらか1つを決定する遠経路の条件値と近経路の条件値は、以下の方法で評価してもよい。
1: 2つの入力が同符号ならば、これは「有効な加算」であり、遠経路を用いる。
2: E−Eが1以上ならば、遠経路を用いる。
3: E−Eがゼロであり、かつ2つの入力が異符号ならば、近経路を用いる。
4: E−Eが1であり、かつ入力が異符号ならば、仮数ビットを調べる。Mの最上位ビットの次のビット(すなわち、前置1ビット後の最上位ビット)が1ならば、遠経路を用い、それ以外の場合は近経路を用いる。
【0035】
図5に、IEEE−754−2008規格による16ビットの浮動小数点番号付けの形式を模式的に示す。特に、このような浮動小数点数は、単一の符号ビット、5ビットの指数部及び10ビットの仮数部を含む。これらの領域内のビット値と浮動小数点数との関係は図5に示されている。指数値は「−15」のオフセットを受けていることが見て取れる。これは、指数部[14:10]が1の最小正規値を有するときに、表現される浮動小数点が2−14の要素を含むという結果を有する。より小さい浮動小数点を表現したいならば、指数値の更なる低減は不可能なため、非正規化数を用いる。非正規化数を用いると、指数値部はすべてゼロであるが、仮数値部は、小数点位置の左へ「1」の値をシフトする仮定に付随していない。よって、「0.000…」などの仮数値には前置ゼロ(先行ゼロ)がある。このような非正規の値は、当技術分野の当業者にはよく知られている。
【0036】
図6に遠経路の回路18を模式的に示す。最大の大きさ(又は、少なくとも指数が最大)を有する入力加算値が入力Aとして供給される。他の浮動小数点数入力値が入力Bとして供給される。指数値が同一ならば、入力加算値が入力Aと入力Bに適用される順番は問題とはならないことが理解される。遠経路の回路18の一般的な動作原理は、遠経路の加算器26が2つの仮数値を加算する前に2つの加算値間の有効な指数値を均等化し、かつ仮数内で小数点位置を揃えるように、より小さい大きさの入力加算値が第2の加算値シフト回路24によって右シフトされる。
【0037】
従来の遠経路の回路では、遠経路の加算器26で加算される有意な範囲から右シフトした、より小さい入力加算値の各ビットは、これらのビットが、その後仮数値に適用される丸めに影響し得る仮数値結果にキャリーインされるか否かを決定するように調べる必要がある。このようなキャリーイン値(又はスティッキービット)を決定する従来の方法では、遠経路の加算器26の範囲から右シフトする小さい大きさの入力加算値の下位ビットすべてについて論理和を実行する。このような論理和アプローチの使用に伴う課題は、論理和を用いることで、追加待ち時間が不利な程度まで導入されてしまうことである。図6の回路は、異なるアプローチを取っている。
【0038】
指数差計算回路28が、各入力加算値A,Bの2つの指数値間の差を決定する。この2つの指数値間の差は、上記のより小さい入力加算値の仮数に適用した右シフトの量を制御するように、第2の加算値シフト回路24への入力として供給される。また、指数値(E−E)の差はサフィックス値30として供給され、サフィックス値30は、より小さい方の入力加算値の右シフトされた仮数32に連結されている。1つのパディングビットPBが、シフトした仮数32と指数差(E−E)の間に挿入される。第2の加算値シフト回路24は、B経路上の遠経路の加算器26への入力の最上位の(E−E)ビットをゼロ値32で埋める。したがって、B経路上で遠経路の加算器26に供給された第2の加算値は、(E−E)の最下位ビットがない入力仮数Bで形成され、この入力仮数Bは、第2の加算値シフト回路24によって挿入される各ゼロのプレフィックス値に連結されているのと同様に、指数差計算回路28によって計算された指数の差を表すサフィックス値と1つのパディングビットとに連結されている。
【0039】
第2の加算値シフト回路24の動作と並列して、付加回路33が、B経路の仮数Mに2つのゼロを付加する。後置ゼロ計数回路34が、付加された2つのゼロビットを有する入力仮数値をB経路から受け取って、後置ゼロ(後続ゼロ)の数を数える(すなわち、付加された2つのゼロを有する仮数値の算術的最下位端部から、連続して現れるゼロの数を計数する)。その後、この後置ゼロ値(TZ+2)は、NOT演算が実行された後に、A経路の仮数Mに対してサフィックスを形成するようにA経路の下方に供給された3つのパディングビットと仮数値Mとに連結される。A経路の仮数Mは、3つのパディングビットにNOT(TZ)が続くサフィックスを有し、このA経路の仮数Mは、遠経路の加算器26への第1の加算値として機能する。遠経路の加算器26は、仮数値結果Mを生成するように、サフィックス値を含む第1の加算値と第2の加算値を加算する。
【0040】
2つのサフィックス部すなわちNOT(TZ)及び(E−E)への加算の結果によって、上記の技術でスティッキービットが計算されたのと同じキャリーアウトが生成される。よって、サフィックス値の加算から生成されたこのキャリーアウトが、仮数結果の最小ビット位置に向かってキャリーチェーンを昇って送ることができるとともに、最近接偶数への丸めを実行するときに必要な丸めに達するように機能する。
【0041】
パディングビットを合計するときに、これらが出力仮数値の最小精度の単位(ULP)の半分に対応した結果を生むような値をパディングビットは有する。あるいは、このような半分のULP値は、仮数の合計に別個に加算してもよい。
【0042】
最近接偶数への丸め要件に対処するために、保護ビット、丸めビット及びスティッキービットがすべてゼロであれば、仮数結果の最下位ビットが、コンパレータ27とマルチプレクサ31の動作によりゼロに設定される。
【0043】
2つのサフィックス値は、いずれかの丸め方法で経路AとBに適用してもよいことが理解される。すなわち、NOT(TZ)は経路Bのサフィックスであってもよく、(E−E)は経路Aのサフィックスであってもよい。また、サフィックス値はT2及びNOT(E−E)であってもよい。これらの可能性のすべては、本技術に含まれる。
【0044】
遠経路の加算器26によって加算される値の長さの増加が2のべき乗の境界を越えないときに、これらの技術は動作する。これは、Mのビット長が2以上(Xは正の整数)であり、第1の加算値のビット長が2(X+1)未満であるという条件と等価である。
【0045】
遠経路の加算器回路18は、通常、更なる多数の処理要素を含むことが理解される。たとえば、これらの処理要素は、当技術分野の当業者によく知られる減算及び他の処理要件を実行するように、符号ビットの操作、指数値結果の生成、仮数値の1つの反転に対処してもよい。このような追加要素を含む回路は、本技術に含まれる。
【0046】
例示によって簡略化された実施例を考えてみる。
=1.01010、E=5
=1.10100、E=2
は2つの後置ゼロを有するが、拡張(パディング)によって4つの後置ゼロを有する。
ここで、右シフトと加算を実行すると、以下のようになる。
1.01010_00_0_011 // Mに加え、パディングの3つのゼロ、そしてシフト量が続く
+0.00110_10_0_011 // 3桁右シフトしたMであって、シフトされた仮数の2つの最下位ビットを保有するM、その後に1つのパディングビット、そしてNOT(TZ+2)が続く
+0.00000_10_0_000 // ULPの半分
----------------------------------------
+1.10001_00_0_110 // 中間結果
GR S
GRSがすべてゼロのため、仮数結果の最下位ビット(LSB)を消す必要がある。
+1.10001 AND NOT LSB=1.10000が正確な結果である。
【0047】
図7に近経路の回路20を模式的に示す。入力加算値が同じ指数値を有するか、或いは高々1だけ異なる指数値を有するときに、近経路の回路20を用いる。指数値が異なるならば、この指数値の違いが指数差回路36によって検出される。したがって、指数差回路36は、有効な各指数を均等化するとともに仮数内の小数点位置を揃えるように、仮数シフト回路38を制御する。仮数シフト回路38は、1つのビット位置ぶんB経路の入力加算値を右シフトさせる。A経路からの仮数MA、及び仮数シフト回路38によって右シフトされる場合もある仮数MBを入力加算値として近経路の加算器40に供給する。近経路の加算器40は中間仮数値Mを生成する。
【0048】
2つの入力加算値の大きさが同様であり、減算が実行されるときに、浮動小数点数結果の大きさは、両方の入力浮動小数点数より大幅に小さくてもよいことが理解される。入力浮動小数点数自体が、用いる浮動小数点数形式でサポート可能な最小値に近いならば、生成される浮動小数点数の結果は非正規になる可能性がある。
【0049】
中間仮数値が、できれば正規な浮動小数点数を生成するよう左シフトできるように、前置ゼロ計数回路42が中間仮数値における前置ゼロの数(仮数の最上位端部から算術的に開始する連続したゼロ値の数)を数える。しかしながら、このような減算への入力指数値は小さいか、或いは各入力が、その差が小さいように図らずも非常に類似したものならば、前置ゼロ計数回路42によって数えられた前置ゼロ値LZぶん完全に左シフトすると、小さすぎて関連する浮動小数点数形式では適切に表せない無効な指数値が生じ得る。
【0050】
特に、指数値部の許容最小値がゼロであり、かつ、前置ゼロ計数値LZで表される左シフトが、指数値部が負であるべきことを示す(指数値部でのNBは、前記形式で適用された−15のオフセットである)ならば、適切にこの指数値を表すことができない。このような結果値を生成した後にこの結果値を捕らえようとするのは可能であるだろう。しかしながら、このようなメカニズムは、結果値を生成した後に、すなわち、中間仮数値を受け取る結果シフト回路44に左シフトを適用した後に、結果の検査が必要となることで、通常、待ち時間が増加してしまう。結果シフト回路44は対数シフト回路であり、この対数シフト回路は、初めに大きいシフト変位を適用し、その後より小さいシフト変位を適用するように使用してもよい。
【0051】
本技術の近経路の回路20は最小値回路46を含み、最小値回路46は、前置ゼロ値LZと同様に、入力オペランドのうちのより大きい方の指数値Eを入力として受け取る。最小値回路は、結果シフト回路44によって生成される左シフトの数を特定するシフト値結果を生成する。このシフト値結果は、入力LZと入力Eに基づいて決定される。図7に示されているのが、シフト値結果を生成するこれらの2つの入力LZとEを用いて実行された算術的かつ論理的な操作である。特に、最小値回路46が2つの入力LZ及びEを有するならば、最小値回路46は、長さ2のシフト値結果のプレフィックス部分Pの順番の決定によりシフト値結果を決定するように構成されており、この決定はi=0から始まり、
=(LZAND NOT GR)OR(EAi AND GR)であって、LZは長さ2のLZのプレフィックス部分であり、EAiは長さ2のEのプレフィックス部分であり、
i=0及び降順の各ビット位置kについて、EQ[k]がNOT(LZ[k] XOR E[k])であり、かつ、LZ[k]>E[k]のときにGR[k]=1であり、LZ[k]≦E[k]のときにGR[k]=0であり、
i>0及び降順の各ビット位置kについて、EQ[k]=EQi−1[k] AND EQi−1[k+2(i−1)]であり、かつ、GR[k]=GRi−1[k] OR (Ei−1[k] AND GRi−1[k+2(i−1)]である。
【0052】
このシフト値結果は、シフト値結果の下位ビットが有効である前にシフト値結果のより上位のビットが有効であるように評価される。したがって、シフト値結果のこれらの上位ビットは、シフト値結果の下位ビットが有効である前にビット値の上位シフトを制御するように、結果シフト回路44に供給できる。これにより、最小値回路46の評価は、結果シフト回路44の動作と少なくとも部分的に並列して実行できる。これによって、近経路の回路20を介する待ち時間が減少する。
【0053】
最小値回路は最初に最上位ビットを送る。
それは以下のように作動する。
*2つの入力値LZとEにおける各ビット位置に関して、2つのビット「EQ」と「GR」を決定する。「EQ」は、LZからのビットが入力Eからのビットに等しいケースに対応している。ビット「GR」は、LZからのビットが入力Eからのビットより大きいケースに対応している。
*各ビット位置EQ[k]とGR[k]の「EQ」と「GR」ビットに基づいて、次に、以下の「EQ」と「GR」ビットを組み合わせることによって任意の2ビット列用の「EQ」と「GR」ビットを計算できる。
*EQ_combined=EQ_high AND EQ_low
*GR_combined=GR_high OR(EQ_high AND GR_low)
*次に、任意の2ビット列用の「EQ」ビットと「GR」ビットから、あらゆる4ビット列用の「EQ」ビットと「GR」ビットを計算するために、隣接した2ビット列からの「EQ」ビットと「GR」ビットを組み合わせることができる。
*次に、この組み合わせ手順は、あらゆる8ビット列用の「EQ」と「GR」を形成する隣接した4ビット列で繰り返されるとともに、16ビット列用の「EQ」と「GR」を形成するように「EQ」と「GR」を形成する隣接した8ビット列で繰り返されるなどする。
最後に、「GR」値が各ビット位置について決定される。このビットは、LZとEの最小値(min)の選択に使用できる:min(LZ、E)=(LZ AND NOT GR)OR(E AND GR)
この最小値自体は、初めは最上位ビットを与えない。しかしながら、最小値関数用に、入力の上位ビットのある数をただ戻す、関数prefix()を定義するならば、prefix(min(a,b))=min(prefix(a),prefix(b))という関係が成り立つ。
(たとえば、prefix関数が上位4ビットを戻し、a=01011100、及びb=10101111ならば、min(a,b)=01011100、prefix(a)=0101、prefix(b)=1010、prefix(min(a,b)=0101及びmin(prefix(a),prefix(b))=0101となり、この関係は保持される)
この関係は、prefix()関数の戻すビット数の多い少ないに拘わらずに保持される。
この関係は、「EQ」と「GR」ビットを用いて以下のように使用できる。
*LZとEの最上位ビットがLZとEの1ビットのprefix(プレフィックス)であるため、最小値結果の最上位ビットを正確に決定するように、最上位ビット用の「GR」ビットを使用できる。
*同様に、上位2ビット用に、最小値結果の上位2ビットを正確に決定するように、上位2ビット列用の「GR」ビットを使用できる。
*また、上位4ビット用に、最小値結果の上位4ビットを正確に決定するように、上位4ビット列用の「GR」ビットを使用できる。
*8ビット、16ビット、32ビットなどについても同様である。
このようにして、正確な最小値ビットは、最上位ビットを最初に決定する方法で求めることができる。
実施例として、ビット列LZ=01010111とE=01010101を与え、値X=min(LZ,E)を計算してみる。
*最初に、「EQ」と「GR」ビットを各ビット位置について計算する。これによって、EQ=11111101とGR=00000010を得る。
*この時点で、最上位ビット用の「GR」は「0」である。そのため、Xの最上位ビットは(LZ AND NOT GR)OR(E AND GR)として計算され、その計算結果は、「0」となる。
*次に、「EQ」と「GR」ビットを隣接したビット位置用に組み合わせる。これにより、EQ=1111100とGR=0000011を得る。
*この時点で、上位2ビット列用の「GR」は「0」である。そのため、上位2ビットは(LZ AND NOT GR)OR(E AND GR)として計算でき、その計算結果は、「01」となる。(当然ながら、この時点で最上位ビットを計算することは、この計算は既に以前になされているため、冗長である。)
*次に、「EQ」と「GR」ビットを隣接した2ビット位置用に組み合わせる。これにより、EQ=11100とGR=00011を得る。
*この時点で、上位4ビット列用の「GR」は「0」である。そのため、上位4ビットは(LZ AND NOT GR)OR(E AND GR)として計算でき、その計算結果は、「0101」となる。(この時点で上位2ビットを計算することは、この計算は既に以前になされているため、冗長である。)
*次に、「EQ」と「GR」ビットを隣接した4ビット位置用に組み合わせる。全体としての数に関する最終的な「EQ」と「GR」値は、「EQ」=0、「GR」=1となる。
*この時点で、8ビット全体の数用の「GR」は「1」である。そのため、上位4ビットは(LZ AND NOT GR)OR(E AND GR)として計算でき、その計算結果は、「01010101」となる。(この時点で上位4ビットを計算することは、この計算は既に以前になされているため、冗長である。)
1ビットのプレフィックス、2ビットのプレフィックス及び4ビットのプレフィックスの結果を8ビット全体の数の結果よりも早く得るこの方法に注意されたい。
先に記載したように、近経路は、キャンセル(減算)が起こる場合(AがBに非常に近い値を取る、AとBの浮動小数点の加算)を扱うのに使用される。この場合、結果として生じる浮動小数点数の仮数を正規化するように左シフトを実行する必要がある。しかしながら、このキャンセルによって、浮動小数点数は、非正規化数になるほどに小さい数となり得る。この場合、実行される左シフトを制限しなければならない。
減算後に、仮数上で前置ゼロ計数(CLZ)を実行することで正規化する。当該目的のために、CLZ前に単一の「0」ビットを追加し、次にCLZ演算を実行する。次に、CLZ結果とより大きい入力数の指数との間で最小値演算を実行した後に、この最小値演算の結果を結果数に適用するシフト量として使用する。
その結果が非正規化数ではない第1の16ビットの浮動小数点数(FP16)の実施例を考えてみる。
*A=0_00111_1100001010、B=1_00111_1000000000とする。
*これらの2つの数を指数と仮数(陰的な1ビットを含む)に分解すると、A_exp=00111、A_mant=11100001010、B_exp=00111、B_mant=1100000000、より大きい指数は、MaxExp=max(A_exp,B_exp)=00111となる。
次に、減算の前に、仮数の上位端と下位端にゼロを付加する。
A_mant:=0_11100001010_0
B_mant:=0_11000000000_0
次に実際の減算を実行する。
Diff=A_mant−B_mant=0001000010100
この結果に前置ゼロ計数を実行すると、Cdiff=CLZ(Diff)=3となる。
次に最小値を計算すると、Lsh=Min(Cdiff,MaxExp)=3となる。次に、仮数値結果を得るように「Lsh」ビットぶん左シフトさせる。その結果は、Res_mant=Diff<<Lsh=1000010100000となる。この結果は正規であるため、次に指数を計算すると、その結果は、Res_exp=MaxExp+1−Cdiff=00100となる。次に、最下位2ビットを切り捨てるようにして仮数結果を得る。
次に最終的な結果を作ると、その結果は、Res=0_00100_0000101000となる(仮数のMSBは陰的であるため、その結果に実際には現れないことに注意されたい)。
次に、結果が非正規化数である第2のFP16の実施例を考えてみる。
*A=0_00010_1100001010、B=1_00010_1100000000とする。
*これらの2つの数を指数と仮数(陰的な1ビットを含む)に分解すると、
A_exp=00010、A_mant=11100001010、B_exp=00010、B_mant=11100000000、より大きい指数は、MaxExp=max(A_exp,B_exp)=00010となる。
次に、減算の前に、仮数の上位端と下位端にゼロを付加する。
A_mant:=0_11100001010_0
B_mant:=0_11100000000_0
次に実際の減算を実行する。
Diff=A_mant−B_mant=0000000010100
この結果に前置ゼロ計数を実行すると、Cdiff=CLZ(Diff)=8となる。
次に最小値を計算すると、Lsh=Min(Cdiff,MaxExp)=2となる。次に、仮数値結果を得るように「Lsh」ビットぶん左シフトさせる。その結果は、Res_mant=Diff<<Lsh=0000001010000となる。この結果は非正規であるため、指数はゼロとなる。また、最下位2ビットを切り捨てるようにして仮数結果を得る。次に最終的な結果を作ると、その結果は、Res=0_00000_0000010100となる(繰り返しになるが、仮数のMSBは最終的な結果に現れず、この非正規のケースでは、このMSBはゼロである)。
両方の実施例は、同程度の大きさの2つの入力を含む。異なる大きさの2つの入力の場合、この大きさは高々1だけ異なってもよい(これ以外の場合、システムは遠経路を使用してきた)。この場合、より小さい数の仮数は、減算の前に、上位端に2つのゼロビットを有し、下位端にゼロビットを有していない傾向がある。一方で、より大きい数の仮数は、上位端に1つのゼロビットを有し、下位端に1つのゼロビットを有している傾向がある。
【0054】
正規結果と非正規結果の両方の場合において、加算後に仮数結果の最下位2ビットを切り捨てていることに注意されたい。等しい大きさの2つの数を減算するケースでは、シフト量が常に少なくとも1であるため、これら最下位2ビットは0であると保証される。異なった大きさの2つの数を減算するケースでは、シフト量1を得ることで、これらのビットにおいて非ゼロのデータを得ることが可能である。この場合、近経路は不正確な結果を生成するため、遠経路から戻る総合的な加算器結果を用いなければならない。
【0055】
図7の右手下方の角部には、2つの入力を減算して、前置ゼロ数すべてに基づいて左シフトした中間仮数値を生成すると、対応する指数が対象の形式で有効に表現可能な値より小さいために無効な数を生成する様子が示されている。この場合、最小値回路46は、適用される左シフトを、前置ゼロ値LZとより大きい入力の指数Eのうちのより小さい方となるように制限する。最小値回路46によって決定されたシフト値結果は、結果シフト回路44の動作と並列して決定されるため、近経路の回路20内の待ち時間を低減できる。
【0056】
図8は、2つの16ビットの浮動小数点数の領域と、浮動小数点加算の間に遠経路の加算器内で計算された(又は、集められた)値との関係を模式的に示す図である。特に、図8では、各指数値の差は、ステージ48にて5ビットのシフト値SHを形成するように使用される。後置ゼロ値(TZ+2)は、ステージ50にて最小の大きさの入力仮数の拡張バージョン(2つゼロビットが付加されたもの)から計算される。高度に仮定された結果経路と低度に仮定された結果経路の両方において、次のような複数のサフィックスを有する仮数値が形成される。すなわち、これらサフィックスは、それぞれ指数値52と後置ゼロ計数値54の否定値との差を有する。一定の値を有する追加パディングビット53が、図8に示すように、加算される仮数に挿入される。追加パディングビット53は、仮数結果の最小精度の単位(ULP)の半分に等しい値を合計に加算するように機能する。2つのサフィックス値52,54を加算する効果は、次のようなものである。すなわち、指数均等化と小数点整列動作の間に有意な範囲から右シフトする仮数MBのビット上で、2つのサフィックス値52,54の加算によるキャリーアウトが実行されたならば、このキャリーアウトは、多数のビットのOR演算で生成されたスティッキービットを表すように生成されるというものである。当技術分野の当業者にはよく知られているように、このキャリーアウト値(スティッキービットの代替物)は、最近接値への丸めモード用の好適な丸めに適用するように、必要に応じて仮数の加算により連鎖するように機能する。
【0057】
図9は、減算に対応している点を除いて図8と同様である。この場合、その減算は、一方のサフィックス56として使用される指数(E−E)と、後置ゼロ値58によって与えられる他方のサフィックスとの差のNOT演算である。パディングビット57は、ULP加算の半分を達成する異なった値を有する。さらに、遠経路の加算器26の動作が加算よりむしろ減算であるように、B経路上のより小さい大きさの入力の仮数は、領域60が示すように遠経路の加算器26に供給される前にNOT演算が実行される。
【0058】
スティッキービットは、図6と関連して議論したように、存在する任意の主加算器とは別個のスティッキービット自体の浮動小数点演算回路で計算してもよい。スティッキービットは、主な合計計算を実行するときに、一部の非ゼロビットが主な合計計算からシフトすることの指標である。シフト量は指数差E−Eから計算される(シフト量は、必ずしもその差に等しいというわけではなく、この差を用いて計算されるものである)。B加算値における後置ゼロの数が計数されるならば、主な合計計算が実行されるときに、シフト量と後置ゼロ計数値との比較によって、任意の非ゼロビットがシフトアウトするか否かが示される(すなわち、スティッキービットを設定すべきか否かを決定できる)。このスティッキービットを設定すべきか否かは、B加算値がシフトする前に決定できる。
【0059】
幾つかの実施形態では、後置ゼロ計数は、両方のオペランドの大小を決定する前にこれらオペランド上で実行又は少なくとも開始してもよい。同様に、2つのシフト量E−E及びE−Eが、両方のオペランドの大小を決定する前に計算又は少なくとも開始してもよい。回路を決定するこのスティッキービットは、先に記載した他の特徴と組み合わせて用いてもよい。
【0060】
本発明の例示的な実施形態を添付の図面を参照して本明細書で詳細に説明してきたが、本発明は、それらの詳細な実施形態に限定されないこと、並びに、添付の特許請求の範囲で定義される本発明の範囲及び精神から逸脱せずに、当業者が様々な変形及び修正を施すことが可能であることを理解すべきである。
【符号の説明】
【0061】
2 集積回路
4 浮動小数点レジスタ
6 データ処理パイプライン
8,16,18,20,24 浮動小数点加算器回路
10 比較回路
12,14,22,30 マルチプレクサ
26 遠経路の加算器
28 近経路の加算器

【特許請求の範囲】
【請求項1】
第1の浮動小数点数を第2の浮動小点数に加算する浮動小数点加算器回路であって、前記第1の浮動小数点数は指数値E及び仮数値Mを有し、前記第2の浮動小数点数は指数値E及び仮数値Mを有し、EはE以上であり、
前記第1の浮動小数点数と前記第2の前記浮動小数点数とが少なくとも1つの所定の遠経路の条件に適合するときに、浮動小数点値の結果を生成するように構成された遠経路の回路を有し、
前記遠経路の回路は、
の最下位端部から始まるMの最下位ビット(E−E)内の後置ゼロ値のランレングスに対応した後置ゼロ値TZを決定するように構成された後置ゼロ計数回路と、
第1の加算値を第2の加算値に加算するように構成された遠経路の加算器であって、前記第1の加算値は、第1のサフィックス値に連結されたMを含み、前記第2の加算値は、最下位ビット(E−E)がないMを含むとともに第2のサフィックス値に連結されている、遠経路の加算器と、
を有し、
前記第1のサフィックス値及び前記第2のサフィックス値をTZ及び(E−E)のうちのそれぞれ1つに基づき形成する、浮動小数点加算器回路。
【請求項2】
前記第1のサフィックス値及び前記第2の前記サフィックス値が、TZ及びNOT((E−E))のうちのそれぞれ1つに基づき形成される、請求項1に記載の浮動小数点加算器回路。
【請求項3】
前記第1のサフィックス値が、第1のサフィックス終端値の前に3つのパディングビットを有し、
前記第2のサフィックス値が、第2のサフィックス終端値の前に1つのパディングビットを有し、
前記第1のサフィックス終端値及び前記第2のサフィックス終端値は、(TZ+2)及びNOT((E−E))のうちのそれぞれ1つを有する、請求項2に記載の浮動小数点加算器回路
【請求項4】
前記3つのパディングビット及び前記1つのパディングビットが、前記遠経路の加算器の出力において最小精度の単位の半分に対応して値が合計される、請求項3に記載の浮動小数点加算器回路。
【請求項5】
前記第1のサフィックス値及び前記第2のサフィックス値が、NOT(TZ)及び(E−E)のうちのそれぞれの1つに基づき形成される、請求項1に記載の浮動小数点加算器回路。
【請求項6】
前記第1のサフィックス値が、第1のサフィックス終端値の前に3つのパディングビットを有し、
前記第2のサフィックス値が、第2のサフィックス終端値の前に1つのパディングビットを有し、
前記第1のサフィックス終端値及び前記第2のサフィックス終端値は、NOT(TZ+2)及び(E−E)のうちのそれぞれ1つを有する、請求項5に記載の浮動小数点加算器回路
【請求項7】
前記3つのパディングビット及び前記1つのパディングビットが、前記遠経路の加算器の出力において最小精度の単位の半分に対応して値が合計される、請求項6に記載の浮動小数点加算器回路。
【請求項8】
前記第2の加算値が、(E−E)のゼロ値のプレフィックスを有する、請求項1に記載の浮動小数点加算器回路。
【請求項9】
前記遠経路の回路が、前記後置ゼロ計数回路と並列して動作するように構成された第2の加算値シフト回路を有し、該第2の加算値シフト回路は、(E−E)ビット位置ぶんMを論理的に右シフトさせる、請求項1に記載の浮動小数点加算器回路。
【請求項10】
前記第2の加算値シフト回路が、前記第2の加算値の最上位(E−E)のビット位置に前置ゼロ値を入れる、請求項9に記載の浮動小数点加算器回路。
【請求項11】
前記遠経路の回路が、前記後置ゼロ計数回路と並列して動作するように構成された指数差計算回路を有し、該指数差計算回路は、(E−E)の値を計算する、請求項1に記載の浮動小数点加算器回路。
【請求項12】
のビット長が2以上(Xは正の整数)であり、
前記第1の加算値のビット長が2(X+1)未満である、請求項1に記載の浮動小数点加算器回路。
【請求項13】
第1の入力加算値及び第2の入力加算値が受け取られ、
第1の処理経路、第2の処理経路、並びに該第1の処理経路及び該第2の処理経路の1つから結果を選択するマルチプレクサを形成するように構成された二重化回路を有し、
前記第1の処理経路は、前記第1の入力加算値が前記第2の入力加算値より大きいものと仮定し、
前記第2の処理経路は、前記第2の入力加算値が前記第1の入力加算値より大きいものと仮定し、
前記マルチプレクサは、前記第1の入力加算値及び第2の前記入力加算値のどちらかがより大きいか前記二重化経路内で少なくとも部分的に加算処理を完了した後に前記第1の処理経路及び前記第2の処理経路の1つを決定したときに、前記結果を選択する、請求項1に記載の浮動小数点加算器回路。
【請求項14】
第1の入力加算値及び第2の入力加算値が受け取られ、
比較回路と、
スイッチング回路と、
を有し、
前記比較回路は、前記第1の入力加算値と前記第2の入力加算値との大小を決定するように、該第1の入力加算値と該第2の入力加算値との比較を実行するように構成されており、
前記スイッチング回路は、前記第1の入力加算値と前記第2の入力加算値の加算の開始前に、前記第1の入力加算値の経路及び前記第2の入力加算値の経路を前記比較に従う経路へ切り換えるように構成されている、請求項1に記載の浮動小数点加算器回路。
【請求項15】
前記遠経路の回路が反転回路を有し、該反転回路は、前記第2の浮動小数点値を前記第1の浮動小数点値から減じるように前記加算器回路が前記第1の加算値と前記第2の加算値を加える前に、M内でビットを反転するように構成されている、請求項1に記載の浮動小数点加算器回路。
【請求項16】
前記第1の浮動小数点数と前記第2の前記浮動小数点数とが少なくとも1つの所定の近経路の条件値に適合するときに、浮動小数点値の結果を生成するように構成された近経路の回路を有し、
前記近経路の回路は、
(M−M)に対応した中間仮数値Mを決定するように構成された近経路の加算器と、
の最上位端部から始まるM内の前置ゼロ値のランレングスに対応した前置ゼロ値LZを決定するように構成された前置ゼロ計数回路と、
LZとEとの低い方の値としてシフト値結果を決定するように構成された最小値回路と、
浮動小数点数の結果の一部を形成する仮数結果Mを生成するように、前記シフト値結果に対応した複数のビット位置ぶんMを左シフトさせるように構成された結果シフト回路と、
を有する、請求項1に記載の浮動小数点加算器回路。
【請求項17】
前記近経路の回路が、仮数シフト回路を有し、該仮数シフト回路は、EがEに等しくないならば、Mを前記近経路の加算器に入力する前にMを(E−E)ビット位置ぶん右シフトさせるように構成されている、請求項16に記載の浮動小数点加算器回路。
【請求項18】
前記最小値回路が、前記シフト値結果の下位ビットを1以上生成する前に前記シフト値結果の上位ビットを1以上生成するように構成されている、請求項16に記載の浮動小数点加算器回路。
【請求項19】
前記結果シフト回路が、前記シフト値結果で得られた複数のビット位置ぶんMを右シフトさせるように構成された対数シフト回路であり、該対数シフト回路は、前記最小値回路が前記1以上の下位ビットを生成する前に前記1以上の上位ビットに基づき任意の左シフトを開始するように構成されている、請求項18に記載の浮動小数点加算器回路。
【請求項20】
前記最小値回路が、LZ及びEに対応した2つの入力P及びQを有するとともに、長さ2の前記シフト値結果のプレフィックス部分Pの順番の決定により前記シフト値結果を決定し、該決定はi=0から始まり、
=(LZAND NOT GR)OR(EAi AND GR)であって、LZは長さ2のLZのプレフィックス部分であり、EAiは長さ2のEのプレフィックス部分であり、
i=0及び降順の各ビット位置kについて、EQ[k]がNOT(LZ[k] XOR E[k])であり、かつ、LZ[k]>E[k]のときにGR[k]=1であり、LZ[k]≦E[k]のときにGR[k]=0であり、
i>0及び降順の各ビット位置kについて、EQ[k]=EQi−1[k] AND EQi−1[k+2(i−1)]であり、かつ、GR[k]=GRi−1[k] OR (Ei−1[k] AND GRi−1[k+2(i−1)]である、請求項16に記載の浮動小数点加算器回路。
【請求項21】
前記近経路の所定値が1である、請求項16に記載の浮動小数点加算器回路。
【請求項22】
前記最小値回路が、前記浮動小数点数の結果が有効な非正規の浮動小数点数であるように前記シフト値結果を制限する、請求項16に記載の浮動小数点加算器回路。
【請求項23】
第1の浮動小数点から第2の浮動小数点を減算する浮動小数点加算器回路であって、前記第1の浮動小数点数は指数値E及び仮数値Mを有し、前記第2の浮動小数点数は指数値E及び仮数値Mを有し、EはE以上であり、
(E−E)が近経路の所定値未満のときに浮動小数点値の結果を生成するように構成された近経路の回路を有し、
前記近経路の回路は、
(M−M)に対応した中間仮数値Mを決定するように構成された近経路の加算器と、
の最上位端部から始まるM内の前置ゼロ値のランレングスに対応した前置ゼロ値LZを決定するように構成された前置ゼロ計数回路と、
LZとEとの低い方の値としてシフト値結果を決定するように構成された最小値回路と、
浮動小数点数の結果の一部を形成する仮数結果Mを生成するように、前記シフト値結果に対応した複数のビット位置ぶんMを左シフトさせるように構成された結果シフト回路と、
を有する、浮動小数点加算器回路。
【請求項24】
前記近経路の回路が、仮数シフト回路を有し、該仮数シフト回路は、EがEに等しくないならば、Mを前記近経路の加算器に入力する前にM上を(E−E)ビット位置ぶん右シフトさせるように構成されている、請求項23に記載の浮動小数点加算器回路。
【請求項25】
前記最小値回路が、前記シフト値結果の下位ビットを1以上生成する前に前記結果シフト値結果の上位ビットを1以上生成するように構成されている、請求項23に記載の浮動小数点加算器回路。
【請求項26】
前記結果シフト回路が、前記シフト値結果で得られた複数のビット位置ぶんMを右シフトさせるように構成された対数シフト回路であり、該対数シフト回路は、前記最小値回路が前記1以上の下位ビットを生成する前に前記1以上の上位ビットに基づき任意の左シフトを開始するように構成されている、請求項25に記載の浮動小数点加算器回路。
【請求項27】
前記最小値回路が、LZ及びEに対応した2つの入力P及びQを有するとともに、長さ2の前記シフト値結果のプレフィックス部分Pの順番の決定により前記シフト値結果を決定し、i=0から始まり、
=(LZAND NOT GR)OR(EAi AND GR)であって、LZは長さ2のLZのプレフィックス部分であり、EAiは長さ2のEのプレフィックス部分であり、
i=0及び降順の各ビット位置kについて、EQ[k]がNOT(LZ[k] XOR E[k])であり、かつ、LZ[k]>E[k]のときにGR[k]=1であり、LZ[k]≦E[k]のときにGR[k]=0であり、
i>0及び降順の各ビット位置kについて、EQ[k]=EQi−1[k] AND EQi−1[k+2(i−1)]であり、かつ、GR[k]=GRi−1[k] OR (Ei−1[k] AND GRi−1[k+2(i−1)]である、請求項23に記載の浮動小数点加算器回路。
【請求項28】
前記近経路の所定値が1である、請求項23に記載の浮動小数点加算器回路。
【請求項29】
前記最小値回路が、前記浮動小数点数の結果が有効な非正規の浮動小数点数であるように前記シフト値結果を制限する、請求項23に記載の浮動小数点加算器回路。
【請求項30】
第1の浮動小数点数を第2の浮動小数点数に加算する浮動小数点加算器回路であって、前記第1の浮動小数点数は指数値E及び仮数値Mを有し、前記第2の浮動小数点数は指数値E及び仮数値Mを有し、EはE以上であり、
前記第1の浮動小数点数と前記第2の前記浮動小数点数とが少なくとも1つの所定の遠経路の条件に適合するときに、浮動小数点値の結果を生成するように構成された遠経路手段を有し、
前記遠経路手段は、
の最下位端部から始まるMの最下位ビット(E−E)内の後置ゼロ値のランレングスに対応した後置ゼロ値TZを決定する後置ゼロ計数手段と、
第1の加算値を第2の加算値に加算する遠経路加算手段であって、前記第1の加算値は、第1のサフィックス値に連結されたMを含み、前記第2の加算値は、最下位ビット(E−E)がないMを含むとともに第2のサフィックス値に連結されている、遠経路加算手段と、
を有し、
前記第1のサフィックス値及び前記第2のサフィックス値をTZ及び(E−E)のうちのそれぞれ1つに基づき形成する、浮動小数点加算器回路。
【請求項31】
第1の浮動小数点から第2の浮動小数点を減算する浮動小数点加算器回路であって、前記第1の浮動小数点数は指数値E及び仮数値Mを有し、前記第2の浮動小数点数は指数値E及び仮数値Mを有し、EはE以上であり、
前記第1の浮動小数点数と前記第2の浮動小数点数とが少なくとも1つの所定の近経路の条件に適合するときに、浮動小数点値の結果を生成するように構成された近経路手段を有し、
前記近経路手段は、
(M−M)に対応した中間仮数値Mを決定する近経路加算手段と、
の最上位端部から始まるM内の前置ゼロ値のランレングスに対応した前置ゼロ値LZを決定する前置ゼロ計数手段と、
LZとEとの低い方の値としてシフト値結果を決定する最小値手段と、
浮動小数点数の結果の一部を形成する仮数結果Mを生成するように、前記シフト値結果に対応した複数のビット位置ぶんMをシフトさせる結果シフト手段と、
を有する、浮動小数点加算器回路。
【請求項32】
第1の浮動小数点数を第2の浮動小数点数に加算する方法であって、
前記第1の浮動小数点数は指数値E及び仮数値Mを有し、前記第2の浮動小数点数は指数値E及び仮数値Mを有し、EはE以上であり、
前記第1の浮動小数点数と前記第2の前記浮動小数点数とが少なくとも1つの所定の遠経路の条件に適合するときに、
の最下位端部から始まるMの最下位ビット(E−E)内の後置ゼロ値のランレングスに対応した後置ゼロ値TZを決定するステップと、
第1の加算値を第2の加算値に加算するステップであって、前記第1の加算値は、第1のサフィックス値に連結されたMを含み、前記第2の加算値は、最下位ビット(E−E)がないMを含むとともに第2のサフィックス値に連結されている、ステップと、
を有し、
前記第1のサフィックス値及び前記第2のサフィックス値をTZ及び(E−E)のうちのそれぞれ1つに基づき形成する、方法。
【請求項33】
第1の浮動小数点から第2の浮動小数点を減算する方法であって、
前記第1の浮動小数点数は指数値E及び仮数値Mを有し、前記第2の浮動小数点数は指数値E及び仮数値Mを有し、EはE以上であり、
前記第1の浮動小数点数と前記第2の前記浮動小数点数とが少なくとも1つの所定の近経路の条件値に適合するときに、
(M−M)に対応した中間仮数値Mを決定するステップと、
の最上位端部から始まるM内の前置ゼロ値のランレングスに対応した前置ゼロ値LZを決定するステップと、
LZとEとの低い方の値としてシフト値結果を決定するステップと、
浮動小数点数の結果の一部を形成する仮数結果Mを生成するように、前記シフト値結果に対応した複数のビット位置ぶんMをシフトさせるステップと、
を有する、方法。
【請求項34】
第1の浮動小数点数を第2の浮動小数点数に加算するときに用いるスティッキービットを決定する浮動小数点演算回路であって、前記第1の浮動小数点数は指数値E及び仮数値Mを有し、前記第2の浮動小数点数は指数値E及び仮数値Mを有し、EはEより大きく、
(E−E)に基づきシフト量を決定するように構成されたシフト量決定回路であって、前記シフト量は、Mに加算するMのシフトバージョンを形成するようにMに適用する右シフトに対応している、シフト量決定回路と、
の最下位ビット端部から始まるMの後置ゼロ値のランレングスに対応した後置ゼロ値を決定するように構成された後置ゼロ計数回路と、
に加算するMの前記シフトバージョンから任意の非ゼロビットがシフトアウトするかを示す前記スティッキービットの値を決定するように、前記シフト量を前記後置ゼロ値と比較するように構成されたスティッキービット値決定回路と、
を有する、浮動小数点演算回路。
【請求項35】
がEより大きいことを決定する指数比較回路を有する、請求項34に記載の浮動小数点演算回路。
【請求項36】
前記シフト量決定回路が、EがEより大きいことを前記指数比較回路が決定する前に(E−E)に基づき更なるシフト量を決定するように構成されている、請求項35に記載の浮動小数点演算回路。
【請求項37】
前記後置ゼロ計数回路が、Mの最下位ビット端部から始まるMの後置ゼロ値のランレングスに対応した更なる後置ゼロ値を決定するように構成されている、請求項35に記載の浮動小数点演算回路。
【請求項38】
第1の浮動小数点数を第2の浮動小数点数に加算するときに用いるスティッキービットを決定する浮動小数点演算回路であって、前記第1の浮動小数点数は指数値E及び仮数値Mを有し、前記第2の浮動小数点数は指数値E及び仮数値Mを有し、EはEより大きく、
(E−E)に基づきシフト量を決定するシフト量決定手段であって、前記シフト量は、Mに加算するMのシフトバージョンを形成するようにMに適用する右シフトに対応している、シフト量決定手段と、
の最下位ビット端部から始まるMの後置ゼロ値のランレングスに対応した後置ゼロ値を決定する後置ゼロ計数手段と、
に加算するMの前記シフトバージョンから任意の非ゼロビットがシフトアウトするかを示す前記スティッキービットの値を決定するように、前記シフト量を前記後置ゼロ値と比較するスティッキービット値決定手段と、
を有する、浮動小数点演算回路。
【請求項39】
第1の浮動小数点数を第2の浮動小数点数に加算するときに用いるスティッキービットを決定する方法であって、前記第1の浮動小数点数は指数値E及び仮数値Mを有し、前記第2の浮動小数点数は指数値E及び仮数値Mを有し、EはEより大きく、
(E−E)に基づきシフト量を決定するステップであって、前記シフト量は、Mに加算するMのシフトバージョンを形成するようにMに適用する右シフトに対応している、ステップと、
の最下位ビット端部から始まるMの後置ゼロ値のランレングスに対応した後置ゼロ値を決定するステップと、
に加算するMの前記シフトバージョンから任意の非ゼロビットがシフトアウトするかを示す前記スティッキービットの値を決定するように、前記シフト量を前記後置ゼロ値と比較するステップと、
を有する、方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate


【公開番号】特開2013−12203(P2013−12203A)
【公開日】平成25年1月17日(2013.1.17)
【国際特許分類】
【外国語出願】
【出願番号】特願2012−145354(P2012−145354)
【出願日】平成24年6月28日(2012.6.28)
【出願人】(504394342)アーム・リミテッド (134)