(57)【要約】【課題】結果が非正規である状況で結果を正確に丸めながら、浮動小数点数を乗算するための特に効率的な機構を提供すること。【解決手段】それぞれが仮数と指数とを含む第１及び第２の正規化された浮動小数点オペランドを乗算し、結果を生成するためのデータ処理装置及び方法が提供される。指数決定回路が、結果の正規化バージョンに対する結果指数を計算するのに用いられ、次いで、丸め値生成回路が、丸め定数を第１の方向に結果指数に依存するシフト量だけシフトさせることによって、丸め値を生成する。部分積生成回路が、第１及び第２の正規化された浮動小数点オペランドの仮数を乗算して第１及び第２の部分積を生成し、次に、正規化された結果仮数を生成するために、第１及び第２の部分積が丸め値と加算される。その後で、丸められた結果仮数を生成するために、正規化された結果仮数が、第１の方向とは逆の第２の方向にシフト量だけシフトされる。【選択図】図２
2015170359.tif 000002
【特許請求の範囲】
【請求項１】
それぞれが仮数と指数とを含む第１及び第２の正規化された浮動小数点オペランドを乗算し、結果を生成するためのデータ処理装置であって、
前記結果の正規化バージョンに対する結果指数を計算するように構成された指数決定回路と、
丸め定数を第１の方向に前記結果指数に依存するシフト量だけシフトさせることによって、丸め値を生成するように構成された丸め値生成回路と、
前記第１及び第２の正規化された浮動小数点オペランドの前記仮数を乗算して、第１及び第２の部分積を生成するように構成された部分積生成回路と、
正規化された結果仮数を生成するために、前記第１及び第２の部分積と前記丸め値とを加算するように構成された加算器回路と、
丸められた結果仮数を生成するために、前記正規化された結果仮数を前記第１の方向とは逆の第２の方向に前記シフト量だけシフトさせるように構成されたシフト回路と、
を備えているデータ処理装置。
【請求項２】
マスク定数を前記第１の方向に前記シフト量だけシフトさせることによって、マスク値を生成するように構成されたマスク生成回路と、
前記マスク値を前記正規化された結果仮数に適用して、前記正規化された結果仮数におけるガード及びスティッキー・ビットを識別するように構成されたガード及びスティッキー・ビット検出回路と、
前記ガード及びスティッキー・ビットに応じて、前記丸められた結果仮数を調節するように構成された結果調節回路と、
を更に備えている、請求項１に記載のデータ処理装置。
【請求項３】
前記結果指数が正規の範囲にある場合には、前記シフト量はゼロ・シフトを識別するように設定されている、請求項１又は２に記載のデータ処理装置。
【請求項４】
前記第１及び第２の正規化された浮動小数点オペランドを形成するのに用いられる第１及び第２の入力浮動小数点オペランドを受け取るための入力インターフェースを更に備え、
前記第１及び第２の入力浮動小数点オペランドの一方が非正規オペランドであることに応答して、前記非正規オペランドの前記仮数を前記第１の方向に正規化量だけシフトさせることによって仮数を形成し、前記正規化量に応じて前記非正規オペランドの前記指数を調節することによって指数を形成するために、対応する正規化された浮動小数点オペランドを形成するように構成された正規化回路を備えている、請求項１から３までのいずれか一項に記載のデータ処理装置。
【請求項５】
前記結果指数が非正規である場合には、前記シフト量が前記結果指数と最小正規指数値との差に依存するように、前記シフト量を生成するように構成されたシフト量生成回路を更に備えている、請求項１から４までのいずれか一項に記載のデータ処理装置。
【請求項６】
前記シフト量生成回路は、所定の最大シフト量を超えないように前記シフト量を制限するように構成されている、請求項５に記載のデータ処理装置。
【請求項７】
前記丸め定数は前記データ処理装置によって用いられる丸めモードに依存する、請求項１から６までのいずれか一項に記載のデータ処理装置。
【請求項８】
前記丸め値生成回路は、前記丸め定数を前記第１の方向に前記シフト量だけシフトさせるとき、前記丸め定数がそこからシフトされる最下位ビット位置を所定のビット値に設定し、前記最下位ビット位置を前記シフトされた丸め定数と共に前記丸め値に含むように構成されている、請求項１から７までのいずれか一項に記載のデータ処理装置。
【請求項９】
前記所定のビット値は、前記データ処理装置によって用いられる丸めモードに依存する、請求項８に記載のデータ処理装置。
【請求項１０】
前記マスク定数の各ビットは所定のビット値に設定されており、前記マスク生成回路は、前記マスク定数を前記第１の方向に前記シフト量だけシフトさせるとき、前記マスク定数がそこからシフトされる最下位ビット位置を前記所定のビット値に設定し、前記最下位ビット位置を前記シフトされたマスク定数と共に前記マスク値に含むように構成されている、請求項２に従属するときの請求項１から９までのいずれか一項に記載のデータ処理装置。
【請求項１１】
それぞれが仮数と指数とを含む第１及び第２の正規化された浮動小数点オペランドを乗算し、結果を生成するデータ処理装置を動作させる方法であって、
前記結果の正規化バージョンに対する結果指数を計算するステップと、
丸め定数を第１の方向に前記結果指数に依存するシフト量だけシフトさせることによって、丸め値を生成するステップと、
前記第１及び第２の正規化された浮動小数点オペランドの前記仮数を乗算して、第１及び第２の部分積を生成するステップと、
正規化された結果仮数を生成するために、前記第１及び第２の部分積と前記丸め値とを加算するステップと、
丸められた結果仮数を生成するために、前記正規化された結果仮数を前記第１の方向とは逆の第２の方向に前記シフト量だけシフトさせるステップと、
を含む方法。
【請求項１２】
それぞれが仮数と指数とを含む第１及び第２の正規化された浮動小数点オペランドを乗算し、結果を生成するためのデータ処理装置であって、
前記結果の正規化バージョンに対する結果指数を計算するための指数決定手段と、
丸め定数を第１の方向に前記結果指数に依存するシフト量だけシフトさせることによって、丸め値を生成するための丸め値生成手段と、
前記第１及び第２の正規化された浮動小数点オペランドの前記仮数を乗算して、第１及び第２の部分積を生成するための部分積生成手段と、
正規化された結果仮数を生成するために、前記第１及び第２の部分積と前記丸め値とを加算するための加算器手段と、
丸められた結果仮数を生成するために、前記正規化された結果仮数を前記第１の方向とは逆の第２の方向に前記シフト量だけシフトさせるためのシフト手段と、
を備えているデータ処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、浮動小数点オペランドを乗算するためのデータ処理装置及び方法に関する。
【背景技術】
【０００２】
浮動小数点数を操作する能力を有するデータ処理システムを提供することは、既知である。浮動小数点の乗算を実行するためのハードウェア機構は、乗数と被乗数とを用いて多数の部分積（ｐａｒｔｉａｌ  ｐｒｏｄｕｃｔｓ）を生成するのが一般的である。そして、これらの部分積を２つの部分積に変えるためには、様々な形式の桁上げ保存加算器が用いられる。次に、これらの最終的な２つの部分積が加算されてから、最終的な積の結果を生じさせるために丸められる。
【０００３】
上述に伴う問題は、どのようにして非正規（ｓｕｂｎｏｒｍａｌ）な結果を扱うのか、ということである。非正規な結果とは、例えば０．００１１０１のような、指数（ｅｘｐｏｎｅｎｔ）値が最小の許容される値を有し、仮数（ｓｉｇｎｉｆｉｃａｎｄ）（仮数（ｍａｎｔｉｓｓａ）とも称される）が１よりも小さな場合である。非正規な数の性質は、この技術分野の当業者には広く知られている。非正規な数を扱う１つの方法は、それらを例外として処理し、ソフトウェアにおいてその処理を扱うことである。これは、低性能の解決策である。非正規な数をハードウェアにおいて扱う場合には、２つの部分積からの加算器の出力が、丸めるために適切に整列されている蓋然性が低い、という問題が存在する。このために、加算器の出力をシフトしてから、別の加算器を用いて丸めることが必要とされる。丸めるためのシフトと別の加算器は、望ましくない追加的なハードウェアと遅延を導入する。
【０００４】
本出願の出願人が有し、その内容の全体が参照により本明細書に組み入れられる米国特許第８，４６３，８３４号は、浮動小数点オペランドを乗算するための改善された機構を紹介しているが、この米国特許に記載されている機構は、非正規な結果を扱うことができると共に、加算及び丸めの前に、左又は右シフトをするための特別な乗算サイクルを用いている。そのような手法により、丸め定数が、固定された位置に常に注入されることが可能になり、それによって、丸め処理を著しく単純化することができた。しかし、この手法は、非正規の結果において丸めを扱うという問題をたしかに単純化するが、部分積のために余分なシフト段を用いることが必要とされ、それによって、性能に対して悪影響を及ぼす可能性がある。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】米国特許第８，４６３，８３４号
【特許文献２】米国特許出願公開第２００６／０１１７０８０号
【特許文献３】米国特許出願公開第２００６／０１３６５４３号
【発明の概要】
【発明が解決しようとする課題】
【０００６】
従って、非正規な結果のための正しい丸めを依然として可能にしながら、浮動小数点オペランドを乗算するときに改善された性能を提供するような機構を提供することが望まれる。
【課題を解決するための手段】
【０００７】
第１の態様から見ると、本発明は、それぞれが仮数と指数とを含む第１及び第２の正規化された浮動小数点オペランドを乗算し、結果を生成するためのデータ処理装置を提供し、このデータ処理装置は、結果の正規化バージョンに対する結果指数を計算するように構成された指数決定回路と、丸め定数を第１の方向に結果指数に依存するシフト量だけシフトさせることによって、丸め値を生成するように構成された丸め値生成回路と、第１及び第２の正規化された浮動小数点オペランドの仮数を乗算して、第１及び第２の部分積を生成するように構成された部分積生成回路と、正規化された結果仮数を生成するために、第１及び第２の部分積と丸め値とを加算するように構成された加算器回路と、丸められた結果仮数を生成するために、正規化された結果仮数を前記第１の方向とは逆の第２の方向に前記シフト量だけシフトさせるように構成されたシフト回路と、を備えている。
【０００８】
本発明によれば、結果指数が、結果の正規化バージョンに対して計算され（すなわち、結果の仮数が１．Ｆという形式である場合、ただし、Ｆは結果の小数部分）、次に、丸め値が、丸め定数を第１の方向に結果指数に依存するシフト量だけシフトさせることによって生成される。第１の方向は、最上位ビットに向かう方向であり、第１の方向へのシフトは、典型的には、左シフトを実行することによって実施される。乗算プロセスの間に２つの部分積が生成された後で、次に、正規化された結果仮数を生成するために、第１及び第２の部分積を加算するプロセスの間に、丸め値が加算される。その後で、正規化された結果仮数が、第１の方向とは逆の方向へ（典型的には、右シフトを実行することによって）シフトされ、適用されるシフトの量は、やはり、シフト量によって決定され、結果として生じる仮数は、そのときに丸められた結果仮数である（丸めモードに応じて、ガード及びスティッキー・ビットに基づき、必要とされ得るいずれかの調節の対象となる）。
【０００９】
結果の正規化バージョンに対して結果指数に応じてシフト量を決定し、次に、（丸め定数がそのときに正しい丸め位置に存在するように）丸め値を生成するため、そのシフト量を丸め定数に適用することで、これにより、正規化された結果仮数を生成するときに第１及び第２の部分積に加算するための正確な丸めビットを決定することが可能になる。この機構は、このように、非正規な結果に対する丸め位置の可変性を適合させることが可能であり、この技術によって、正確な結果が、正規な浮動小数点及び非正規な浮動小数点の結果の両方について非常に効率的な態様で取得されることが可能になる。
【００１０】
上述の機構によって生成される結果仮数は、ガード及びスティッキー・ビットに応じて、調節がなされることが必要になる場合があり得る。ある実施例では、本発明は、正規化された結果仮数においてガード及びスティッキー・ビットを正しく捕捉するための機構を提供し、それにより、それらを用いて必要とされるどのような調節でも決定することが可能になる。特に、ある実施例では、データ処理装置は、更に、マスク定数を第１の方向にシフト量だけシフトさせることによって、マスク値を生成するように構成されたマスク生成回路と、マスク値を正規化された結果仮数に適用して、正規化された結果仮数におけるガード及びスティッキー・ビットを識別するように構成されたガード及びスティッキー・ビット検出回路と、を含む。次に、結果調節回路は、ガード及びスティッキー・ビットに応じて、丸められた結果仮数を調節するように構成されている。よって、丸め値の場合のように、マスク値は、定数（この場合はマスク定数）を第１の方向にシフト量だけシフトさせることによって、決定される（先に論じられたように、シフト量は、結果の正規化バージョンに対する結果指数に依存する）。結果的に、マスク値は、結果が非正規である状況における指数のサイズを考慮して、ガード及びスティッキー・ビットを捕捉するように正確に調整される。上述の手法は、正規化された結果仮数から正確なガード及びスティッキー・ビットを抽出するための特に効率的な機構を提供する。
【００１１】
ある実施例では、シフト量は、結果指数が正規の範囲にある場合にゼロ・シフトを識別するように設定されている。結果的に、正規化された結果仮数を生成するときには、丸め定数のシフトされていないバージョンが加算器回路に入力され、丸められた結果仮数を生成するときには、正規化された結果仮数のそれ以降のシフトは必要とされない。しかし、結果が非正規であるときは常に、シフト量は非ゼロであり、適用されるシフトの程度は、非正規な指数のサイズに依存することになり、それによって、丸めのための正確な入力を、非正規な結果に対する丸め位置の可変性に適合できる効率的な態様で、捕捉することが可能になる。
【００１２】
ある実施例では、データ処理装置は、更に、前記第１及び第２の正規化された浮動小数点オペランドを形成するのに用いられる第１及び第２の入力浮動小数点オペランドを受け取るための入力インターフェースを備えており、このデータ処理装置は、前記第１及び第２の入力浮動小数点オペランドの一方が非正規オペランドであることに応答して、非正規オペランドの仮数を前記第１の方向に正規化量だけシフトさせることによって仮数を形成し、前記正規化量に応じて非正規オペランドの指数を調節することによって指数を形成するために、対応する正規化された浮動小数点オペランドを形成するように構成された正規化回路を備えている。受け取られる第１及び第２の入力浮動小数点オペランドは共に正規な浮動小数点オペランドであり得るが、入力浮動小数点オペランドの指数のサイズに応じて結果が非正規である可能性も依然として存在しており、非正規な結果を表現するための利用可能な範囲内にあり得る非正規な結果を生じさせることができる別のシナリオとしては、入力浮動小数点オペランドの一方が非正規な状況が存在する。そのような場合には、上述した正規化回路が、乗算演算が実行される前に、その浮動小数点オペランドの正規化バージョンを作製することになる。すると、これにより、装置によって用いられるシフト量を正確に識別するために必要とされているように、結果の正規化バージョンに対する結果指数を指数決定回路が計算することができることも保証される。
【００１３】
ある実施例では、この装置は、更に、結果指数が非正規である場合には、シフト量が結果指数と最小正規指数値との差に依存するように、前記シフト量を生成するように構成されたシフト量生成回路を備えている。特に、シフト量は、結果指数と最小正規指数値との差が大きくなればなるほど、増加する。
【００１４】
ある実施例では、シフト量生成回路は、所定の最大シフト量を超えないようにシフト量を制限するように構成されている。浮動小数点数のための記憶フォーマットは、表現可能な最小非正規値が存在しており、浮動小数点値がそれをすこしでも下回る場合には、それはゼロ値として扱われなくてはならない、というものである。所定の最大シフト量は、ある実施例では、記憶フォーマットに従って表現可能なその最小非正規浮動小数点オペランドを考慮して決定され、この装置において提供されるシフト回路を、記憶フォーマットに従って表現可能な非正規値に関して実際に提供され得るシフトの最大量を考慮して適切なサイズに確実に制約することできる。
【００１５】
ある実施例では、丸め定数は、データ処理装置によって用いられる丸めモードに依存する。例えば、最近接偶数への丸めモードでは、丸め定数は、上方への丸めモードにおいて用いられる丸め定数とは異なることになる。
【００１６】
ある実施例では、丸め値生成回路は、丸め定数を前記第１の方向に前記シフト量だけシフトさせるとき、丸め定数がそこからシフトされる最下位ビット位置を所定のビット値に設定し、それらの最下位ビット位置をシフトされた丸め定数と共に丸め値に含むように構成されている。更に、ある実施例では、所定のビット値は、データ処理装置によって用いられる丸めモードに依存している。
【００１７】
ある実施例では、マスク定数の各ビットは所定のビット値に設定されており、マスク生成回路は、マスク定数を前記第１の方向に前記シフト量だけシフトさせるとき、マスク定数がそこからシフトされる最下位ビット位置を前記所定のビット値に設定し、それらの最下位ビット位置をシフトされたマスク定数と共にマスク値に含むように構成されている。
【００１８】
第２の態様から見ると、本発明は、それぞれが仮数と指数とを含む第１及び第２の正規化された浮動小数点オペランドを乗算し、結果を生成するデータ処理装置を動作させる方法を提供しており、この方法は、結果の正規化バージョンに対する結果指数を計算するステップと、丸め定数を第１の方向に結果指数に依存するシフト量だけシフトさせることによって、丸め値を生成するステップと、第１及び第２の正規化された浮動小数点オペランドの仮数を乗算して、第１及び第２の部分積を生成するステップと、正規化された結果仮数を生成するために、第１及び第２の部分積と丸め値とを加算するステップと、丸められた結果仮数を生成するために、正規化された結果仮数を前記第１の方向とは逆の第２の方向に前記シフト量だけシフトさせるステップと、を含む。
【００１９】
第３の態様から見ると、本発明は、それぞれが仮数と指数とを含む第１及び第２の正規化された浮動小数点オペランドを乗算し、結果を生成するためのデータ処理装置を提供し、このデータ処理装置は、結果の正規化バージョンに対する結果指数を計算するための指数決定手段と、丸め定数を第１の方向に結果指数に依存するシフト量だけシフトさせることによって、丸め値を生成するための丸め値生成手段と、第１及び第２の正規化された浮動小数点オペランドの仮数を乗算して、第１及び第２の部分積を生成するための部分積生成手段と、正規化された結果仮数を生成するために、第１及び第２の部分積と丸め値とを加算するための加算器手段と、丸められた結果仮数を生成するために、正規化された結果仮数を前記第１の方向とは逆の第２の方向に前記シフト量だけシフトさせるためのシフト手段と、を備えている。
【００２０】
本発明は、次の添付の図面に示されているその実施例を、単なる実例として参照しながら、更に説明される。
【図面の簡単な説明】
【００２１】
【図１Ａ】単精度フォーマットに従う場合に、浮動小数点数がどのようにしてレジスタ又はメモリに記憶されるのかを示す図である。
【図１Ｂ】二倍精度フォーマットに従う場合に、浮動小数点数がどのようにしてレジスタ又はメモリに記憶されるのかを示す図である。
【図２】ある実施例によるデータ処理装置において提供されるコンポーネントのブロック図であり、特に、その実施例による仮数処理経路を示している。
【図３】ある実施例による、計算された指数を決定するのに用いられる回路の図である。
【図４】ある実施例による、シフト量を計算するのに提供される回路の図である。
【図５Ａ】ある実施例による、複数の異なる丸めモードで用いられる丸め定数の図である。
【図５Ｂ】ある実施例による、丸め値生成回路の図である。
【図６】ある実施例によるマスク生成回路の図である。
【図７Ａ】ある実施例による、ガード・ビット・マスクとスティッキー・ビット・マスクとの生成の図である。
【図７Ｂ】ある実施例による、ガード・ビットを生成するのに用いられるコンポーネントの図である。
【図７Ｃ】ある実施例による、スティッキー・ビットを生成するのに用いられるコンポーネントの図である。
【図８】結果指数が非正規である状況における図２の回路の動作を示す流れ図である。
【発明を実施するための形態】
【００２２】
浮動小数点表現では、数は、符号（ｓｉｇｎ）ビットと、指数（ｅｘｐｏｎｅｎｔ）ビットＥと、小数（ｆｒａｃｔｉｏｎ）ビットＦとを用いて表される。仮数（ｓｉｇｎｉｆｉｃａｎｄ）は、指数Ｅの値に応じて、数１．Ｆ又は０．Ｆである。すなわち、Ｅがゼロの場合には０．Ｆであり、そうでない場合には１．Ｆである。仮数の整数部分（０．又は１．）は、ＩＥＥＥ−７５４標準では明示的に記憶されないが、乗算のためには必要とされる。符号ビットは、浮動小数点数が正であるか負であるかを表し、仮数は、浮動小数点数の有効な桁を表し、指数は、仮数に対する基数点の位置（バイナリ点としても知られている）を表す。指数の値を変動させることにより、基数点は、仮数の範囲内で、左右に「浮動」することができる。これは、所定のビット数に対し、浮動小数点表現は、（基数点が仮数の範囲内で固定された位置を有している）固定小数点表現よりも広い範囲の数を表すことができることを意味する。しかし、一部のビットが指数を記憶するのに用いられるため、精度の低下を代償にして、より広い範囲が達成されている。時には、浮動小数点の算術演算は、仮数のために用いられるビット数よりも多い有効ビットを有する結果を生成する。これが発生する場合には、結果は、利用可能な有効ビット数を用いて表すことができる値に丸められる。
【００２３】
図１Ａ及び図１Ｂは、浮動小数点数がどのようにレジスタ又はメモリに記憶されるのかを示している。図１Ａに示されている単精度表現の場合には、浮動小数点数１０を記憶するのに、３２ビットが用いられる。１ビットが符号ビットＳ２０として用いられ、８ビットが指数Ｅ３０を記憶するのに用いられ、２３ビットが仮数の小数部分Ｆ４０を記憶するのに用いられる。正規の値の場合には、小数部分Ｆの２３ビットは、１の値を有する含意ビット（ｉｍｐｌｉｅｄ  ｂｉｔ）と共に、２４ビットの仮数１．Ｆを構成する。基数点は、当初は、含意ビットと仮数の記憶されている２３ビットとの間に配置されていると仮定される。表現されている浮動小数点数において、Ｅ−１２７が負である場合には基数点がその当初の位置から左へシフトされる（例えば、Ｅ−１２７＝−２である場合には、１．０１の仮数は０．０１０１を表す）、又は、Ｅ−１２７が正である場合にはその当初の位置から右へシフトされる（例えば、Ｅ−１２７＝２である場合には、１．０１の仮数は１０１を表す）ように、記憶されている指数Ｅは、固定値１２７だけバイアスが加えられている。このバイアスは、２つの浮動小数点の値の指数を比較することを、より単純にするのに用いられる。というのは、基数点のその時点での負及び正の両方のシフトが、記憶されている指数Ｅの正の値によって表すことができるからである。図１に示されているように、記憶されている表現Ｓ［３１］、Ｅ［３０：２３］、Ｆ［２２：０］は、値（−１）Ｓ＊１．Ｆ［２２：０］＊２（Ｅ−１２７）を有する数を表している。この形式における単精度の浮動小数点数は、「正規（ｎｏｒｍａｌ）」と見なされる。計算された浮動小数点値が正規ではない（例えば、仮数の最も左側の２ビットの間以外の位置に基数点を有するように生成された）場合には、その数が（−１）Ｓ＊１．Ｆ［２２：０］＊２（Ｅ−１２７）という形式になるまで、仮数を左又は右にシフトさせ指数を調節することによって、正規化される。
【００２４】
また、二倍精度フォーマット５０は、図１Ｂに示されるように提供されるが、この場合には、記憶されている６４ビットを用いて、仮数と指数とが表される。記憶されている６４ビットは、１ビットの符号ビット６０と、１１ビットの指数７０と、５３ビットの仮数１．Ｆの中の５２ビットの小数部分Ｆ８０とを含む。二倍精度フォーマットでは、指数Ｅは、１０２３の値だけ、バイアスが加えられている。よって、二倍精度フォーマットでは、記憶されているＳ［６３］、Ｅ［６２：５２］、Ｆ［５１：０］は、浮動小数点の値（−１）Ｓ＊１．Ｆ［５１：０］＊２Ｅ−１０２３を表している。
【００２５】
正規の浮動小数点の値と同様に、浮動小数点表現もまた、他の量を表すことが可能である。ある値に対する指数Ｅの全ビットが１に設定されている場合には、これは、無限大及び「非数（ｎｏｔ  ａ  ｎｕｍｂｅｒ）」（ＮａＮ）の値などの特別な数を表すが、それらは、負数の平方根、除算０／０、無限大を用いた計算結果、及びその定義された範囲の外にある値に適用された関数の結果（例えば、−１よりも小さな又は＋１よりも大きな数の逆正弦又は逆余弦）など、実数（ｒｅａｌ  ｎｕｍｂｅｒ）を用いては表すことが不可能な結果である。指数の全ビットが１に等しいときには、無限大は、すべてがゼロに等しい仮数ビットＦによって表されるのが典型的であり、他方で、それ以外の非数の値は、非ゼロである仮数によって表される。無限大及び非数の値を扱う技術は広く知られており、いずれかの従来技術を用いることが可能である。従って、これらの数の扱いについては、本明細書ではこれ以上論じられない。
【００２６】
指数Ｅの全ビットがゼロに等しいときには、これは、ゼロ又は非正規な数を表す。その仮数ビットＦがすべてゼロである場合には、浮動小数点値はゼロに等しい。仮数のいずれかのビットが１に等しい場合には、その数は、非正規な数である。非正規な数は、正規な数の場合の１とは異なり、ゼロに等しい仮数の含意ビットを有する。これにより、正規な数を用いて表される最小の数よりも小さな値が許容される。例えば、単精度の場合には、正規な数を用いて表現可能な最小値は１．０＊２−１２６であるが、他方で、非正規な数が用いられる場合には、最小の表現可能な値は２−１４９（０．００００００００００００００００００００００１＊２−１２６）であり、その理由は、先行する１が、２４ビットの小数Ｆの最下位ビットに存在するからである。
【００２７】
浮動小数点オペランドの乗算を実行するときには、この乗算は、仮数を乗算し指数を加算することによって、達成される。指数の和ｅが最小の正規な指数ｎよりも小さな場合には、仮数の積は、（ｎ−ｅ）ビットだけ右シフトされなければならない。二倍精度（ＤＰ）の浮動小数点の場合には、ｎは−１０２２である。２つの正規な浮動小数点数２−５００と２−５４０とを乗算するという実例を考察する場合には、これは、非正規な積２−１０４０を生じさせることになり、従って、その実例では、仮数の積は、−１０２２−（−１０４０）＝１８ビットだけ右シフトされなければならないであろう。
【００２８】
この右シフトは、インジェクション丸めを実行しようとするときには、問題となる。
二倍精度の仮数は５３ビットを有するから、インジェクション丸めは、正規化された１０６ビットの積の５３番目のビットにおいて生じる。この積が１８ビットだけ右シフトされる場合には、丸めは、その代わりに、３５番目のビットにおいて生じる必要がある。
【００２９】
インジェクション丸めは、米国特許出願公開第２００６／０１１７０８０号及び第２００６／０１３６５４３号に記載がある。これら両方の先行出願コンテンツは、参照により、その全体が本明細書に組み入れられる。
【００３０】
以下で説明される実施例の技術は、正しい（固定されていない）位置においてインジェクション丸めを実行し、また、不正確なフラグの判断と丸め訂正（ｒｏｕｎｄｉｎｇ  ｃｏｒｒｅｃｔｉｏｎ）とのためにガード及びスティッキー・ビットを計算するための機構を提供する。
【００３１】
図２は、浮動小数点乗算器パイプラインを概略的に示す。この浮動小数点乗算器パイプラインは、典型的には、集積回路として具体化されているプロセッサ・コアなどのデータ処理装置の一部であることが理解されるであろう。プロセッサによって実行されているプログラム命令が、実行される浮動小数点乗算動作を特定することができる。システム全体の中における浮動小数点乗算器のこのタイプの使用は、この技術分野の当業者によく知られているであろう。以下では、ＩＥＥＥ７５４標準の一部として定義されている二倍精度数の操作という観点から、説明がなされる。この技術は他の形式の浮動小数点に関しても用いられ得ることは理解されるであろう。
【００３２】
相互に乗算される２つの浮動小数点オペランドが、入力レジスタ１００、１０５で受け取られる。第１のステージＶ１では、入力オペランドＡ及びＢについて、いずれかの必要とされる正規化が実行される。特に、それぞれのオペランドの仮数がオペランドの小数部から作成されるが、指数がゼロでない場合には、仮数は１．Ｆであり、指数がゼロである場合には、仮数は０．Ｆである。先行ゼロカウント（ＣＬＺ）回路１１０、１２０が、仮数の最上位ビットから開始して、論理ゼロ値を含む連続的なビット位置の数を決定するのに用いられる。入力オペランドが正規の浮動小数点オペランドである場合には、先行ゼロは存在せず、従って、回路１１０、１２０から出力される先行ゼロカウントは、先行ゼロを識別することはないことが理解されるであろう。しかし、非正規の数については、仮数の小数部の値に応じて、少なくとも１つの先行ゼロが存在するであろうし、潜在的には更に多くの先行ゼロが存在するであろう。次に、先行ゼロカウントは、対応するＣＬＺ回路１１０、１２０から左シフト回路１２５、１３５に送られ、そこで、ＣＬＺ回路からの出力に応じて、関連の仮数が左シフトされる。そして、左シフト回路１２５、１３５からの出力は、正規化された仮数を表す。
【００３３】
左シフト回路１２５によって出力される正規化された仮数は、レジスタ１４５に記憶される。しかし、左シフト回路１３５によって出力される正規化された仮数は、まず、ブース乗数項（Ｂｏｏｔｈ  ｍｕｌｔｉｐｌｉｅｒ  ｔｅｒｍｓ）を設定するために、回路１４０においてブース符号化され、次に、ブース乗数項がレジスタ１５５に記憶される。与えられている例では、基数８のブース符号化が用いられているが、希望の場合には、他の形式のブース符号化が用いられ得ることが、理解されるであろう。基数８のブース符号化を用いるときには、左シフト回路１３５から出力される正規化された仮数は、１回に３ビットであると考えられ、＋４と−４との間にあるオペランドＡの仮数の倍数として表現される。０、１、２及び４の倍数は標準的なシフト動作によって容易に得ることができるが、オペランドＡの仮数の３倍は別に計算するのが便利であり、これは、回路１１５によって実行される。ここで、出力は、回路１１０によって出力される先行ゼロカウントに基づき、回路１３０によって左シフトされ、正規化された３倍の仮数はレジスタ１５０に記憶される。
【００３４】
サイクルＶ２では、仮数の乗算はマルチプレクサ回路１６０を用いて実行され、次に、３：２のコンプレッサを含む回路１６５が、部分積を２つの１０６ビットの部分積に変えるのに用いられ、２つの１０６ビットの部分積はレジスタ１７０、１７５に記憶される。ブース乗算は、この技術分野の当業者に容易に理解されるものであるから、以下では、更に論じることはない。この技術のためにブース乗算が必要とされるということはなく、２つの部分積を結果として生じる任意の乗算方法が用いられ得ることも理解されよう。
【００３５】
更にステージＶ２では、図２においてブロック１８０によって示されている様々な回路コンポーネントが、正規の積と非正規の積との両方に対する丸めを正しく実行するのに必要とされる複数の値を生成するのに用いられる。特に、非正規の積に対しては、生成された値により、非正規の指数の値に関して実行される必要がある右シフトを考慮して、インジェクション丸めを、必要とされるビット位置で実行することが可能になる。
【００３６】
回路１８０は、ステージＶ１の間に指数処理パイプラインで生成される計算された指数を受け取る。計算された指数は様々な方法で生成され得るが、計算された指数を生成するのに用いられ得る１つの手法が、図３に示されている。特に、回路１１０によって出力される先行ゼロカウントは、加算器３００を用いて、オペランドＡの指数ｅａから減算され、同様に、回路１２０からの先行ゼロカウントは、加算器３０５を用いて、オペランドＢの指数ｅｂから減算される。この結果として、２つの正規化された指数の出力が生じるが、これらは、次に、計算された指数（ｅｃｏｍｐ）を生成するために、加算器３１０によって相互に加算される。入力オペランドが両方共に正規の浮動小数点である場合には、両方のＣＬＺ回路１１０、１２０によって出力されるゼロ値が存在することになり、従って、指数が加算器３１０によって相互に加算される前に加算器３００、３０５によって調節が実行されることはないことが理解されるであろう。しかし、入力オペランドの一方が非正規である場合には、ＣＬＺ回路１１０、１２０の一方からの出力が非ゼロであり、加算器３１０において加算が実行される前に、指数の一方に対して調節がなされることになる。原理的には両方の入力オペランドが非正規であり得るが、２つの非正規オペランドの乗算を実行すると、結果的に得られる指数は、図１Ｂで論じられた二倍精度フォーマットにおける表現範囲から逸脱することになるから、従って、乗算の結果はゼロになる。これは、よって、本明細書において説明されている技術の目的からすると、興味の対象ではない場合である。
【００３７】
計算された指数が回路１８０への入力として生成された後で、回路ブロック１８０の中のシフト量生成回路が、次にはレジスタ１９５に記憶されるシフト量値を生成するのに用いられる。説明されている実施例では、シフト量値は、６ビットの値である。それは様々な方法で生成され得るが、図４は、計算された指数からシフト量を生成するのに用いられ得る指数のある配列を示す。第１に、サイズが１２ビットである内部シフト量値を生じさせるために、計算−ｅｃｏｍｐ−１０２２を実行するのに、加算器３２０が用いられる。入力のサイズが１１ビットであるのに対して、出力のサイズは１２ビットであり、加算のすべての潜在的なビットが捕捉されることを可能にしている。しかし、上位の２ビットは、シフト量生成回路によって実行される処理の目的のために無視され、これらのビットは、符号情報を捕捉するために用いられる。
【００３８】
加算器３２０によって出力される内部シフト量のより下位にある６ビットは、６ビットのペアワイズ（pairwise）論理ＯＲ回路３３０に送られる。ビット６〜９には、回路３２５における論理ＯＲ動作が実行され、これらのビットのいずれかが論理１値に設定されている場合には、論理１値が出力される。この値は、６ビットのペアワイズ論理ＯＲ回路３３０における入力ＯＲゲートのそれぞれに、他方の入力において、提供される。結果的に、ビット９〜６のいずれかが設定されていると、回路３３０からの出力は、すべてが１である６ビットの値となり、従って、最大のシフト値を識別することが理解されるであろう。そうでない場合には、加算器３２０から出力される元の最下位の６ビットは、６ビットのペアワイズ論理ＯＲ回路３３０からの出力として、修正なしで、前方に送られる。
【００３９】
ここで、回路ブロック３３０からの出力は、正規化された積が非正規であると計算された指数が示している状況で用いられるシフト量値を表す。しかし、正規化された積が正規な範囲に属する場合には、シフト量は、論理ゼロの値にクリアされる。ある実施例では、これは、回路３３５が、正規化された積が非正規であることを計算された指数が示しているかどうかを検出し、示している場合には論理１の値を生じ、示していない場合には論理ゼロの値を生じることによって、達成される。正規化された積が非正規である場合には回路ブロック３３０からの出力を修正しないままで送り、それ以外の場合（すなわち、正規化された積が正規な範囲に属する場合）にはすべてゼロになるようにシフト量をクリアするために、６ビットのペアワイズ論理ＡＮＤ動作が、コンポーネント３４０によって実行される。
【００４０】
丸めモードは乗算動作への入力であり、ある実施例では、ＲＺ（丸めなし）、ＲＮ（最近接偶数に丸める）又はＲＵ（上方への丸め（ｒｏｕｎｄ  ｕｐ））のいずれかであり得る。回路ブロック１８０の内部では、５２ビットの丸め定数が、図５Ａに概略的に示されているように、生成される。特に、最近接偶数への丸めモードでは、丸め定数は、５１個の論理ゼロの値が後に続く論理１の値である。代わりに上方への丸めモードが選択される場合には、丸め定数は、５１個の論理１の値が後に続く論理１の値である。ＲＺモードでは、丸め定数は、５２個の論理ゼロの値に等しく設定される。
【００４１】
次に、丸め値生成回路が、レジスタ１８５に記憶される丸め値を生成するのに用いられる。図５Ｂは、ある実施例において丸め値がどのようにして生成されるのか、を示す。特に、丸め定数は左シフト回路３５０に入力され、左シフト回路３５０は、１０６ビットの丸め値を生じさせるために、先に計算されたシフト値に基づいて左シフト動作を実行する。入力では、丸め定数の左方向へのビットは、すべて論理ゼロの値である。左シフトが実行されると、丸め定数がそこからシフトされる最下位ビット位置が、（最近接偶数への丸めモードの場合には）論理ゼロの値で、又は、（上方への丸めモードの場合には）論理１の値で満たされる。ＲＺモードの場合には、丸め定数はすべてゼロであり、丸め値も、丸め処理がまったく実行されないということを識別するために、すべてゼロに設定される。また、オーバーフロー丸め値も生じ、レジスタ１９０に記憶される。オーバーフロー丸め値は、オーバーフロー加算経路で用いられ、オーバーフロー加算経路は、正規の積（ｎｏｒｍａｌ  ｐｒｏｄｕｃｔｓ）に対してだけ用いられる。オーバーフロー丸め値は、レジスタ１８５に記憶されているオーバーフロー値を１ビットだけ左シフトさせることによって、計算される。
【００４２】
図２に示されているように、回路１８０は、また、レジスタ２００に記憶されるマスク値を生成するのにも用いられるが、マスク値は、必要とされるあらゆる丸め調節を検出し不正確フラグ（ｉｎｅｘａｃｔ  ｆｌａｇ）などのフラグを設定するのに必要とされるガード及びスティッキー・ビットをリトリーブするために、最終ステージで用いられる。図６は、マスク値を生成するために回路ブロック１８０の内部に含まれ得るマスク生成回路を示す。特に、５２ビットのマスク定数が、すべてが論理１の値で構成されるように、生成される。そのマスク定数は、次に、シフト量に基づき、回路３６０により左シフト動作を受ける。これにより、１０６ビットのマスク値が生じる。左シフト動作が実行される前に、マスク定数の左側にあるすべてのビットは、論理ゼロの値に設定される。左シフトが実行されると、マスク定数がそこからシフトされるあらゆる最下位ビットが、論理１の値で満たされる。
【００４３】
最終のステージＶ３では、２つの部分積がレジスタ１７０、１７５から読み出されて、２つの丸め値と加算される。特に、オーバーフロー加算経路では、オーバーフロー加算値を生成するために、これらの部分積と、レジスタ１９０からのオーバーフロー丸め値とが、加算器回路２０５、２１０を用いて、加算される。同様に、標準的な加算経路では、加算値を生成するために、２つの部分積と、加算器回路２１５、２２０の内部の丸め値１８５とが加算される。加算器２２０によって出力される和は、右シフト回路２３０を用いて、シフト量だけ右シフトされる。更に、加算器２１０から出力されるオーバーフロー和は、右シフト回路２２５を用いて、「シフト量−１」だけ右シフトされる。
【００４４】
既に述べられたように、非正規積（ｓｕｂｎｏｒｍａｌ  ｐｒｏｄｕｃｔｓ）については、用いられる最終的な和は、標準的な加算経路の出力から導かれる。丸め値が決定される方法に起因して、結果のために正しい仮数を生成するため、結果として生じる和を非正規化（ｄｅ−ｎｏｒｍａｌｉｓｅ）するために回路２３０によって実行されることが次に必要とされることになる右シフトを考慮すると、丸め値は和が生成される間に正しいビット位置に組み込まれることが理解されるであろう（なお、二倍精度数というこの特定の実例においては、内部表現によって、最小の表現可能な指数値すなわち−１０２２に指数が調節されていることが必要とされるという事実を考慮する）。
【００４５】
和が右シフトされている間に、ガード及びスティッキー・ビットを捕捉するため、マスクが、加算器２１０、２２０からの出力に適用される。この技術分野の当業者によって理解されるように、ガード及びスティッキー・ビットは、２つの和のそれぞれにおいて下位ビットを訂正するのに用いられ、丸め処理されたオーバーフロー和と丸め処理された和とを生成するために、必要な調節がブロック２４５、２５０に組み入れられる。関連の符号及び指数値もまた、この時点で組み入れられ、次に、標準的な和加算器２２０からの出力の最上位ビットが設定されているかどうかに基づいて、適切な結果が選択される。それが設定されている場合には、オーバーフロー積が選択され、他方で、そうでない場合には、標準的な積が選択される。非数（ＮａＮ）及び無限大などの特別の数は別個に扱われ、それらの特別な値は、図２に示されているように、適切な制御信号に基づいて、マルチプレクサ２５５によって選択され得ることが理解されるであろう。非正規である数については、加算器２２０からの出力の最上位ビットは設定されることはなく、従って、回路２５０からの出力が常に結果として選択されることが理解されるであろう。
【００４６】
加算器２１０、２２０からの１０６ビットの出力和は、それらの上位ビットにおいて最終的な浮動小数点仮数を含む。結果のすぐ右にあるビットがガード・ビットであり、ガード・ビットの右にあるすべてのビットの論理ＯＲがスティッキー・ビットを形成する。この技術分野の当業者によって理解されるように、ガード及びスティッキー・ビットは、最近接偶数に丸める丸めモードのための丸めを訂正するのに用いられ、そしてまた、それらは、不正確フラグ（ｉｎｅｘａｃｔ  ｆｌａｇ）を計算するのにも用いられる。これらのプロセスは、最後のビット及びフラグ回路２３５、２４０の内部で実行される。
【００４７】
最後ビット及びフラグ回路２４０を見ると、図７Ａは、どのように（本明細書ではＧマスクとも称される）ガード・マスクとスティッキー・マスクとの両方がレジスタ２００に記憶されているマスク値から生成されるかを示す。特に、論理ＡＮＤ回路３７０は、マスク値を受け取るが、更に、その最上位ビットがゼロに設定されておりその残りのビットがマスク値のビット１０５から１までの逆数によって形成されている第２の値も受け取る。この結果として、あるビット位置を除いてすべてゼロである１０６ビットのＧマスク値が生成されるが、そのビット位置では論理１の値が含まれることになり、この論理１の値がガード位置を識別する。次に、スティッキー・マスクが、その最上位ビットがゼロに設定されており残りのビットがマスク値のビット１０５から１によって形成されている１０６ビットの値によって形成される。そのとき、スティッキー・マスクは、最終和を含むすべてのビット位置とガード・ビット位置とに対して論理ゼロの値を含むが、和の内部でスティッキー・ビットを含むビット位置すべてに対しては論理１の値を有することが理解されるであろう。
【００４８】
次に、回路２４０は、図７Ｂに示されているように、ガード・ビットを生成することができる。特に、和とＧマスクとはＡＮＤ関数３７５に入力され、ＡＮＤ関数３７５は１０６ビットの出力を生じる。Ｇマスクの性質により、和の内部のガード・ビットがゼロである場合には、これらの１０６ビットはすべてゼロであるが、和におけるガード・ビットが論理１の値に設定されている場合には、１つの論理１の値を含むことになる。従って、論理ＯＲ関数３８０は、ガード・ビットを生成するために、その１０６ビットに対して実行される。図７Ｃに示されているように、スティッキー・ビットは、和とスティッキー・マスクとを用いて、類似の方法で、生成され得る。再び、論理ＡＮＤ関数が回路３８５によって実行され、その結果として１０６ビットの値が生成される。スティッキー・ビットのいずれかが論理１の値にある場合には、ＡＮＤゲートからの出力に少なくとも１つの論理１の値が存在することになり、従って、（ゼロ又は１のいずれかの値を有することになる）スティッキー・ビットを生成するために、論理ＯＲ関数３９０が実行される。
【００４９】
オーバーフロー和との関係で用いるために最後ビット及びフラグ回路２３５の内部で生成されるガード・マスクとスティッキー・マスクとは、非正規の結果に対して同一であり、正規な結果に対しては１ビットだけ左にシフトされている。よって、これらの２つのマスクの生成は、次のように表すことができる。
【数１】
2015170359.tif 000003
【００５０】
これらのオーバーフロー・マスクは、次に、オーバーフロー和のためのガード及びスティッキー・ビットを取得するために、図７Ｂ及び図７Ｃに記載されているのと同じ技術を用いて、オーバーフロー和に適用される。
【００５１】
和とオーバーフロー和とは、最近接偶数への丸め（ＲＮＥ）を除き、いずれの丸めモードに対しても正しい。ＲＮＥの場合は、最後のビットが訂正される必要があり得るが、これは、上で計算されたガード及びスティッキー・ビットを用いて容易に達成される。ガード及びスティッキー・ビットは、また、不正確フラグを設定すべきかどうかを判断するのにも用いられる。これらの技術は、浮動小数点回路の設計者には広く理解されるため、本明細書では、これ以上は論じられない。
【００５２】
図８は、計算された結果指数が非正規であるときの図２の動作を示す流れ図である。ステップ４００では、オペランドＡとオペランドＢとの仮数が、ステージＶ１で必要とされるように正規化される。また、ステップ４０５では、図３を参照して既に論じられたように、計算された指数が、結果の正規化バージョンに対して、決定される。
【００５３】
ステップ４１０では、第１及び第２の部分積を生成するために、第１及び第２の正規化された浮動小数点オペランドの仮数が乗算されるが、これは、ステージＶ２の間に生じる。また、ステージＶ２の間には、ステップ４１５において、（例えば、図４に記載されている技術を用いて）シフト量が生成され、次には、丸め定数が、そのシフト定数だけ左シフトされて、（例えば、図５Ａ及び図５Ｂに記載されている技術を用いて）丸め値を生成する。
【００５４】
ステップ４２０では、ステージＶ３の間に、加算器２２０から出力される正規化された結果仮数を生成するために、第１及び第２の部分積と丸め値とが加算される。
【００５５】
ステップ４２５では、例えば、図６を参照して上述された技術を用いて、マスク定数をシフト量だけシフトさせることによって、マスク値が生成される。ステップ４２５は、ある実施例では、ステージＶ２で実行される。
【００５６】
ステップ４３０では、ガード及びスティッキー・ビットを識別するために、例えば図７Ａ〜図７Ｃに記載されている技術を用いて、マスク値が、正規化された結果仮数に適用される。更に、ステップ４３５では、当初の結果仮数を作成するために、正規化された結果仮数が、シフト量だけ右シフトされる。
【００５７】
その後で、ステップ４４０において、当初の結果仮数の最下位ビットに関する何らかの必要とされる訂正が、ステップ４３０で生成されたガード及びスティッキー・ビットに基づいて、実行される。その結果、ステップ４４５において、結果仮数の出力が生じ、この結果仮数の出力は、次に、積結果を生成するために、符号及び指数値と組み合わせることが可能である。非正規な積に対しては、−１０２２の最小指数を表すために、最終的な積指数はすべてゼロである。従って、計算される指数は、非正規な積に対するこの値を用いて、置き換えられる。ある実施例では、ステップ４３０〜４４５は、ステージＶ３の間に実行される。
【００５８】
上述された技術は、非正規であり得る正規化された積を丸めるための低遅延の方法を提供する。特に、上述の技術によって、非正規であり得る正規化された積を正しく丸めるのにインジェクション丸めを用いることが可能になり、非正規な積を扱うときにインジェクション丸めを実行することが必要になる固定されていない位置を考慮することができる。図２に記載されている技術は、特に高性能の技術を提供するのであって、任意の入力に対し、任意のモードで、３サイクルの間に、必要とされるインジェクション丸めを含む乗算が実行されることを可能にする。また、この技術は、比較的コンパクトであり、従って比較的安価に実装できる解決策を、提供する。
【００５９】
本明細書では特定の実施例について説明がなされてきたが、本発明はそれらには限定されることはなく、それらへの多くの修正や追加が、本発明の範囲内で、行われ得る。例えば、以下の従属請求項の特徴と独立請求項の特徴とを、本発明の範囲から逸脱することなく様々に組み合わせることが可能である。
【符号の説明】
【００６０】
１１０、１０５  入力レジスタ
１２５、１３５  左シフト回路
１４５、１５０、１７０、１７５  レジスタ
１６０  マルチプレクサ回路
２３５、２４０  最後のビット及びフラグ回路
３００、３０５、３１０、３２０  加算器
３７５  ＡＮＤ関数
３８０、３９０  ＯＲ関数
【図１Ａ】
2015170359.tif 000004
【図１Ｂ】
2015170359.tif 000005
【図２】
2015170359.tif 000006
【図３】
2015170359.tif 000007
【図４】
2015170359.tif 000008
【図５Ａ】
2015170359.tif 000009
【図５Ｂ】
2015170359.tif 000010
【図６】
2015170359.tif 000011
【図７Ａ】
2015170359.tif 000012
【図７Ｂ】
2015170359.tif 000013
【図７Ｃ】
2015170359.tif 000014
【図８】
2015170359.tif 000015
【外国語明細書】
2015170359000001.pdf