(57)【要約】      （修正有）【課題】乗算命令のためのより短いＣＰＩを実現すること。【解決手段】これは２つの部分に分けることができる概念であって、第１の部分は、乗算ハードウェア自体であり、これは乗算器上でブース記録方法またはその他の種類の記録方法を使用して、１走査当たりの部分積の数を減らすコンパクトでフルサイズより小さい乗算器であり、大きなオペランドを使用する乗算は、この中サイズの乗算器に収まる演算のサブグループに分割し、本明細書でモジュラ積と呼ぶその結果を結合し戻して、適切な最終積を生成する。この概念の第２の部分は、オペランドをサブグループに分割し、乗算器にデータと制御信号を入力するために使用するサポート・ハードウェアと、モジュラ積を適切に桁合わせし、結合して最終積を求めるために使用するアルゴリズムと装置である。【選択図】図１
2004342106.tif 000002
【特許請求の範囲】
【請求項１】
スーパースケーラ・プロセッサのための２進乗算器であって、
ｍビットが、前記プロセッサのレジスタの全幅と選択された２進乗算命令のオペランド・データの最大幅とのうちの少なくとも一方を含み、最大ｍビット長の被乗数データを含む第１のオペランドを受け取るように構成された第１のレジスタ入力と、
乗数値と、ｎビット長の前記乗数値の一区分を含む乗数値サブグループとのうちの一方を含む第２のオペランドを受け取るように構成され、ｎが選択された２進乗算命令のオペランド・データの最大幅以下である、第２のレジスタ入力と、
前記乗算器が前記被乗数データ入力から該当ビットを選択して有効な被乗数を生成し、前記被乗数データ入力の不使用ビットをゼロ設定することができるようにする、前記被乗数データのサイズを示す第１の制御信号を受け取るように構成された制御信号入力と、
前記被乗数演算が符号付きであるか符号なしであるかを示す第２の制御信号を受け取るように構成され、前記乗算器が前記有効被乗数の符号拡張を行えるようにするように構成された第２の制御信号入力とを含む２進乗算器。
【請求項２】
前記乗算器は、モジュラ積をシフトし、結合のために他のモジュラ積と桁合わせすることができるようにするように構成された第３の制御信号入力をさらに含む、請求項１に記載の乗算器。
【請求項３】
前記第１の制御信号は、前記被乗数データの長さの解釈を容易にする、請求項１に記載の乗算器。
【請求項４】
前記第２の制御信号は、乗算が符号付き演算と符号なし演算のいずれとして認められるかを制御するとともに、負の表現として２の補数形式を使用することにより、前記被乗数データが符号付きと符号なしのうちのいずれの一方として扱われるかを制御する、請求項１に記載の乗算器。
【請求項５】
前記第１の制御信号が前記第２の制御信号と協働して、前記被乗数データの特徴付けと変更を行って、適切な符号を入手する追加の処理なしに有損失結果を回避し、無損失結果を生成させる、請求項１に記載の乗算器。
【請求項６】
２つの乗数値サブグループ間に連続性をもたせ、それによってｎビットを超える長さの乗数による乗算への対応を可能にする重複ビットを受け取るように構成された入力をさらに含む、請求項１に記載の乗算器。
【請求項７】
乗数値と乗数値サブグループとのうちの前記一方に対して使用して、削減された数の部分積を生成するための記録論理をさらに含む、請求項１に記載の乗算器。
【請求項８】
前記記録論理は、基数４ブース・アルゴリズムを含むがそれには限定されない、請求項７に記載の乗算器。
【請求項９】
記録論理が、各走査グループについて複数ビット信号を生成し、少なくとも１ビットを使用して前記被乗数データのいずれの倍数を選択するかを示し、他の１ビットを使用して前記被乗数データの正または負の倍数を示す、請求項７に記載の乗算器。
【請求項１０】
各走査グループについて記録論理が３ビット信号を生成し、２ビットが前記被乗数データの±１ｘ倍数と±２ｘ倍数とのうちの少なくとも一方を選択するか否かを示し、第３のビットが正または負の倍数を示す、請求項７に記載の乗算器。
【請求項１１】
前記第３のビットを、現行部分積の最下位ビットと同じ列または同じビット位置にある後続の部分積に入力される「ホット１」として使用して２の補数を完結させ、前記被乗数データの負の倍数を実現することをさらに含む、請求項１０に記載の乗算器。
【請求項１２】
加算器を使用して複数の部分積を処理し、前記複数の部分積を２個の積項に圧縮する、請求項１に記載の乗算器。
【請求項１３】
加算器の出力に動作可能に接続され、乗数値と乗数値サブグループとのうちの一方のそれぞれのサイズに基づいて、モジュラ積をｎビット左にシフトさせ、前記モジュラ積の桁合わせを基準にして他のモジュラ積との結合を容易にする、シフタとマルチプレクサの組合せをさらに含む、請求項１に記載の乗算器。
【請求項１４】
スーパースケーラ・プロセッサにおける２進乗算のためのシステムであって、
２進乗算器と、
前記２進乗算器と動作可能に通信し、乗数データと被乗数データをシフトさせて、選択されたサブグループが前記２進乗算器に確実に送られるようにすると共に、モジュラ積を他の１つのモジュラ積と累積モジュラ積のうちの少なくとも一方と適切に結合するために確実に桁合わせされるようにするデータ幅シフタと、
前記シフタと動作可能に通信し、前記乗数データと前記被乗数データを前記シフタに入力するために保持するレジスタと、
前記レジスタと動作可能に通信し、モジュラ積を、他のモジュラ積と累算モジュラ積とのうちの少なくとも一方と累算する加算器と、
前記加算器と動作可能に通信し、前記モジュラ積および前記累算モジュラ積を前記加算器への入力のためと、前記累算モジュラ積の出力とのために保持する複数のレジスタとを含むシステム。
【請求項１５】
比較的データ幅の広い乗数データを使用する、より長期の演算のための可能な早期終了論理を制御するために、符号なし乗数データの小さいオペランド絶対値を検出する先行ゼロ検出論理をさらに含む、請求項１４に記載のシステム。
【請求項１６】
比較的データの幅広い乗数データを使用する、より長期の演算のための可能な早期終了論理を制御するために、負の符号付き乗数データの小さいオペランド絶対値を検出する、先行１検出論理をさらに含む、請求項１４に記載のシステム。
【請求項１７】
前記乗数データと前記被乗数データとをシフトする他のデータ幅シフタをさらに含む、請求項１４に記載のシステム。
【請求項１８】
冗長項を結合して１つのモジュラ積とする他の加算器をさらに含む、請求項１４に記載のシステム。
【請求項１９】
前記乗算器出力が冗長形式の場合、他のレジスタをさらに含み、２つのレジスタが、前記加算器に入力して１つのモジュラ積として結合する冗長項を保持し、前記他のレジスタが前記累算モジュラ積を保持する、請求項１４に記載のシステム。
【請求項２０】
前記乗算器が、サイズの等しい乗数とサイズの異なる被乗数とを使用する乗算のために、制御信号を使用して異なる長さの被乗数データ間で切り換えを行うように構成されている、請求項１４に記載のシステム。
【請求項２１】
前記乗算器が、利用可能なサポート・ハードウェアにおける制約を考慮に入れ、大きなオペランドと大きな結果に対応するため、または早期終了論理に対応するために、前記乗数と前記被乗数サブグループとが任意の順序で処理されるように構成された請求項１４に記載のシステム。
【請求項２２】
スーパースケーラ・プロセッサにおける２進乗算のためのシステムであって、
第１のレジスタと、第２のレジスタと、第３のレジスタと、前記第１のレジスタ、前記第２のレジスタ、および第１のマルチプレクサと動作可能に通信するビット論理ユニットおよび２進加算器を含む実行ユニットであって、前記第１のマルチプレクサが前記第３のレジスタとも動作可能に通信する実行ユニットと、前記第１のレジスタおよび前記実行ユニットと動作可能に通信する第１のローテータと、前記実行ユニットおよび前記第２のレジスタと動作可能に通信する先行ゼロ検出レジスタとを含む第１のパイプラインと、
第４のレジスタと、第５のレジスタと、第６のレジスタと、前記第４のレジスタ、前記第５のレジスタ、および第２のマルチプレクサと動作可能に通信する他のビット論理ユニットおよび他の２進加算器を含む第２の実行ユニットであって、前記第２のマルチプレクサが前記第６のレジスタとも動作可能に通信する第２の実行ユニットと、前記第４のレジスタおよび前記実行ユニットと動作可能に通信するローテータと、前記第２の実行ユニットおよび前記第５のレジスタと動作可能に通信する先行ゼロ検出レジスタとを含む第２のパイプラインと、
第７のレジスタと、第８のレジスタと、第９のレジスタと、前記第７のレジスタおよび前記弟８のレジスタと動作可能に通信する乗算器とを含む第３のパイプラインと、
データの格納と取出しのための汎用レジスタと、
第１のオペランドと第２のオペランドとを入手するオペランド・バッファと、
前記第１のパイプラインと前記第２のパイプラインと前記第３のパイプラインと前記汎用レジスタと前記オペランド・バッファとのうちの少なくとも２者の間の通信のための通信バスとを含むシステム。
【請求項２３】
２進乗算の方法であって、
被乗数を入手するステップと、
乗数を入手するステップと、
前記乗数が選択された長さを超える場合、前記乗数を複数の乗数サブグループに区分化するステップと、
前記被乗数が選択された長さを超える場合、前記被乗数を複数の被乗数サブグループに区分化し、前記被乗数サブグループの符号なしビットをゼロ設定することと前記被乗数サブグループのより小さい部分を符号拡張することとのうちの少なくとも一方を行うステップと、
前記複数の被乗数サブグループのうちの選択された被乗数サブグループと、前記被乗数とのうちの少なくとも一方に基づいて、複数の被乗数倍数を設定するステップと、
前記複数の乗数サブグループの各前記乗数サブグループに基づいて、前記複数の被乗数倍数のうちの１つまたは複数の前記被乗数倍数を選択するステップと、
前記選択方法に基づいてモジュラ積を生成するステップとを含む方法。
【請求項２４】
前記選択方法に基づいて他のモジュラ積を生成するステップと、
前記モジュラ積と前記他のモジュラ積とを桁合わせし、結合して結果積を生成するステップとをさらに含む、請求項２３に記載の方法。
【請求項２５】
記録アルゴリズムを使用して前記複数の乗数サブグループを記録するステップと、
前記記録に基づいて、前記複数の被乗数倍数のうちの１つまたは複数の被乗数倍数を選択するステップとをさらに含み、
前記被乗数倍数も前記記録に基づく、請求項２３に記載の方法。
【請求項２６】
前記記録アルゴリズムが基数４ブース・アルゴリズムである、請求項２５に記載の方法。
【請求項２７】
前記記録ステップが、各走査グループごとに複数ビット信号を生成するステップと、少なくとも１ビットを使用して、前記被乗数のどの倍数を選択するかを示し、他の１ビットを使用して前記被乗数の正の倍数または負の倍数を示すステップとを含む、請求項２５に記載の方法。
【請求項２８】
前記複数ビット信号が３ビット信号であり、２ビットが前記被乗数の０ｘ、±１ｘ、および±２ｘ倍数のうちの１つの倍数を選択するために使用され、第３のビットが前記被乗数の正または負の倍数を示すために使用される、請求項２３に記載の方法。
【請求項２９】
前記他の１ビットを、前記被乗数データの負の倍数を実現するのに必要な２の補数を完結させるために後続の積に入力される「ホット１」として使用するステップをさらに含む、請求項２８に記載の方法。
【請求項３０】
前記被乗数を区分化する前記ステップが、前記被乗数データをセグメント化して有損失結果を回避する、請求項２３に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータおよびプロセッサアーキテクチャにおける算術技法および論理技法の分野に関し、詳細には、一般的なプロセッサ環境に見られる機能と共に使用する２進乗算器の設計に関する。
【背景技術】
【０００２】
２進乗算は、符号付きと符号なしの両方の整数のみを扱い、したがってそのオペランドと結果が完全に２進表現可能な、乗算のサブセットである。２進乗算の最も単純な方法は、人間による実行方法を模倣したもので、被乗数を乗数によって、一度に乗数一桁ずつ処理して部分積を生成し、それらの部分積を合計して最終積を生成する。人間による乗算方法を２進数に適用した一例を以下に示す。
符号なし乗算（完全結果表現について４ビット×４ビット−＞８ビット）
１１１０  被乗数      １４
０１１１  乗数        ０７
−−−−              −−
１１１０  ｐｐ１      ９８
１  １１０  ｐｐ２      ００
１  １  １０  ｐｐ２      −−
０００  ０    ｐｐ３
−−−−−−−
０１１０００１０  積        ９８
【０００３】
この方法は、符号付き乗算にも適用される。しかし、２の補数の負の表現と符号拡張の使用により、結果の符号を処理する追加処理が不要になる。
符号付き乗算（オペランドを８に符号拡張  ４ビット×４ビット−＞８ビット）
１１１１  １１１０  被乗数      −２
００００  ０１１１  乗数          ＋７
−−−−        −−
１１１１  １１１０  ｐｐ１      −１４
１１１１  １１０  ｐｐ２      
１１１１  １０  ｐｐ３
００００  ０  ｐｐ４
００００    ｐｐ５
０００    ｐｐ６
００    ｐｐ７
０    ｐｐ８
−−−−−
１１１１  ００１０  積          −１４
【発明の開示】
【発明が解決しようとする課題】
【０００４】
この乗算方法はきわめて単純で、シフタ、加算器、および積累算器を使用したハードウェアでの実施が比較的容易であるが、１乗数ビットを処理して部分積を生成するのに１サイクル要するとすれば、ｎビットの乗数による演算を完了するにはｎサイクルも要することになる。現在の高速コンピューティングの分野でのこのような長い１命令当たりサイクル（ＣＰＩ）時間は、阻害要素とみなされる。乗算命令のためのより短いＣＰＩを実現する解決策は、部分積をグループにして一度に計算するために追加のハードウェアを使用し、それらを同時に処理するのに必要な加算器を構築することである。この問題に対してハードウェアを投入するこの強引な手法によって、ＣＰＩは短縮されるが、乗算機能専用のチップ面積を増大させることにもなる。特に加算器は、特に機能仕様に通常付随する面積とタイミングの制約の点で扱いが難しい。したがって、乗数の複数のビットを一度に処理することによって部分積を減らすことにより加算器のサイズを小さくする多くの方法が策定されている。比較的一般的な方法の１つは、ブースの記録アルゴリズムである。
【０００５】
ブースの記録アルゴリズムは、複数ビットを走査することによって、所与のｎビット乗数から生成される部分積の数を減らす方法である。この方法は、値「１」の最下位ビットが有効値２ｎを持ち、１のストリングがｚビット長である２進１のストリングを、２ｎ＋ｚ−２ｎとも表すことができるという考え方に基づいている。たとえば、ストリング０ｂ０１１１は、２３−２０＝７と表すことができ、ストリング０ｂ１１１０は２４−２１＝１４と表すことができる。
【０００６】
上記の例では、各ビットの重みは２ｎであり、ｎは該当するビットの位取り値である。１のストリングの検出は、走査乗数ビットのグループを１ビットだけ重複させることによって行う。走査数値が重複ビットによる１ビット走査における乗数である乗算へのこのカウント方法の適用は、その右側の重複ビットが「０」である「１」ビットによって検出されたストリングの最後にあるビット（ストリングの最下位ビット）に、値−（２ｎ）＊（被乗数）を与え、重複ビットが「１」である位置の「０」によって検出されたストリングの最初にあるビット（ｚビットストリングの最上位ビット）に値（２ｎ）＊（被乗数）を与え、０または１のストリングの中央にあるビットに値ゼロを与えるという単純なものである。これを、以下の表にまとめる。この表では、左端のビットがストリングの位置ｎにあるビットであり、右端のビットがストリングの検出に必要な重複ビットである。「調整被乗数値」の列は、被乗数倍数値を示す。この値の重みは、該当する走査ビットの位置によって暗黙に示すことができる。
【０００７】
【表１】
2004342106.tif 000003
【課題を解決するための手段】
【０００８】
ブースの記録方法を有利に実施する鍵は、１グループとして走査するビット数を増やし、それによって乗数の必要な走査全体を減らすとともに、部分積の数と、部分積を結合するのに必要なハードウェアを少なくすることである。一般的な走査グループサイズは３ビットであり、２走査ビットと、最下位位置にある重複ビットとから成る。これが普及している理由は、記録を実現するのに必要な被乗数倍数が、単に０ｘ、±１ｘ、および±２ｘであり、シフタ、インバータ、および２の補数の方法を使用してすべての可能な倍数を実現することにより、すべて比較的容易に実現されるのに対し、より大きな走査グループサイズでは±３ｘなどのより高い倍数を実現する加算器が必要になることによる。
【０００９】
本明細書において一実施例で開示する２進乗算の方法は、被乗数を入手するステップと、乗数を入手するステップと、該乗数が選択された長さを超える場合、該乗数を複数の乗数サブグループに区分化するステップと、該被乗数が選択された長さを超える場合、該被乗数を複数の被乗数サブグループに区分化し、該被乗数サブグループの不使用ビットをゼロ設定することと該被乗数サブグループのより小さい部分を符号拡張することとのうちの少なくとも一方を行うステップとを含む。また、この方法は、該複数の被乗数サブグループのうちの選択された被乗数サブグループと該被乗数とのうちの少なくとも一方に基づいて、複数の被乗数倍数を設定するステップと、該複数の乗数サブグループの各該乗数サブグループに基づいて、該複数の被乗数倍数のうちの１つまたは複数の該被乗数倍数を選択するステップと、該選択方法に基づいてモジュラ積を生成するステップとを含む。
【００１０】
本明細書において他の実施例で開示するスーパースケーラ・プロセッサのための２進乗算器は、ｍビットが、該プロセッサのレジスタの全幅と選択された２進乗算命令のオペランド・データの最大幅とのうちの少なくとも一方を含む、最大ｍビット長の被乗数データを含む第１のオペランドを受け取るように構成された第１のレジスタ入力と、乗数値と、ｎビット長の該乗数値の一区分を含む乗数値サブグループとのうちの一方を含む第２のオペランドを受け取るように構成され、ｎが選択された２進乗算命令のオペランド・データの最大幅以下である第２のレジスタ入力とを含む。また、この乗算器は、該乗算器が該被乗数データ入力から該当ビットを選択して有効な被乗数を生成し、該被乗数データ入力の不使用ビットをゼロ設定することができるようにする、前記被乗数データのサイズを示す第１の制御信号を受け取るように構成された制御信号入力と、該被乗数演算が符号付きであるか符号なしであるかを示す第２の制御信号を受け取るように構成され、該乗算器が該有効被乗数の符号拡張を行えるようにするように構成された第２の制御信号入力とを含む。
【００１１】
本明細書においてさらなる他の実施例でさらに開示するスーパースケーラ・プロセッサにおける２進乗算のためのシステムは、２進乗算器と、該２進乗算器と動作可能に通信し、乗数データと被乗数データをシフトさせて、選択されたサブグループが該２進乗算器に確実に送られるようにすると共に、モジュラ積を他の１つのモジュラ積と累積モジュラ積のうちの少なくとも一方と適切に結合するために確実に桁合わせされるようにするデータ幅シフタと、該シフタと動作可能に通信し、該乗数データと該被乗数データを該シフタに入力するために保持するレジスタと、該レジスタと動作可能に通信し、モジュラ積を、他のモジュラ積と累算モジュラ積とのうちの少なくとも一方と累算する加算器と、該加算器と動作可能に通信し、該モジュラ積および該累算モジュラ積を該加算器への入力のためと、該累算モジュラ積の出力とのために保持する複数のレジスタとを含む。
【００１２】
本明細書においてさらなる他の実施例でさらに開示するスーパースケーラ・プロセッサにおける２進乗算のためのシステムは、第１のレジスタと、第２のレジスタと、第３のレジスタと、該第１のレジスタ、該第２のレジスタ、および第１のマルチプレクサと動作可能に通信するビット論理ユニットおよび２進加算器を含む実行ユニットであって、該第１のマルチプレクサが該第３のレジスタとも動作可能に通信する実行ユニットと、該第１のレジスタおよび該実行ユニットと動作可能に通信する第１のローテータと、該実行ユニットおよび該第２のレジスタと動作可能に通信する先行ゼロ検出レジスタとを含む第１のパイプラインとを含む。また、このシステムは、第４のレジスタと、第５のレジスタと、第６のレジスタと、該第４のレジスタ、該第５のレジスタ、および第２のマルチプレクサと動作可能に通信する他のビット論理ユニットおよび他の２進加算器を含む第２の実行ユニットであって、該第２のマルチプレクサが該第６のレジスタとも動作可能に通信する第２の実行ユニットと、該第４のレジスタおよび該実行ユニットと動作可能に通信するローテータと、該第２の実行ユニットおよび該第５のレジスタと動作可能に通信する先行ゼロ検出レジスタとを含む第２のパイプラインとを含む。また、このシステムは、第７のレジスタと、第８のレジスタと、第９のレジスタと、該第７のレジスタおよび該第８のレジスタと動作可能に通信する乗算器とを含む第３のパイプラインと、データの格納と取出しのための汎用レジスタと、第１のオペランドと第２のオペランドとを入手するオペランド・バッファと、該第１のパイプラインと該第２のパイプラインと該第３のパイプラインと該汎用レジスタと該オペランド・バッファとのうちの少なくとも２者の間の通信のための通信バスとを含む。
【００１３】
上記およびその他の改善点は、以下の詳細な説明で述べる。本発明をその利点および特徴とともによりよく理解することができるように、以下の説明および図面を参照されたい。
【００１４】
本発明について、例を用い、添付図面を参照しながら以下に説明する。いくつかの図では、同様の要素は同様の番号を付して示す。
【００１５】
図面を参照しながら、本発明の実施例について、利点および特徴を示しながら例として説明する。
【発明を実施するための最良の形態】
【００１６】
本明細書では、そのモジュール性によって様々なサポート算術論理演算装置（ＡＬＵ）ハードウエアと共に使用するのに適合する特殊スーパーブース乗算器を使用して、有損失または無損失結果を有する符号付きまたは符号なしオペランドである様々な長さの２進数を乗算する方法およびシステム・アーキテクチャを開示する。このアーキテクチャのモジュール性は、より大きなオペランドを効率的に扱うことができる、より小型の乗算器の必要性により促されたものである。したがって、このアーキテクチャは、算術関数および論理関数と、ほとんどのプロセッサ環境に見られる資源と共に機能するように設計されている。このアーキテクチャは、乗数オペランドとして、全データ幅未満のサイズの入力を含み、さらに、被乗数として、全データ幅ではないとしても、全データ幅未満の入力を含むことができる。また、このアーキテクチャは、乗算のサブグループを、最終的に結合して最終的な正しい積を生成することができるように互いに結合する手段となる重複ビット信号も含む。また、このアーキテクチャは、たとえば符号付きまたは符号なしなどの演算のタイプを反映するように入来被乗算データを制御し、変更を加え、モジュラ積とも呼ぶ出力を、他の可能なモジュラ積と桁合わせし、組み合わせるように作成するためのいくつかの追加の信号も使用する。
【００１７】
また、本明細書では、乗算器の実施例と共に使用するこのようなサポート・ハードウェアを、このような環境内での乗算を実現するために作成された、付随するアルゴリズムと共に示す。
【００１８】
一実施例では、乗算器とサポート・ハードウェアのためのハードウェア・アーキテクチャを開示する。他の実施例では、そのハードウェア・アーキテクチャを使用して処理するための乗算アルゴリズムを開示する。モジュラ２進乗算器のアーキテクチャを、図１に示す。
【００１９】
モジュラ２進乗算器
このモジュラ２進乗算器１０は、６個の一次入力を含むが、６個には限定されない。すなわち、第１のオペランドは１として示されている被乗数として使用される６４ビットデータであり、第２のオペランドは、２として示されている乗数または乗数サブグループとして使用される１５ビットデータである。３として示され、Ｚ＿ＢＩＴとも呼ぶ乗数サブグループ間の重複ビットは、１つの乗数サブグループから次の乗数サブグループへの連続性をもたせ、ブースの記録アルゴリズムを使用する際に必要なストリング検出に使用される。４として示され、ＭＣＡＮＤ＿６４とも呼ぶ演算制御信号は、演算で３２ビットと６４ビットのいずれの被乗数１を使用するかを２進乗算器１０に示し、ＵＮＳＩＧＮＥＤとも表記する「符号なし」制御信号５は、２進乗算器１０を符号付きまたは符号なし演算用に準備するために使用され、ＭＴＥＲＭ＿ＳＨＩＦＴ信号６は、２進乗算器１０のモジュラ積出力を、他のモジュラ積と適切に桁合わせする追加のサイクルを必要としないようにシフトするために使用される。表２に、２つの制御信号ＭＣＡＮＤ＿６４  ４およびＵＮＳＩＧＮＥＤ５のデコード論理の概略を示す。
【００２０】
【表２】
2004342106.tif 000004
表２において、
【００２１】
［０，０］は、３２ビットの被乗数を使用した符号付き演算を示す。ロウワードである、オペランド・データのビット３２ないし６３は変更されないままであるのに対し、ハイワードであるビット０ないし３１は、３２ビットの被乗数データから符号拡張される。
【００２２】
［０，１］は、符号なし３２ビット演算を示す。該当するロウワードとともにごみデータが入力された場合、被乗数データのロウワードは保持されるのに対し、ハイワードはゼロ設定される。
【００２３】
［１，０］は、符号付き６４ビット演算を示す。これは、２進乗算器１０のこのハードウェア・アーキテクチャでは無効な構成として扱われる。その理由は、被乗数１の入力と加算器のデータ幅が６４ビットであり、符号拡張が不可能であり、そのために、モジュラ積が不適切に表現される可能性があるためである。
【００２４】
［１，１］は、符号なし６４ビットのオペランドを示し、したがって、オペランド・データのハイワードは、被乗数のハイワードとして使用されることになる。
【００２５】
ＭＣＡＮＤ＿６４およびＵＮＳＩＧＮＥＤのデコード・論理と、被乗数１のハイワードに加える、必要な変更を、被乗数ハイワード変換モジュール１１に示す。被乗数ハイワード変換モジュールの結果は、マージ１２でオペランド・データの未変更ロウワードとマージされ、２進乗算器１０で使用される、１Ａで示された演算被乗数データを生成する。一実施例では、２走査ビットとグループ間の重複ビットとから成る３ビット走査を使用した、基数４形式のブース・アルゴリズムを使用する。この形式のブース・アルゴリズムを使用するのは、必要な被乗数の倍数０ｘ、±１ｘ、および±２ｘの形成が比較的容易であるためである。必要な乗数が＋１ｘの場合、積を生成するための被乗数データの変更は不要であることを理解されたい。したがって、演算被乗数データ１Ａが＋１ｘの場合、選択論理１７に直接供給されるように図示されている。
【００２６】
さらに図１の説明を続けると、左シフタ１３が、被乗数データの上位６３ビットを入力として受け取り、右に「０」ｂを付加してそのデータを１ビット左シフトしたデータ、または一般に知られているように、被乗数データの＋２ｘ倍数を生成し、これも選択論理１７に送られる。シフタ１３の出力は、１の補数モジュール１５にも供給され、ビット・フリップを実行し、それによって、演算被乗数データ１Ａの１の補数形式の＋２ｘ乗数を形成し、選択論理１７において「ホット１」を付加して演算被乗数１Ａの−２ｘ乗数の生成を完了するだけで済む。この「ホット１」の追加は、有効乗数グループのビットの記録に基づく演算被乗数１Ａのどの倍数を使用するかの選択と共に、選択論理１７で扱われる。同様に、ビット単位反転によって、演算被乗数データ１Ａの全６４ビットを使用して演算被乗数データ１Ａの１の補数を形成し、２進１を追加して、演算被乗数データ１Ａの２の補数、または−１ｘ乗数を形成するだけでよい。この場合も、選択論理１７で「ホット１」を追加する。
【００２７】
図１の説明を続けると、基数４ブース記録論理機能１６は、一度に１６ビットの乗数を使用し、８回の同時・重複３ビット走査を行って、８個の部分積を生成する。表３に、３２ビット乗数を、完全に処理するために必要な１６の走査の構成を示すために、２つのグループに分け、積み重ねた分解図を示す。この表で、Ｚは、この走査アルゴリズムに必要な１７ビットのシーケンスを完結させ、１６ビットより大きい倍数に対応可能にする、前述の重複ビット３（Ｚ＿ＢＩＴとも示す）を示す。Ｚ＿ＢＩＴ３を適切に設定することによって、ハードウェアは１６ビットから成る任意のグループを、乗数２の全体を含むか一部を含むかを問わず、同様に扱うことができる。
【００２８】
【表３】
2004342106.tif 000005
【００２９】
各３ビット走査の結果、３ビットの内部信号が生成される。ブースのデコードによって決まる、ＳＸおよびＳ２Ｘで示す２つの変数が、各乗数の絶対係数を示す。すなわち、ＳＸがアクティブの場合、１ｘ乗数を使用し、特別な処置は必要としない。Ｓ２Ｘがアクティブの場合、演算被乗数１Ａを左に一桁シフトし、ＬＳＢを埋めるためにゼロを挿入する。ＳＸおよびＳ２Ｘは同時にアクティブになることができないことを理解されたい。さらに、ＳＸとＳ２Ｘの両方が同時にアクティブでない状態は、選択論理１７の０ｘ乗数を示す。第３の内部制御信号ＳＩＮＶは、各走査ごとにブース・デコードによって決まる倍数の符号と等しい。正の倍数が生成される場合、ＳＩＮＶはゼロに設定され、特別な処置は不要である。負の倍数の場合、ＳＩＮＶは「１」に設定され、被乗数１Ａの１の補数形式の１ｘおよび２ｘ倍数が選択される。２の補数を完結させるために、アクティブなＳＩＮＶは、現行部分積のＬＳＢとして同じ列またはビット位置の次の部分積（すなわち、部分積配列内の次の行）に入れられる前述の「ホット１」として使用される。表４に、ブースのデコードの真理値表を示す。この実施態様は、負のゼロを実施しないことを理解されたい。すなわち、「１１１」ｂという３ビット走査によって、「０００」ｂという同じ真のゼロデコードが生成される。真のゼロの効果は、部分積がゼロのシーケンスとなり、当然ながら、次意の積の「ホット１」がクリアされることである。
【００３０】
【表４】
2004342106.tif 000006
【００３１】
被乗数倍数生成論理（たとえば１２、１３、１４、および１５）からの入力と、ブース記録論理１６とを使用して選択論理機能１７で生成された部分積配列の右端のドット表現を、表５に示す。この表から、１５を超える入力（部分積ビットに桁上げを加えた入力）を必要とする圧縮構造を使用する列はないことがわかる。さらに、８回のみの走査では、８回の走査による「ホット１」から成る行９（部分積９、すなわちｐｐ９）の列４９を除けば、基本的に多くとも８個の部分積しかないことに留意されたい。都合のよいことに、その右側の列には積項が７個しかなく、これは、列５０から列４９に伝播する桁上げが１つ少ないことを示している。したがって、下位からの桁上げ（carry-in）が７個ある８：２の圧縮構造を使用する加算器１８を使用し、ｐｐ９のホット１を、加算器１８への桁上げとしてではなく９番目の入力として使用することによって、６個の桁上げのある９：２の圧縮構造を容易に形成することができる。言い換えると、前述の構造は両方とも、部分積ビットと桁上である厳密に１５の入力を必要とし、合計ビットと上位への桁上げ（carry-out）である厳密に９個の出力を生成する。
【００３２】
【表５】
2004342106.tif 000007
【００３３】
一実施例では、結果としての合計と桁上げの結果を、任意選択によりレジスタ１９および２０にラッチしてから、桁上げ伝播加算器２１で結合して、１つの最終モジュラ積を生成する。このモジュラ積とその１６ビットの左シフト形式はマルチプレクサ２２に送られる。マルチプレクサ２２は、入力信号ＭＴＥＲＭ＿ＳＨＩＦＴによって制御されて、現行演算のアルゴリズムに従ってモジュラ積を桁合わせのために左シフトする必要があるか否かを決定する。２進乗算器１０の最終積出力を、本明細書ではＭＰ＿ＯＵＴで示す。
【００３４】
サポート・ハードウェア
図２に、一実施例による３パイプライン・スーパースケーラ固定小数点プロセッサ・アーキテクチャ２００の略ブロック図とデータの流れを示す。３本のパイプライン５０は、それぞれＸパイプ５０ａ、Ｙパイプ５０ｂ、およびＺパイプ５０ｃとも呼ぶ。３本のパイプ５０ａ、５０ｂ、および５０ｃはそれぞれ、バスとインタフェースし、少なくとも２個の６４ビット・オペランド・レジスタを含む。Ｘパイプ５０ａのオペランド・レジスタをＡ１およびＢ１（５１および５２）、Ｙパイプ５０ｂのオペランド・レジスタをＡ２およびＢ２（５３および５４）、Ｚパイプ５０ｃのオペランド・レジスタをＡ３およびＢ３（５５および５６）で示す。Ｘパイプ５０ａとＹパイプ５０ｂは両方ともそれぞれ、マルチプレクサ６０および６２を介してデータが供給される出力Ｃレジスタを有し、それぞれＣ１５７およびＣ２５８で示す。この２つの出力レジスタＣ１５７およびＣ２５８は、それぞれ、汎用レジスタ・ファイル９０にデータを書き込むために使用される。汎用レジスタ・ファイル９０は、ＲＥＧＩＳＴＥＲ＿ＤＡＴＡバスを介してオペランドレジスタにデータを供給する。オペランド・レジスタには、ＳＴＯＲＡＧＥ＿ＤＡＴＡバスによってオペランド・バッファ９２を介してメモリからもデータを供給することができる。レジスタ・ファイルからは１回のサイクルで２つの値を書き込むことができ、４つの値を読み取ることができる。先行ゼロの検出や有効データの検査などのデータ処理を行うために、図示されていない追加の論理を組み込むこともできる。マルチプレクサ６０および６２にはそれぞれ、Ｘ５０ａおよびＹ５０ｂパイプの、Ｂｉｎ１６４およびＢｉｎ２６６で示す２進加算器ユニットと、Ｂｌｕ１７２およびＢｌｕ２７４で示すビット論理ユニットから、データが供給される。ビット論理ユニットＢｌｕ１７２およびＢｌｕ２７４には、それぞれｒｏｔ１７６およびｒｏｔ２７８で示すローテータからデータが供給される。ローテータｒｏｔ１７６およびｒｏｔ２７８は、ビット論理ユニットＢｌｕ１７２およびＢｌｕ２７４と共に使用し、マスキングを効果的に使用して、シフト操作にも使用される。説明を簡単・簡潔にするために、本明細書では、ビット論理ユニットあるいはＢｌｕ１７２またはＢｌｕ２７４と言う場合、ローテータｒｏｔ１７６およびｒｏｔ２７８と、ビット論理ユニットＢｌｕ１７２およびＢｌｕ２７４を含むものとみなすことがある。レジスタＢ１５２およびＢ２５４の内容は、それぞれ、Ｘパイプ５０ａおよびＹパイプ５０ｂの先行ゼロ検出論理８２および８４ともインタフェースし、早期終了のためにこの実施例のハードウェア・アーキテクチャ２００で実施される一部の命令で使用される。
【００３５】
Ｚパイプ５０ｃは、一部の命令が情報を後で使用するために保持するために使用する、Ｅ５９で示す第３の作業用レジスタを含む。一実施例では、図１に詳細に示す２進乗算器１０が、固定小数点スーパースケーラ・アーキテクチャ２００のＺパイプ５０ｃ内に存在する。２進乗算器１０には、Ａ３５５で示す完全６４ビット・レジスタから入力されるとともに、Ｂ３レジスタ５６の最下位１６ビットからも入力される。ＭＰ＿ＯＵＴで示す乗算器の出力は、バッファ８６でトライステート化され、Ｘパイプ５０ａの２進加算器Ｂｉｎ１６４の出力によって、Ｃ１５７レジスタに入力するマルチプレクサへの追加の入力が不要になる。
【００３６】
ＡレジスタおよびＢレジスタ５１〜５６は、一部はＲＥＧＩＳＴＥＲ＿ＤＡＴＡバスを介してレジスタ・ファイル９０によって、ＳＴＯＲＡＧＥ＿ＤＡＴＡバスを介してオペランド・バッファ９２によって、また、命令テキストの即値フィールドから取り出されたデータを受け取るＩＭＭＥＤＩＡＴＥ＿ＤＡＴＡバスを介して命令自体に含まれているデータによってデータ供給されるバス網から入力を入手する。ＳＴＯＲＡＧＥ＿ＤＡＴＡとＩＭＭＥＤＩＡＴＥ＿ＤＡＴＡは事前桁合わせされているため、オペランドが作業レジスタＡおよびＢ（５１〜５６）に到着した後は、それらのオペランドはデータの供給源にかかわらずすべて同じに扱われることを理解することが重要である。
【００３７】
本明細書では、乗算器１０と共に動作するプロセッサ・アーキテクチャ２００の一実施態様について述べることを理解されたい。いくつかの重要な機能を備える限り、その他の構成も可能である。そのような機能の１つは、必ずしも同時である必要はないが乗数２と被乗数１を回転させて、適切なサブグループを適切なサブグループ処理のための適切な場所に配置することができる機能である。他の機能は、モジュラ積を累算して１つの最終項とすることができる機能である。
【００３８】
乗算方法
上述の乗算のモジュラ的性質のため、特定のアーキテクチャおよび環境において選択された演算を実施するために多くのアルゴリズムを考えることができることがわかるであろう。本明細書では、前述の固定小数点スーパースケーラ・プロセッサの環境において実施される演算に関する方法について説明する。この方法は、乗算器１０の使用の特定の利点と、図２に示すサポート・ハードウェアにおいて利用可能な機能を明確に示す。
【００３９】
図３を参照すると、一実施例による乗算プロセス２００の高水準概要図が示されている。このプロセスは、どの特定の乗算を実行するかを示す命令情報と、その演算の被乗数および乗数として使用される２オペランド・データとを、入力として受け取る。この命令情報は、ここでは制御論理と呼ぶ、論理のグループに送られ、異なるタイプの乗算命令の実施のために使用されるアルゴリズムに基づいて、データフロー・ハードウェアを制御して、１サイクルごとに必要な機能を実行するのに必要な場所にデータをルーティングし、最終積を求める。この実施態様では、ＭＣＡＮＤ＿６４、ＵＮＳＩＧＮＥＤ、およびＭＴＥＲＭ＿ＳＨＩＦＴの各制御信号が生成される。命令情報は、プロセス２１０を制御して、オペランド・データを適切に回転またはシフトさせ、サイクル別または命令別に適切な被乗数１サブグループまたは乗数２サブグループあるいはその両方を得ると同時に、１のストリングの検出に必要な、連続性を持たせるために乗算器と共に使用される適切なＺ＿ＢＩＴを獲得する。この特定の実施態様は、一部の乗算命令のために制御論理に早期終了情報を提供するための、乗数データ２で使用する先行ゼロおよび先行１検出機能も備える。
【００４０】
図３の乗算器１０は、被乗数データ１と乗数データ２とを入力として受け取る。乗数データ２は、Ｚ＿ＢＩＴ３で示す入力重複ビットと共に、プロセス・ブロック２１４で走査グループに区分化される。この実施例では、Ｚ＿ＢＩＴと共に１６ビットの乗数データをそれぞれ３ビットの８個の重複走査グループに区分化するが、適切なサポート、すなわち、被乗数倍数の設定、記録、倍数のための選択論理などを使用して、他の乗数および走査グループ幅も可能である。プロセス・ブロック２１８で、乗数データ２は、基数４ブース・アルゴリズムに従って記録される。次に、被乗数１に移って説明すると、プロセス・ブロック２１２で、制御信号ＭＣＡＮＤ＿６４  ４およびＵＮＳＩＧＮＥＤ５がデコードされ、この２進乗算が符号付きか符号なしかを判断するか、あるいは、この実施例では、被乗数１が３２ビットか６４ビットかを判断する。プロセス・ブロック２１４で、被乗数１の選択された倍数、たとえば０ｘ、±１ｘ、および±２ｘを生成する。
【００４１】
図３の説明を続けると、プロセス・ブロック２２０で、前述のようにＳＸ、Ｓ２Ｘ、およびＳＩＮＶの８個のグループに区分化された乗数２とＺ＿ＢＩＴ３のプロセス・ブロック２１８でのブース記録の結果に基づいて、プロセス・ブロック２１８から被乗数１の所望の倍数を選択し、ゼロを適切に右付加して、部分積を生成する。プロセス・ブロック２２２で、これらの部分積を合計して１個のモジュラ積を生成する。最後に、プロセス・ブロック２２４で、制御信号ＭＴＥＲＭ＿ＳＨＩＦＴ６に基づいて必要／可能な場合は、モジュラ積出力をシフトし、それによって、プロセス・ブロック２５０において他のモジュラ積と結合するために、当該モジュラ積を適切に桁合わせする必要をなくす。このブロックでは、加算ハードウェア、シフト／回転ハードウェア、ホールド・パス、フィードバック・パス、および作業レジスタを使用し、制御論理ブロック２１０で制御し、モジュラ積を適切に結合して最終の正しい積を生成する。この方法では、このブロックの異なる構成を使用してモジュラ積を処理することもできる。
【００４２】
本発明のこの実施例で実施したいくつかの乗算命令について、以下に詳述する。図４、図５、および図６を参照すると、図２に示す前述のハードウェアと、実行プロセス２００と、乗算器ハードウェア１０とを使用した乗算演算および関連する実行アルゴリズムを示す略図が示されている。この乗算アルゴリズムは、サイズの異なるオペランドを含む様々なタイプの乗算を扱うように構成されている。
【００４３】
異なるサイズの被乗数による演算
図４を参照すると、様々なサイズの被乗数１を使用した一実施態様を示す例が図示されている。一実施例では、乗算器１０は、１６ビット×６４ビットの有損失２進乗算を処理して、可能な８０ビットの下位６４ビットを生成するように構成されている。これによって、ハードウェア・アーキテクチャ２００は、積の下位３２ビットが生成される１６ビット×３２ビットの演算と、積の下位６４ビットが生成される１６ビット×６４ビットの演算とを同じサイクル数で処理することができる。ＭＣＡＮＤ＿６４を３２ビット演算の場合はゼロに設定し、６４ビット演算の場合には１に設定することによって、同じアルゴリズムを使用して両方のタイプの乗算演算を容易に行うことができる。必要な追加の変更は、結果を記憶しておくことだけである。制御は、最初の演算、たとえば１６ビット×３２ビット乗算については３２ビット・ワードに設定し、後の演算、たとえば１６ビット×６４ビット乗算については完全長に設定する。
【００４４】
たとえば図４で、１つのプロセッサのための一群の命令、たとえば、被乗数にハーフワードを乗じる乗算のために使用されるＭＨ、ＭＨＩ、およびＭＧＨＩは、前述の特徴を十分に活用する。命令ＭＨおよびＭＨＩは両方とも、３２ビットの積を生成し、それぞれ、その被乗数を汎用レジスタ（ＧＰＲ）９０から入手する。しかし、ＭＨＩは、その乗数データを、命令テキストの一部である即値フィールドとして入手するのに対し、ＭＨはその乗数を、ＧＰＲ９０から入手する。同様に、命令ＭＧＨＩは、その６４ビットの被乗数データをＧＰＲ９０から受け取り、その乗数データを命令テキストの即値フィールドから受け取る。乗算ハーフワード即値ファミリは、乗数入力として即値データを保持する命令テキストの１６ビット・フィールドをとる有損失命令のセットである。図には、乗数を１つのサブグループに含めることができ、被乗数も、結果が有損失性であるため、１つのサブグループに含めることができ、その結果、乗算ハードウェアによる１回の反復実行で済む様子が示されている。以下の表６に、乗数データ２および被乗数データ１に対する１サイクル・プロセスの例と、Ｘパイプ５０Ａ、Ｙパイプ５０Ｂ、Ｚパイプ５０ｃ、および乗算器１０との相互作用を示す。サイクル１で、表中でＭ１で示されている乗数データ２と、表中でｍ１で示されている被乗数データ１が、それぞれＺパイプ５０ｃのＡ３５５およびＢ３５６レジスタに入力される。１サイクルの待ち時間後に、この例では最終積でもある、ｍｐ１で示すモジュラ積が、この演算の最終サイクルとみなされる２回目のサイクルで乗数ＭＰ＿ＯＵＴの出力として示され、次のサイクルで記憶域に入れられる。表中で使用されている構文に注目されたい。レジスタが、被乗数１および乗数２オペランド値をそれぞれ指定する「ｍｃａｎｄ」値または「ｍｐｌｉｅｒ」値を受け取るという場合、これらの値がデータ・バスから入来することを意味する。この実施態様の場合も、乗数入力はレジスタＢ３５６の最下位１６ビットから入力される。適切な乗数サブグループを入手するのに、必要なサブグループが最下位ハーフワード位置になるように乗数データを回転またはシフトするだけでよい。
【００４５】
【表６】
2004342106.tif 000008
【００４６】
サイクルｅ１で、レジスタＡ３５５およびＢ３５６にラッチされたオペランド・データ（それぞれｍｃａｎｄおよびｍｐｌｉｅｒ）が、２進乗算器１０に渡され、Ａ３レジスタ５５からのデータを使用して、被乗数データ１が生成され、Ｂ３レジスタ５６からのデータを使用して乗数データ２が生成される。Ｍ１として示されているＡ３レジスタ５５からのデータは、制御信号ＭＣＡＮＤ＿６４およびｕｎｓｉｇｎｅｄ５に従って変更され、有効被乗数が生成される。次に、図１について前述したように、この有効被乗数をシフトし、補数をとって処理し、±１ｘおよび±２ｘ被乗数倍数を生成する。一方、この実施例では、Ｂ３レジスタ５６の右端の１６ビットからの乗数データ１と、右に付加された重複ビットＺ＿ＢＩＴ３から成る第１のサブグループにも何らかの処理が施される。重複ビットは、この場合、これが最下位（かつ唯一の）サブグループであるため、ゼロである。この１７ビット・ストリングが、図１のブース記録論理によって８個の３ビット・グループ（２ビット＋１重複ビット）に分解され、各３ビット走査グループについて被乗数の１ｘ倍数と２ｘ倍数のいずれを選択するかを示す８個の２ビット信号（前述のＳＸおよびＳ２Ｘ信号）が生成され、当該グループの部分積のために負の倍数を選択するか否かを示すとともに、負の倍数の場合は、被乗数の負の倍数を生成するために使用される（数値の補数をとる処理と「１」を加える処理を含む）２の補数をとる処理を完結させるために、入力された「ホット１」を次の走査グループの部分積に供給する、８個の１ビットＳＩＮＶ信号から成るもう一つのグループが生成される。同じサイクルで、８個の部分積と、８個の３ビット走査グループのブース記録の結果としての８番目のグループからの１個の「ホット１」入力とが、加算器１８（図１）で結合されて、２つの冗長６４ビット合計および桁上げ項に圧縮され、図１の構造２０および１９である合計レジスタおよび桁上げレジスタにラッチされる。
【００４７】
サイクル２で、前記の合計レジスタおよび桁上げレジスタ２０および１９からのそれぞれのデータが加算器２１によって１つにされる。この出力と、その１６ビット左シフトされた形式とが、図１のマルチプレクサ２２に入力され、入力制御信号ＭＴＥＲＭ＿ＳＨＩＦＴ６を使用して、２つのうちのいずれか選択される。このサイクルの最初のモジュラ積ｍｐ１である乗算器の出力ＭＰ＿ＯＵＴが、図２の２進加算器６４の出力でトライステート・バッファ８６の出力として選択され、マルチプレクサ６０を通してＣ１レジスタ５７にラッチされる。これは、演算の最終結果に達したため、この命令の最終実行サイクルとみなされる。
【００４８】
乗算ハードウェアを複数幅の被乗数を処理するように実施することによって、わずかな制御上の変更を加えた実質的に同じアルゴリズムを使用して、入来オペランド・データを事前フォーマットする必要なしに、異なる被乗数幅の乗算が処理される。被乗数データ１のフォーマットは、２進乗算器１０の内部で適切に処理され、単に２つの信号のみによって制御される。この信号の一方は、被乗数の長さを示す信号、たとえばＭＣＡＮＤ＿６４であり、他方はオペランドが符号付きであるか符号なしであるかを示す信号、たとえばＵＮＳＩＧＮＥＤ５であり、この特定の実施例では前者の信号を示した。
【００４９】
１命令当たりサイクル数の削減
本開示の各実施態様の柔軟性を示す他の例は、ＭＳＧおよびＭＳＧＲアルゴリズムの実施態様に基づくものである。両者は、６４ビットの有損失積を生成する６４×６４演算であり、相違点は、ＭＳＧＲがその乗数データ２を汎用レジスタ、たとえばレジスタ・ファイル９０から入手するのに対し、ＭＳＧはそのデータを、この実施態様では、オペランド・バッファ９２を介してメモリから入手することである。有損失６４ビット結果を得るために、制御信号ＭＣＡＮＤ＿６４  ４が１に設定される。このアルゴリズムのサイクルごとの動作を、以下の表７に示し、命令サブグループ処理順序を図５に示す。この図には、乗数が４個の乗数サブグループに分割されている様子が示されており、この演算は有損失演算であるため、完全な最初のオペランドが６４ビット被乗数データとして保持される。
【００５０】
【表７】
2004342106.tif 000009
【００５１】
図１および図２を再度参照すると、サイクル１（ｅ１で示す）で、ＭＳＧ／ＭＳＧＲは、６４ビット×６４ビット命令であるため、完全被乗数データ１が、この場合は唯一のグループである、有効被乗数サブグループＭ１を形成する。２進乗算器１０への乗数データ入力２は、被乗数１よりも短く、この場合もＢ３レジスタ５６から１６ビットの最下位乗数データを入手して、ここではｍ１とも呼ぶ第１の乗数サブグループを生成する。被乗数「サブグループ」Ｍ１と乗数サブグループｍ１は、前述の例と同様にして２進乗算器１０によって処理され、このサイクルの終わりに冗長合計および桁上げ項が、合計レジスタ２０および桁上げレジスタ１９にそれぞれラッチされる。同時に、Ｘパイプ５０Ａでは、Ａ１レジスタに事前に入力されていた完全乗数が、ビット論理ユニット７２に入れられ、回転されて、第２の乗数サブグループ（以下、ｍ２と呼ぶ）、たとえば元の乗数のビット３２ないし４７が、データ・フィールドの右端の位置（ビット４８ないし６３）に配置される。次に、ＢＬＵ１７２の出力は、次のサイクルで使用するために、このサイクルの終わりにレジスタＡ２５３およびＢ３５４にラッチされる。
【００５２】
サイクル２では、前のサイクルでのＭ１とｍ１の乗算の結果を保持する合計レジスタ２０および桁上げレジスタ１９が結合されて、２進乗算器１０の第１の出力としてモジュラ積ｍｐ１が生成される。このモジュラ積ｍｐ１も、次のサイクルで使用するためにこのサイクルの終わりにＢ２レジスタ５４に入力としてラッチされる。一方、乗算器は、サブグループＭ１＊ｍ２を処理しており、その結果を、やはり合計レジスタ２０および桁上げレジスタ１９に入れる。Ｙパイプ５０Ｂで、Ａ２レジスタ５３に保持されているｍ２乗数がやはり回転され、第３の乗数サブグループｍ３がデータ経路の最下位位置に配置される。この場合も、この新しい乗数サブグループｍ３は、次のサイクルで使用するためにＢ３レジスタ５６に入力される。
【００５３】
サイクル３では、それぞれ前のサイクルでのＭ１とｍ２の乗算の結果を保持する合計レジスタ２０および桁上げレジスタ１９が結合され、次のモジュラ積（以下ｍｐ２と呼ぶ）が生成され、１６ビット左にシフトされ、モジュラ積ｍｐ１との結合に備えて桁合わせされる。シフトされたモジュラ積ｍｐ２は、次のサイクルで使用するためにレジスタＡ２にラッチされる。一方、２進乗算器１０は、サブグループＭ１＊ｍ３を処理し、その結果の積を合計レジスタ２０および桁上げレジスタ１９に入れる。Ｙパイプ５０Ｂで、前のサイクルでＢ３レジスタ５６から入力されたｍ２乗数が、ｍ４で示す第４の乗数サブグループ（たとえば元の乗数値のビット０ないし１５）が、データの最下位１６ビット位置にくるように回転される。その結果は、次のサイクルで使用するためにＢ３レジスタ５６に入力される。
【００５４】
サイクル４では、前のサイクルでのＭ１とＭ３の乗算の結果を保持する合計レジスタ２０および桁上げレジスタ１９が結合され、モジュラ積ｍｐ３が２進乗算器１０の第３の出力として生成され、シフトせずにマルチプレクサ２２に通され、次のサイクルで使用するためにＢ２レジスタ５４にラッチされる。一方、モジュラ積ｍｐ１およびｍｐ２をそれぞれ保持するＡ２レジスタ５３およびＢ２レジスタ５４が、ＢＩＮ２６６で加算され、累算モジュラ積ｍｐ１：２が生成されて、Ｅレジスタ５９に入力され、後で使用するために保持される。
【００５５】
サイクル５では、前のサイクルでのＭ１とｍ４の乗算の結果を保持する合計レジスタ２０および桁上げレジスタ１９が結合されて、これらの命令の第４かつ最終のモジュラ積である、ｍｐ４で示すもう一つのモジュラ積が生成され、モジュラ積ｍｐ３との結合での桁合わせのために、左シフトされてマルチプレクサ２２から出力される。シフトされたモジュラ積ｍｐ４は、次のサイクルで使用するためにＡ２レジスタ５３の入力に入力される。
【００５６】
サイクル６では、Ａ２レジスタ５３とＢ２レジスタ５４のそれぞれの内容である、ｍｐ３と左シフトされたｍｐ４とが、Ｙパイプ５０Ｂの２進加算器Ｂｉｎ２６６で加算され、累算ｍｐ３：４項が生成される。これはその後、次のサイクルで使用するためにＡ２レジスタ５３に入力される。一方、Ｅレジスタ５９に保持されているｍｐ１：２項が、後で使用するためにＢ２レジスタ５４に入力される。
【００５７】
サイクル７では、Ａ２レジスタの内容、たとえば累算モジュラ積ｍｐ３：４が３２ビット左にシフトされ、図４に示すようにｍｐ１：２項との加算に備えて桁合わせされる。この桁合わせは、ビット論理ユニットＢＬＵ２７４で行われ、ｍｐ３：４がＢＬＵ２７４を通されて、シフトされ、シフトされた結果（ｍｐ３：４）が、次のサイクルで使用するためにＡ２レジスタ５３にフィードバックされる。
【００５８】
最後に、サイクル８で、それぞれＡ２レジスタ５３およびＢ２レジスタ５４の内容である、３２ビットシフトされた累算モジュラ積（ｍｐ３：４）とｍｐ１：２が、２進加算器ＢＩＮ２６６で結合されて、この最後の実行サイクルでの最終積ｍｐ１：４が生成される。この最終結果の積は、次のサイクルに取っておくためにＣ２５８レジスタに入力される。
【００５９】
具体的に（ｍｐ１，ｍｐ２）および（ｍｐ３，ｍｐ４）として示すモジュラ積の対の場合、図１の乗算器１０の最後でマルチプレクサ２２とシフタ６を使用してモジュラ積を１６ビット左にシフトすることによって、処理サイクルが節約されるので有利であることが表７から容易にわかる。このようにしない場合、シフトされていないモジュラ積（ｍｐ２またはｍｐ４）は、Ｘパイプ５０ＡまたはＹパイプ８０Ｂに戻し、シフトし、次に、それを他のモジュラ積（それぞれｍｐ１およびｍｐ３）と結合することになり、これは、シフトに必要な１処理サイクルではなく２処理サイクル使用することになる。
【００６０】
図２に示すサポート・ハードウェアのこの特定の実施態様の既存の機能を、乗算器ハードウェア１０およびプロセス２００と共に使用したことによって、処理サイクルが節約され、具体的には、既存の先行ゼロ検出機能、たとえば８２および８４（図２）を使用せずに済む。大きなオペランドを使用するが実際の乗数値の絶対値が小さい乗算の場合の早期終了論理を完全にサポートするために、先行１検出をサポートするように先行ゼロ検出機能８２および８４にわずかな変更を加えることができる。
【００６１】
一例として、１回乗算（６４ビット）命令に戻ると、この命令対は、乗数サイズに関して早期終了に最適であることが容易にわかるであろう。乗数データは右から左に処理されるため、このアルゴリズムを、乗数データのサイズに対応する有利な箇所で終了させることができる。たとえば、乗数データが（０ｘ０００ないし０ｘ７ｆｆｆ）、または（０ｘＦＦＦＦｆｆｆｆＦＦＦＦ８０００）ないし（０ｘＦＦＦＦｆｆｆｆＦＦＦＦｆｆｆｆ）の範囲である場合、乗数データは本質的に、ｍ１によって表現可能であり、サイクルｅ３の後で実行を終了することができ、その時点で、Ｂ２レジスタ５４に保持されているモジュラ積ｍｐ１を最終出力としてＣ２レジスタ５８にルーティングすることができ、これによって、図の全８サイクルではなく有効サイクル数３で乗算を完了することができる。同様に、このような手っ取り早い方法は、異なる有効長の乗数データを使用して容易に実施することができ、有効長１５、３１、３２、４７、および４８ビットの乗数（すなわち絶対値をこれらのビット数で完全に表現することができる）の場合、それぞれ３、４、５、６、および７サイクルという実行サイクル数が可能になる。最初の２つの早期終了の場合の実行表を、表８と表９にそれぞれ、示す。ここには、乗算器処理サイクル毎のレジスタの内容が、示されている。
【００６２】
ブースのアルゴリズムを使用して符号なし乗算を行う場合、部分積を減らす方法がストリング検出に基づいているために付加する必要がある、本明細書でモジュラ積補正（ｍｐｃ）項と呼ぶ補正項がある場合がある。ストリングの終わり（最上位ビット）に来ることは、計算の終わりを意味しない。符号なし乗算では、常に、ＭＳＢを超える、１または複数の「０」ｂ値の暗黙的ビットが存在する。乗数のＭＳＢが０の場合、ＭＳＢの左側のこのような暗黙ビットは、ゼロの連続ストリングを示し、何の処置も行われない。しかし、左にゼロが付加された「１」ｂのＭＳＢは、ストリングの終わりに達したことを示し、３ビット走査の場合、これらのビットは「００１」ｂであり、補正のＬＳＢが乗数のＭＳＢの左の１ビットになるように、結果に付加して桁合わせしなければならない＋１ｘ被乗数倍数を表す（図６参照）。３２ビットで完全に表現可能な乗数による演算が、最終積に補正を組み込む必要があるために３１ビットで完全に表現可能な乗数による演算よりも１サイクル多く要する理由である。命令の実施形態および資源に応じて、このｍｐｃ項の追加をアルゴリズムに組み込んでも組み込まなくてもよい。
【００６３】
【表８】
2004342106.tif 000010
【００６４】
【表９】
2004342106.tif 000011
【００６５】
実施例の利点および柔軟性の他の例は、１２８ビットの結果を生成する論理６４ビット×６４ビット無損失（たとえば桁上げを考慮に入れ、対処する場合）乗算命令の使用に基づく。図６を参照すると、積の無損失性のために、制御信号ＭＣＡＮＤ＿６４４をゼロに設定して、生成されたすべてのモジュラ積も無損失として設定されるようにする必要がある。図６では、乗数は４個の乗数サブグループに分割されているが、６４ビットの被乗数データは２個のサブグループに分割されて、１６ビット×３２ビット乗算が作成され、有損失結果を回避する様子が図示されている。表１０に、本発明の一実施例におけるＭＬＧ／ＭＬＧＲの実施態様におけるハードウェアの使用を示す。表１０には、乗算器処理サイクル毎のレジスタの内容が示されている。
【００６６】
【表１０】
2004342106.tif 000012
【００６７】
サイクルｅ１で、２進乗算器１０は、Ｘパイプ５０Ａにある間にサブグループＭ１＊ｍ１を処理し、ビット論理ユニットＢＬＵ１７２が乗数データ２を回転させて、第２の乗数サブグループｍ２を生成する。この乗数サブグループｍ２は、次のサイクルで使用するためにＡ２レジスタ５３およびＢ３レジスタ５４にラッチされる。
【００６８】
サイクル２で、２進乗算器１０は乗数サブグループＭ１＊ｍ２を処理し、Ｍ１＊ｍ１の結果をモジュラ積項ｍｐ１に圧縮し終わり、次のサイクルで使用するためにＢ２レジスタ５４に入力する。Ｙパイプ５０Ｂで、（前のサイクルからの）Ａ２レジスタ５３の内容ｍ２をＢＬＵ２７４で回転して、乗数サブグループｍ４を生成し、後で使用するためにＥレジスタ５９にラッチされる。レジスタＡ２５３は、次のサイクルで使用するためにバスから被乗数データｍｃａｎｄを入力する。
【００６９】
サイクル３で、２進乗算器１０は、Ｍ１＊ｍ２の結果を圧縮し終わり、結果を１６ビット左にシフトして、モジュラ積項ｍｐ２を後でｍｐ１と結合するために桁合わせし、それを次のサイクルで使用するためにＡ２レジスタ５３に入力する。レジスタＢ３５６は、そのｍ２データを後で使用するために保持する。一方、Ｙパイプ５０Ｂで、ビット論理ユニットＢＬＵ２７４が、被乗数データを回転させて、第２の被乗数サブグループＭ２を生成し、次のサイクルで使用するためにレジスタＡ３５５に入力する。
【００７０】
サイクル４で、２進乗算器１０は、サブグループＭ２＊ｍ２を処理する。Ｅレジスタ５９の内容ｍ４が、次のサイクルで使用するためにＢ３レジスタ５６に供給され、Ａ３レジスタ５５がバスから被乗数データを入手し、次のサイクルでマルチプレクサで使用するためにサブグループＭ１を生成する。
【００７１】
サイクル５で、２進乗算器１０は、サブグループＭ１＊ｍ４を処理し、Ｍ２＊ｍ２の結果の圧縮を終え、それを１６ビット左にシフトしてモジュラ積ｍｐ３を生成し、それを後で使用するためにＢ２レジスタ５３に入力する。Ｙパイプ５０Ｂにおいて、レジスタＡ２５３とレジスタＢ２５４の内容を加算して結合モジュラ積ｍｐ１：２を生成し、後で使用するためにＺパイプ５０ＣのＥレジスタ５９に入力する。
【００７２】
サイクル６で、２進乗算器１０は、Ｍ１＊ｍ４の結果の圧縮を終え、その結果を１６ビット左にシフトしてモジュラ積ｍｐ４を生成し、その結果を、次のサイクルで使用するためにレジスタＡ２５３に入力する。Ｘパイプ５０ＡのレジスタＡ１５１が、次のサイクルで使用するためにバスから被乗数値を入力する。
【００７３】
サイクル７で、ＢＩＮ２６６が、前にレジスタＡ２５３に入力したｍｐ４データと前にＢ２５４に保持したｍｐ３データとを加算して、結合モジュラ積ｍｐ３：４を生成し、後で使用するためにＡ２５３に入力する。一方、Ｘパイプ５０Ａで、ＢＬＵ１７２が、レジスタＡ１５１からｍｃａｎｄデータを入手し、それを回転して第２の被乗数サブグループＭ２を生成し、次のサイクルで使用するためにＡ３５５に入力する。レジスタＡ１５１が、次のサイクルで使用するために、バスから乗数を入力する。レジスタＢ３５６も、次のサイクルで第１のサブグループｍ１を使用するために、バスから乗数値をラッチする。
【００７４】
サイクル８で、乗算器は、サブグループＭ２＊ｍ１を処理し、次のサイクルで第１の被乗数サブグループＭ１を使用するために被乗数をＡ３レジスタ５５にラッチする。Ｘパイプ５０Ａで、Ａ１レジスタ５１に保持されている乗数を回転させて、第３の乗数サブグループｍ３を生成し、次のサイクルで使用するためにレジスタＢ３５６にラッチする。
【００７５】
サイクル９で、乗算器は、サブグループＭ１＊ｍ３を処理し、Ｍ２＊ｍ１の結果の処理を終えてモジュラ積ｍｐ５を生成し、次のサイクルで使用するためにＢ２レジスタ５４にラッチする。レジスタＢ３５６は、後で使用するためにそのｍ３値を保持する。
【００７６】
サイクル１０で、乗算器は、Ｍ１＊ｍ３の処理を終えてモジュラ積ｍｐ６を生成し、次のサイクルで使用するためにＢ２レジスタ５４にラッチする。一方、Ｙパイプ５０Ｂでは、２進加算器ＢＩＮ２６６がＡ２レジスタ５３とＢ２レジスタ５４のそれぞれの内容であるｍｐ３：４とｍｐ５を加算して、結合モジュラ積３：５を生成している。Ｘパイプ５０Ａで、Ａ１レジスタ５１が、次のサイクルで使用するためにバスから被乗数をラッチする。
【００７７】
サイクル１１では、Ｙパイプ５０Ｂにおいて、ＢＩＮ２６６がレジスタＡ２５３とレジスタＢ２５４の内容を加算して結合モジュラ積３：６を生成する。Ｘパイプ５０Ａでは、ＢＬＵ１７２が、レジスタＡ１５１内の乗数データを処理して第２の被乗数サブグループＭ２を生成し、後で使用するためにレジスタＡ３５５に入力する。
【００７８】
サイクル１２では、Ｚパイプ５０Ｃにおいて、値Ｍ２およびｍ３が、次のサイクルで使用するためにＡ３レジスタ５５とＢ３レジスタ５６に保持される。一方、Ｙパイプ５０Ｂでは、前のサイクルでＢＩＮ２６６から入力されたレジスタＡ２５３内のｍｐ３：６データがＢＬＵ２７４で回転され、それによって、ロウ３２ビットワードがハイ３２ビットワードと交換され、他のモジュラ積と桁合わせして結合し、１２８ビットの最終結果を生成するのに必要な回転モジュラ積ｒｍｐ３：６が生成される。Ｂ２レジスタ５４は、Ｅレジスタ５９からのｍｐ１：２データを次のサイクルで使用するためにラッチする。Ｘパイプ５０Ａでは、次のサイクルで使用される可能性に備えて、被乗数がＡ１レジスタ５３に入力される。
【００７９】
サイクル１３で、乗算器は、サブグループＭ２＊ｍ３を処理する。Ｙパイプ５０Ｂで、回転されたモジュラ積ｒｍｐ３：６が、そのロウワードがゼロ設定されて、ｍｐ１：２と結合され、結果のクワッドワードの最下位ダブルワードが生成される。これは、次のサイクルに取っておくためにレジスタＣ２５８にラッチされる。レジスタＡ２５３は、次のサイクルで使用するために乗数データをバスから入力する。一方、Ｘパイプ５０Ａでは、乗数データの最上位ビットがたまたま「１」ビットである場合という条件付きで、被乗数データが、回転されたモジュラ積ｒｍｐ３：６のロウワードに加えられ、補正されたモジュラ積ｃｍｐ３：６が生成される。この結果は、後で使用するためにＢ２レジスタ５４に入力される。
【００８０】
サイクル１４で、２進乗算器１０は、Ｍ２＊ｍ３の結果を圧縮し終わってモジュラ積ｍｐ７を生成し、次のサイクルで使用するためにレジスタＢ２５４に入力される。Ｚパイプ５０ＣのＡ３レジスタ５５が、次のサイクルで使用するためにそのＭ２値を保持する。レジスタＡ２５３内にある乗数データがＢＬＵ２７４を通され、第４の乗数サブグループｍ４が生成され、次のサイクルで使用するためにレジスタＢ３５６にラッチされる。
【００８１】
サイクル１５で、２進乗算器１０はサブグループＭ２＊ｍ４を処理する。Ｙパイプ５０Ｂで、ＢＩＮ２６６は、Ａ２レジスタ５３内のモジュラ積ｍｐ７と、補正されたモジュラ積ｃｍｐ３：６とを結合してｍｐ３：７を生成し、これは、次のサイクルで使用するためにＡ２レジスタ５３にラッチされる。
【００８２】
サイクル１６で、２進乗算器１０は、Ｍ２＊ｍ４の結果の圧縮を終え、その結果を１６ビット左にシフトし、モジュラ積ｍｐ８を生成し、これは次のサイクルで使用するためにレジスタＡ１５１に入力される。レジスタＡ２５２内のｍｐ３：７データがＢＩＮ２６６を通され、次のサイクルで使用するためにレジスタＢ２５４に入力される。
【００８３】
実行の最終サイクルであるサイクル１７で、レジスタＡ１５１内のデータとレジスタＢ１５２内のデータが結合され、補正がすでに加えられた最終結果の最上位ダブルワードが生成される。これは、次のサイクルにとっておくためにレジスタＣ１５７にラッチされる。
【００８４】
上記の例では、ハードウェアを無損失乗算でどのように使用することができるかを示した。
【００８５】
有利には、無損失命令を使用する上記の実施例は、乗数２と被乗数１が実際のハードウェア・データ経路よりもはるかに大きい場合のデータを処理するように、実施例の乗算器１０を容易に設定することができることを示している。図６は、モジュラ積を異なる組合せで計算することもできることを示している。図示されている特定の順序は、これらの演算を実施する多くの方法の１つに過ぎないことがわかるであろう。たとえば、ハードウェアが即時シフト・アウトと、最終積を計算したら直ちに格納する機能とをサポートしている場合、それを行うために、ｍｐ５：ｍｐ６の順序をｍｐ３：ｍｐ４と交換することもできる。あるいは、ＭＳＧ／ＭＳＧＲなどの命令の実施に関して前述した実施例と同様に、特定の演算の早期終了をサポートするには、乗数２を右から左に処理するように順序を調整することができる。乗算サブグループのこのような「アウト・オブ・オーダー」処理により、最終的には、たとえば、柔軟性のある、高性能な中規模乗算ハードウェアが実現される。
【００８６】
本開示の発明は、コンピュータ、制御装置、またはプロセッサ１００実施方法およびそのような方法を実行する装置の形態で実施することができる。また、本発明は、フロッピィ（Ｒ）・ディスケット、ＣＤ−ＲＯＭ、ハード・ドライブ、まはその他の任意のコンピュータ可読記憶媒体など、有形な媒体１０２に実現された命令を含むコンピュータ・プログラム・コードの形態で実施することもでき、該コンピュータ・プログラム・コードが、コンピュータ、制御装置、またはプロセッサ１００にロードされ、実行されると、該コンピュータ、制御装置、またはプロセッサ１００が、本発明を実施する装置となる。また、本発明は、たとえば、記憶媒体に記憶され、コンピュータ、制御装置、またはプロセッサ１００にロードまたは実行されるか、あるいは、電子配線またはケーブル、光ファイバ、電磁放射などの何らかの伝送媒体を介して伝送されるかを問わず、データ信号１０３としてのコンピュータ・プログラム・コードの形態で実施することもでき、その場合、該コンピュータ・プログラム・コードがコンピュータにロードされて実行されると、該コンピュータは本発明を実施する装置になる。汎用プロセッサ１００上で実施した場合、コンピュータ・プログラム・コード・セグメントは、特定の論理回路を構築するようにプロセッサを設定する。
【００８７】
類似の要素を示すための第１、第２、またはその他の同様の表記は、別段の明記がない限り、特定の序列を規定または含意するものではないことを理解されたい。
【００８８】
以上、本発明について実施例を参照しながら説明したが、本発明の範囲から逸脱することなく、様々な変更を加えることができ、その各要素の代わりに同等物を使用することもできることが、当業者ならわかるであろう。さらに、本発明の基本的な範囲から逸脱することなく、特定の状況または材料を本発明の教示に適合させるために、多くの修正を加えることができる。したがって、本発明は、本発明を実施するために企図された最良の形態として開示した特定の実施態様には限定されず、本発明は、特許請求の範囲に含まれるすべての実施態様を含む。
【図面の簡単な説明】
【００８９】
【図１】２進乗算器のアーキテクチャのデータの流れの一例を示す図である。
【図２】実施例による、３パイプ・スーパースケーラ固定小数点プロセッサの略ブロック図とデータの流れを示す図である。
【図３】実施例による乗算方法のフローチャートを示す図である。
【図４】有損失２進乗算命令を示す図である。
【図５】２進乗算命令の１回乗算ファミリにおける２つの命令を示す図である。
【図６】２進乗算の乗算論理群における一対の命令を示す図である。
【符号の説明】
【００９０】
１  被乗数
２  乗数
３  重複ビット
４  ＭＣＡＮＤ＿６４制御信号
５  ＵＮＳＩＧＮＥＤ制御信号
６  ＭＴＥＲＭ＿ＳＨＩＦＴ制御信号
１０  乗算器
１１  被乗数ハイワード変換
１２  被乗数入力マージ（被乗数倍数生成論理）
１３  左シフタ（被乗数倍数生成論理）
１４  １の補数モジュール（被乗数倍数生成論理）
１５  １の補数モジュール（被乗数倍数生成論理）
１２  被乗数倍数生成論理
１３  被乗数倍数生成論理
１４  被乗数倍数生成論理
１５  被乗数倍数生成論理
１６  ブース記録論理
１７  選択論理
１８  加算器
１９  桁上げレジスタ
２０  合計レジスタ
２１  桁上げ伝播加算器
２２  マルチプレクサ
５０ａ  パイプライン
５０ｂ  パイプライン
５０ｃ  パイプライン
５１  オペランド・レジスタ
５２  オペランド・レジスタ
５３  オペランド・レジスタ
５４  オペランド・レジスタ
５５  オペランド・レジスタ
５６  オペランド・レジスタ
５７  出力レジスタ
５８  出力レジスタ
５９  作業用レジスタ
６０  マルチプレクサ
６２  マルチプレクサ
６４  ２進加算器ユニット
６６  ２進加算器ユニット
７２  ビット論理ユニット
７４  ビット論理ユニット
７６  ローテータ
７８  ローテータ
８２  先行ゼロ検出論理
８４  先行ゼロ検出論理
８６  バッファ
９０  汎用レジスタ・ファイル
９２  オペランド・バッファ
１００  プロセッサ
１０２  媒体
１０３  データ信号
２００  ３パイプライン・スーパースケーラ固定小数点プロセッサ
【図１】
2004342106.tif 000013
【図２】
2004342106.tif 000014
【図３】
2004342106.tif 000015
【図４】
2004342106.tif 000016
【図５】
2004342106.tif 000017
【図６】
2004342106.tif 000018