(57)【要約】予め飽和させる乗算器は、任意の乗算を実行する前に、乗算演算のためのオペランドを検査する。オペランドが飽和を必要とするオーバフローを生じさせる場合、乗算器は元のオペランドを乗算せずに飽和した値を出力する。一実施形態では、オペランドから得られたパラメータは、乗算演算が変更されたパラメータに関して実行されると、乗算器が飽和した結果を生成するように変更される。これは、部分積としてゼロの代わりに負のゼロを選択するためにブースリコードされたビットグループを変更すること、および部分積への値１の加算を抑制すること（したがって、値１を効果的に減算すること）を備えることができる。他の実施形態では、オーバフローを生じさせるオペランドが検出された場合、乗算器の出力が強制的に予め決められた飽和値にされる。
2009524169.tif 000002
【特許請求の範囲】
【請求項１】
乗数および被乗数を備える、オペランドの少なくとも１つの既知のセットが、飽和を必要とするオーバフローを生じさせる、固定小数点の飽和させる乗算演算を実行する方法であって、
任意の乗算演算を実行する前に、オーバフローを生じさせる前記オペランドを検出すること、および
前記オペランドを乗算せずに飽和した結果を出力すること
を備える方法。
【請求項２】
オーバフローを生じさせる前記オペランドは、前記オペランドのビットフィールドにおいて表されることができる最大の負の数である、請求項１に記載の方法。
【請求項３】
乗算演算が前記飽和した結果を生成するように、前記オペランドから得られた１つまたはそれより多くのパラメータを調整すること、および
前記調整されたパラメータを用いて乗算演算を実行することをさらに備える、請求項１に記載の方法。
【請求項４】
前記オペランドから得られた１つまたはそれより多くのパラメータを調整することは、前記乗数から得られた１つまたはそれより多くのブースリコードされたビットグループを変更することを備える、請求項３に記載の方法。
【請求項５】
ブースリコードされたビットグループは、ブースリコードされたビットグループの選択をゼロから負のゼロに変更すること、および被乗数から得られた部分積への値１の加算を抑制することを備える、請求項４に記載の方法。
【請求項６】
前記オペランドから得られた１つまたはそれより多くのパラメータを調整することが、前記オペランドから得られた部分積に値負の１を加算することを備える、請求項３に記載の方法。
【請求項７】
前記飽和した結果を出力することは、乗算演算の積にかかわらず、乗算演算の該出力を強制的に飽和した結果にすることを備える、請求項１に記載の方法。
【請求項８】
乗算演算の前記出力を強制的に飽和した結果にすることは、オーバフローを生じさせる前記オペランドを検出することに応答して、前記乗算演算の出力と前記飽和した結果との間で選択することを備える、請求項７に記載の方法。
【請求項９】
乗数および被乗数を備える２つのオペランドを乗算し、それらの積を出力するように動作可能な乗算器回路、および
前記乗算器回路においてオーバフローを生じさせるオペランドを検出するように動作可能なオーバフローを予め検出する回路
を備える予め飽和させる乗算器。
【請求項１０】
前記オーバフローを予め検出する回路が、前記オペランドのビットフィールドにおいて表されることができる最大の負の値を検出する、請求項９に記載の乗算器。
【請求項１１】
前記乗算器回路は、前記乗数を複数のビットグループにリコードするように動作可能なブースリコーダを備え、各ビットグループは部分積として前記被乗数の正または負の倍数を選択し、前記ブースリコーダは、前記オーバフローを予め検出する回路に応答して、前記乗数において飽和した結果を生成するために１つまたはそれより多くのビットグループを変更するようにさらに動作可能である、請求項９に記載の乗算器。
【請求項１２】
前記ブースリコーダは、前記オーバフローを予め検出する回路に応答して、最下位のリコードされたビットグループに、負のゼロを強制的に選択させるように動作可能である、請求項１１に記載の乗算器。
【請求項１３】
前記部分積を加算し、前記ブースリコードされたビットグループによって選択された負の部分積のために前記値１を加算するように動作可能な並列加算器をさらに備え、前記並列加算器が、前記オーバフローを予め検出する回路に応答して負のゼロのための前記値１の前記加算を抑制するようにさらに動作可能である、請求項１１に記載の乗算器。
【請求項１４】
前記乗算器回路は、前記オーバフローを予め検出する回路に応答して前記積から前記値１を減算するように動作可能である、請求項９に記載の乗算器。
【請求項１５】
前記オーバフローを予め検出する回路に応答して前記乗算器回路からの前記積かまたは予め決められた飽和した結果のどちらかを出力するように動作可能な出力選択器をさらに備える、請求項９に記載の乗算器。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、一般に、ディジタル回路の分野に関し、具体的には、予め飽和させる固定小数点乗算器に関する。
【背景技術】
【０００２】
固定小数点乗算は、プロセッサなどのディジタル計算回路によって実行される基本的な算術演算である。たいていのプロセッサの命令セットのアーキテクチャは、様々な固定小数点乗算命令(fixed-point multiply instructions)を含む。固定小数点乗算の既知のハザード(hazard)障害は、（本明細書でより詳細に説明されるように）いくつかの状態の下では、積が、利用可能なビット幅で表されることができる数値を超える可能性があること、すなわち、オーバフローとして知られている状態である。この場合、積の著しい(gross)誤表現(misrepresentation)を回避するために、乗算命令は「飽和した」出力を指定し、それは利用可能なビットフィールドにおいて表され得る最大の数値であるが、実際には、実際の積にできるだけ近い近似値である。これは、飽和させる固定小数点乗算命令として知られている。そのような命令は、通常、オペランドのビット幅の２倍である積のビット幅を指定する。
【０００３】
整数値および小数値の両者は、使用される規則(convention)に応じて、固定小数点のディジタル形式で表されることができる。一般に、全ての現代のプロセッサは、固定された幅のディジタル表現の正および負の整数を表すために２の補数フォーマットを使用する。２の補数フォーマットは一般的である。２の補数表現(representation)では、整数は「符号付き(signed)」である。すなわち、整数が正であるか負であるかは、最上位ビット（ＭＳＢ）、または「符号ビット」の検査によって決定されることができる。さらに、２の補数表現では、符号付き整数の２進算術演算が正しい２の補数結果を生じる。
【０００４】
正の２の補数は、ゼロの符号ビットを有する簡単な２進形式で表される。したがって、２の補数フォーマットで表され得る最大の正の数は、２ｎ−１−１であり、ここでｎはディジタル表現のビット幅である。負の２の補数は、同じ大きさ(magnitude)の正の数に加算されるとゼロに等しくなる２進数として表される。負の２の補数の数は、１の符号ビットを有する。負の数の２の補数表現はディジタル表現のｎビット全てを利用する可能性があるので、２の補数フォーマットで表されることができる最大の負の数は２ｎ−１であり、これは最大の正の２の補数の数より大きさが１大きい。したがって、例えば、３２ビットフィールドにおいて表され得る符号付き整数値の範囲は、−２３１（０ｘ８０００  ００００）から＋２３１−１（０ｘ７ＦＦＦ  ＦＦＦＦ）である。
【０００５】
任意の２の補数の数の否定は、該数をビット単位で(bit-wise)反転させ（１の補数を生じさせ）、１を加算することにより形成されてもよい。したがって、負の数の２の補数表現を計算する１つのやり方は、対応する正の数（それは、その正の数の１の補数形式である）の２進表現を反転させ、１を加算することである。否定のためのこのアルゴリズムに対する唯一の例外は、表されることのできる最大の負の数である。その数に関して２の補数否定を実行することは、結果的に同じ数を生じさせ、それはオーバフローエラーである。ゼロの２の補数を否定することはゼロを生じさせ、全てのビットを反転させることは全て１を生じさせ、そして１を加算することはゼロを生じさせる（キャリーアウト(carry out)が破棄された場合）ことにも留意されたい。
【０００６】
小数値は、いわゆるＱフォーマット表記を使用して、固定された幅のディジタル形式で表されることができる。Ｑｎ．ｘフォーマット表記では、値のビットは、１の符号ビット、ｎの整数ビット、およびｘの小数ビットと解釈される。ディジタル信号処理のための一般的なＱフォーマットは、１の符号ビットがあり、整数のビットがなく、ｘの小数ビットがあることを示すＱ０．ｘ（または単にＱ．ｘ）である。Ｑ．３１表記での数は、３２ビットで表され、−１（０ｘ８０００  ００００）から１−２−３１（０ｘ７ＦＦＦ  ＦＦＦＦ）までの範囲の値を有する。
【０００７】
Ｑフォーマットの数を乗算する場合、２進小数点を考慮することが重要である。例えば、Ｑ．１５にＱ．１５を掛けることはＱ２．３０の結果を生じる。しかし、値をＱ．ｘフォーマットで保持することが望ましい。これを処理するために、乗算演算は、Ｑ．３１の結果を生成するように、２の因数による乗算を含み、それは左シフト演算に相当する。２つのｎビット値を一緒に乗算することは、２ｎビットで表されることができる値を必ず生成する。この積を２倍にすることは、１つの場合、すなわち最大の負の値を除いく全ての場合に、２ｎビットで表されることができる値を生成する。２の補数の最大の負の値は、１の符号ビット（ＭＳＢ）であり、他の全てのビットは、ゼロである。この値を左にシフトすることはオーバフローを生じさせることになる。
【０００８】
一例は、３２ビットの積を生成するための２つの１６ビットオペランドの以下の乗算である。オペランドのそれぞれは、負（１の符号ビット）であり、それらの積は正の数であるべきである。  
【数１】
2009524169.tif 000003
【０００９】
この例では、２つのオペランドは、それぞれ２の補数フォーマットで１６ビットで表されることができる最大の負の数である。それらの積は、大きな正の値を生じるはずである。しかし、２倍にする乗算命令の実際の結果は、最大の負の値である。したがって、その他のビット位置では全て１を有するゼロ符号ビットの、０ｘ７ＦＦＦＦＦＦＦの飽和値(saturation value)を得るために、この値から「１」が減算されなければならない。
【００１０】
従来の飽和させる乗算器は、乗算が実行された後でのみオーバフロー状態を検出し、そしてその後出力を飽和させることによりオーバフロー状態を補正するためのステップをとらなければならない。いくつかの実施形態では、これは、例外を生じさせることなどにより、プロセッサを停止することを必要とする可能性がある。これは、プロセッサの性能に悪い影響を与え、電力消費量を増加させる。オーバフローがハードウェア内で飽和される場合でも、乗算が完了した後でそうすることは、性能に悪い影響を与える。
【発明の開示】
【発明の概要】
【００１１】
１つまたはそれより多くの実施形態によれば、予め飽和させる乗算器(pre-saturating multiplier)は、任意の乗算を実行する前に乗算演算のためのオペランドを検査する。該オペランドが飽和を必要とするオーバフローを生じさせる場合、該乗算器はオペランドを乗算せずに飽和した値を出力する。
【００１２】
一実施形態では、オペランドから得られたパラメータは、変更されたパラメータに関して乗算演算が実行されると乗数が飽和した結果を生じるように、変更される。これは、部分積としてゼロの代わりに負のゼロを選択するようにブースリコードされたビットグループを変更すること、および値１の部分積への加算を抑制すること（したがって、実際には値１を減算すること）を備えることができる。他の実施形態では、オーバーフローを生じさせるオペランドが検出されると、乗算器の出力は強制的に予め決められた飽和値にされる。
【００１３】
一実施形態は、乗数および被乗数を備える少なくとも１つの既知のセットのオペランドが、飽和を必要とするオーバフローを生じさせる、固定小数点の飽和させる乗算演算を実行する方法に関する。オーバフローを生じさせるオペランドは、任意の乗算演算を実行する前に検出され、飽和した結果が該オペランドを乗算せずに出力される。
【００１４】
他の実施形態は、乗数および被乗数を備える２つのオペランドを乗算し、それらの積を出力するように動作可能な乗算器回路を含む予め飽和させる乗算器に関する。予め飽和させる乗算器はまた、乗算器回路でオーバフローを生じさせるオペランドを検出するように動作可能なオーバフローを予め検出する回路(overflow pre-detect circuit)を含む。
【詳細な説明】
【００１５】
乗算器は、乗算が実行されたら結果的にオーバフロー状態を生じさせる、乗算演算のためのオペランドを検出する。この検出に応答して、乗算器は飽和した値を出力する。一実施形態では、乗算器は、乗算演算の結果積として飽和した値を生じさせるやり方でオペランドを変更することにより飽和した値を出力する。図１は、この実施形態による予め飽和させる乗算器４０を示す。ＧＰＲレジスタ４２は、乗数（ＭＲ）オペランドおよび被乗数（ＭＤ）オペランドを含む。乗数はブースリコーダ(Booth recoder)回路４４に入力される。
【００１６】
ブースリコーディング(Booth recoding)（修正されたブースリコーディングと呼ばれることもある）は、乗算演算を実行する際に加算されるべき部分積の数を減少させるための技法である。乗数内の各ビットを考慮し、被乗数かゼロのどちらかを備える対応するシフトされた部分積を生成するのではなく、乗数ビットはグループで考慮され、被乗数の＋／−の倍数を備えるシフトされた部分積が加算される。この技法は、加算されるべき部分積の数を減少させる。例えば、基数−４のブースリコーディングでは、乗数ビットは、（第１のグループにゼロが添付されている）前のグループのＭＳＢと共に、２のグループで考慮される。次いで、部分積は、以下の表に従って、ビットグループの値に基づいて生成される。  
【表１】
2009524169.tif 000004
【００１７】
乗数内の各ブースリコードされた(Booth recoded)ビットグループでは、被乗数は指示された因数によって乗算され、結果としての部分積は乗数の中のビットグループの位置にシフトされる。次いで、部分積は合計されて積を生じる。符号付きの値を乗算する場合、基数−４のブースリコーディングは、部分積の数を半分までの数だけ減少させることができる。
【００１８】
この実施形態では、ブースリコーダ４４の出力は、ブースマルチプレクサ４８を介してウォレスツリー(Wallace Tree)５０（または他の加算器）のために部分積を選択する。ブースマルチプレクサ４８は、シフト／反転ロジック(invert logic)４９から適切に修正された被乗数を選択し、各マルチプレクサ４８は、該乗数内のリコードされたビットグループの位置に整列される(aligned)。シフト／反転ロジック４９は、以下のように表１に詳述されている修正された被乗数を生成する：
・０は全てゼロで被乗数ビットを置換する；
・ｘ１は該被乗数ビットを直接パスする(passes)；
・ｘ２は該被乗数ビットを１ビット位置、左シフトする(left-shifts)；
・否定は該被乗数、シフトされた被乗数、またはゼロ値に関してビット単位の反転(bit-wise invert)（１の補数）を実行する。
【００１９】
否定は、「１」がウォレスツリー５０の中の部分積にＬＳＢで加算される（否定のための２の補数ルールに従って：１の補数＋１）まで、完全ではないことに留意されたい。ウォレスツリー５０は部分積を合計し、桁上げ伝搬(carry propagate)加算器５２において加算される和および桁上げ(carry)を出力し、積は５４でラッチされる。当業者は、ブースリコーダの出力およびブースマルチプレクサ４８の出力（または被乗数値）はパイプライニング(pipelining)を可能にするためにラッチされることができることを理解するであろう。
【００２０】
オーバフロー検出回路５６は、各乗算演算のはじめに乗数および被乗数をモニタし(monitors)、飽和を必要とするオーバフローを生じさせることになるオペランドの値を検出する。ペンディング(pending)オーバフローが検出されると、オーバフロー検出回路５６は、乗数ビットのリコーディングを変更するようにブースリコーダ４４に信号を送り(signals)、乗算演算の結果として該積の飽和した値になるように、部分積の和を変更するようにウォレスツリー５０に信号を送る。これは、限定された数のオペランドがオーバフローを生じさせるので実行可能であり、これらのオペランドは前もって知られている。
【００２１】
特に、一実施形態では、乗数および被乗数の両者が最大の負の値を備える場合だけが、飽和を必要とするオーバフローを生じさせる。この状態が検出されると、オーバフロー検出回路５６は、ブースリコーディングを変更するようにブースリコーダ４４に信号を送る。これに応答して、ブースリコーダ４４は、負のゼロを選択するように最下位のブースリコードされたビットグループ（それは、０００の値を有しているので、普通はゼロを選択する）を修正する。シフト／反転ロジック４９は、ゼロの１の補数（すなわち、全て１）を提供し、部分積に「１」を加算するようにウォレスツリー５０に信号を送る。オーバフロー検出回路５６はさらに、ゼロの否定に関連する「１」を加算することを抑制するようにウォレスツリー５０に抑制信号を追加として送る（パイプラインされた(pipelined)実施形態では、「＋１を抑制する」信号はラッチされることに留意されたい）。したがって、ゼロの符号拡張された(sign-extended)１の補数（０ｘＦＦＦＦ  ＦＦＦＦ）は部分積として加算されるが、対応する「１」はそうされず、実際にはその結果から「１」を減算する。例えば、
【数２】
2009524169.tif 000005
【００２２】
この飽和した結果は、桁上げ伝搬加算器５２によって出力され、５４で積としてラッチされる。この実施形態によれば、飽和させる乗算演算のタイミングは、オーバフローを生じさせず、したがって、飽和を必要としないオペランドのためのものと同じである。特に、乗算器４０の出力に遅延は加えられない。したがって、この実施形態には、乗算演算のタイミングがクリティカル(critical)である特定の適応性がある可能性があり、追加の遅延は、該乗算器４０の出力で許容されることができない。
【００２３】
図２は予め飽和させる乗算器４０の別の実施形態を示し、対応するコンポーネントはしかるべく符号付けされている。この実施形態では、オーバフロー検出回路５６は、乗数および被乗数をモニタし、飽和を必要とするオーバフローを生じさせる既知のオペランドを検出する。これらのオペランドが検出されると、オーバフロー検出回路５６は、飽和した結果により乗算器４０の積の出力を置換する信号を出力する。例えば、オーバフロー検出回路５６は、桁上げ伝搬加算器５２の出力の代わりに予め決められた飽和出力を選択するようにマルチプレクサ６０に指示するマルチプレクサ選択信号を出力することができる。予め決められた飽和出力は、ハードワイヤ−ド(hard-wired)値を備えて（すなわち、ビット位置高電圧レールまたは低電圧レールに結合されて）いてもよいし、またはその代りに、レジスタのような記憶位置の出力を備えていてもよい。複数のオペランドが様々な飽和値を必要とするオーバフローを生じさせる可能性のある一実施形態では、オーバフロー検出回路５６はマルチビットマルチプレクサ選択信号を出力してもよく、それは複数の予め決められた飽和値と該加算器５２の該出力との間で選択をする。オーバフロー検出回路５６は、パイプラインされた実施形態においてラッチされてもよい。
【００２４】
この実施形態では、乗算演算は、電力消費量を低減するために抑制されてもよい（すなわち、ブースリコーダ４４、ロジックブロック４９、ウォレスツリー５０、桁上げ伝搬加算器５２、および他の乗算器回路がディセーブルされ(disabled)てもよい）。その代りに、オペランドの乗算は、乗算器４０を通して進行することを可能にされてもよく、その代わりに、飽和した結果として単に破棄された結果は５４でラッチされる。この実施形態では、マルチプレクサ６０の遅延は、乗算器４０によって実行されるあらゆる乗算演算に加えられる。もっとも、この遅延は、既存のマルチプレクサの使用されていない脚(leg)を使用すること、またはマルチプレクサのラッチを使用することによって、あるいは当技術分野で知られている他の技法によって、軽減される可能性がある。オーバフロー状態は非常に早く決定され、飽和した値を選択するための決定は、クリティカルパスの一部ではない。
【００２５】
図３は、オペランドのうちの少なくとも１つの既知のセットが飽和を必要とするオーバフローを生じさせる、固定小数点の飽和させる乗算演算を実行する方法を示す。最初に（すなわち、任意の乗算を実行する前に）、オペランドは検査される（ブロック７０）。オペランドは、オーバフローを生じさせる既知の値と比較される（ブロック７２）。例えば、場合によっては、両オペランドがオペランドのビットフィールドにおいて表されることができる最大の負の値を備える場合、結果としてオーバフローが生じる。オペランドを乗算することがオーバフローを生じさせない場合（ブロック７２）、乗算が実行され、結果が出力される（ブロック７４）。オペランドを乗算することが飽和を必要とするオーバフローを生じさせる場合は（ブロック７２）、１つまたはそれより多くの実施形態にしたがって、元のオペランドを乗算せずに、飽和した結果が出力される（ブロック７６）。
【００２６】
一実施形態では、これは、変更されたパラメータの乗算演算を実行した結果、乗算演算の積として飽和した値が生じるように、オペランドから生成されたパラメータを変更することを備える。他の実施形態では、飽和した結果を出力することは、乗算演算からの積の代わりに、出力として予め決められた飽和値を選択することを備える。
【００２７】
両方の実施形態（すなわち、図１および図２に示されている実施形態）では、オーバフローを生じさせるオペランドは早く検出され、乗算器４０は飽和した結果を直接的に出力する。これは、積を検査することによりオーバフローを検出し、それに続いて積の代わりに飽和した値を使用するだけの従来の方法にまさる、著しい性能の改善および電力の節約を表す。本明細書で開示された１つまたはそれより多くの実施形態による乗算器４０は、電池を電源とする(battery-powered)ポータブル電子装置用などの高速プロセッサおよび／または低電力消費がクリティカルファクタであるプロセッサに特に適している。
【００２８】
本発明の概念は本明細書で本発明の概念の特定の特徴、態様および実施形態に関して説明されてきたが、多数の変形形態、変更形態、および他の実施形態が本教示の広い範囲内で可能であることは明らかであろう。したがって、本実施形態は、全ての面で例示的であり制限的ではないと解釈されるものとし、添付の特許請求の範囲の意味および同等範囲に入る全ての変更はそこに包含されるものとする。
【図面の簡単な説明】
【００２９】
【図１】一実施形態による予め飽和させる乗算器の機能ブロック図。
【図２】別の実施形態による予め飽和させる乗算器の機能ブロック図。
【図３】予め飽和させる乗算演算を実行する方法の流れ図。
【図１】
2009524169.tif 000006
【図２】
2009524169.tif 000007
【図３】
2009524169.tif 000008
【国際調査報告】
2009524169.tif 000009
2009524169.tif 000010
2009524169.tif 000011
2009524169.tif 000012