(57)【特許請求の範囲】
【請求項１】
第１のオペランドと、複数の下位ビットと複数の上位ビットとを備える第２のオペランドとに対して複数の加算演算を実行する手段と、
加算器と、
前記手段を用いて前記第１のオペランドのある部分に対して第１の演算を実行している間に、前記加算器が前記第１のオペランドの他の部分に対して第２の演算を実行することを可能にするコントローラと
を備えてなり、
前記コントローラは、前記第２のオペランドの前記複数の上位ビットが同一であるかどうかに基づいて前記第１の演算と前記第２の演算を可能にするものである、装置。
【請求項２】
前記加算器に接続された内部記憶媒体をさらに備える請求項１に記載の装置。
【請求項３】
前記複数の加算演算を実行する手段がウォリスのツリーを含むものである、請求項１に記載の装置。
【請求項４】
前記ウォリスのツリーが複数の桁上げ保留加算器を含むものである、請求項２に記載の装置。
【請求項５】
前記ウォリスのツリーが４段式のウォリスのツリーである、請求項４に記載。
【請求項６】
前記加算器が桁上げ先取り加算器である、請求項１に記載の装置。
【請求項７】
複数の加算演算を実行する前記手段に接続されたブース式エンコーダをさらに含む、請求項１に記載の装置。
【請求項８】
前記ウォリスのツリーが９つの入力ベクトルを受け取り、２つの出力ベクトルを生成する、請求項４に記載の装置。
【請求項９】
前記内部記憶媒体が１つ以上のアキュームレータを含むものである、請求項２に記載の装置。
【請求項１０】
前記１つ以上のアキュームレータが前記加算器の出力部に接続されるものである、請求項９に記載の装置。
【発明の詳細な説明】
【０００１】
［背景］
本発明はプロセッサベースのシステムに関し、より詳細には、乗算累算ユニットと乗算累算方法に関する。
【０００２】
乗算累算ユニット（multiply-accumulate unit）、すなわち、ＭＡＣは、乗算演算を実行するように設計されたユニットである。例えば、プロセッサベースのシステムでは、そのような演算は極めて多く行われる。
【０００３】
ＭＡＣは、各種のロジックを用いて実行される。いくつかのアプリケーションでは多数の乗算演算が行われるため、ＭＡＣを最も迅速に実行することは一般的に好まれるものである。任意のＭＡＣ設計が成功するかどうかは、考慮すべき事項の中でも、電力についての要求事項、ＭＡＣ回路に割り当てることができる利用可能な空間、ＭＡＣに対する使用目的に依存する。
【０００４】
しかしながら、通常は、速度と費用との間のトレードオフのために、ＭＡＣを最適に動作させる設計が難しくなる。追加のハードウェア、そのハードウェアを収容するために必要なチップの空間、又はそのハードウェアを駆動するために必要とされる電力の形態で、コストが発生する。
【０００５】
例えば、多くのディジタル信号処理、すなわち、ＤＳＰのアプリケーションでは、いくつかの重要な演算は一連の乗算及び／又は累算を必要とする。このため、処理能力が高いＭＡＣは、高い性能を遂行するために必須である。しかしながら、今日の多くＤＳＰの用途では、特に携帯用の電子機器の市場では、消費電力が小さいことが求められている。
【０００６】
このため、ＭＡＣに対して、過度に電力を消費せずに高い処理能力を達成できるという継続的な要求がある。
【０００７】
［概要］
本発明の１つの実施形態の方法には、ユニットの第１の部分において第１のセットのオペランドを受け取るステップと、第１の中間結果を得るために、この第１のセットのオペランドに対して複数の演算を実行するステップと、ユニットの第１の部分において第２のセットのオペランドを受け取るステップとが含まれる。これらのステップに続いて、第２の複数の演算が第１の中間結果に対して実行されて第１の最終結果を得て、その間に、第１の複数の演算が第２のセットのオペランドに対して実行され第２の中間結果を得る。
【０００８】
本発明の利点及び他の特徴は、以下の説明、図面、及び特許請求の範囲から明らかになるであろう。
【０００９】
［詳細な説明］
最も基本的なレベルでは、ＭＡＣは２つの整数値を受け取り、それらの値を乗算し、演算結果を送出する。いくつかのアプリケーションに対しては、付加的な定数値、すなわち累算値を結果に加える。これにより、以下の式で示すように、被乗数ａ及び乗数ｂの乗算に加えてｃの累算から、ＭＡＣは結果ｄを生成する。
ｄ＝（ａ×ｂ）＋ｃ
【００１０】
乗算演算は、本質的には部分積の一連の加算として実行される。最適な性能を達成するために、加算演算をより迅速に実行するか、必要な加算演算の数を減少させるという特徴を、ＭＡＣが有することができる。
【００１１】
例えば、ＭＡＣはブース（Booth）レコーダ又はブース乗算器とも呼ばれるブース式エンコーダを一般に備えている。このブース式エンコーダは、乗算を実行するために使用される段数を減らすことができる。共に加算される部分積の数を、このようにして、減少させることができる。例えば、１６ビットのワードの場合、部分積の数を１６から８に、２分の１に減らすことができる。
【００１２】
ＭＡＣの中で見出すことができる他の特徴は、ウォリスのツリー（Wallace tree）として周知である。このウォリスのツリーは、多重加算演算を実行する手段である。ウォリスのツリーは一般に加算器のような特徴を含み、多重部分積の加算の実行を支援する。
【００１３】
例えば、ウォリスのツリーは、桁上げ保留加算器（carry-save adder）のグループを含んでいる。３−２式桁上げ保留加算器は、例えば、以下の式で示すように、３つの入力ａ，ｂ，及びｃを受け取り、２つの出力、すなわち、合計ｙ及び桁上げｚを生成する。
ａ＋ｂ＋ｃ＝ｙ＋ｚ＊２
出力の桁上げは、次の演算のためにその名前のように「保留（save）」される。
【００１４】
ウォリスのツリーは、多数の入力値が一般に２つの結果、すなわち、合計値と桁上げ値とを生成するように、桁上げ保留加算器又は同様のロジックを編成することができる。例えば、４段式のウォリスのツリーは、４段の３−２式桁上げ保留加算器（3-to-2  carry-save adder）を備えている。この４段式のウォリスのツリーは９つの入力ベクトルを受け取り、その結果として合計ベクトルと桁上げベクトルとを生成する。
【００１５】
多数のＭＡＣ設計の別の特徴は、例えば、最終結果を生成するための、２つのベクトルの全てのビットを加算するロジックである。桁上げ先取り加算器（carry look-ahead adder）、すなわちＣＬＡは、そのような論理装置の１つである。このＣＬＡは、２つのマルチビットのオペランドの加算を効率よく実行することができる。
【００１６】
特に、ディジタル信号処理及び他のアプリケーションについては、１６ビットの符号付き整数を極めて高速に乗算するＭＡＣの能力は、主要な関心事である。１６ビット及びさらに大きな整数演算の乗算を高速化するために、ＭＡＣは付加的な回路を含むことができる。例えば、複数の演算を同時に実行するように、ＭＡＣの各々の構成要素を二重化することができる。その上、並列演算を把握するコントロールロジックは、ＭＡＣの一部である。しかしながら、付加的なハードウェアは高価であり、利用可能な空間は限られており、また新しいハードウェアを維持するための追加の電力が使用される。
【００１７】
以前の演算がまだパイプラインのどこかにあってまだ完了されていない間でも、ＭＡＣのハードウェアによって新しい乗算演算をある時点で処理するように、別のＭＡＣ設計は演算をパイプライン処理する。パイプライン処理は、実行される演算のそれぞれが他と独立して動作する多数のステージを含むことができる。このため、パイプライン処理は、ＭＡＣのハードウェアによって同時に実行される２つ、３つ、又はそれ以上の独立した演算の状態を一時的に記憶する、レジスタのような付加的なコントロールロジック及びハードウェアを利用することができる。並列のハードウェアを設けるよりも高価ではないが、この付加的なコントロールロジックは開発費用に加えられ、また利用可能なボード又はチップ空間を減少させる。さらに、パイプライン処理を支援するＭＡＣの実行速度は遅くなる。
【００１８】
処理能力が高いＭＡＣは、ハードウェアの費用又は電力についての要求事項に過度に影響を与えずに、従来のアーキテクチャ上の機構を用いて実行することができる。本発明のいくつかの実施形態では、ＭＡＣの設計は、ＭＡＣの２つの機能ユニットを同時に動作させることによって、単一サイクルのスループットで１６ビットの乗算演算を提供する。
【００１９】
図１では、ＭＡＣ１００は、本発明の１つの実施形態に基づいて、ブース式エンコーダ１０、マルチプレクサ、すなわちＭＵＸ、のアレイ１４、ウォリスのツリー２０、及び桁上げ先取り加算器、すなわちＣＬＡ、３０を含んでいる。このＭＡＣ１００は、２つの入力データ、すなわち被乗数Ａ及び乗数Ｂ、並びに累算データ値Ｃを受け取ることができる。これらの入力値Ａ，Ｂ，及びＣは、例えば、１６ビット、３２ビット、又はそれ以上の符号付き整数値とすることができる。
【００２０】
本発明の１つの実施形態では、ブース式エンコーダは一度に最大１６ビットの乗数Ｂを受け取り、これにより、最大８つのコントロール信号１２ａ〜１２ｈを生成する。ＭＵＸアレイ１４は、この８つのコントロール信号１２ａ〜１２ｈをブース式エンコーダ１０から受け取り、また被乗数Ａも受け入れる。このＭＵＸアレイ１４は最大８つの部分積１６ａ〜１６ｈを生成する。これらの部分積は、次に、ウォリスのツリー２０に送出される。
【００２１】
本発明の１つの実施形態では、ウォリスのツリー２０は、複数の桁上げ保留加算器（図示せず）を含む４段のユニットである。このウォリスのツリー２０は、このように、９つの入力信号を受け取り、２つの出力信号、すなわち、合計ベクトル２２ａ及び桁上げベクトル２２ｂを生成する。これらの合計ベクトル２２ａ及び桁上げベクトル２２ｂは、続いてＣＬＡ３０に送られて合計される。その代わりに、又は同時に、合計ベクトル２２ａ及び桁上げベクトル２２ｂはＭＵＸアレイ１４に戻されて、さらに処理される。
【００２２】
ＭＡＣ１００は、フリップフロップ６ａ〜６ｃの３つのバンクを含んでいる。これらのフリップフロップ６により、被乗数Ａ、乗数Ｂ、及び累算データＣの部分をＭＡＣ１００の他のロジックに処理するために送ることができる。例えば、３２ビットの乗数Ｂ［３１：０］が乗算演算の一部としてＭＡＣ１００に送出される場合、フリップフロップ６ｂは１６ビットの部分Ｂ［３１：１６］又はＢ［１５：０］の間を切り換えて、乗数Ｂのどの部分がブース式エンコーダ１０に送られるかをコントロールする。
【００２３】
ＭＡＣ１００はＭＵＸ８ａ〜８ｅも備えている。これらのＭＵＸ８は、ＭＡＣ１００の後段ユニットによる信号の受取をコントロールすることができる。例えば、ＭＵＸ８ａ〜８ｃはフリップフロップ６ａ〜６ｃと共に動作して、被乗数Ａ、乗数Ｂ、又はアキュームレータＣのどの部分がそれぞれＭＵＸアレイ１４、ブース式エンコーダ１０、又はウォリスのツリー２０によって受け取られるかをコントロールする。ＭＵＸ８ｄは、ＣＬＡ３０による合計ベクトル２２ａ及び桁上げベクトル２２ｂの受信をコントロールする。ＭＵＸ８ｅにより、ＣＬＡ３０からの出力値３４を、必要な場合、符号拡張（sign-extended）とすることができる。
【００２４】
ＭＡＣ１００は、ウォリスのツリー２０から出力信号２２ａ及び２２ｂを受け取る２バンクのＭＵＸ及びフリップフロップのユニット２４ａ及び２４ｂを含んでいる。このＭＵＸ及びフリップフロップのユニット２４ａは、合計ベクトル２２ａ及び桁上げベクトル２２ｂの一部をＭＵＸアレイ１４にフィードバックするために使用される。ＭＵＸアレイ１４にフィードバックされる部分２６ａは、実行される演算の種類に依存する。そのようなフィードバックは、３２ビットの乗算を実行するような、多段のＭＡＣ演算に共通の特徴である。
【００２５】
このＭＡＣ１００は第２のＭＵＸ及びフリップフロップのユニット２４ｂを含んでいる。このユニット２４ｂにも合計ベクトル２２ａ及び桁上げベクトル２２ｂが送られる。その後、これらの値はＭＵＸ８ｄを経由してＣＬＡ３０に送られる。本発明の１つの実施形態では、合計ベクトル２２ａ及び桁上げベクトル２２ｂは両方のユニット２４ａ及び２４ｂに同時に送られる。
【００２６】
本発明のいくつかの実施形態では、ＭＡＣ１００は、乗算演算の処理能力を向上させることができるアーキテクチャ上の拡張を含んでいる。例えば、本発明の１つの実施形態では、このＭＡＣ１００は２つのレジスタ、すなわち、アキュームレータＡ、３２ａ、及びアキュームレータＢ、３２ｂを備えている。これらのアキュームレータ３２は、ＣＬＡ３０から結果ベクトル３４を受け取ることができる。本発明の１つの実施形態では、この結果ベクトル３４は二者択一的にアキュームレータ３２に記憶される。例えば、第１の演算では、中間結果であるこの結果ベクトルは、アキュームレータＡ３２ａに記憶される。この後の演算では、次の結果ベクトルがアキュームレータＢ３２ｂに記憶される。
【００２７】
これらのアキュームレータ３２は、それぞれ、出力をウォリスのツリー２０に送るために、ＭＵＸ８ｃに接続される。この構成により、いずれかのアキュームレータ３２に記憶された値を、ＭＡＣ１００の外部のソース（Ｃ）から累算データを受け取る代わりに累算データとして、ウォリスのツリー２０に送ることができる。以下に示すように、本発明の１つの実施形態では、アキュームレータ３２は、ＭＡＣ１００内で実行される演算の処理能力を向上させる。
【００２８】
ＭＡＣ１００は、非明示的乗算演算（implicit multiply instruction）のような非明示的命令に対応する。非明示的命令とは、１つ以上の中間結果をレジスタのようにＭＡＣ内部に記憶することができる命令である。ＭＡＣの回路内にレジスタを含むことにより、ＭＡＣは中間結果を、例えば外部のバスを介してＭＡＣの外部の記憶場所に送出しないようにすることができる。このため、非明示的演算に対応するＭＡＣは、対応していないＭＡＣよりも一層迅速に命令を処理することができる。
【００２９】
多くの乗算演算に対して、ＭＡＣ回路は最終結果に達する前に、複数の中間結果を生成する。従来のＭＡＣの設計は、一般に、中間結果、中間の合計ベクトル及び中間の桁上げベクトルをウォリスのツリーから受け取り、次の処理のために、結果をＭＵＸアレイにフィードバックする。この方式は必要に応じて繰り返される。最終的には、ウォリスのツリーにより生成された合計ベクトル及び桁上げベクトルは、最終結果を表す。これらの結果は、その後ＣＬＡに送られる。このＣＬＡでこれらの結果は合計され、最終結果としてＭＡＣ回路から送出される。
【００３０】
図１の実施形態では、中間の合計ベクトル２２ａ及び中間の桁上げベクトル２２ｂは、必要な場合、各サイクルにおいてＣＬＡ３０に送られる。ＣＬＡ３０は、次に、この中間の合計ベクトル２２ａ及び中間の桁上げベクトル２２ｂを合計して、中間結果３４を生成する。この中間結果３４は、次に、アキュームレータ３２のいずれかに記憶される。
【００３１】
ＭＡＣ１００の設計におけるフィードバックロジックにより、中間結果３４をアキュームレータ３２の１つから、ＭＵＸ８ｃを経由して累算データ１８としてウォリスのツリー２０内にフィードバックすることができる。ウォリスのツリー２０がアキュームレータＣ用の入力ライン１８を備えていることを想起されたい。図１では、ＭＵＸ８ｃは、累算データ１８のソースがアキュームレータ３２を含むことを可能にしている。
【００３２】
本発明の１つの実施形態では、ＭＡＣ１００は、ウォリスのツリー２０及びＣＬＡ３０の両方が同時に演算することができる回路を提供する。この回路は、本発明の１つの実施形態では、初期終端ロジック（early termination logic）５０及びＭＡＣコントロールロジック５２を備えている。この回路は、ＭＡＣ１００による１つ以上の乗算演算、又は単一の乗算演算における１つ以上の部分の同時処理をコントロールすることができる。
【００３３】
典型的な実現方法においては、ＭＡＣは符号付きのバイナリ値をオペランドとして受け取る。例えば、２の補数表示法を使用する。この２の補数表示法では、値の最上位のビットは符号を表す、すなわち、ゼロは正の値を、１は負の値を表す。従って、２の補数表示法では、１６ビットのオペランド０ＦＦＣ１ｈは−６３ｄを示し、オペランド００３Ｆｈは＋６３ｄを表す
【００３４】
さらに、１６ビット値を、いくつかのアプリケーションに対しては、３２ビット値として表すことができる。従って、符号ビット（ビット１５）を上位１６ビットの中で「拡張」又は複写することができる。符号拡張オペランド０ＦＦＦＦＦＦＣ１ｈは、これにより再度−６３ｄを表し、一方オペランド００００００３Ｆｈは＋６３ｄを示す。符号ビット（ビット１６）が拡張されるので、両方のオペランドの上位１７ビットは同一である。同様に、いずれの値に対しても、上位１６ビットは乗算演算を実行するためには必要ではない。
【００３５】
本発明の１つの実施形態では、初期終端ロジック５０は、この符号付きのバイナリ値の機能をＭＡＣ１００の利点として使用する。図１では、初期終端ロジック５０は乗数Ｂから信号を受け取る。この初期終端ロジック５０は、３２ビットの乗数Ｂの上位１７ビットが同一の場合に呼び出される。そのような場合では、乗数Ｂの上位１７ビットは乗算演算では使用されない。
【００３６】
初期終端ロジック５０は、呼び出されると、信号をＭＡＣコントロールロジック５２に送る。このＭＡＣコントロールロジック５２は、フリップフロップ６、ＭＵＸ８、ＭＵＸ及びフリップフロップ２４、及びアキュームレータ３２をコントロールする。ＭＡＣコントロールロジック５２は、これにより、次の被乗数Ａをフリップフロップ６ａ及びＭＵＸ８ａがラッチし、次の乗数Ｂをフリップフロップ６ｂ及びＭＵＸ８ｂがラッチし、又は次の累算データＣをフリップフロップ６ｃ及びＭＵＸ８ｃがラッチすることを可能にする。
【００３７】
さらに、このＭＡＣコントロールロジック５２は、ウォリスのツリー２０から受け取った中間の合計ベクトル２２ａ及び中間の桁上げベクトル２２ｂの経路指定をコントロールすることができる。ＭＡＣコントロールロジック５２は、必要な場合、ＭＵＸ及びフリップフロップ２４ａ、ＭＵＸ及びフリップフロップ２４ｂ、及びＭＵＸ８ｄを使用可能にする。
【００３８】
ＭＡＣコントロールロジック５２は、さらに、アキュームレータＡのレジスタ３２ａ及びアキュームレータＢのレジスタ３２ｂをコントロールして、内部に記憶された値を累算入力１８としてウォリスのツリー２０に戻すことができるようにする。最後に、ＭＡＣコントロールロジック５２は、最終的な出力ベクトル３４が必要な場合符号拡張されるようにＭＵＸ８ｅをコントロールして、出力値４０を生成することができる。
【００３９】
本発明の１つの実施形態では、ＭＡＣコントロールロジック５２は、命令デコーダ（図示せず）のようなＭＡＣ１００の外部のソースからのコントロール信号を受け取ることができる。ＭＡＣコントロールロジック５２は、ＭＡＣ１００の外部の別のソースにコントロール信号を送ることもできる。
【００４０】
実行される演算に基づいて、ＭＡＣ１００は中間のベクトル値を生成することができる。例えば、本発明の１つの実施形態では、ブース式エンコーダ１０は、乗数Ｂから１６ビット値を受け取る。これにより、２つの３２ビットの数又は１６ビットの被乗数及び３２ビットの乗数を乗算する場合、ブース式エンコーダ１０は、第１のサイクルの中で下位１６ビットの乗数を受け取り、次に第２のサイクルで上位１６ビットの乗数を受け取る。同様に、ＭＡＣ１００の他の回路は、第１及び第２の両方のサイクルでデータを受け取ることができる。このように、乗算演算は完了するには、少なくとも２つのサイクルを利用する。
【００４１】
ＭＡＣ１００は、いくつかの演算に対するスループットを単一サイクルでなし遂げることができる。本発明の１つの実施形態では、ＭＡＣ１００は、１６ビットの乗算演算を実行するスループットを単一のサイクルで実現する。ＭＡＣ１００が第１のセットのオペランドを受け取った後、ウォリスのツリー２０及びＣＬＡ３０は、全ての後続のオペランドを同時に処理することができる。例えば、ウォリスのツリー６６はサイクルｎでデータを処理し、一方同時に、ＣＬＡ６８はサイクルｎ−１でデータを処理する。
【００４２】
図２Ａでは、フローチャートが、どのようにＭＡＣ１００のロジックが乗算又は乗算／累算の演算を処理するかを示している。この実施例では、２つの１６ビットのオペランドが３２ビット値として符号拡張される。そのようなオペランドはＤＳＰのアプリケーションでは一般的であり、ＭＡＣ１００内の初期終端ロジック５０の性能を特に明らかにする。ＭＡＣ１００は、しかしながら、他の特徴を用いてオペランドに対して乗算又は乗算／累算の演算を実行するものとすることができる。
【００４３】
第１のサイクルのサイクル０が開始する（ブロック２００）。本発明の１つの実施形態では、乗数Ｂ［１５：０］の下位１６ビットがブース式エンコーダ１０に送られる（ブロック２０２）。ＭＵＸアレイ１４は、このブース式エンコーダ１０から８つのコントロール信号１２及び被乗数Ａ［３１：０］を受け取る（ブロック２０４）。ＭＵＸアレイ１４は、ウォリスのツリー２０がＭＵＸアレイ１４から８つの部分積のベクトル１６を受け取るように、これらの信号を処理する。さらに、ウォリスのツリー２０は累算データＣ［３１：０］を受け取る（ブロック２０６）。このデータから、ウォリスのツリー２０は、中間の合計ベクトル（intermediate sum vector;ＩＳＶ）２２ａ及び中間の桁上げベクトル（intermediate carry vector;ＩＣＶ）２２ｂを生成する（ブロック２０８）。この中間の合計ベクトル２２ａ及び中間の桁上げベクトル２２ｂは、ＭＵＸ及びフリップフロップ２４ａ及び２４ｂに送られる（ブロック２１０）。
【００４４】
上記の演算とは独立して、サイクル０の開始時に（ブロック２００）、初期終端ロジック５０は３２ビットの乗数Ｂ［３１：０］を受け取ることができる（ブロック２１２）。オペランドが符号拡張された１６ビット値であるので、乗数Ｂの上位１７ビットは同一である。このため、初期終端ロジック５０は信号をＭＡＣコントロールロジック５２に送る（ブロック２１４）。ＭＡＣコントロールロジック５２は、次に、フリップフロップ６ａ，６ｂ及び６ｃ並びにＭＵＸ８ａ，８ｂ及び８ｃをラッチする信号を送る（ブロック２１６）。このように、ＭＡＣコントロールロジック５２は、回路が次のＭＡＣのオペランドＡ，Ｂ及びＣをラッチできるようにする。
【００４５】
図２Ｂの第２のサイクル（サイクル１）は、図２Ａの演算の続きである。サイクル１が開始すると（ブロック２３０）、ＭＡＣコントロールロジック５２は信号をＭＵＸ８ｄに送り、中間の合計ベクトル２２ａ及び中間の桁上げベクトル２２ｂを引き渡す（ブロック２３２）。中間の合計ベクトル２２ａ及び中間の桁上げベクトル２２ｂは、ＣＬＡ３０に送られる（ブロック２３４）。これにより、ＣＬＡ３０は、中間の合計ベクトル２２ａ及び中間の桁上げベクトル２２ｂを加算する（ブロック２３６）。結果４０は、次に、ＭＡＣ１００から送出される（ブロック２３８）。これで、サイクル１が完了する。
【００４６】
図３では、本発明の１つの実施形態による、ＭＡＣ１００を用いる１６ビットの乗算演算の単一サイクルのスループットが、チャートを用いて示されている。このチャートの上部には、ＭＡＣ１００が実行する１６ビットの乗算演算の番号付けられた順序が示されている。チャートの左側には、演算が実行されたサイクルが規定されている。このチャートは、本発明の１つの実施形態に基づいて、「Ｗ」で示すウォリスのツリー２０が実行した演算と、「Ｃ」で示すＣＬＡ３０が実行した演算とを追跡記録している。
【００４７】
第１の１６ビットの乗算演算については、ウォリスのツリー２０がサイクル０で実行され、一方ＣＬＡ３０がサイクル１で実行される。第２の１６ビットの乗算演算に関しては、ウォリスのツリー２０がサイクル１で実行され、一方ＣＬＡ３０がサイクル２で実行される。第１の乗算演算に対するＣＬＡ３０の実行は、第２の１６ビットの乗算演算に対するウォリスのツリー２０の実行と同時に行われる。このチャートが示すように、後続の１６ビットの乗算演算は、すでに説明した２つの場合のように進行する。第１５サイクルの終わりにおいて、１５個の１６ビットの乗算演算が完了する。本発明の１つの実施形態によるいくつかの乗算演算については、ＭＡＣ１００はこのように、単一サイクルのスループットを提供する。
【００４８】
アキュームレータ３２により、ＭＡＣ１００は非明示的な乗算及び乗算／累算の演算を実行することができる。第２の実施形態では、ＭＡＣ１００は単一のアキュームレータを備えている。アキュームレータ３２は、いくつかの非明示的命令によって暗黙のうちに参照される。これらの非明示的な乗算／累算命令は、レジスタ指定のアキュームレータの代わりに、アキュームレータ３２を参照する。
【００４９】
例えば、本発明の１つの実施形態の命令であるＭＡＲ又はＭＲＡは、アキュームレータ３２を、それぞれ、読み取る又は書き込むために、ＭＡＣコントロールロジック５２が受け取ることができる。図４Ａでは、フローチャートが、初期終端が呼び出される非明示的な乗算／累算演算を例証している。初期終端が呼び出されるためには、乗数Ｂの他の１７ビットが全て０又は全て１であることを想起されたい。
【００５０】
サイクル０が開始する（ブロック３００）と、乗数Ｂ［１５：０］がブース式エンコーダ１０に送られる（ブロック３０２）。ＭＵＸアレイ１４は、この時、このブース式エンコーダ１０から８つのコントロール信号１２及び被乗数Ａ［３１：０］を受け取る（ブロック３０４）。
【００５１】
ウォリスのツリー２０が、ＭＵＸアレイ１４から８つの部分積のベクトルを受け取る。さらに、ウォリスのツリー２０は、アキュームレータＡ，３２ａ又はアキュームレータＢ，３２ｂのいずれかから累算値を受け取る（ブロック３０６）。ウォリスのツリー２０は、この後、中間の合計ベクトル２２ａ及び中間の桁上げベクトル２２ｂを生成する（ブロック３０８）。
【００５２】
本発明の１つの実施形態では、桁上げ先取り加算器３０は４０ビットのＣＬＡであり、これは１６ビットのＤＳＰ演算を実行することができる。同様に、アキュームレータＡのレジスタ３２ａ及びアキュームレータＢのレジスタ３２ｂは、４０ビットのレジスタである。これにより、次の演算では、中間の合計ベクトル２２ａ及び中間の桁上げベクトル２２ｂの下位４０ビットは、ＭＵＸ及びフリップフロップ２４ａ及び２４ｂに送られる（ブロック３１０）。
【００５３】
また、サイクル０の開始時に、３２ビットの乗数Ｂ全体が、初期終端ロジック（ＥＴＬ）５０に送られる（ブロック３１２）。乗数Ｂの上位１７ビットが同一であるため、初期終端ロジック５０は信号をＭＡＣコントロールロジック５２に送る（ブロック３１４）。ＭＡＣコントロールロジック５２は、次に、フリップフロップ６ａ，６ｂ及び６ｃ並びにＭＵＸ８ａ，８ｂ及び８ｃをラッチする信号を送る（ブロック３１６）。このことは、ウォリスのツリー２０が次の非明示的な乗算／累算命令を次のサイクルで受け入れるように利用できることを示している（ブロック３１８）。
【００５４】
図４Ｂで、サイクル１が開始する（ブロック３３０）。ＭＡＣコントロールロジック５２は信号をＭＵＸ８ｄに送り、中間の合計ベクトル２２ａ及び中間の桁上げベクトル２２ｂを引き渡す（ブロック３３２）。ＣＬＡ３０は、次に、２つの値２２を合計して、中間結果３４を生成する（ブロック３３４）。これは非明示的命令であるため、この結果３４は次ぎにアキュームレータＡ，３２ａ又はアキュームレータＢ，３２ｂのいずれかに記憶される（ブロック３３６）。これにより、サイクル１が終了する（ブロック３３８）。
【００５５】
本発明の１つの実施形態では、ＭＡＣ１００は、アキュームレータを参照する非明示的命令を受け取ることができる。これらの命令は、ＭＡＣコントロールロジック５２から受け取ることができる。このＭＡＣコントロールロジック５２は、アキュームレータＡ，３２ａ又はアキュームレータＢ，３２ｂを最終的にコントロールする。
【００５６】
例えば、図４Ｃでは、ＭＡＣコントロールロジック５２は、アキュームレータＡ，３２ａを読み取る非明示的命令を受け取ることができる（ブロック３５０）。アキュームレータＡ，３２ａ及びアキュームレータＢ，３２ｂに記憶された値は、ＣＬＡ３０に送られる（ブロック３５４）。ＣＬＡ３０は、次に、値３６ａ及び値３６ｂを加算する（ブロック３５４）。ＣＬＡ３０は、次に、結果４０を出力データとして送出する（ブロック３５６）。この結果４０は、次に、ＭＡＣ１００の外部のレジスタファイルに送られる。
【００５７】
図５では、非明示的累算演算による乗算は、パックされたデータ命令を使用する。本発明の１つの実施形態では、ＭＡＣ１００は４つの異なるパックされたデータ命令を受け取ることができる。これらの４つのパックされたデータ命令は、１６ビット又は２つの３２ビットの半分のオペランドに対して演算する。例えば、１つの命令は、乗数Ｂ及び被乗数Ａの両方の下位１６ビットに対して演算を行うことができる。別の命令は、被乗数Ａの上位１６ビット及び乗数Ｂの下位１６ビットに対して演算を行うことができる。最終的に、各パックされたデータ命令は、このように、２つの１６ビットのオペランドに対して１６ビットの乗算演算を実行する。
【００５８】
サイクル０の開始時に（ブロック４００）、３２ビットの被乗数Ａ［３１：０］及び３２ビットの乗数Ｂ［３１：０］がＭＡＣ１００に送られる（ブロック４０２）。ＭＡＣコントロールロジック５２は、またパックされたデータ命令を受け取る（ブロック４０４）。
【００５９】
被乗数Ａの１６ビットが３２ビットに拡張される。例えば、パックされたデータ命令が被乗数Ａの下位１６ビットに対して演算を行っている場合、被乗数Ａの上位１６ビットは被乗数Ａの１６番目のビットの内容に置き換えられる。基本的に、符号が１６番目から３２番目のビットに拡張される。同様に、パックされたデータ命令が被乗数Ａの上位１６ビットに対して演算を行っている場合、上位１６ビットは下位１６ビットにシフトされ、上位１６ビットは符号ビットの値で充填される。
【００６０】
乗数Ｂの１６ビットはブース式エンコーダ１０に送られる（ブロック４０８）。例えば、パックされたデータ命令が乗数Ｂの下位の半分に対して演算する場合は、Ｂ［１５：０］がブース式エンコーダ１０に送られる。同様に、乗数Ｂの上位の半分に対して演算するパックされたデータ命令については、Ｂ［３１：１６］がブース式エンコーダ１０に送られる。
【００６１】
この点から考えると、パックされたデータ命令は、任意の他の非明示的命令と同様に動作する。このため、ＭＡＣ１００が実行する次の演算は、図４Ａ（ブロック３０４）のようになる。
【００６２】
他の命令と同様に、ＭＡＣ１００は初期終端ロジック５０が呼び出されるかどうかを同時に決定している。すなわち、乗数Ｂ［３１：０］は初期終端ロジック５０に送られる（ブロック４２０）。乗数Ｂの上位１７ビットが同一であるため、初期終端ロジック５０は信号をＭＡＣコントロールロジック５２に送る（ブロック４２２）。ＭＡＣコントロールロジック５２は、次に、フリップフロップ６ａ，６ｂ及び６ｃ並びにＭＵＸ８ａ，８ｂ及び８ｃをラッチさせる信号を送る（ブロック４２４）。これにより、新しいＭＡＣの命令を次のサイクルで処理することが可能になる（ブロック４２６）。
【００６３】
このように、乗算累算ユニットは、いくつかの演算に対して単一サイクルのスループットを提供する。本発明の１つの実施形態では、ＭＡＣは付加的な電力を消費する冗長的なハードウェアを使用せず、また動作が遅いパイプライン回路を含んでいない。その代わり、ＭＡＣの一部であるウォリスのツリー及び桁上げ先取り加算器が同時に演算する。そのような同時演算が行われる場合、より高いスループットが可能である。
【００６４】
限られた数の実施形態に関して本発明を説明してきたが、当業者はこれらの実施形態からの多くの修正例及び変更例を理解されよう。添付した特許請求の範囲が、本発明の真の精神及び範囲の中に入る全てのそのような修正例や変更例をカバーするものとする。
【図面の簡単な説明】
【図１】  本発明の１つの実施形態による乗算累算ユニットのブロック図である。
【図２Ａ】  本発明の１つの実施形態に基づいて、図１のＭＡＣを用いて実行される乗算演算のフローチャートである。
【図２Ｂ】  本発明の１つの実施形態に基づいて、図１のＭＡＣを用いて実行される乗算演算のフローチャートである。
【図３】  本発明の１つの実施形態に基づいて、図１のＭＡＣを用いる１６ビットの乗算演算用の動作時間のチャートである。
【図４Ａ〜図４Ｃ】  本発明の１つの実施形態に基づいて、図１のＭＡＣを用いて実行される非明示的な乗算演算（implicit multiply operation）のフローチャートである。
【図５】  本発明の１つの実施形態に基づいて、図１のＭＡＣを用いて実行されるパックされたデータ命令を用いる乗算演算のフローチャートである。
【図１】
0003869269.tif 000002
【図２Ａ】
0003869269.tif 000003
【図２Ｂ】
0003869269.tif 000004
【図３】
0003869269.tif 000005
【図４Ａ】
0003869269.tif 000006
【図４Ｂ】
0003869269.tif 000007
【図４Ｃ】
0003869269.tif 000008
【図５】
0003869269.tif 000009