(57)【特許請求の範囲】
【請求項１】
第１の指数及び第１の仮数を有する第１の浮動小数点数と第２の指数及び第２の仮数を有する第２の浮動小数点数の間で浮動小数点加算動作を実行するように構成される浮動小数点加算器と、
前記第２の指数の値が前記第１の指数の値と同一になるように前記第２の仮数をシフトするビット位置の数に対応するシフト値を計算するように構成されるアライメントシフト器とを備えた浮動小数点ユニットであって、
前記アライメントシフト器は選択されたオーバーシフトスレッショルド値に前記シフト値が等しくなるか又はそれよりも大きくなるオーバーシフト状態を検出するように構成され、
前記アライメントシフト器は前記オーバーシフト状態を検出することに応答してオーバーシフト表示を提供するように更に構成され、
前記選択されたオーバーシフトスレッショルド値は、最小オーバーシフトスレッショルド値及び最大オーバーシフトスレッショルド値を含むオーバーシフト値の範囲内の２進数を備えると共に最下位ビットで始まる最多数の連続するゼロのビットを有している浮動小数点ユニット。
【請求項２】
前記アライメントシフト器は前記第２の仮数を前記シフト値によって表されるビット位置の数だけ右にシフトするように構成される請求項１に記載の浮動小数点ユニット。
【請求項３】
前記最小オーバーシフトスレッショルド値は、前記第２の仮数のＭＳＢが前記第１の仮数のＬＳＢの右になるようにシフトされている前記第２の仮数に由来するシフト値に対応し且つ前記第１の仮数のデータパス内のビットの数の２倍に加えられるガードバンドビットの数に対応する請求項１に記載の浮動小数点ユニット。
【請求項４】
前記第１の仮数の最下位ビット（ＬＳＢ）の右のビットの数はスティッキー領域に対応し、前記スティッキー領域は、前記第１の仮数のデータパス内のビットの数より１小さい数のビットを含む請求項１に記載の浮動小数点ユニット。
【請求項５】
前記第１の仮数のＬＳＢの右の前記第２の仮数の任意のＬＳＢが互いに論理和をとられてスティッキービットを生じさせるように右にシフトされている前記第２の仮数に応答する請求項４に記載の浮動小数点ユニット。
【請求項６】
前記アライメントシフト器は、前記オーバーシフト状態を検出することに応答して前記スティッキービットをセットするように更に構成される請求項５に記載の浮動小数点ユニット。
【請求項７】
前記最大オーバーシフトスレッショルド値は、前記第２の仮数のＭＳＢが前記スティッキー領域のＬＳＢにアラインされるように右にシフトされている前記第２の仮数に由来するシフト値に対応する請求項５に記載の浮動小数点ユニット。
【請求項８】
第３の浮動小数点数に第４の浮動小数点数を乗じて第５の浮動小数点数を生成するように構成される浮動小数点乗算器を更に備えた請求項１に記載の浮動小数点ユニット。
【請求項９】
前記最小オーバーシフトスレッショルド値は、前記第２の仮数のデータパス内のビットの数の３倍に加えられるガードバンドビットの数に対応する請求項８に記載の浮動小数点ユニット。
【請求項１０】
前記選択されたオーバーシフトスレッショルド値は、前記シフト値と前記選択されたオーバーシフトスレッショルド値の間での比較のための検出臨界的タイミングパスにおける最も少ない数のゲート遅延を有する論理実装に対応する請求項１に記載の浮動小数点ユニット。
【請求項１１】
浮動小数点動作を実行するように構成される浮動小数点ユニットを備えたプロセッサであって、前記浮動小数点ユニットは、
第１の指数及び第１の仮数を有する第１の浮動小数点数と第２の指数及び第２の仮数を有する第２の浮動小数点数の間で浮動小数点加算動作を実行するように構成される浮動小数点加算器と、
前記第２の指数の値が前記第１の指数の値と同一になるように前記第２の仮数をシフトするビット位置の数に対応するシフト値を計算するように構成されるアライメントシフト器とを含み、
前記アライメントシフト器は選択されたオーバーシフトスレッショルド値に前記シフト値が等しくなるか又はそれよりも大きくなるオーバーシフト状態を検出するように構成され、
前記アライメントシフト器は前記オーバーシフト状態を検出することに応答してオーバーシフト表示を提供するように更に構成され、
前記選択されたオーバーシフトスレッショルド値は、最小オーバーシフトスレッショルド値及び最大オーバーシフトスレッショルド値を含むオーバーシフト値の範囲内の２進数を備えると共に最下位ビットで始まる最多数の連続するゼロのビットを有しているプロセッサ。
【請求項１２】
前記アライメントシフト器は前記第２の仮数を前記シフト値によって表されるビット位置の数だけ右にシフトするように構成される請求項１１に記載のプロセッサ。
【請求項１３】
前記最小オーバーシフトスレッショルド値は、前記第２の仮数のＭＳＢが前記第１の仮数のＬＳＢの右になるようにシフトされている前記第２の仮数に由来するシフト値に対応し且つ前記第１の仮数のデータパス内のビットの数の２倍に加えられるガードバンドビットの数に対応する請求項１１に記載のプロセッサ。
【請求項１４】
前記第１の仮数の最下位ビット（ＬＳＢ）の右のビットの数はスティッキー領域に対応し、前記スティッキー領域は、前記第１の仮数のデータパス内のビットの数より１小さい数のビットを含む請求項１１に記載のプロセッサ。
【請求項１５】
前記第１の仮数のＬＳＢの右の前記第２の仮数の任意のＬＳＢが互いに論理和をとられてスティッキービットを生じさせるように右にシフトされている前記第２の仮数に応答する請求項１４に記載のプロセッサ。
【請求項１６】
前記アライメントシフト器は、前記オーバーシフト状態を検出することに応答して前記スティッキービットをセットするように更に構成される請求項１５に記載のプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はプロセッサに関し、更に特定的にはプロセッサにおける浮動小数点計算に関する。
【背景技術】
【０００２】
コンピュータシステムにおいては、浮動小数点数は有理数の数値的な表現である。一般的に、「浮動小数点」の語句は、基数又は小数点が数の有効数字に関連して何処へでも移動させられ得るという考え方を参照する。位置情報は独立に表示され得る。浮動小数点数を表す方法はこれまでにも幾つかあるが、最も普及している標準は、電気電子技術者協会（ＩＥＥＥ）７５４標準によって規定されている。
【０００３】
浮動小数点動作は、浮動小数点数がはるかに広い範囲の値を表し得るということにおいて、固定小数点動作を超える明白な利点を提供する。しかし、浮動小数点動作は計算が遅くなる可能性がある。従って、コンピュータシステムが浮動小数点計算動作を実行し得る速度の測定は、全体的なプロセッサ性能を考える上での最大の関心事である。このように、コンピュータシステムが乗算及び加算動作（ＦＭＡ）のような浮動小数点計算を実行する場合には、できる限りタイムリーな様態での「オーバーシフト(overshift)」状態の検出が重要になるであろう。例えばＦＭＡを実行する場合、加数は積と有効数字を合わせるためにシフトさせられる必要がある。そのためにシフト量が計算される。計算の一部として、オーバーシフト状態の検出は臨界的パス(critical path)内にある。多くの従来のシステムにおいては、定数と右シフト数の間での比較動作を論理回路が実行するであろう。この比較は臨界的タイミングパス内にあり、また比較を行うためのゲートの数は大きくなり得るので、許容可能なタイミングパス遅延よりも大きな遅延を有することになる。
【発明の概要】
【課題を解決するための手段】
【０００４】
オーバーシフト検出メカニズムの種々の実施形態が開示される。１つの実施形態においては、例えばプロセッサ内で用いられるであろうような浮動小数点ユニットは、第１の指数及び第１の仮数を有する第１の浮動小数点数及び第２の指数及び第２の仮数を有する第２の浮動小数点数の間で浮動小数点加算動作を実行するように構成される浮動小数点加算器を含む。浮動小数点ユニットはまた、第２の指数の値が第１の指数の値と同一になるように第２の仮数をシフトするビット位置の数に対応するシフト値を計算し得るアライメントシフト器を含む。アライメントシフト器はオーバーシフト状態を検出してよく、オーバーシフト状態においては、シフト値は、選択されたオーバーシフトスレッショルド値以上である。加えて、アライメントシフト器は、オーバーシフト状態を検出することに応答してオーバーシフト表示を提供してよい。選択されたオーバーシフトスレッショルド値は、最小オーバーシフトスレッショルド値及び最大オーバーシフトスレッショルド値を含むオーバーシフト値の範囲内の２進数を備えると共に最下位ビットで始まる最多数の連続するゼロのビットを有している。
【図面の簡単な説明】
【０００５】
【図１】図１は汎用プロセッサコアの１つの実施形態を示す一般化されたブロック図である。
【０００６】
【図２】図２は図１の浮動小数点ユニット１２４ｃの実施形態の一部分のブロック図である。
【０００７】
【図３】図３は幾つかの可変長の加数シフトを示す図である。
【０００８】
【図４】図４はオーバーシフト検出論理単純化実現化を示す図である。
【０００９】
本発明は種々の修正及び代替的な形態を許容する一方で、その特定の実施形態が図面に例として示されており、またここに詳細に説明されることになる。しかし、図面及びそれに対する詳細な説明は、開示される特定の形態に本発明を限定することを意図されておらず、むしろ逆に、本発明は、添付の特許請求の範囲によって画定されるような本発明の精神及び範囲内に含まれる全ての修正、均等なもの、及び代替案に及ぶものであることが理解されるべきである。尚、「〜よい、〜かもしれない、〜ことがある、〜得る、〜であろう(may)」の語は、この出願を通して、許容の意味（即ち、〜する可能性を有する、〜することができる）で用いられており、必須の意味（即ち、〜しなければならない）の意味では用いられていない。
【発明を実施するための形態】
【００１０】
図１を参照すると、プロセッサ１０の１つの実施形態の一般化されたブロック図が示されている。他の実施形態が可能であり且つ検討されている。図１に示されるように、プロセッサ１０は、プリフェッチ／プリデコードユニット１２と、分岐予測ユニット１４と、命令キャッシュ１６と、命令アライメントユニット１８と、デコードユニット２０と、予約ステーション２２と、機能ユニット２４と、ロード／ストアユニット２６と、データキャッシュ２８と、レジスタファイル３０と、リオーダバッファ３２と、ＭＲＯＭユニット３４と、バスインタフェースユニット３７と、Ｌ２キャッシュ３９とを含む。尚、スーパースケーラプロセッサにおいては、それぞれのデコードユニット、予約ステーション及び機能ユニットを各々が有する多重パイプラインがあり得るので、種々の実施形態においては、デコードユニット２０、予約ステーション２２、及び機能ユニット２４の各々は、任意の数の独立したユニットを含んでいてよい。従って、図示される実施形態では、機能ユニット２４は、整数ユニット１２４ａ及び１２４ｂ並びに浮動小数点ユニット（ＦＰＵ）１２４ｃを含む。しかし、他の実施形態においては、他の数の整数ユニット及びＦＰＵ１２４ｃが用いられてよい。
【００１１】
プリフェッチ／プリデコードユニット１２は、バスインタフェースユニット３７からの命令を受信するように結合され、また命令キャッシュ１６及び分岐予測ユニット１４に更に結合される。同様に、分岐予測ユニット１４は命令キャッシュ１６に結合される。また、分岐予測ユニット１４はデコードユニット２０及び機能ユニット２４に結合される。命令キャッシュ１６は更にＭＲＯＭユニット３４及び命令アライメントユニット１８に結合される。命令アライメントユニット１８は同様にデコードユニット２０に結合される。デコードユニット２０はロード／ストアユニット２６及び予約ステーション２２に結合される。予約ステーション２２は更にそれぞれの機能ユニット２４に結合される。加えて、デコードユニット２０及び予約ステーション２２はレジスタファイル３０及びリオーダバッファ３２に結合される。機能ユニット２４は、ロード／ストアユニット２６、レジスタファイル３０、及びリオーダバッファ３２に同様に結合される。データキャッシュ２８はロード／ストアユニット２６及びバスインタフェースユニット３７に結合される。バスインタフェースユニット３７は更にＬ２キャッシュ３９及びバスに結合される。最後に、ＭＲＯＭユニット３４はデコードユニット２０に結合される。
【００１２】
命令キャッシュ１６は、命令を記憶するために設けられる高速キャッシュメモリである。命令は命令キャッシュ１６からフェッチされ、そしてデコードユニット２０へ送られる。１つの実施形態では、命令キャッシュ１６は、６４バイトライン（１つのバイトは８バイナリビットからなる）を有する２ウエイセットアソシアティブ(2 way set associative)構造での６４キロバイトまでの命令を記憶するように構成される。代替的には、任意の他の所望の構成及びサイズが用いられてよい。尚、例えば、命令キャッシュ１６は、フルアソシアティブ、セットアソシアティブ、又はダイレクトマップ構成として実装されてよい。
【００１３】
命令はプリフェッチ／プリデコードユニット１２によって命令キャッシュ１６内へ記憶される。命令及び／又はデータは、命令キャッシュ１６又はロード／ストアユニット２６からのその要求に先立ちプリフェッチスキームに従ってプリフェッチされてよい。デコードユニット２０によって直接的にデコードされてよい命令は、「高速パス(fast path)」命令と称される。１つの実施形態によると、残りのｘ８６命令はＭＲＯＭ命令と称される。ＭＲＯＭ命令は、デコードユニット２０によるデコードには複雑すぎると決定される命令である。ＭＲＯＭ命令は、ＭＲＯＭユニット３４を起動すること(invoking)によって実行される。より具体的には、ＭＲＯＭ命令に直面すると、ＭＲＯＭユニット３４は、命令を構文解析し、そして所望の動作を生じさせるように定義される高速パス命令のサブセットとして命令を発行する。ＭＲＯＭユニット３４は、高速パス命令のサブセットをデコードユニット２０へ送る。
【００１４】
図示される実施形態においては、プロセッサ１０は、条件付き分岐命令の後に命令を投機的に(speculatively)フェッチするために、分岐予測を採用している。分岐予測ユニット１４は、分岐予測動作を実行するためにインクルードされている。デコードユニット２０及び機能ユニット２４は、更新情報を分岐予測ユニット１４に提供してよい。デコードユニット２０は、分岐予測ユニット１４によって予測されなかった分岐命令を検出してよい。機能ユニット２４は、分岐命令を実行し、そして予測された分岐命令が誤っているかどうかを決定する。分岐命令は「取られて(taken)」よく、この場合、その後の命令は分岐命令の目標アドレスからフェッチされる。逆に、分岐命令は「取られない(not taken)」かもしれず、この場合、その後の命令は分岐命令に連続するメモリロケーションからフェッチされる。ミス予測された(mispredicted)分岐命令が検出される場合には、ミス予測された分岐の後の命令は、プロセッサ１０の種々のユニットから廃棄される。代替的な構成においては、分岐予測ユニット１４は、デコードユニット２０及び機能ユニット２４の代わりにリオーダバッファ３２に結合されてよく、そしてリオーダバッファ３２から予測ミス(misprediction)情報を受信してよい。種々の適切な分岐予測アルゴリズムが分岐予測ユニット１４によって用いられてよい。
【００１５】
命令キャッシュ１６からフェッチされた命令は、命令アライメントユニット１８へ伝えられる。命令が命令キャッシュ１６からフェッチされるにつれて、対応するプリデコードデータが走査されて、フェッチされている最中の命令に関する情報が命令アライメントユニット１８（及びＭＲＯＭユニット３４）へ供給される。命令アライメントユニット１８は、走査データを利用して命令をデコードユニット２０の各ユニットにアラインする(align)。１つの実施形態では、命令アライメントユニット１８は、命令を８つの命令バイトの３セットからデコードユニット２０にアラインする。
【００１６】
デコードユニット２０は、命令アライメントユニット１８から受信される命令をデコードするように構成される。レジスタオペランド情報が検出され、そしてレジスタファイル３０及びリオーダバッファ３２へと経路付けられる。また、１つ以上のメモリ動作が実行されることを命令が必要とする場合には、デコードユニット２０はメモリ動作をロード／ストアユニット２６へ送る。各命令は機能ユニット２４のための一連の制御値へとデコードされ、そしてこれらの制御値は、オペランドアドレス情報、及び命令と共に含まれているであろう退去データ又は即時データ(displacement or immediate data)と一緒に予約ステーション２２へと送られる。１つの特定の実施形態においては、各命令は、機能ユニット１２４ａ〜１２４ｂによって別個に実行され得る２つまでの動作へとデコードされる。
【００１７】
プロセッサ１０は順序外実行(out of order execution)を支持し、そのためにリオーダバッファ３２を用いて、レジスタ読み出し及び書き込み動作に対する元のプログラムシーケンスの経過を辿り、レジスタ名変更(register renaming)を実装し、投機的命令実行及び分岐予測ミス回復を可能にし、そして正確な例外を容易にしている。
【００１８】
デコードユニット２０の出力にて提供される命令制御値及び即時データ又は退去データは、それぞれの予約ステーション２２へ直接的に経路付けられる。１つの実施形態では、予約ステーション２２の各ユニットは、対応する機能ユニットへと発行されるのを待たされている６つまでの係属中命令のために命令情報（即ち命令制御値の他にオペランド値、オペランドタグ及び／又は即時データ）を保持することが可能である。
【００１９】
特定の命令のデコードに際して、要求されたオペランドがレジスタロケーションである場合には、レジスタアドレス情報は同時にリオーダバッファ３２及びレジスタファイル３０へと経路付けられる。当業者であれば、ｘ８６レジスタファイルが８つの３２ビットリアルレジスタ（即ち典型的にはＥＡＸ、ＥＢＸ、ＥＣＸ、ＥＤＸ、ＥＢＰ、ＥＳＩ、ＥＤＩ及びＥＳＰ）を含むことを理解するであろう。ＩＡ−３２アーキテクチャとも称されるｘ８６プロセッサアーキテクチャを採用しているプロセッサ１０の実施形態においては、レジスタファイル３０は３２ビットリアルレジスタの各々のための記憶ロケーションを備えている。ＭＲＯＭユニット３４による使用のために、追加的な記憶ロケーションがレジスタファイル３０内に含まれていてよい。
【００２０】
先に述べたように、予約ステーション２２は、対応する機能ユニット１２４ａ、１２４ｂ又は１２４ｃによって命令が実行されるまで命令を記憶している。命令は、（ｉ）命令のオペランドが提供された場合、及び（ｉｉ）同一の予約ステーション２２内にあり且つプログラム順序での命令に先立つものである命令に対してオペランドが未だ提供されていない場合に、実行のために選択される。尚、機能ユニット２４内のユニットの１つによって命令が実行される場合には、当該命令の結果は、当該結果がリオーダバッファ３２へ渡されるのと同時に、当該結果を待っている任意の予約ステーション２２へと直接的に渡される（この技術は一般に「結果転送(result forwarding)」と称される）。関連する結果が転送されているクロックサイクルの間に、命令が実行のために選択されてよく、そして１つの機能ユニット２４へと渡されてよい。この場合、予約ステーション２２が、転送された結果をその機能ユニット２４へと経路付ける。機能ユニット２４によって実行されるべき多重動作へと命令がデコードされ得る実施形態においては、これらの動作は互いに独立してスケジューリングされてよい。
【００２１】
１つの実施形態では、整数ユニット１２４ａ及び１２４ｂの各々は、加算及び減算の整数演算動作の他、シフト、循環(rotates)、論理動作、及び分岐動作を実行するように構成される。これらの動作は、デコードユニット２０によって特定の命令に対してデコードされる制御値に応答して実行される。尚、ＦＰＵ１２４ｃが浮動小数点動作を実行するために用いられてもよい。従って、ＦＰＵ１２４ｃは、浮動小数点乗算器加算器（ＦＭＡ）ユニット１２５を含む。ＦＰＵ１２４ｃは、ＭＲＯＭユニット３４又はリオーダバッファ３２からの命令を受信すると共に次いでリオーダバッファ３２と通信して命令を履行するコプロセッサ(coprocessor)として動作させられてよい。加えて、整数ユニット１２４ａ及び１２４ｂは、ロード／ストアユニット２６によって実行されるロード及びストアメモリ動作のためのアドレス生成を実行するように構成されてよい。１つの特定の実施形態においては、整数ユニット１２４ａ及び１２４ｂは、アドレスを生成するためのアドレス生成ユニットと、残りの機能を実行するための実行ユニットとを備えていてよい。これら２つのユニットは、クロックサイクルの間における異なる命令又は動作に際して独立して動作してよい。
【００２２】
以下に更に詳細に説明されるように、１つの実施形態では、ＦＰＵ１２４ｃは、従来の浮動小数点ユニットよりも高速な浮動小数点動作の間にオーバーシフト(overshift)を検出し得るアライメントシフト器制御論理２１０を含んでいてよいＦＭＡユニット１２５を含む。より特定的には、１つの実施形態では、アライメントシフト器制御論理２１０は、別の加数(addend)に又は２つの数の積に加えられることになる加数に対するオーバーシフト値を計算することと、次いで計算された値を選択されたオーバーシフトスレッショルド値と比較することとによって、オーバーシフトを検出することができる。種々の実施形態において、選択されたオーバーシフトスレッショルド値は、最小オーバーシフトスレッショルド値及び最大オーバーシフトスレッショルド値を含むオーバーシフト値の範囲内にある二進数であり、最下位ビットで始まる最多数の連続するゼロのビットを有している。この選択されたオーバーシフト値は、ＦＭＡユニット１２５の臨界的タイミングパス(critical timing paths)の１つにおける最少数のゲート遅延でオーバーシフト検出論理回路を実装するはずである。
【００２３】
ロード／ストアユニット２６は、機能ユニット２４とデータキャッシュ２８の間でのインタフェースを提供する。１つの実施形態においては、ロード／ストアユニット２６は、データキャッシュ２８にアクセスしなかった係属中のロード又はストアのためのデータ及びアドレス情報に対する記憶ロケーションを有するロード／ストアバッファと、データキャッシュ２８にアクセスしたロード及びストアのためのデータ及びアドレス情報に対する記憶ロケーションを有する別のロード／ストアバッファとを伴うように構成されてよい。
【００２４】
データキャッシュ２８は、ロード／ストアユニット２６と主メモリサブシステムの間で転送されている最中のデータを一時的に記憶するために設けられる高速キャッシュメモリである。１つの実施形態では、データキャッシュ２８はセットアソシアティブ構成であってよい。データキャッシュ２８は、セットアソシアティブ構成、フルアソシアティブ構成、直接マップ構成、及び任意の適切なサイズ又は他の構成を含む種々の具体的なメモリ構成で実装されてよいことが理解される。
【００２５】
ｘ８６プロセッサアーキテクチャを用いるプロセッサ１０の１つの特定の実施形態においては、命令キャッシュ１６及びデータキャッシュ２８は、線形的にアドレス指定され且つ物理的にタグ付けされる。線形アドレスは、命令によって指定されるオフセット及びｘ８６アドレス翻訳メカニズムのセグメント部分によって指定される基本アドレスから形成される。線形アドレスは、随意的に、主メモリにアクセスするための物理アドレスへ翻訳されてよい。線形から物理への翻訳は、ｘ８６アドレス翻訳メカニズムのページング部分(paging portion)によって指定される。物理アドレスは物理タグと比較されてヒット／ミス状態を決定する。
【００２６】
バスインタフェースユニット３７は、プロセッサ１０とコンピュータシステム内の他のコンポーネントとの間でシステムバスを介して通信するように構成されてよい。例えば、バスは、デジタルイクイップメントコーポレーション(Digital Equipment Corporation)によって開発されたＥＶ−６バスに適合していてよい。代替的には、パケットベースの、単一方向の、又は双方向のリンク等を含む任意の適切な相互接続構成が用いられてよい。バスインタフェースユニット３７は更にＬ２キャッシュ３９と通信してよい。
【００２７】
１つの実装においては、Ｌ２キャッシュ３９は、命令及びデータの両方を記憶する第２レベルキャッシュであってよい。Ｌ２キャッシュ３９は、例えば、２５６キロバイト、５１２キロバイト、又は１メガバイトのサイズであってよい。他の実施形態は、もっと小さな又はもっと大きなサイズを用いてよい。Ｌ２キャッシュ３９は、ダイレクトマップ構成又はセットアソシアティブ構成を採用していてよい。
【００２８】
尚、図１のプロセッサ１０はｘ８６アーキテクチャで実装されるプロセッサであるとして説明されているが、他の実施形態においては、プロセッサ１０は任意の他のアーキテクチャで実装される可能性が検討される。また、プロセッサ１０は、多重コアプロセッサの一部、又は特定用途向け集積回路（ＡＳＩＣ）内に埋め込まれたプロセッサ等として実装されてよい。
【００２９】
図２を参照すると、図１のＦＭＡユニット１２５の１つの実施形態の一部分のブロック図が示されている。尚、簡潔さのために種々の要素が省略されると共に議論に密接に関連するＦＭＡユニット１２５の部分のみが図２に示されている。図示される実施形態においては、ＦＭＡ１２５は脇見出しＦＸ１〜ＦＸ６によって表されるパイプラインユニットとして示されているが、他の実施形態においては、非パイプライン設計が実装される可能性が検討される。また、ＦＭＡ１２５の図示された部分によって提供されるデータパスは、ノーマルの場合(normal cases)を取り扱うように構成される。即ち、加数の仮数部(addend mantissa)のＭＳＢ（最上位ビット）が常に論理値１の場合である。事実、加数の仮数部のＭＳＢがゼロである非ノーマルの場合(denormal cases)の他、全てがゼロである場合は、１つ以上の異なるデータパス及び対応する回路によって取り扱われる。
【００３０】
図示されるように、ＦＭＡユニット１２５は、入ってくる加数「Ｃ」と被乗数「Ａ」及び「Ｂ」とを記憶するための幾つかのレジスタを含む。より特定的には、「Ａ」、「Ｂ」及び「Ｃ」の指数はレジスタ指定の指数２０１内に記憶されてよい一方で、加数「Ｃ」並びに被乗数「Ａ」及び「Ｂ」の仮数は、それぞれ６４ビット値としてレジスタ２０２、２０３及び２０４内に記憶されてよい。また、指数レジスタ２０１は、指数加算器２０５及びアライメントシフト器制御ユニット２１０の他、次のパイプライン段階ＦＸ２内の第２の指数レジスタ２１２に結合される。指数レジスタ２１２は次のパイプライン段階ＦＸ３内の指数レジスタ２１４に結合され、指数レジスタ２１４はマルチプレクサ（ｍｕｘ）２１８に結合される。ｍｕｘ２１８の出力は、指数デクリメント器(exponent decrementer)２１９、指数インクリメント器(exponent incrementer)２２０及びｍｕｘ２２１の入力の１つに結合される。指数デクリメント器２１９及び指数インクリメント器２２０の出力は、各々ｍｕｘ２２１の他の入力に結合される。ｍｕｘ２２１の出力は、パイプライン段階ＦＸ５の開始にて指数レジスタ２２５に結合される。指数レジスタ２２５の出力は、パイプライン段階ＦＸ６における正規化及び丸め(normalization and rounding)ユニット２５０内で最終的な合計の計算において用いられてよく、正規化及び丸めユニット２５０は、最終的な結果を生成すると共にその結果を結果レジスタ２５５内に記憶する。正規化及び丸めユニット２５０は、任意の例外ビット及び／又は状態ビットを例外／状態レジスタ２６０内に記憶してもよい。
【００３１】
段階ＦＸ１を再び参照すると、仮数レジスタ２０３の出力はブースエンコーダ(booth encoder)２０６に結合され、ブースエンコーダ２０６は乗算器２０８の部分積部分(partial products portion)２０７の１つの入力に結合される。仮数レジスタ２０４の出力は、乗算器２０８の部分積部分２０７の他方の入力に結合される。乗算器２０８の出力は、桁上げ保存加算器(carry save adder)（ＣＳＡ）２１３に結合される。
【００３２】
アライメントシフト器制御２１０の出力は、先行ゼロ予測器(leading zero anticipator)ユニット２２３を用いるための「Ｌｚａ使用(Use Lza)」２１１指定の表示を提供するように結合される。アライメントシフト器制御２１０の出力は右方シフト器ユニット２０９にも結合され、右方シフト器ユニット２０９は次いでＣＳＡ２１３及びアラインレジスタ(align register)２１５に結合され、アラインレジスタ２１５は、アラインされシフトされた加数「Ｃ」を保持するように構成されてよい。アラインレジスタ２１５の出力は、１９４ビット合算レジスタ２２７に結合されるインクリメント器２２２に結合され、合算レジスタ２２７の出力は、正規化及び丸めユニット２５０に結合される。
【００３３】
段階ＦＸ３を再び参照すると、ＣＳＡ２１３の出力は合算レジスタ２１６及び桁上げレジスタ(carry register)２１７に結合され、これらは両方とも次いで先行ゼロ予測器ユニット２２３及び桁上げ伝播加算器(carry propagate adder)２２４に結合される。先行ゼロ予測器２２３の出力は正規化制御レジスタ２２６に結合される一方、桁上げ伝播加算器２２４の出力は合算レジスタ２２７に結合される。
【００３４】
上述したように、動作の間、「Ａ」と「Ｂ」の積（即ち積値）の指数の値及び加数「Ｃ」の指数に応じて、加数「Ｃ」（即ち加数値）の仮数は、積値の指数と加数値の指数とが後続の加算動作のために同じになるようにシフトされる必要があるであろう。従って、アライメントシフト器制御２１０は、適切なシフト値を計算してそれを右方シフト器ユニット２０９へ供給してよい。加えて、アライメントシフト器制御２１０は、計算されたシフト値がアンダーシフトを生じさせるか又はオーバーシフトを生じさせるかを決定してよく、これについては図３及び図４の説明と共に以下に更に詳細に説明される。更に、オーバーシフトが生じてしまったことをアライメントシフト器制御２１０が決定すると、アライメントシフト器制御２１０はスティッキービット(sticky bit)がセットされるようにしてよい。
【００３５】
図３は幾つかの可変長の加数シフトを示す図である。図２及び図３を併せて参照すると、図２に示される実施形態は６４ビット仮数値を支持する。従って、積は１２８ビットであろう。図３に示されるように、積の左への６６ビットはインクリメント領域と称され、何故ならば、加数と積が合算される場合に、当該領域におけるビットの効果は多くて１単位を加えることだからである。積の右への６３ビットはスティッキー領域と称される。スティッキー領域は、任意の加数ビットがスティッキー領域と重複するするように加数がシフトされる場合に当該ビットが互いに論理和をとられてスティッキービットを生成する区域を参照し、スティッキービットは丸め動作において用いられ得る。スティッキー領域の幅は、仮数幅（Ｍｗ）から１を減じたものとして定義され得る。
【００３６】
上述したように、加数を積に加える前に、加数は、積及び加数の指数が同じになるようにシフトさせられる必要があろう。実際には、シフト量は、シフトされた加数の少なくとも１ビットが積と重複するシフトに加えて、積よりも左（より上位(more significant)）にアラインされる加数に対するガードバンド(guard banding)として必要とされる数ビットに限定されるであろう。この例示的実施形態においては、ガードビット（Ｇｂ）は２に選択される。
【００３７】
従って、１２８ビット積（例えば２つの６４ビット仮数被乗数）に６４ビット加数を加える場合には、図３における加数３０２によって示されるように、ゼロのシフトは、加数を１２６：６３の範囲内のそのビットで残すであろう。左シフトされた加数は６７ビットシフトに限定されるであろうから、加数のＬＳＢ(最下位ビット)と積のＭＳＢ（最上位ビット）の間には２つのガードビットがあることになる。その上、図３におけるアンダーシフト加数３０１によって示されるように、加数ビットのいずれもが積ビットに対してアラインされないようなアンダーシフト状態が存在するであろう。実際上は、単一方向にのみシフトするのがより単純であると考えられる。アンダーシフトがゼロシフトとしてエンコードされ且つシフト器が常に右へシフトするように、定数が加えられてシフト量をバイアスしてよい。例えば、加数指数が積の指数に等しい場合、加数３０２は結果として６７の右シフトをもたらすであろう。以下、シフト量の全ての参照はこのバイアスされた表現を参照する。
【００３８】
シフト限界(shift boundary)の範囲内で２Ｍｗ＋Ｇｂより大きく右シフトされた加数がシフト加数３０３によって示されており、シフトされた加数３０３のビットの幾つかは積の範囲内であり、また幾つかはスティッキー範囲内である。シフト限界は、例えば３Ｍｗ＋Ｇｂ−１で定義され得る。このシフト限界は例示的なデータパスに対して１９３であり、またそのようなシフトは加数のＭＳＢが積のＬＳＢにアラインされることを可能にするであろうから、シフト限界は最大の右シフトである。尚、この最大の右シフトに対して、積ＬＳＢを下回る全ての仮数ビットがスティッキー内に含まれるように、スティッキー範囲は少なくともＭｗ−１ビットを含んでいる必要がある。最大よりも大きな右シフトはオーバーシフトと考えられる。加数のＭＳＢは常に１であるから、任意のオーバーシフトはスティッキーがセットされることを結果としてもらたす。
【００３９】
しかし、この実装においては加数のＭＳＢは常に１であり且つゼロ及び非ノーマル(denormals)は異なるデータパスにおいて処理されるので、加数ＭＳＢをスティッキー範囲内に置くシフト値は、加数ＭＳＢがノーマルスティッキー論理にスティッキー表示をセットさせるであろうという理由で、スティッキービットをオーバーシフト表示にもかかわらず正確にオーバーシフトに設定するであろう。従って、厳密な境界（最大右シフトよりも大きなシフト量）でオーバーシフトを計算するよりもむしろ、オーバーシフト検出回路は、最小及び最大オーバーシフトスレッショルドの間で任意に選択されるオーバーシフトスレッショルドを用いて構成され得る。最小オーバーシフトスレッショルドはシフト器幅として表されてよく、この融合された乗算実装(fused multiply implementation)ではシフト器幅はＧｂ＋３Ｍｗである。最大オーバーシフトスレッショルドは４Ｍｗ＋Ｇｂ−２、即ちＧｂ＝２に対しては単純に４（Ｍｗ）である。尚、純然たる加算器においては、最小オーバーシフトスレッショルドはＧｂ＋２Ｍｗで表されるであろうし、また最大オーバーシフトスレッショルドは３Ｍｗ＋Ｇｂ−２であろう。図３における６４ビットＦＭＡ実装に対しては、最小及び最大オーバーシフトスレッショルドはそれぞれ１９４及び２５６である。
【００４０】
図示される実施形態においては、以下に更に説明されるようにオーバーシフト検出を実装する論理はより少ない論理レベル及びこれに伴いより少ないゲート遅延を有していてよいので、オーバーシフトスレッショルドは、オーバーシフト加数３０５によって図示されるように２５６以上であるように選択される。そのようなオーバーシフト状態が図示されるように存在する場合には、スティッキー範囲内には論理和をとる加数ビットが残されていないので、スティッキービットが強制的にセットされる。
【００４１】
図４を参照すると、図３に示されるシフトに基くオーバーシフト検出論理単純化実現化を表す図が示されている。上述したように、右シフト量（即ちシフト値）は図示されるように計算されてよい。例示される実施形態においては、指数は１８ビット符号なし数値（例えばＥｘｐＡ［１７：０］）で表されるが、シフト値は負であるアンダーシフト値を計上するので、シフト器は追加的な符号ビットＳ［１８］を含む。オーバーシフトを検出するために、検出論理はシフト量をオーバーシフトスレッショルドと比較する。標準的なシステムにおいては、オーバーシフトスレッショルド値は１９４以上であった。本実施形態においては、オーバーシフトスレッショルド値は２５６以上である。図４における図示は、オーバーシフト４１０で表される１９４以上のシフト値を検出するため及びオーバーシフト４２５で表される２５６以上のシフト値を検出するために照合される必要があるビットを示している。
【００４２】
例えば、２つの数Ｘ及びＹが図示されるように定義される。Ｘ値は、符号ビットが論理値ゼロであり且つ任意のビット［１７：８］が論理値１である場合に真であると判断する。Ｙ値は、符号ビットが論理値ゼロであり且つビット７及びビット６が両方とも論理値１であり且つビット［５：１］の少なくとも１つが論理値１である場合に真であると判断する。従って、１９４以上のオーバーシフト状態を検出するためには、Ｘ及びＹの論理和動作が実現される必要がある。しかし、２５６以上のオーバーシフト状態を検出するためには、数Ｘのみが実現される必要がある。このように、２５６以上を検出するために、より少ないビットが比較されるであろうし、またそれらを比較するための論理はより少ない論理レベルを有し、従ってより少ないタイミングパス遅延を有する。
【００４３】
別の例としては、２４ビットデータパス並びにこれに伴い２４ビット仮数及び２つのガードバンドビットを支持するシステムにおいては、７４及び９６の範囲内のオーバーシフトスレッショルド値が選択されてよく、数７４はＧｂ＋３Ｍｗ（例えば２＋３（２４））に由来し、また数９６は４Ｍｗ（例えば４（２４））に由来する。従って、上述の技術を用いる実装においては、９６以上であるべきオーバーシフトスレッショルド値を選択することは、オーバーシフト検出タイミングパスにおいて、より少ない論理レベル及びこれに伴い最も少数のゲート遅延をもたらすことができる。
【００４４】
逆に、５３ビットデータパスが用いられる更に別の例においては、最大オーバーシフトスレッショルド値は最適な選択ではないかもしれない。この例においては、オーバーシフトスレッショルド範囲は１６１以上且つ２１２以上であろう。この例においては、オーバーシフト値２１２は最適な論理レベル実装を提供しない。事実、１９２は、ＬＳＢで始まり且つ１を伴う最初のビットまで左に移動する複数のビット位置内でより多くの連続したゼロを有するので、１９２以上は、範囲内の他の選択を凌駕してオーバーシフト検出論理の臨界的タイミングパスにおける最も少ないゲート遅延を提供するであろうことが示され得る。
【００４５】
このようにして、最小及び最大オーバーシフトスレッショルドの間にあり且つ値のＬＳＢで始まる最多の連続するゼロのビットを有するオーバーシフトスレッショルド値が選択されてよい。より特定的には、最小及び最大オーバーシフトスレッショルド値として１６１及び２１２を用いる上述の例においては、２１２ｄは１１０１０１００ｂに対応する一方で１９２ｄは１１００００００ｂに対応する。
【００４６】
尚、上述の実施形態は乗算器加算器の関連で説明されているが、他の実施形態においては、オーバーシフト検出論理は任意の浮動小数点加算器において実装される可能性が検討される。そのような実施形態においては、１つの積及び１つの加数の代わりに２つの加数があるであろうし、また、上述したように、シフト器幅はＧｂ＋２（Ｍｗ）であろうし、そして最大オーバーシフトスレッショルドは３（Ｍｗ）であろう。
【００４７】
更に、上述した浮動小数点ユニットは、浮動小数点機能を実行することが可能な任意の種類の処理ユニット内に実装されてよい。
【００４８】
上述の実施形態はかなり詳細に説明されてきたが、上述の開示が完全に理解されるならば種々の変形及び修正が当業者に明らかになろう。以下の特許請求の範囲は、全てのそのような変形及び修正を包含するものとして解釈されることが意図されている。
【図１】
0005719341.tif 000002
【図２】
0005719341.tif 000003
【図３】
0005719341.tif 000004
【図４】
0005719341.tif 000005