(57)【特許請求の範囲】
【請求項１】
掛け算・累積演算Ａ＋（Ｂ＊Ｃ）を、前記掛け算・累積演算を同定する単一命令に応答して実行するためのデータ処理装置であって：
値ＢとＣを掛け算して丸められていない掛け算結果を生成し、更に丸めを決定するために必要な、前記丸められていない掛け算結果に依存する第一データを生成するように構成されている１つの掛け算器と；
丸められていない掛け算結果を値Ａに加算し丸められていない掛け算累積結果を生成し、更に丸めを決定するために必要な第二データを生成するように構成されている１つの加算器と；
第一及び第二データを用いて、丸めを組み込まれた掛け算命令と、それに続く丸めを組み込まれた個別の加算命令を個別に実行するのと同等の最終掛け算・累積演算結果を生成するために必要な１つまたは複数の丸め値を決定するための決定論理と；そして
最終掛け算・累積演算結果を生成するために１つまたは複数の丸め値を供給するための丸め論理とを含む、前記データ処理装置。
【請求項２】
請求項１記載のデータ処理装置に於いて、決定論理が最終掛け算累積結果を生成するために、丸められていない掛け算累積結果を丸め論理に適用し単一丸め値を生成するように構成されている、前記データ処理装置。
【請求項３】
請求項１記載のデータ処理装置に於いて、掛け算器により生成された第一データがガード及び付着ビットを含み、決定論理がこの第一データから掛け算器丸め値を決定するための第一論理を含む、前記データ処理装置。
【請求項４】
請求項３記載のデータ処理装置に於いて、第一データが更に掛け算結果の１つまたは複数の最下位ビットを含む、前記データ処理装置。
【請求項５】
請求項３記載のデータ処理装置に於いて、決定論理が更に第二論理を含み、これが掛け算器丸め値と第二データから１つまたは複数の丸め値を決定するためのものである、前記データ処理装置。
【請求項６】
請求項１記載のデータ処理装置に於いて、加算器が、値Ａと掛け算結果の小さい方を、加算を実行する前に整列させるための整列シフト器と、整列シフト器でシフトアウトされたビットが全て１であるか全て０であるかを検出するための検出ユニットとを含む、前記データ処理装置。
【請求項７】
請求項６記載のデータ処理装置に於いて、加算器で生成された第二データがガードおよび丸めビット、検出ユニットの出力、及び丸められていない掛け算累積結果の最下位ビットの一群を含む、前記データ処理装置。
【請求項８】
請求項１記載のデータ処理装置に於いて、掛け算器が部分結果を桁上げ保存形式で生成するための掛け算ユニットと、掛け算結果を生成するための積加算器とを含む、前記データ処理装置。
【請求項９】
請求項８記載のデータ処理装置に於いて、掛け算器が更に掛け算ユニットで生成された部分積の一群の最下位ビットを一緒に加算するための付着加算器と、付着加算器の出力からガード及び付着ビットを生成するためのガード及び付着ビット生成器とを含む、前記データ処理装置。
【請求項１０】
請求項１記載のデータ処理装置に於いて、丸められていない掛け算累積結果が仮数と指数を含み、データ処理装置が更に仮数をインクリメントするための更新器を含み、丸め論理が最終掛け算累積結果の最終仮数として仮数またはインクリメントされた仮数のいずれかを、決定論理で生成された１つまたは複数の丸め値の１つに依存して出力するためのマルチプレクサを含む、前記データ処理装置。
【請求項１１】
請求項１０記載のデータ処理装置に於いて、前記１つの丸め値が、仮数またはインクリメントされた仮数のいずれが最終仮数として出力されるべきかを指示するためにマルチプレクサに入力される最終更新信号を含む、前記データ処理装置。
【請求項１２】
請求項１１記載のデータ処理装置に於いて、丸め論理が更に、仮数をインクリメントした結果がオーバーフローした場合に指数をインクリメントするための指数更新論理を含み、インクリメントされた仮数が最終仮数として選択される、前記データ処理装置。
【請求項１３】
請求項１記載のデータ処理装置に於いて、決定論理が第一変換器を含み、第一変換器が加算器で生成された第二データを受信し、加算器によって丸められていない掛け算累積結果に適用された右シフト正規化を補償する、前記データ処理装置。
【請求項１４】
請求項１３記載のデータ処理装置に於いて、決定論理が第一データから掛け算器丸め値を決定するように構成されており、また決定論理が更に掛け算器丸め値を第一変換器回路の出力に適用する第二変換器を含む、前記データ処理装置。
【請求項１５】
請求項１４記載のデータ処理装置に於いて、決定論理が更に第三変換器を含み、これが予め定められた丸め公式を第二変換器から出力された信号に適用して１つまたは複数の丸め値を生成するためのものである、前記データ処理装置。
【請求項１６】
掛け算・累積演算Ａ＋（Ｂ＊Ｃ）を前記掛け算・累積演算を同定する単一命令に応答して実行するための方法であって：
値ＢとＣとを掛け算して丸められていない掛け算結果を生成し、丸め決定に必要な、前記丸められていない掛け算結果に依存する第一データを生成し；
丸められていない掛け算結果を値Ａに加算して丸められていない掛け算・累積結果を生成し、丸め決定に必要な第二データを生成し；
第一及び第二データを用いて、丸めを組み込まれた掛け算命令を実行し、続いて丸めを組み込まれた個別の加算命令を個別に実行したのと等価な最終掛け算・累積結果を生成するために必要な１つまたは複数の丸め値を決定し；そして
１つまたは複数の丸め値を適用して最終掛け算・累積結果を生成する、以上を含む、前記方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は掛け算累積演算実行用データ処理装置並びに方法に関する。
【０００２】
【従来の技術】
データ処理装置では種々の浮動小数点演算をデータ上で実行する事を要求されるのが一般的である。その様な浮動小数点計算が種々のデータ処理装置で一定の方法で取り扱えることを保証するために、１つの標準が１９８５年、“バイナリ浮動小数点算術に関するＩＥＥＥ標準”、ＡＮＳＩ／ＩＥＥＥ標準７５４−１９８５、電気電子技術者協会（ＩＥＥＥ）社、ニューヨーク、１００１７（これ以降ＩＥＥＥ７５４−１９８５標準とよぶ）に制定されている。この標準は中でも掛け算演算が丸め演算で終了すべきこと、また同様に加算または累積演算も丸め演算で終了すべきことを定めている。このＩＥＥＥ７５４−１９８５標準は更に、ＩＥＥＥ７５４−１９８５標準に適合すると考えられる丸め演算の回数の定義も提供している。
【０００３】
汎用目的プロセッサは浮動小数点計算性能に合致していないことが知られており、従ってその様な計算を取り扱うために特殊浮動小数点ユニット（ＦＰＵ）が開発されている。
【０００４】
一般的に要求される特別な浮動小数点計算の１つは掛け算・累積演算であり、ここでは２つの数が互いに掛け算され、その積が第三数に加算される。掛け算・累積演算はＩＥＥＥ７５４−１９８５標準では特に議論されておらず、掛け算と累積演算とが個別に議論されている。もちろん掛け算・累積演算は掛け算命令に続いて別の累積命令を実行することにより実現できるが、その様なやり方は相対的に遅くなる。
【０００５】
従って、高速に掛け算・累積演算を実行するように特別に構成されたＦＰＵを開発することに大きな関心が存在する。この様なＦＰＵの１例がＵＳ−Ａ−４，９６９，１１８に開示されており、これはＩＢＭで開発された掛け算・累積演算を実行するためのＦＰＵを説明している。ＩＢＭ技術によれば、部分掛け算器が２つの数の部分積を生成し、この部分積が加算回路に送られて第三数と加算される。従って掛け算・累積演算は‘融合’されており、掛け算の結果は累積演算の前に別個に決定されることは無い。このやり方は掛け算・累積演算の速度を飛躍的に向上させる。
【０００６】
更に掛け算は掛け算からの全てのビット（ｎ＊ｎビットの掛け算では２ｎビット）を含む内部精度で実行され、続いて累積は掛け算ビットの全てを用いて実行される。これは掛け算の結果に対してそれが後続の累積で使用される前に丸めが行われていないので、特に正確な結果を与える。しかしながらこの技術はＩＥＥＥ７５４−１９８５標準に適合していない、それはこの標準は掛け算結果に対して丸め演算が実行されるべき事を定めているからである。
【０００７】
掛け算・累積演算速度を向上させそして／または回路の複雑さを軽減するために、特に設計されたＦＰＵの別の例がＵＳ−Ａ−５，２４１，４９３，  ＵＳ−Ａ−５，３７５，０７８，  ＵＳ−Ａ−５，５３０，６６３  及び  ＥＰ−Ａ−０，６４５，６９９，  ＵＳ−Ａ−４，８６６，６５２  及び  ＵＳ−Ａ−４，８４１，４６７に記載されている。これらのドキュメントの何れも丸めに関して触れておらず、特に何れもＩＥＥＥ７５４−１９８５標準に適合した結果を算出することに関心を払っていない。
【０００８】
ＭＩＰＳ  Ｒ１００００製品の中で使用されている、これに代わるやり方は掛け算器と加算器を別の論理ユニットとして保持するものである。掛け算・累積演算を実行する際、丸めが掛け算器ユニットの出力に施され、続いて加算器論理ユニットに入力され、その加算器論理ユニットの結果もまた丸められる。これはＩＥＥＥ７５４−１９８５に適合する結果を掛け算・累積演算に対して得られるが、掛け算・累積演算を実行するために特別に構成された特殊論理ユニットから得られる速度的利益は確保できない。
【０００９】
【発明が解決しようとする課題】
本発明の目的は、単一命令に応答して掛け算・累積演算を効率的に実行しながら、丸めを組み込まれた個別の掛け算命令を実行し、続いて丸めを組み込まれた加算命令を実行するのと等価な結果が得られる、データ処理装置並びに方法を提供することである。
【００１０】
【課題を解決するための手段】
従って本発明は、掛け算・累積演算Ａ＋（Ｂ＊Ｃ）を、前記掛け算・累積演算を同定する単一命令に応答して実行するためのデータ処理装置を提供し：値ＢとＣを掛け算して丸められていない掛け算結果を生成し、更に丸めを決定するために必要な第一データを生成するように構成されている１つの掛け算器と；丸められていない掛け算結果を値Ａに加算して丸められていない掛け算累積結果を生成し、更に丸めを決定するために必要な第二データを生成するように構成されている１つの加算器と；第一及び第二データを用いて、丸めを組み込まれた個別の掛け算命令と、それに続く丸めを組み込まれた個別の加算命令を実行するのと同等の最終掛け算・累積演算結果を生成するために必要な１つまたは複数の丸め値を決定するための決定論理と；そして最終掛け算・累積演算結果を生成するために１つまたは複数の丸め値を供給するための丸め論理とを含む。
【００１１】
本発明によれば、値ＢとＣを掛け算することにより丸められていない掛け算結果を生成し、更に丸めを決定するために必要な第一データを生成するための掛け算器が具備されている。同様に値Ａを丸められていない結果に加算して丸められていない掛け算・累積演算結果を生成し、更に丸めを決定するために必要な第二データを生成するための加算器が具備されている。次に、決定論理は第一及び第二データを用いて、丸めを組み込まれた個別の掛け算命令と、それに続く丸めを組み込まれた個別の加算命令を実行したのと等価な最終掛け算・累積演算結果を生成するために必要な１つまたは複数の丸め値を決定するように構成されている。
【００１２】
このやり方により、ＩＥＥＥ７５４−１９８５標準に適合した結果を生成し、掛け算・累積命令を高速で実行できる専用掛け算・累積論理を提供することが出来る。
【００１３】
１つの実施例では、決定論理は加算演算中の適切なステップで供給される複数の丸め値を決定するように構成できる。しかしながら提出された実施例では、決定論理は丸め論理によって丸められていない掛け算・累積結果に供給され、最終掛け算・累積結果を生成するための単一丸め値を生成するように構成されている。このやり方は掛け算・累積演算の実行速度を更に改善する。
【００１４】
好ましい実施例に於いて、掛け算器で生成された第一データはガード及び付着ビットを含み、決定論理は第一データから掛け算器丸め値を決定するための第一論理を含む。更に第一データは好適に、１つまたは複数の掛け算結果の最下位ビットを含み、これはまた掛け算器丸め値を生成する中で使用される。この様な提出された実施例に於いて、決定論理は更に１つまたは複数の丸め値を、掛け算器丸め値と第二データとから決定するための第二論理を含む。
【００１５】
好ましい実施例に於いて、加算器は加算を実行する前に値Ａと掛け算結果の小さい方を整列させるための整列シフト器（ａｌｉｇｎｍｅｎｔ  ｓｈｉｆｔｅｒ）と、また整列シフト器でシフトアウトされたビットが全て１であるかまたは全てゼロであるかを検出するための検出ユニットを含む。この実施例に於いて、加算器で生成された第二データは、好適にガード及び丸めビットと検出ユニットの出力とを含む。
【００１６】
掛け算器を多数の方法で構成できることは明らかであろう。しかしながら、好ましい実施例に於いて、掛け算器は桁上げ保存形式で部分結果を生成するための掛け算ユニットと、掛け算結果を生成するための積加算器とを含む。更に掛け算器は好適に掛け算ユニットで生成された部分積の一群の最下位ビットを互いに加算するための付着加算器と、付着加算器の出力からガード及び付着ビットを生成するためのガード及び付着ビット生成器とを含む。
【００１７】
理解されるであろうが、多数のやり方で最終掛け算・累積結果を１つまたは複数の丸め値を用いて生成することが可能である。好ましい実施例に於いて、値Ａ，Ｂ及びＣは仮数と指数とで構成され、これらは別々に取り扱われる。従って提出された実施例に於いて、丸められていない掛け算・累積結果は仮数と指数とを含み、データ処理装置は更に仮数をインクリメントするための更新器（ｉｎｃｒｅｍｅｎｔｅｒ）を含み、そして丸め論理は仮数またはインクリメントされた仮数のいずれかを最終掛け算・累積結果として、決定論理で生成された前記１つまたは複数の丸め値の１つに依存して出力するためのマルチプレクサを含む。この様な提出された実施例に於いて、１つの丸め値は好適にマルチプレクサに入力される最終インクリメント信号を含み、これは仮数またはインクリメントされた仮数のどちらが最終仮数として出力されるべきかを示す。
【００１８】
理解されるように、仮数を更新する際にオーバーフロー条件が生じる可能性がある。これを説明するために、丸め論理は好適に更に仮数をインクリメントした結果がオーバーフローする場合に指数をインクリメントするための指数更新論理を含み、インクリメントされた仮数が最終仮数として選択される。
【００１９】
好ましい実施例に於いて、決定論理は第一変換器を含み、これは加算器で生成された第二データを受信し、丸められていない掛け算・累積結果に対して加算器が行った右シフト正規化を補償する。更に、決定論理は好適に第一データから掛け算器丸め値を決定するように構成され、また決定論理は好適に更に掛け算器丸め値を第一変換器回路の出力に供給するための第二変換器を含む。この様な実施例に於いて、決定論理は好適に更に第三変換器を含み、これは第二変換器からの信号出力に予め定められた丸め公式を適用し、１つまたは複数の丸め値を生成する。
【００２０】
第二の特徴に鑑み、本発明は掛け算・累積演算Ａ＋（Ｂ＊Ｃ）を前記掛け算・累積演算を同定する単一命令に応答して実行するための方法を提供しており、これは：値ＢとＣとを掛け算して丸められていない掛け算結果を生成し、そして丸め決定に必要な第一データを生成し；丸められていない掛け算結果を値Ａに加算して丸められていない掛け算・累積結果を生成し、そして丸め決定に必要な第二データを生成し；第一及び第二データを用いて、丸めを組み込まれた個別の掛け算命令を実行し、続いて丸めを組み込まれた個別の加算命令を実行したのと等価な最終掛け算・累積結果を生成するために必要な１つまたは複数の丸め値を決定し；そして１つまたは複数の丸め値を適用して最終掛け算・累積結果を生成する、以上で構成されている。
【００２１】
【発明の実施の形態】
本発明を添付図に図示された提出された実施例を単なる例としてのみ参照しながら、更に説明する。
【００２２】
図１はデータ処理システム２２を図示し、主プロセッサ２４，浮動小数点ユニット（ＦＰＵ）コプロセッサ２６、キャシュメモリ２８、主メモリ３０および入出力システム３２を含む。主プロセッサ２４、キャシュメモリ２８、主メモリ３０及び入出力システム３２は主バス３４を経由してリンクされている。コプロセッサバス３６は主プロセッサ２４を浮動小数点ユニットコプロセッサ２６にリンクしている。
【００２３】
動作に際して、主プロセッサ２４（またＡＲＭコアと参照される）は、キャシュメモリ２８、主メモリ３０及び入出力システム３２との相互作用を含む一般的型式のデータ処理操作を制御するデータ処理命令のストリームを実行する。データ処理命令のストリームの中にはコプロセッサ命令が組み込まれている。主プロセッサ２４はこれらのコプロセッサ命令が、付属のコプロセッサで実行されるべきものとして認識する。従って主プロセッサ２４はこれらのコプロセッサ命令をコプロセッサバス３６上に発行し、そこからこれらは付属のコプロセッサで受信される。この場合ＦＰＵコプロセッサ２６は全ての受信されたコプロセッサ命令を受容し、検出されたものが意図するように実行する。この検出はコプロセッサ命令内のコプロセッサ番号フィールドを介して行われる。
【００２４】
図２は図１のＦＰＵコプロセッサ２６を更に詳細に図示するブロック図である。図２に図示されるように、ＦＰＵ２６は浮動小数点演算を実行するためのデータ経路構成要素ブロック１６０、コプロセッサバス３６を経由して主プロセッサ２４とインタフェースするためのコプロセッサインタフェース１８０、及び特に浮動小数点演算用の入力値と浮動小数点演算の結果を格納するためのレジスタファイル１７０とを有する。
【００２５】
浮動小数点命令が主プロセッサからＦＰＵ２６へ通される際に、これはコプロセッサインタフェース１８０で受信され、これは浮動小数点命令がＦＰＵ２６で処理できるか否かを判定する。従って何らかの理由でデータ経路構成要素ブロック１６０が新たな命令が受信された時点で、その新たな命令の実行を開始できない場合、従ってコプロセッサインタフェース１８０は主プロセッサに通知する。しかしながら、命令を実行できると判断すると、コプロセッサインタフェース１８０は制御信号を生成し、データ経路構成要素ブロック１６０に送って浮動小数点演算を開始させる。
【００２６】
浮動小数点演算を実行する前に、この演算用の入力値はデータバスを介してレジスタファイル１７０に通される。次にコプロセッサインタフェース１８０は制御信号をレジスタファイル１７０に送信して、この入力値を適切なソースレジスタに中に格納させる。
【００２７】
浮動小数点演算が開始されるとき、ソースレジスタの内容はレジスタファイル１７０からデータ経路構成要素ブロック１６０へ出力される。更に、浮動小数点演算が完了すると、その結果はデータ経路構成要素ブロックから、適切な行き先レジスタに格納されるようにレジスタファイル１７０に送られる。
【００２８】
図３は図２のデータ経路構成要素ブロック１６０を更に詳細に図示するブロック図である。データ経路構成要素ブロック１６０はデータ経路論理１００と制御回路１１０とで構成されている。データ経路論理１００は値ＢとＣとを掛け算して掛け算結果を生成するための掛け算器１２０と値Ａを掛け算結果に加算するための加算器１３０とを有する。更に丸め論理１４０が、加算器１３０の出力である掛け算累積結果の値に丸めを施すために具備されている。
【００２９】
制御回路１１０はＦＰＵ２６で実行されるべき命令（例えば加算、掛け算、または掛け算累積）を識別するためのデータと演算用の入力（例えば、Ａ，Ｂ及びＣ）を受信し、種々の制御信号をデータ経路論理に送ることによりデータ経路論理１００内の種々の論理構成要素の動作を制御する。更に、データ経路内の種々の点に於いてデータ経路論理は信号を制御回路に供給するように構成されており、それらは制御回路で適切な制御信号を生成するように使用される。これらの信号は図４から図９を参照して後ほど更に詳細に説明する。
【００３０】
簡明にするために丸めに関連するデータ経路と制御論理との間の信号伝送のみが図２及び図３に図示されている。従って掛け算器１２０は丸め決定のために必要な第一データ信号を、制御回路１１０内の決定論理１５０に送り、また同様に加算器１３０は丸め決定に必要な第二データ信号を決定論理１５０に提供する。続いて決定論理１５０はこれらのデータ信号を使用して丸め値を生成し、それをデータ経路論理１００内の丸め論理１４０に出力する。続いて丸め論理１４０は丸め値を用いて最終掛け算累積結果を生成する。
【００３１】
後ほど更に詳しく説明するように、決定論理は丸め値が丸め論理１４０から供給された際に、掛け算・累積結果が丸めを組み込まれた個別の掛け算命令と、それに続く丸めを組み込まれた個別の加算命令を実行して得られた結果と等価になることを保証するように丸め値を生成するように構成されている。
【００３２】
本発明の好ましい実施例に基づけば、ＦＰＵ２６は浮動小数点掛け算・累積連鎖（FMAC: floating point multiply-accumulate chained）演算を実行するように構成されており、ここで掛け算・累積演算は掛け算と累積との間での効果的な丸めを具備して実行される。提出された実施例に於いて、実行段Ｅ１からＥ４を有する４段パイプラインが採用されている。提出された実施例に於いて、掛け算・累積演算に際して各々の段で実行される演算は以下の通りである：
Ｅ１：
・乗数（Mant(C)）と被乗数（Mant(B)）の仮数を掛け算し、冗長形式で結果を生成する。
・乗数と被乗数の指数を合計し積の指数を形成する。
・これを被加算数の指数と比較し、被加算数または積の大きな方のオペランドを選び、小さい方のオペランドに対するシフト数を計算する。
Ｅ２：
・掛け算結果の２つの部分を合計し、非冗長形式とする。
・被加算数と積の小さい方を整列シフト器に接続されているレジスタに接続する。
・被加算数と積の大きな方を、被加算数反転マルチプレクサ（ａｕｇｅｎｔ  ｎｅｇａｔｅ  ｍａｌｔｉｐｌｅｘｅｒ）に接続されているレジスタに接続する。
・正しい丸めとするために積をインクリメントする必要が有るかを計算する。
Ｅ３：
・被加算数と積の小さい方をシフトし、大きな方の加算数と整列させる。
・演算が実質引き算の場合、被加算数を反転する。
・小さな方と大きな方の加算数を加算する。
Ｅ４：
・合計値内の先頭１及び０の位置を計算する。
・掛け算丸め計算と加算丸め計算から、丸めが必要かを計算する。
・必要で有れば合計値をインクリメントする。
・合計値を正規化する。
・最終指数を計算し、合計値が計算または丸めの中でオーバーフローする場合、指数をインクリメントする。
【００３３】
先に概要を示したＦＭＡＣアーキテクチャはＩＥＥＥ７５４−１９８５標準と矛盾せず、同一丸めモードを使用して共に丸めを施された浮動小数点掛け算に続いて浮動小数点加算を行ったのと同様のビットレベルで一致する結果を生成する。ＦＭＡＣアーキテクチャのサイクル総数は、先に説明した従来技術によるＩＢＭ手法よりもたった１つ大きいだけで、一方スループットは単精度演算に対しては演算当たり１サイクル、そして倍精度に対しては演算当たり２サイクルを維持している。
【００３４】
本発明の好ましい実施例に於いて、上記のＦＭＡＣを実施するために使用されるデータ経路論理１００を図４から図９を参照して更に詳細に説明する。図４から図７は入力値の仮数を処理するために使用されるデータ経路論理の構成要素を図示する図であり、一方図８と図９は入力値の指数を処理するために使用されるデータ経路論理の構成要素を図示する図である。
【００３５】
図４はパイプラインの段Ｅ１中に仮数に対して実施される処理を図示する。値Ｂ及びＣの仮数は掛け算器２００に入力され、これは任意の既知の設計で構わず、この掛け算器は値ＢとＣを互いに掛け算し、桁上げ保存形式で積を生成するように構成されている。合計データはレジスタ２３０へ出力され、桁上げデータはレジスタ２４０に出力される。一方で、値Ａの仮数は直接レジスタ２１０に通される。更にＡとＢとの単純加算を行うために、値Ｂの仮数はまたレジスタ２２０に出力される。
【００３６】
図８はパイプラインの段Ｅ１中に指数に対して実施される処理を図示する。値Ｂ及びＣの指数は積指数加算器６００に入力され、それらは此処で加算されて積指数を生成し、これは指数選択マルチプレクサ６１０に出力される。積指数はまたマルチプレクサ６４０に供給され、これは第二入力として値Ｂの指数を受信する。マルチプレクサ６４０は加算数指数選択信号を制御回路１１０から受信するように構成されており、これはどの入力がマルチプレクサ６４０から出力されるかを制御する。制御回路１１０は実行される演算型式を識別するデータを受信するので、加算数指数選択信号を生成してマルチプレクサ６４０が、ＡとＢの単純加算演算が実行される場合は値Ｂの指数を選択し、または掛け算・累積演算が実行される場合は積指数を選択するように構成することができる。
【００３７】
マルチプレクサ６４０からの出力は加算器６３０に通され、これはまた第二入力として値Ａの指数を反転器６２０で反転されて入力するように構成されている。値Ａの指数は反転されているので、加算器６３０は指数引き算器として動作し、従って経路６５５の上に２つの入力指数の間の差を識別する信号（これ以降ExpDiff信号と呼ぶ）を出力する。更に加算器６３０は経路６５０の上に値Ａの指数がその他の入力指数よりも小さいか否かを示す信号を出力するように構成されている。このA_Smaller信号はExpDiff信号と共に制御回路に通され、データ経路論理用の後続の制御信号を生成するために制御回路で使用される。
【００３８】
指数選択マルチプレクサ６１０は３つの入力、すなわちＡ指数、Ｂ指数及び積指数を受信する。指数選択マルチプレクサ６１０の目的は、実行されるべき演算に関連する最大指数を選択する事である。指数選択マルチプレクサ６１０は制御回路１１０で生成された制御信号で制御される。制御回路はどの演算が実行されるかを知っており、A_Smaller信号を加算器６３０から受信しているので、これは指数選択マルチプレクサ６１０への３つの入力のどれが出力されるべきかを決定するのに必要な全ての情報を持っている。従って、純粋加算演算が実行される場合、ExpMuxSelect信号はＡ指数またはＢ指数のどちらが出力されるべきかを、どちらが大きいか（A_Smaller信号で示されるように）に基づいて指示する。純粋掛け算演算が実行される場合、ExpMuxSelect信号が積指数を選択させるようにする。最後に掛け算累積演算が実行される場合、ExpMuxSelect信号はＡ指数または積指数のどちらが出力されるべきかを、どちらが大きいかに基づいて指示する。
【００３９】
図９に示されるように、指数選択マルチプレクサ６１０からの出力はレジスタ６７０へ通される。パイプラインの段Ｅ２及びＥ３に於いて、この出力値はそれぞれ単にレジスタ６８０および６９０に通される。
【００４０】
図５はパイプラインの段Ｅ２で実行される仮数処理を図示する。レジスタ２３０と２４０からの合計および桁上げデータはそれぞれ、合計及び桁上げデータの最上位ビットが積加算器２５０へ送られ、桁上げ及び保存データの最下位ビットが付着加算器２６０に送られるように分離される。
【００４１】
付着加算器２６０への入力は互いに加算され、ガード及び付着ビット生成器２７０へ出力される。生成器２７０で決定されたガード及び付着ビットは続いて経路２８０の上を制御回路１１０へ出力される。付着加算器２６０への入力の加算結果がオーバーフローすると、オーバーフロービットが経路２６５の上を積加算器２５０へ通される。積加算器への入力は互いに加算され、経路２６５を介して受信された全てのオーバーフロービットを考慮に入れて積Ｐを生成する。この段で積Ｐは丸められておらず、また正規化されていない。
【００４２】
積Ｐは被加算数マルチプレクサ３２０と加算数マルチプレクサ３３０とに供給され、これらのマルチプレクサはまた値ＡおよびＢの仮数をそれぞれレジスタ２１０及び２２０から受信するように構成されている。積Ｐの最下位ビットの数、好ましい実施例ではビット０と１、は２７５の上を制御回路１１０へ出力される。当業者には理解されるように、経路２７５の上に出力された最下位ビットと経路２８０の上に出力されたガード及び付着ビットに基づいて、制御回路は掛け算結果Ｐが丸められるべきか否かを指示する丸め値（これ以降MulRoundと呼ぶ）を生成するように構成できる。しかしながら、制御回路はMulRoundを生成はするが、好ましい実施例に於いてこの段階では丸めは実行されない。
【００４３】
加えて、Movfl信号が後ほど丸め中に制御回路で使用されるために経路２８５の上に出力され、このMovfl信号は積加算器２５０の出力がオーバーフローしている場合は論理１値を有し、積加算器２５０の出力がオーバーフローしていない場合は論理０値を有する。
【００４４】
被加算数マルチプレクサ３２０及び加算数マルチプレクサ３３０は制御信号、すなわち大選択（L_Sel）と小選択（S_Sel）信号で、それぞれ制御されており、これらの信号は制御回路で生成される。制御回路はどの演算が実行されているかを知り、またA_Smqller信号を加算器６３０から受信しているので、被加算数マルチプレクサ３２０と加算数マルチプレクサ３３０への３つの入力のどれが出力されるべきかを決定するために必要な全ての情報を有する。純粋加算演算が実行される場合は、L_Sel信号が被加算数マルチプレクサ３２０に値ＡおよびＢの大きい方を選択させ（指数から導かれたA_Smaller信号で指示される通り）、一方S_Selは加算数マルチプレクサ３３０に値Ａ及びＢの小さな方を選択させる。純粋掛け算演算が実行される場合は、L_Sel信号が積Ｐを被加算数マルチプレクサで選択させ、一方S_Sel信号は加算数マルチプレクサにゼロ値を出力させる。最後に掛け算・累積演算が実行される場合は、L_Sel信号は被加算数マルチプレクサ３２０が値ＡとＰの大きな方を選択させ（指数から導かれたA_Smaller信号で指示されるとおり）、一方S_Selは加算数マルチプレクサ３３０が値ＡとＰの小さな方を選択させる。次に被加算数マルチプレクサ３２０と加算数マルチプレクサ３３０からの出力はレジスタ３５０と３６０の中に格納され、後ほどパイプラインの段Ｅ３の中で使用される。
【００４５】
図６はパイプラインの段Ｅ３の中で実行される仮数処理を図示する。レジスタ３６０内に格納されているより小さな値は整列シフト器３９０へ通され、ここでより大きな値と整列されるようにシフトされる。これは制御回路１１０がShiftCount値を経路３９５経由で整列シフト器３９０へ提供することにより実現される。ShiftCount値はパイプラインの段Ｅ１での指数処理中にデータ経路論理１００で出力されたExpDiff信号を用いて制御回路１１０で計算される。
【００４６】
経路４２０の上に出された整列シフト器３９０の出力は、整列された小さい方の値、ガードビットおよび丸めビットで構成されている。ガードビットと丸めビットとは経路４２５の上を制御回路１１０に通され、一方整列された小さい方の値は経路４３０の上を合計値加算器４５０に通される。経路４２０の上の出力に加えて、整列シフト器３９０はまた経路４００の上にシフト処理中にシフトアウトされたビットを出力する。これらのビットは論理４０５に入力され、これはビットが全てゼロかまたは全て１かを判定する。シフトアウトされた各々のビットがゼロだった場合、論理１値が経路４１０の上を出力され、一方シフトアウトされた各々のビットが１だった場合、論理１値が経路４１５の上を出力される。後ほど更に詳細に説明するように、これらの値は経路４２５上のガードおよび丸めビット出力と共に制御回路１１０で使用されて丸めを決定する。
【００４７】
段Ｅ２の途中でレジスタ３５０の中に格納されている大きな方の値は、反転器３７０で反転されたその値の反転版と共にマルチプレクサ３８０に通される。制御回路１１０は命令と種々の入力信号の符号とから、累積論理が“異符号加算”（USA:unlike signed add）、例えばＸ−Ｙを実行するか否かを決定する。その場合は、制御回路は１の論理値を有する被加算数反転信号を出力して、マルチプレクサに反転された大きな方の値を選択させる。それ以外の場合は、被加算数反転信号は０の論理値を有し、マルチプレクサに反転されていない大きな方の値を選択させる。
【００４８】
マルチプレクサ３８０からの出力は経路４４０の上を合計加算器４５０に通され、そこで整列された小さい方の値に加算される。ＵＳＡが実行される場合は、制御回路１１０で生成されたAddCarryIn信号が論理１値にセットされ合計加算器４５０に入力される。これは大きい方の値の正しい２の補数が加算の中で使用されることを保証するために必要である（この２の補数は大きい方の値の負の状態を表す）。先に例として上げたＸ−Ｙを考えると、これは−（−Ｘ＋Ｙ）と等価であり、合計加算器は合計−Ｘ＋Ｙを実行すると見なせる。合計加算器４５０の出力は次にレジスタ４５５に通され、後ほどパイプラインの段Ｅ４の中で使用される。更に最下位ビットＬ［０］，Ｌ［１］及びＬ［２］は経路４５２の上を制御回路１１０に出力され、丸めを決定する際に後ほど使用される。
【００４９】
図７はパイプラインの段Ｅ４で実行される仮数処理を図示する。レジスタ４５５の中に格納されている値は正規化シフト器４５７に通され、これは必要であれば合計加算器の出力に対して右シフトを実行する。この様なＵＳＡ及び同符号加算（LSA:Like Signed Add）演算に対して、合計加算器の出力がオーバーフローする可能性があり、出力を正規化するためにその出力値を１または２ビット右シフトする必要がある（実際上小数点を左にシフトする）。従って制御回路は合計加算器４５０の出力からその様なオーバーフローが生じているか否かを判定し、整列シフト器が出力の適切なシフトを行わせる制御信号を生成するように構成されている。
【００５０】
レジスタ４５５の中に格納されている値はまた論理４８０に通され、そこでゼロの先頭及び１の先頭が決定される。これはＵＳＡ演算を考慮して実行されており、この演算では合計加算器４５０の出力値を正規化するために左シフトさせる必要のある相殺が生じる可能性があるためである。先頭ゼロの位置は経路４８５の上を制御回路１１０に出力され、先頭１の位置は経路４９０の上を制御回路１１０に出力される。これらの信号は制御回路でNormShiftCount信号を決定するために使用され、これは仮数を後で正規化する際に使用される。このNormShiftCount信号はＵＡＳ演算による全ての相殺に対処するために仮数が左にシフトされるべきビット位置の数を識別する。
【００５１】
整列シフト器４５７の出力は、反転器４６０で反転されたその値を反転したものと一緒にマルチプレクサ４６５に通される。制御回路１１０は合計加算器４５０の出力が負であるか否かを評価し、負の場合はResult Negative制御信号を経路４７０の上を１の論理値を有するマルチプレクサ４６５に送る。これはマルチプレクサ４６５に反転器４６０から受信された反転入力を選択させる。それ以外の場合は、レジスタ４５５から直接受信された非反転入力が選択される。
【００５２】
マルチプレクサ４６５の出力は更新器５００と、丸め選択マルチプレクサ５１０に通される。丸め選択マルチプレクサ５１０はまた更新器５００の出力も受信し、制御回路１１０から経路５１５の上を通された最終インクリメント信号に応答して、２つの入力の１つを選択し正規化器５２０に出力する。制御回路１１０は段Ｅ２内で生成されたMulRoundから、及びパイプラインの段Ｅ３の間に経路４１０，４１５，４２５及び４５２の上に出力された種々の信号とから、最終インクリメント信号の値を決定する。制御回路１１０での最終インクリメント信号の生成について後ほど詳細に説明する。
【００５３】
正規化器５２０は丸め選択マルチプレクサ５１０から出力を受信し、先に説明したNormShiftCountで決定されたように、出力の全ての正規化を実行する。正規化器５２０からの出力は続いて最終結果の仮数としてレジスタ５３０の中に格納される。
【００５４】
図９はパイプラインの段Ｅ４内で実行される指数処理を図示する。レジスタ６９０の中に格納されている指数値は指数調整加算器７００に入力され、これはまた第二入力としてマルチプレクサ７１０の出力も受信する。マルチプレクサ７１０は制御回路１１０から出力されたExpAdjust信号で制御され、この信号はマルチプレクサ７１０への４入力のどれが指数調整加算器７００に出力されるべきかを指示している。従って、仮数の左シフトがNormShiftCountに基づいて段Ｅ４で実行される場合、ExpAdjust信号はマルチプレクサ７１０が反転されたNormShiftCount信号を指数調整加算器７００に出力して、指数を仮数とは逆の考えで調整するようにさせる。同様に、これに代わって指数がシフト器４５７によりパイプラインの段Ｅ４の間に右にシフトされた場合、ExpAdjust信号はマルチプレクサ７１０が指数に対して適切な調整を選択するようにさせる。従って、例えば仮数が１ビット右にシフトされる場合、マルチプレクサ７１０は１の値を出力して指数を１だけインクリメントさせる。
【００５５】
指数調整加算器７００の出力は指数更新器７２０と最終指数選択マルチプレクサ７３０に通される。最終指数選択マルチプレクサ７３０はまた指数更新器７２０からの出力を受信し、制御回路１１０からのFinalExpSel信号で制御され、どの値を最終結果の指数としてレジスタ７４０に出力するかを決定する。仮数のインクリメントされたものがオーバーフローして、図７に示される丸め選択マルチプレクサ５１０で選択される場合、FinExpSel信号は高に駆動されてマルチプレクサ７３０にインクリメントされた指数を選択させる。注意しておかなければならないのは、この時点で仮数のオーバーフローは正規化器５２０で実行される最初の正規化では考慮されておらず、従って仮数は図７には図示されていない更に別の正規化を受けて、仮数をインクリメントすることで引き起こされた全てのオーバーフローに対処している。
【００５６】
データ経路論理１００を詳細に説明したので、制御回路１１０内で丸め値を生成するために使用されている決定論理１５０について説明する。決定論理で実行される丸めの決定はパイプラインの段Ｅ３で生成された７つの信号を、掛け算結果Ｐが丸められるべきか否かを指示する段Ｅ２内の決定論理で生成されたMulRound信号と共に使用して、結果に対して実行される必要のある最終丸めを計算する。段Ｅ３からの７つの信号は：
・シフト器３９０で実行された整列シフトの結果、経路４２５の上に出力されたガード（Ｇ）及び丸め（Ｒ）ビット。
・それぞれ経路４１０及び４１５の上に出力されたAllOnesまたはAllZeros信号で、これらの信号はシフト器３９０でシフトアウトされたビットをチェックした結果である。AllOnesはシフトアウトされた全てのビットが１の場合に成立し、一方AllZerosはシフトアウトされた全てのビットがゼロの時に成立する。シフトアウトされたビットが１及び０の両方を含む場合はどちらも成立しない。
・経路４５２の上のＬ［２］，Ｌ［１］，及びＬ［０］出力で、これらの信号は合計加算器４５０の合計出力の下位３ビットである。
【００５７】
図１０は制御回路１１０の中に具備されている決定論理１５０を更に詳細に図示している。これはパイプラインの段Ｅ３中に生成された上述の７つの信号を受信するための第一変換器８００を含む。第一変換器８００の第一の目的はパイプラインの段Ｅ４中に実行された右シフトを要求する全ての正規化を補償することである。先に述べたように１および２ビットのみの右シフトを準備する必要があるだけである。第一変換器８００からの出力は中間最下位ビット（ＩＬ），ガード（ＩＧ），丸め（ＩＲ）および付着（ＩＳ）ビットであり、これらは第二変換器８１０に入力され、これらの値は下記の表に基づいて決定される：
【００５８】
【表１】
0004166367.tif 000002
【００５９】
上記の表の中、及びこれ以降で用語Inv(X)はＸを反転した値を表すために使用され、一方ＯＲおよびＡＮＤは論理ＯＲまたは論理ＡＮＤ機能を表している。
【００６０】
中間丸めビットは更に第二変換器８１０で処理され、これはMulRound値、合計加算器４５０の合計出力の否定で必要とされる全ての２の補数（この様な否定は制御回路で高に駆動されたResultNegative信号で選択される）、そして３つの有効信号を組み込む。
【００６１】
有効信号はシフト器３９０で実行された整列演算がそれぞれの丸めビットを生成した場合に真であり、整列がそれぞれのビットを生成しない場合は偽である。これを下記の表で二倍精度演算を例として具体的に示す（Movfl信号は積加算器２５０からの積Ｐ出力が1.xyyyでは無くて1x.yyyの形式の時に真（すなわち１）である。ＧＶは有効Ｇビットが整列シフト演算より戻された場合に真である。ＲＶおよびＳＶは同様に有効ＲビットおよびＳビットが整列シフトビット演算より戻された場合に真である。）：
【００６２】
【表２】
0004166367.tif 000003
第二変換器８１０の出力は最終最下位ビット（ＦＬ），ガード（ＦＧ），丸め（ＦＲ）及び付着（ＦＳ）ビットであり、これらは第三変換器８３０に入力される。これらの最終ビットは更に第三変換器８３０で処理されて、ＩＥＥＥ７５４−１９８５丸め式をＦＬ，ＦＧ，ＦＲ，ＦＳ，及び強制更新（ＦＩ）ビットに適用することにより丸め値（段Ｅ４内の丸め選択マルチプレクサ５１０への最終インクリメント信号入力として使用される）を生成する。第三変換器の出力はデータ経路論理の丸め論理１４０で、最終結果を丸めるために使用される。
【００６３】
当業者には理解されるであろうが、浮動小数点加算には２つの異なるケースが存在し、同符号加算と異符号加算である。同符号加算（ＬＳＡ：ｌｉｋｅ−ｓｉｇｎｅｄ  ａｄｄｉｔｉｏｎ）の場合、入力オペランドの符号は加算演算の場合は等しく、引き算の場合は反対である。異符号加算（ＵＳＡ：ｕｎｌｉｋｅ−ｓｉｇｎｅｄ  ａｄｄｉｔｉｏｎ）の場合、符号は加算の場合は反対で、引き算の場合は等しい。以下に示すケースはＬＳＡまたはＵＳＡ演算のいずれかで区別されている。
【００６４】
図４から図９を参照して先に説明したように、‘小さい方’のオペランドまたは‘大きい方’のオペランドの決定は、指数を比較して小さい方の指数を具備したオペランドを‘小さい方’また、もう一方のオペランドを‘大きい方’と示すことで行われている。大きい方のオペランドは被加算数と呼ばれ、一方小さい方のオペランドは加算数と呼ばれている。
【００６５】
第二変換器８１０は６つのケースを考慮している、すなわち：
ケース１：ＬＳＡ，積が小さい
ケース２：ＬＳＡ，積が大きい
ケース３：ＵＳＡ，積が小さい、結果は正
ケース４：ＵＳＡ，積が小さい、結果は負
ケース５：ＵＳＡ，積が大きい、結果は正
ケース６：ＵＳＡ，積が大きい、結果は負
【００６６】
ケース１：ＬＳＡ，積が小さい
演算がＭＡＣの場合、MulRoundビットに基づいて２つのケースが存在する。演算がＭＡＣで無い場合、MulRoundビットは０である。両方のケースに対して、ＦＬビットはＩＬの値にセットされる。
【００６７】
【数１】
0004166367.tif 000004
【００６８】
有効信号（ＧＶ，ＲＶ，及びＳＶ）はこの場合は必要ない。有効で無い場合、丸めビットはゼロであり丸め式の中に正しく組み込まれる。
【００６９】
MulRound=1
このケースは有効信号（ＧＶ，ＲＶ，及びＳＶ）を必要とする。
【００７０】
【表３】
0004166367.tif 000005
【００７１】
Ｓビットは有効である（ＧおよびＲは有効である必要は無い。これらは有効でない場合はゼロである。）
【００７２】
【表４】
0004166367.tif 000006
【００７３】
ケース２：ＬＳＡ，積が大きい
MulRoundビットは経路４４５上を合計加算器４５０に通されたAddCarryIn信号の中に組み込まれている。MulRoundは段４丸めの中では強制的に０とされていて、影響は与えない。
【００７４】
第４段丸めビットは：
ＦＬ＝ＩＬ
ＦＧ＝ＩＧ
ＦＲ＝ＩＲ
ＦＳ＝ＩＳ
ＦＩ＝０
【００７５】
ケース３：ＵＳＡ，積が小さい、結果は正
このケースでは指数は等しく加算数の仮数は被加算数の仮数より大きいか、または積の指数は被加算数の指数より１だけ小さいが、積の仮数はオーバーフローしていて実際上被加算数よりも大きい。
【００７６】
積からの丸めビットの極性は正しく、反転する必要はない。
【００７７】
ＦＬ，ＦＧ，ＦＲ，ＦＳ，及びＦＩビットはケース１と同様に計算される。
【００７８】
ケース４：ＵＳＡ，積が小さい、結果は負
このケースでは加算数丸めビットはMulRoubdビットと同様に、反転されなければならない。
【００７９】
MulRound=0
合計値を反転する際に必要とされる２の補数ビットは、反転された丸めビットのＬＳＢに組み込まれなければならない。
【００８０】
有効ビットは必要でない；丸めビットがその対応する有効ビットの組を持たない場合、それは０であり、反転した後、丸め状況を正しく表すはずである。
【００８１】
【表５】
0004166367.tif 000007
ＦＬビットはＩＬにセットされる。
【００８２】
MulRound=1
MulRoundビットがセットされているので、結果を反転するために必要な２の補数ビットは下記の恒等式に基づき、MulRoundビットで相殺される：
0004166367.tif 000008
丸めビットは以下の通りである：
【００８３】
【数２】
0004166367.tif 000009
【００８４】
ケース５：ＵＳＡ，積が大きい、結果は正
このケースでは、加算数は実際に積よりも大きく、合計値は反転する必要が無い。
【００８５】
ＦＬ，ＦＧ，ＦＲ，ＦＳ，及びＦＩビットはケース１と同様に計算される。MulRoundビットはAddCarryIn信号をゼロにするために第３段で使用された。MulRoundビットは第４段に送られる前に消去される。
【００８６】
ケース６：ＵＳＡ，積が大きい、結果は負
ケース４と同様、加算数丸めビットは反転されなければならない。MulRoundビットはAddCarryIn信号をゼロにするために第３段で使用された。MulRoundビットは第４段に送られる前に消去される。
【００８７】
丸めビットはケース４と同様に計算される。
【００８８】
好ましい実施例のＦＭＡＣ能力を備えていないアーキテクチャに対して、サイクル総数および命令総数の両方に於ける優位性が、下記の簡単なＤＰＳ“有限インパルス応答”（FIR:Finit Impulse Response）フィルタ例で具体的に示されている。この例に於いて、８つの係数と８つのデータ項目が掛け算されて合計されている：
Acc=D0*C0+D1*C1+D2*C2+D3*C3+D4*C4+D5*C5+D6*C6+D7*C7
【００８９】
８つの係数、８つのデータ項目、及びＡｃｃがレジスタの中に有り、また８つの暫定レジスタが利用可能であると仮定すると、従来型プロセッサは以下の演算を実行するはずである：（ＦＭＵＬ及びＦＡＤＤ演算は３サイクルレイテンシィ（ｌａｔｅｎｃｙ）と１サイクルスループットを有すると仮定する。）
【００９０】
【表６】
0004166367.tif 000010
【００９１】
演算毎に１サイクルと３サイクルのレイテンシィを仮定すると、最初の１３演算は従属性を持たずに１３サイクルを順番に実行するはずである。演算１４は演算１２の結果が完了するのを待つために１サイクル停止し、２サイクルを要する。演算１５は停止しないが、それは演算１４の停止中に演算１３がＴ０に書き込みを完了する事が可能なためである、一方最終累積演算１６はＡｃｃ値が演算１５からロードされるのを待つために２サイクルの間停止する。総サイクル数は１６＋１＋２＋２，すなわち１６演算に対して２１サイクルである。
【００９２】
好ましい実施例のＦＰＵ２６内のＦＭＡＣ演算を用いると、以下の演算が同一結果を生成する：（ＦＭＡＣ，ＦＭＵＬ，及びＦＡＤＤ演算は４サイクルレイテンシィと１サイクルスループットを有する。）
【００９３】
【表７】
0004166367.tif 000011
【００９４】
この例に於いて、最初の８つの演算は停止することなく順番に８サイクルで実行される。演算９は演算６がＴ１への書き込みを完了するのを待つために１サイクルの間停止する。演算１０もまた１サイクルの間停止し、一方最終演算１１は演算１０がＴ３への書き込みを完了するのを待つために３サイクルの間停止する。総サイクル数は１１＋１＋１＋３＋３，すなわち１１演算に対して１９サイクルである。
【００９５】
ＦＭＡＣ演算のＤＳＰ機能に対する第１の利点はＦＩＲ演算がパイプラインの深さに展開される際に分かる。例えば、同じ８つのデータ点と８つの係数が４つのセットの中にグループ化され、部分ＦＩＲ演算が４つのデータ点に対して実行される場合、下記の計算は停止することなく実行できる：
【００９６】
【数３】
0004166367.tif 000012
【００９７】
好ましい実施例のＦＰＵ２６内の以下のＦＭＡＣ演算はこれらの式を停止状態を持つことなく実行するはずである：
【００９８】
【表８】
0004166367.tif 000013
【００９９】
このシーケンスは先に与えられた８つのデータと８つの係数演算に対して、再び停止することなく繰り返される。上記の例のスループットはサイクル毎に１掛け算累積演算であり、結果として８データ及び８係数の例では有効サイクル数が８となる。同じループ展開技術を用いた従来型プロセッサでは８データ及び８係数問題に対して１６演算を必要とするが、それは単純に各々の演算が１つの掛け算と１つの加算を必要とし、各々１サイクルが必要だからである。従来型プロセッサは８命令を必要とするが、好ましい実施例のＦＰＵ２６は唯４つを必要とするのみである。
【０１００】
本発明の特定の実施例を説明してきたが、本発明がそれに限定されるものではなく、多くの修正及び追加を本発明の範囲の中で行えることは明らかであろう。例えば、提出された実施例では物理的に分離されているコプロセッサを具備したＣＰＵに関連して説明してきたが、これは必須の要件では無い。例えば浮動小数点ユニットを主プロセッサの中に具備することも可能である。更に、以下の関連する特許請求の項の特徴を、独立した請求項の特徴と本発明の範囲から逸脱することなく種々組み合わせることも出来るであろう。
【図面の簡単な説明】
【図１】図１は本発明の好ましい実施例に基づくデータ処理装置の構成要素を図示するブロック図である。
【図２】図２は本発明の好ましい実施例に基づくＦＰＵコプロセッサの構成要素を図示するブロック図である。
【図３】図３は図２のデータ経路構成要素ブロックを更に詳細に図示するブロック図である。
【図４】図４は本発明の好ましい実施例に基づき仮数を処理するために使用されるデータ経路論理の構成要素を図示するブロック図で、パイプラインの段Ｅ１内の仮数処理を示す。
【図５】図５は本発明の好ましい実施例に基づき仮数を処理するために使用されるデータ経路論理の構成要素を図示するブロック図で、パイプラインの段Ｅ２内の仮数処理を示す。
【図６】図６は本発明の好ましい実施例に基づき仮数を処理するために使用されるデータ経路論理の構成要素を図示するブロック図で、パイプラインの段Ｅ３内の仮数処理を示す。
【図７】図７は本発明の好ましい実施例に基づき仮数を処理するために使用されるデータ経路論理の構成要素を図示するブロック図で、パイプラインの段Ｅ４内の仮数処理を示す。
【図８】図８は本発明の好ましい実施例に基づき指数を処理するために使用されるデータ経路論理の構成要素を図示するブロック図で、パイプラインの段Ｅ１内の指数処理を示す。
【図９】図９は本発明の好ましい実施例に基づき指数を処理するために使用されるデータ経路論理の構成要素を図示するブロック図で、パイプライン内の段Ｅ１からＥ４での指数処理の流れを示す。
【図１０】図１０は本発明の好ましい実施例で使用される、浮動小数点演算の結果に適用される丸め値を決定するための、決定論理を図示する。
【符号の説明】
２２  データ処理システム
２４  主プロセッサ
２６  浮動小数点ユニット（ＦＰＵ）コプロセッサ
２８  キャシュメモリ
３０  主メモリ
３２  入出力システム
３４  主バス
３６  コプロセッサバス
１００  データ経路論理
１１０  制御回路
１２０  掛け算器
１３０  加算器
１４０  丸め論理
１５０  決定論理
１６０  データ経路構成要素ブロック
１７０  レジスタファイル
１８０  コプロセッサインタフェース
２００  掛け算器
２１０，２２０，２３０，２４０  レジスタ
２５０  積加算器
２６０  付着加算器
２７０  付着ビット生成器
３２０  被加算数マルチプレクサ
３３０  加算数マルチプレクサ
３５０，３６０  レジスタ
３７０  反転器
３８０  マルチプレクサ
３９０  整列シフト器
４５０  合計加算器
４５７  整列シフト器
４６０  反転器
４６５  マルチプレクサ
５００  更新器
５１０  丸め選択マルチプレクサ
５２０  正規化器
６００  積指数加算器
６１０  指数選択マルチプレクサ
６２０  反転器
６３０  加算器
６７０，６８０，６９０  レジスタ
７００  指数調整加算器
７１０  マルチプレクサ
７２０  指数更新器
７３０  最終指数選択マルチプレクサ
８００  第一変換器
８１０  第二変換器
８３０  第三変換器
【図１】
0004166367.tif 000014
【図２】
0004166367.tif 000015
【図３】
0004166367.tif 000016
【図４】
0004166367.tif 000017
【図５】
0004166367.tif 000018
【図６】
0004166367.tif 000019
【図７】
0004166367.tif 000020
【図８】
0004166367.tif 000021
【図９】
0004166367.tif 000022
【図１０】
0004166367.tif 000023