(57)【特許請求の範囲】
【請求項１】
第１および第２演算数を受け取るための第１および第２入力、和シグナルを提供するための第１出力、ならびにキャリー・シグナルを提供するための第２出力を有する乗算器（４２０）と、
前記第１および第２演算数の符号ビットを受け取るための第１および第２入力、第３演算数を受け取るための第３入力、バイアス加数シグナルを提供するための第１出力、ならびに前記第１および第２演算数の積の符号を表すシグナルを提供するための第２出力を有するバイアス加数発生器（４４０）と、
前記乗算器の前記第１および第２出力に結合される第１および第２入力、前記バイアス加数シグナルを受け取るための第３入力、ならびに前記第１、第２および第３入力の和を表すシグナルを提供するための出力を有する加算器（４３０）と、
前記加算器の前記出力に結合される第１入力、飽和最小値を受け取るための第２入力、飽和最大値を受け取るための第３入力、制御入力、および飽和シグナルを伴う乗算加算結果を提供するための出力を有するマルチプレクサ（４６６）と、
前記バイアス加数発生器の前記第２出力に結合される第１入力、前記和の符号を表すシグナルを受け取るための第２入力、および前記マルチプレクサの前記制御入力に結合される出力を有する選択ロジック（４６８）とを備えた乗算加算器（４００）。
【請求項２】
前記乗算器はブースの再コーディング（４２２）を使用することで特徴付けられるキャリー・セーブ乗算器配列（４２４）である請求項１の乗算加算器（４００）。
【請求項３】
前記バイアス加数シグナルは前記和およびキャリー・シグナルと同じビット数を含む請求項１の乗算加算器（４００）。
【請求項４】
前記第１、第２および第３演算数の各々は符号付き整数からなる請求項１，２，３のいずれかの乗算加算器（４００）。
【請求項５】
前記バイアス加数発生器（４４０）は、
前記第１演算数の符号ビットを受け取るための第１入力、前記第２演算数の符号ビットを受け取るための第２入力、ならびに前記第１および第２演算数の前記積の前記符号を表す符号シグナルを提供するための出力を有するロジックゲート（５５０）と、
第１バイアスを受け取るための第１入力、第２バイアスを受け取るための第２入力、第３バイアスを受け取るための第３入力、第４バイアスを受け取るための第４入力、前記ロジックゲートの前記出力に結合される第１制御入力、前記第３演算数の前記符号を受け取るための第２制御入力、ならびに前記加算器の前記第３入力に結合されて前記バイアス加数シグナルを供給するための出力を有するマルチプレクサ（５６０）と、を備える請求項３の乗算加算器（４００）。
【請求項６】
前記第１および第２演算数はパックされた演算数からなり、前記乗算加算器は飽和を伴う類似する複数の乗算加算結果を生成するための複数のセクションを備える請求項１，２，３，５のいずれかの乗算加算器（４００）。
【請求項７】
第１および第２演算数の積を表す和シグナルおよび第１および第２演算数の積を表すキャリー・シグナルを提供するための乗算器（２２０）と、
前記和シグナル、前記キャリー・シグナルおよびバイアス・シグナルの和を表す中間結果シグナルを提供するための加算器（２３０）と、
前記第１および第２演算数の積の符号によって決定される値を有する前記バイアス・シグナルを提供するためのバイアス発生器（２４０）と、
前記積の前記符号および前記中間結果の符合に応じて、前記加算器の前記中間結果シグナルの部分、飽和最小値および飽和最大値の１つを選択するための出力選択回路（２６０）と、を備えた演算処理部（２００）。
【請求項８】
前記加算器は符号拡張加数に基づいて前記中間結果シグナルをさらに提供する請求項７の演算処理部（２００）。
【請求項９】
第３演算数を符号拡張して前記符号拡張加数を提供するための符号拡張ロジック（２５０）をさらに備えた請求項８の演算処理部（２００）。
【請求項１０】
前記第１、第２および第３演算数の各々は符号付き整数からなる請求項７，８，９のいずれかの演算処理部（２００）。
【請求項１１】
前記バイアス発生器（２４０）は前記第１および第２演算数の前記積の前記符号に応じて負のバイアスおよび正のバイアスの一方を前記バイアス・シグナルとして提供する請求項９の演算処理部（２００）。
【請求項１２】
前記第１（６１２）および第２（６１４）演算数はパックされた演算数からなり、前記演算処理部は飽和を伴う類似する複数の結果（６１８）を生成するための複数のセクションを備える請求項７，８，９，１１のいずれかの演算処理部（２００）。
【請求項１３】
前記出力選択回路（２６０，４６０）は前記中間結果シグナルの前記部分の最上位ビットをさらに反転する（４５０）請求項７の演算処理部（２００）。
【請求項１４】
第１（２１２）および第２（２１４）演算数の積を表す和シグナルおよび第１（２１２）および第２（２１４）演算数の積を表すキャリー・シグナルを形成することと、
前記第１および第２演算数の積の符号によって決定される値を有するバイアス・シグナル（２４０）を形成することと、
前記和シグナル、前記キャリー・シグナル、符号拡張加数および前記バイアス・シグナルの加算（２３０）に応じて第１出力シグナルを提供することと、
前記積の前記符号および前記第１出力シグナルの符合に応じて、前記第１出力シグナルの部分、飽和最小値（４６２）および飽和最大値（４６４）の１つを最終結果として選択することと、を備えた方法。
【請求項１５】
前記和およびキャリー・シグナルを形成することは、キャリー・セーブ乗算器配列（４２４）およびブースの再コーディング（４２２）を使用して前記和およびキャリー・シグナルを形成することをさらに備える請求項１４の方法。
【請求項１６】
前記和およびキャリー・シグナルの各々のビットサイズと一致するように第３演算数（２１６）を符号拡張すること（２５０）をさらに備えた請求項１４の方法。
【請求項１７】
前記バイアス・シグナルを形成することは、
前記第１演算数（２１２）の符号ビット、
前記第２演算数（２１４）の符号ビット、
前記第１および第２演算数に基づいて前記積の前記符号を決定すること、ならびに
前記積の前記符号に基づいて負のバイアス（２４２）または正のバイアス（２４４）の間で選択すること（２４８）、に応じて前記バイアス・シグナルを形成することをさらに備える請求項１６の方法。
【請求項１８】
前記最終結果は前記第３演算数と同じバイナリビット数からなる請求項１６又は１７の方法。
【請求項１９】
前記和およびキャリー・シグナルを形成することは、当該第１および第２のパックされた演算数の積を表すパックされた和およびキャリー・シグナルを形成することを備える請求項１４の方法。
【請求項２０】
前記第１出力シグナルを提供することは、前記和シグナル、前記キャリー・シグナル、前記符号拡張加数および前記バイアス・シグナルの和として前記第１出力シグナルを提供することを備え、前記最終結果は前記和より少ないバイナリビット数からなる請求項１４，１５，１６，１７のいずれかの方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は概してデータ処理装置に係り、具体的には演算処理装置に係る。
【背景技術】
【０００２】
データ処理装置には、整数または浮動小数点の処理装置などの特殊な演算処理部が含まれる場合がある。演算処理部はグラフィックス処理、デジタルシグナル処理、そして科学アプリケーションに関連するタスクを実行する上で特に有効である。演算処理部は一般的に、命令が特定の数学的計算に関連付けられている事を特徴として、命令を実行する。例えば、演算処理部は乗算、加算、乗加算、行列計算などの算術演算を実行する命令が含まれる場合がある。演算処理部は一般的に、バイナリ浮動小数点形式、バイナリ整数形式のいずれか、または両方を使用して数値を表す。浮動小数点数と整数の数値は、各関連付けられた精度を持ち、特定の値の範囲を表す事が出来、それは数値を表すために使用されるバイナリビット数によって決まる。演算処理部は、サポートされている範囲を超えた数学的演算の結果を表すために、飽和演算を使える。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
飽和演算は、算術演算の結果が最小値と最大値の間の一定の範囲に限定されている算術の一種である。また、演算の結果が最大値より大きい場合（オーバーフロー状態と呼ぶ）、演算処理部は表現可能な最大値に対応する結果を出す。また、演算の結果が最小値より小さい場合（アンダーフロー状態と呼ぶ）、演算処理部は表現可能な最小値に対応する結果を出す。飽和演算を使用する事で、計算がオーバーフローまたはアンダーフロー状態のいずれかをもたらす場合に、発生し得るエラーの重大度を軽減出来る。例えば、飽和を使用せずに、計算がサポートされている範囲をオーバーフローした場合、演算処理部は負の値の結果を出す可能性がある。残念な事に、演算処理部が正しい飽和結果を出すために飽和が生じたことを検出する事は、装置の計算性能に悪影響を与える可能性がある。これは、特に結果のサイズ（数を表すために使用されるバイナリビット数）が、被乗数、乗数または加数と同サイズに制限される乗算加算操作で当てはまる。
【課題を解決するための手段】
【０００４】
第１の態様においては、乗算加算器は、第１および第２演算数を受け取るための第１および第２入力、和シグナルを提供するための第１出力、ならびにキャリー・シグナルを提供するための第２出力を有する乗算器と、第１および第２演算数の符号ビットを受け取るための第１および第２入力、第３演算数を受け取るための第３入力、バイアス加数シグナルを提供するための第１出力、ならびに第１および第２演算数の積の符号を表すシグナルを提供するための第２出力を有するバイアス加数発生器と、乗算器の第１および第２出力に結合される第１および第２入力、バイアス加数シグナルを受け取るための第３入力、ならびに第１、第２および第３入力の和を表すシグナルを提供するための出力を有する加算器と、加算器の第１出力に結合される第１入力、飽和最小値を受け取るための第２入力、飽和最大値を受け取るための第３入力、制御入力、および飽和シグナルを伴う乗算加算結果を提供するための出力を有するマルチプレクサ（４６６）と、バイアス発生器の第２出力に結合される第１入力、和の符号を表すシグナルを受け取るための第２入力、およびマルチプレクサの制御入力に結合される出力を有する選択ロジックと、を含む。
【０００５】
第１の態様の１つの実施形態においては、乗算器は、キャリー・セーブ乗算器配列であり、そしてブースの再コーディングを使用することで特徴付けられる。第１の態様の別の実施形態においては、バイアス加数シグナルは和およびキャリー・シグナルと同じビット数を含む。第１の態様のさらなる実施形態においては、第１、第２および第３演算数の各々は符号付き整数を含む。第１の態様のさらに別の実施形態においては、バイアス加数発生器は、第１演算数の符号ビットを受け取るための第１入力、第２演算数の符号ビットを受け取るための第２入力、ならびに第１および第２演算数の積の符号を表す符号シグナルを提供するための出力を有するロジックゲートと、第１バイアスを受け取るための第１入力、第２バイアスを受け取るための第２入力、第３バイアスを受け取るための第３入力、第４バイアスを受け取るための第４入力、ロジックゲートの出力に結合される第１制御入力、第３演算数の符号を受け取るための第２制御入力、ならびに加算器の第３入力に結合されてバイアス加数シグナルを供給するための出力を有するマルチプレクサと、を含む。第１の態様の別の実施形態においては、第１および第２演算数はパックされた演算数を含み、乗算加算器は飽和を伴う類似する複数の乗算加算結果を生成するための複数のセクションを含む。
【０００６】
第２の態様においては、演算処理部は、第１および第２演算数の積を表す和およびキャリー・シグナルを提供するための乗算器と、和シグナル、キャリー・シグナルおよびバイアス・シグナルの和を表す中間結果シグナルを提供するための加算器と、第１および第２演算数の積の符号によって決定される値を有するバイアス・シグナルを提供するためのバイアス発生器と、積の符号および中間結果の符合に応じて、加算器の第１出力シグナルの部分、飽和最小値および飽和最大値の１つを選択するための出力選択回路とを含む。第２の態様の１つの実施形態においては、加算器は、符号拡張加数に基づいて中間結果シグナルをさらに提供する。第２の態様の別の実施形態においては、演算処理部は、第３演算数を符号拡張して符号拡張加数を提供するための符号拡張ロジックをさらに含む。第２の態様のさらなる実施形態においては、第１、第２および第３演算数の各々は符号付き整数を含む。第２の態様のさらに別の実施形態においては、バイアス発生器は、第１および第２演算数の積の符号に応じて負のバイアスおよび正のバイアスの一方をバイアス・シグナルとして提供する。第２の態様のさらなる別の実施形態においては、第１および第２演算数はパックされた演算数を含み、演算処理部は飽和を伴う類似する複数の結果を生成するための複数のセクションを含む。第２の態様の別の実施形態においては、出力選択回路は、第１出力シグナルの部分の最上位ビットをさらに反転する。
【０００７】
第３の態様においては、方法は、第１および第２演算数の積を表す和およびキャリー・シグナルを形成することと、第１および第２演算数の積の符号によって決定される値を有するバイアス・シグナルを形成することと、和シグナル、キャリー・シグナル、符号拡張加数およびバイアス・シグナルの加算に応じて第１出力シグナルを提供することと、積の符号および第１出力シグナルの符合に応じて、第１出力シグナルの部分、飽和最小値および飽和最大値の１つを最終結果として選択することと、を含む。第３の態様の１つの実施形態においては、和およびキャリー・シグナルを形成することは、キャリー・セーブ乗算器配列およびブースの再コーディングを使用して和およびキャリー・シグナルを形成することをさらに含む。第３の態様のさらなる実施形態においては、方法は、和およびキャリー・シグナルの各々のビットサイズと一致するように第３演算数を符号拡張することをさらに含む。第３の態様のさらに別の実施形態においては、バイアス・シグナルを形成することは、第１演算数の符号ビット、第２演算数の符号ビット、第１および第２演算数に基づいて乗算の積の符号を決定すること、ならびに積の符号に基づいて負のバイアスまたは正のバイアスの間で選択すること、に応じてバイアス・シグナルを形成することをさらに含む。第３の態様の更に別の実施形態においては、最終結果は第３演算数と同じバイナリビット数を含む。第３の態様の別の実施形態においては、和およびキャリー・シグナルを形成することは、第１および第２のパックされた演算数の積を表すパックされた和およびキャリー・シグナルを形成することを含む。第３の態様のさらなる実施形態においては、第１出力シグナルを提供することは、和シグナル、キャリー・シグナル、符号拡張加数およびバイアス・シグナルの和として第１出力シグナルを提供することを含み、最終結果は和より少ないバイナリビット数を含む。
【図面の簡単な説明】
【０００８】
本開示は、添付の図面を参照する事により、当業者はより良く理解出来、そしてその多くの特徴および利点は明らになる：
【０００９】
【図１】図１は、以前から知られている形で飽和演算を実行する操作が可能な、従来の演算処理部を示すブロック図である。
【図２】図２は、本発明の一実施形態に従って、飽和演算を実行する操作が可能な、演算処理部を示すブロック図である。
【図３】図３は、図２のバイアス発生器を示す部分回路図であって部分ブロック図である。
【図４】図４は、本発明の別の実施形態に従って、飽和演算を実行する操作が可能な、演算処理部を示すブロック図である。
【図５】図５は、図４のバイアス加数発生器を示す部分回路図であって部分ブロック図である。
【図６】図６は、本発明のさらに別の実施形態による、パックされた演算数の飽和演算を実行する操作が可能な、演算処理部を示すブロック図である。
【００１０】
別の図面での同じ参照符号の使用は、類似または同一の項目を示す。明確にすると、同一名はシグナル、シグナルを通すノード、シグナルで表される情報を示す。
【発明を実施するための形態】
【００１１】
図１は以前から知られている形で、飽和演算を実行する操作が可能な、従来の演算処理部１００を示すブロック図である。演算処理部１００は、２つの演算数を乗算して積を得ると共に、中間結果を出すために３つ目の演算数に積を加算することによって、乗算加算演算を行う。飽和検出回路は、中間結果を受け取り、計算の最終結果を出す。演算処理部１００は、「Ａ」とラベルされた被乗数演算数１１２、「Ｂ」とラベルされた乗数演算数１１４、「Ｃ」とラベルされた加数演算数１１６、中間結果を出すための乗算加算モジュール１２０、「結果（ＲＥＳＵＬＴ）」とラベルされた最終結果を出す飽和モジュール１９０を含む。
【００１２】
乗算加算モジュール１２０は、演算数１１２を受け取るための第１入力、演算数１１４を受け取るための第２入力、演算数１１６を受け取るための第３入力、そして出力を持つ。飽和モジュール１９０は、乗算加算モジュール１２０の出力に接続された入力、シグナルＲＥＳＵＬＴを出す出力、を持つ。演算処理部１００は、後続の乗算加算演算の加数として、以前に計算された乗算加算結果を用いて乗算加算演算を実行することも出来る。
【００１３】
演算処理部１００は、それぞれが１６ビット符号付き整数である演算数Ａ、ＢとＣを受け取る。乗算加算モジュール１２０によって提供された中間結果は、正確に乗算加算演算の結果を表すための追加ビットを含む。図１で示した本例では、飽和モジュール１９０によって提供された最終結果は、３２ビットの符号付き整数である。飽和モジュール１９０は、乗算加算モジュール１２０によって提供された中間結果の値が、３２ビットの符号付き整数で表す事が出来るものを超えているかを検出する（オーバーフローまたはアンダーフローと呼ばれる状態）。オーバーフローが発生した場合、飽和モジュール１９０は、最大の正の３２ビット符号付き整数、バイナリ０１１１１．．．１１１１を表すシグナルＲＥＳＵＬＴを生成する。アンダーフローが発生した場合、飽和モジュール１９０は、最大の負の３２ビットの符号付き整数、バイナリ１００．．．００００を表すシグナルＲＥＳＵＬＴを生成する。乗算加算モジュール１２０によって提供された中間結果が、サポートされている範囲内であれば、飽和検出モジュール１９０は、変更されていない中間結果をその出力に出す。
【００１４】
飽和モジュール１９０は、各演算数のそれぞれの符号と中間結果の符号に基づいて、オーバーフローまたはアンダーフロー状態が発生したかを判定する。しかしながら、最終結果の表現が符号付き１６ビット整数に制限される場合、飽和モジュール１９０の操作はより複雑でかなりの時間がかかる。したがって、演算処理部１００の計算性能が低下する。
【００１５】
乗算加算演算のオーバーフローおよびアンダーフローは、演算の最終結果に基づいて決定される。したがって、飽和した乗算加算を実行する事は、飽和した乗算操作に続いて飽和した加算の操作を実行する事とは数学的に等価ではない。例えば、乗算操作は自らサポートされている範囲を超えた積を生成する可能性があるが、加数の加算は最終的な乗算加算結果をサポートされているバイナリビット数で表現可能な値に返す事が出来る。乗算加算演算を特徴付ける４つの可能な例がある：１）乗算の積は結果を表すために割り当てられたビット数を超え、加数の加算は最終結果をサポートされている範囲に戻さない。２）乗算の積は、結果を表すために割り当てられるビット数を超えて加数の加算は、サポートされている範囲に最終結果を戻す。３）乗算の積は、結果を表すために割り当てられるビット数を超えないが、加算の加算はサポートされている範囲を超える値が結果となる。４）乗算の積は、結果を表すために割り当てられるビット数を超えず、加算の加算はサポートされている範囲を超えない値が結果となる。
【００１６】
図２は、本発明の一実施形態に従って、飽和演算を実行する操作が可能な演算処理部２００を示すブロック図である。演算処理部２００は、乗算加算演算を実行し、バイアス値を提供するためのバイアス発生器を備えている。バイアス値、中間積、加数演算数は共に加算され、図１の飽和モジュール１９０によって実行される、複雑で時間のかかる操作は、図１の演算処理部１００のように結果を大幅に遅延させる事なく、迅速に実行出来る単純な多重化操作に置き換えられる。
【００１７】
演算処理部２００は、「Ａ」とラベルされた被乗数演算数２１２、「Ｂ」とラベルされた乗数演算数２１４、「Ｃ」とラベルされた加数演算数２１６、乗算器２２０、バイアス発生器２４０、拡張ロジック２５０、加算器２３０、出力選択回路２６０を含む。
【００１８】
乗算器２２０は、演算数２１２を受け取るための第１入力、演算数２１４を受け取るための第２入力、「キャリー（ＣＡＲＲＹ）」とラベルされたシグナルを提供するための第１出力、「和（ＳＵＭ）」とラベルされたシグナルを提供するための第２出力を持つ。バイアス発生器２４０は、演算数２１２の符号に対応する「ＳＩＧＮＡ」とラベルされたシグナルを受け取るための第１入力、演算数２１４の符号に対応する「ＳＩＧＮＢ」とラベルされたシグナルを受け取るための第２入力、「バイアス（ＢＩＡＳ）」とラベルされたシグナルを提供するための出力、「ＳＩＧＮＰＲＯＤ」とラベルされた演算数２１２と演算数２１４の積の符号を表すシグナルを提供するための出力を持つ。拡張ロジック２５０は、演算数２１６を受け取るための第１入力、「ＣＥＸＴ」とラベルされたシグナルを提供するための出力を持つ。加算器２３０は、シグナルＣＡＲＲＹを受け取るための第１入力、シグナルＳＵＭを受け取るための第２入力、シグナルＢＩＡＳを受け取るための第３入力、シグナルＣＥＸＴを受け取るための第４入力、「ＩＲ」とラベルされた中間結果を出すための出力、を持つ。選択回路２６０は、中間結果シグナルＩＲを受け取るための第１入力、シグナルＳＩＧＮＰＲＯＤを受け取るための第２入力、「結果（ＲＥＳＵＬＴ）」とラベルされた最終結果を出すための出力を持つ。
【００１９】
各演算数２１２、２１４および２１６は、１６ビット符号付き整数である。乗算器２２０は演算数２１２と演算数２１４を受け取り、シグナルＣＡＲＲＹで表される３２ビットのＣＡＲＲＹ値の形にある積と、シグナルＳＵＭで表される３２ビットの和を出す。
【００２０】
バイアス発生器２４０は、被乗数演算数２１２と乗数演算数２１４の積の符号に基づいた、シグナルＢＩＡＳによって表されるバイアス値を提供する。積の符号は、シグナルＳＩＧＮＡとＳＩＧＮＢで表される、それぞれの演算数の符号に基づいて決定される。シグナルＢＩＡＳは、高位１７ビットが重要で下位１５ビットが各ゼロである事を特徴とする３２ビットの情報を含む。拡張ロジック２５０は、３２ビットシグナルＣＥＸＴを提供するために加数演算数２１６を符号拡張し、シグナルＳＵＭ、ＣＡＲＲＹ、ＢＩＡＳのそれぞれに関連付けられたビット数に対応するようにする。
【００２１】
加算器２３０は、３２ビットのバイアス値（シグナルＢＩＡＳ）、３２ビットの符号拡張加数（シグナルＣＥＸＴ）、２つの３２ビット乗算結果（シグナルＣＡＲＲＹとシグナルＳＵＭ）を加算し、シグナルＩＲで表される３２ビットの中間結果を出す。一実施形態で加算器２３０は、１つ以上のキャリー（ＣＡＲＲＹ）セーブ加算器（ＣＳＡ）ステージと最後のキャリー（ＣＡＲＲＹ）伝播加算器（ＣＰＡ）を含む。別の実施形態では、加算器２３０に含まれているＣＳＡステージは、乗算器２２０に含まれているＣＳＡステージと共有出来る。従って、３２ビットのバイアス値と符号拡張加数は、乗算器２２０内に含まれる１つ以上のＣＳＡステージ内で加算（圧縮）出来る。バイアス値は、１６ビット符号付き整数に関連付けられた範囲を超えたはずだが３２ビットの符号付き整数の範囲内にある全ての結果が、シグナルＩＲで表される３２ビットの中間結果のオーバーフローやアンダーフローの表示を提供するように強制する。つまり、１６ビット符号付き整数のオーバーフローやアンダーフローは、３２ビットの中間結果の符号と演算数２１２と２１４の積の符号に基づいて、簡単に決定出来る。
【００２２】
出力選択回路２６０は、シグナルＳＩＧＮＰＲＯＤで表される演算数２１２と演算数２１４の積の符号、そしてシグナルＩＲの最上位ビットで表される中間結果の符号を使用して、乗加算演算がオーバーフローまたはアンダーフロー状態をもたらしたかを判断する。中間結果はバイアス値の加算を含むので、出力選択回路２６０は、３２ビットの中間結果に基づいて、必要な１６ビットの結果に対応するオーバーフローおよびアンダーフロー状態を容易に検出出来る。演算数２１２と演算数２１４の積の符号が１（負）であり、且つ中間結果の符号がゼロ（正）である場合、アンダーフローが発生したものとして、出力選択回路２６０は、１６ビット符号付き整数、バイナリ１０００  ００００  ００００  ００００を使用して表現可能な最も負の値にシグナルＲＥＳＵＬＴを設定する。演算数２１２と演算数２１４の積の符号がゼロ（正）であり、且つ中間結果の符号が１（負）である場合、オーバーフローが発生したものとして、出力選択回路２６０は、１６ビット符号付き整数、バイナリ０１１１  １１１１  １１１１  １１１１を使用して表現可能な最大の正の値にシグナルＲＥＳＵＬＴを設定する。オーバーフロー、アンダーフローのどちらも発生しなかった場合、出力選択回路２６０は中間結果の一部に基づいて出力を提供する。具体的には、飽和が発生しなかった場合、最終結果は、ビット１５を反転後のシグナルＩＲで表される中間結果の下位１６ビットに等しい。
【００２３】
図３は、図２のバイアス発生器２４０を示す部分回路図であって部分ブロック図である。バイアス発生器２４０は、負のバイアス値２４２、正のバイアス値２４４、排他的ＮＯＲゲート２４６、マルチプレクサ２４８を含む。排他的ＮＯＲゲート２４６は、シグナルＳＩＧＮＡを受け取るための第１入力、シグナルＳＩＧＮＢを受け取るための第２入力、シグナルＳＩＧＮＰＲＯＤを提供するための出力を持つ。マルチプレクサ２４８は、負のバイアス値２４２を受け取るための第１データ入力、正のバイアス値２４４を受け取るための第２入力、シグナルＳＩＧＮＰＲＯＤを受け取るための制御入力、シグナルＢＩＡＳを供給するための出力を持つ。
【００２４】
シグナルＳＩＧＮＰＲＯＤがロジック高位（負）の場合、マルチプレクサ２４８は負のバイアス値２４２を選択し、以下のバイナリの値を持つシグナルＢＩＡＳを生成する。
【００２５】
１０００  ００００  ００００  ００００  １０００  ００００  ００００  ００００
【００２６】
シグナルＳＩＧＮＰＲＯＤがロジック低位（正）の場合、マルチプレクサ２４８は正のバイアス値２４４を選択し、以下のバイナリの値を持つシグナルＢＩＡＳを生成する。
【００２７】
０１１１  １１１１  １１１１  １１１１  １０００  ００００  ００００  ００００
【００２８】
図４は、本発明の一実施形態に係る、飽和演算を実行する操作が可能な、演算処理部４００を示すブロック図である。演算処理部４００は、乗算加算演算を実行出来る。図２の演算処理部２００とは異なり、演算処理部４００は、バイアス発生器２４０の機能と拡張ロジック２５０の機能を、「（バイアス加数（ＢＩＡＳＥＤＡＤＤＥＮＤ）」とラベルされたバイアス加数を形成する単一モジュールに結合する。演算処理部４００は、「Ａ」とラベルされた被乗数演算数４１２と、「Ｂ」とラベルされた乗数演算数４１４と、「Ｃ」とラベルされた加数演算数４１６と、ブース・エンコーダ４２２およびＣＳＡ配列４２４を含む乗数モジュール４２０と、バイアス加数発生器４４０と、３：２コンプレッサー４３２およびキャリー（ＣＡＲＲＹ）伝播加算器４３４を含む加算器４３０と、飽和最小値４６２、飽和最大値４６４、マルチプレクサ４６６、インバータ４５０、および選択ロジック４６８を含む出力選択回路４６０と、を含む。
【００２９】
乗算器４２０は、演算数４１２を受け取るための第１入力、演算数４１４を受け取るための第２入力、「キャリー（ＣＡＲＲＹ）」とラベルされたシグナルを提供するための第１出力、「和（ＳＵＭ）」とラベルされたシグナルを提供するための第２出力を持つ。バイアス加数発生器４４０は、演算数４１２の符号に対応する「ＳＩＧＮＡ」とラベルされたシグナルを受け取るための第１入力、演算数４１４の符号に対応する「ＳＩＧＮＢ」とラベルされたシグナルを受け取るための第２入力、「加数（ＡＤＤＥＮＤ）」とラベルされたシグナルによって表される加数演算数４１６を受け取るための入力、「バイアス加数（ＢＩＡＳＥＤＡＤＤＥＮＤ）」とラベルされたシグナルを提供するための第１出力、演算数４１２と演算数４１４の積の符号に対応する「ＳＩＧＮＰＲＯＤ」とラベルされたシグナルを提供するための第２出力を持つ。加算器４３０は、シグナルＣＡＲＲＹを受け取るための第１入力と、シグナルＳＵＭを受け取るための第２入力と、シグナルＢＩＡＳＥＤＡＤＤＥＮＤを受け取るための第３入力と、ＣＰＡ４３４によって提供された３２ビットの中間結果の最下位１６ビットに対応する「ＩＲ」とラベルされた中間結果を出すための第１出力と、ＣＰＡ４３４によって提供された３２ビットの中間結果の符号に対応する「ＳＩＧＮＩＲ」とラベルされたシグナルを提供するための第２出力と、を有する。インバータ４５０は、シグナルＩＲのビット１５を受け取るための入力と、出力を持つ。マルチプレクサ４６６は、飽和最小値４６２を受け取るための第１入力、飽和最大値４６４を受け取るための第２入力、１６ビットの非飽和の結果を受け取るための第３入力、「選択（ＳＥＬＥＣＴ）」とラベルされたシグナルを受け取るための制御入力、「結果（ＲＥＳＵＬＴ）」とラベルされたシグナルを出力するための出力を持つ。１６ビットの非飽和結果の最上位ビットは、インバータ４５０によって提供され、１６ビットの非飽和結果の１４〜０のビットは、シグナルＩＲ（１４：０）によって提供される。選択ロジック４６８は、シグナルＳＩＧＮＩＲを受け取るための第１入力、シグナルＳＩＧＮＰＲＯＤを受け取るための第２入力、マルチプレクサ４６６の制御入力にシグナルＳＥＬＥＣＴを提供する出力を持つ。
【００３０】
各演算数４１２、４１４、４１６は１６ビット符号付き整数である。乗算器４２０は、演算数４１２および演算数４１４を受け取り、シグナルＣＡＲＲＹで表される３２ビットのＣＡＲＲＹ値の形にある積と、シグナルＳＵＭで表される３２ビットの和を出す。乗算器４２０は、ブース・エンコーダ４２２を使用して、ブースの再コーディング(Booth’s recoding)として知られるプロセスで部分積を出す。ＣＳＡ配列４２４は、シグナルＣＡＲＲＹとＳＵＭを提供するために、これらの部分積を、連続するＣＳＡステージで二つの部分積に縮退する。
【００３１】
バイアス加数発生器４４０はバイアス値を生成し、３２ビットシグナルＢＩＡＳＥＤＡＤＤＥＮＤを提供するために、そのバイアス値を加数演算数４１６と組み合わせる。バイアス加数発生器４４０の操作は、下記図５を参照しながらさらに説明する。
【００３２】
コンプレッサ４３２は、シグナルＣＡＲＲＹ、ＳＵＭとＢＩＡＳＥＤＡＤＤＥＮＤを受け取り、ＣＰＡ４３４に３２ビットキャリーと３２ビット和シグナルで表されるそれぞれの値の和を提供する。ＣＰＡ４３４は、コンプレッサー４３２により生成されたキャリー／和表現を、単一の３２ビットのバイナリ整数で表される結果に変換し、シグナルＩＲを介してマルチプレクサ４６６に、この値の最下位１６ビットを提供する。選択モジュール４６８がオーバーフローかアンダーフロー状態のどちらも発生しなかったと判断した場合、シグナルＩＲによって表される値が乗加算演算の最終結果と等しくなる。
【００３３】
マルチプレクサ４６６と選択モジュール４６８の操作は、図２の出力選択回路２６０を参照して説明したものと同じであり、ここに追加の詳細を示す。選択モジュール４６８がオーバーフロー状態を検出した場合、選択モジュール４６８は、マルチプレクサ４６６がシグナルＲＥＳＵＬＴを介して飽和最大値４６４を最終結果として提供するように、シグナルＳＥＬＥＣＴを介してマルチプレクサ４６６を設定する。選択モジュール４６８がアンダーフロー状態を検出した場合、選択モジュール４６８は、マルチプレクサ４６６がシグナルＲＥＳＵＬＴを介して飽和最小値４６２を最終結果として提供するように、マルチプレクサ４６６を設定する。選択モジュール４６８がオーバーフローとアンダーフロー状態のいずれも検出しない場合、選択モジュール４６８は最終結果として非飽和の結果を出すようマルチプレクサ４６６を設定する。
【００３４】
図５は、図４のバイアス加数発生器４４０を示す部分回路図であって部分ブロック図である。バイアス加数発生器４４０は、図２のバイアス発生器２４０と拡張ロジック２５０によって実行される操作を組み合わせ、バイアス値およびそれとは別の符号拡張加数よりはむしろ単一のバイアス加数を提供する。この機能によって、加算器４３０は３つの値のみの和を計算するのに対し、図２の加算器２３０は４つの値の和を計算する必要がある。
【００３５】
バイアス加数発生器４４０は、第１バイアス値５１０、第２バイアス値５２０、第３バイアス値５３０、第４バイアス値５４０、排他的ＮＯＲゲート５５０、マルチプレクサ５６０を含む。排他的ＮＯＲゲート５５０は、シグナルＳＩＧＮＡを受け取るための第１入力、シグナルＳＩＧＮＢを受け取るための第２入力、シグナルＳＩＧＮＰＲＯＤを提供するための出力を持つ。マルチプレクサ５６０は、バイアス値５１０を受け取るための第１データ入力、バイアス値５２０を受け取るための第２データ入力、バイアス値５３０を受け取るための第３データ入力、バイアス値５４０を受け取るための第４データ入力、シグナルＳＩＧＮＰＲＯＤを受け取るための第１制御入力、加数オペランド４１６の符号を表す「ＳＩＧＮＣ」とラベルされたシグナルを受け取るための第２制御入力、「バイアス（ＢＩＡＳ）」とラベルされたシグナルを提供するための出力を持つ。シグナルＢＩＡＳは１７ビットのバイナリ値であり、３２ビットシグナルバイアス加数（ＢＩＡＳＥＤＡＤＤＥＮＤ）の１７ビット上位部分を提供する。シグナルＢＩＡＳＥＤＡＤＤＥＮＤの最下位１５ビットは、シグナル加数（ＡＤＤＥＮＤ）の最下位１５ビットに基づいて決定される。バイアス加数発生器の操作は、次の表に示される：
【００３６】
【表１】
0005640081.tif 000002
【００３７】
このように、シグナルＢＩＡＳＥＤＡＤＤＥＮＤは、バイアス値と加数の符号が無い部分を連結したものである。なお、シグナルＢＩＡＳＥＤＡＤＤＥＮＤのビット１５は加数演算数４１６の符号の逆元である。
【００３８】
図６は、本発明のさらに別の実施形態による、パックされた演算数の飽和演算を実行する操作が可能な、演算処理部６００を示すブロック図である。演算処理部６００は、「Ａ１、Ａ２、Ａ３、Ａ４」とラベルされた被乗数演算数６１２、「Ｂ１、Ｂ２、Ｂ３、Ｂ４」とラベルされた乗数演算数６１４、「Ｃ１、Ｃ２、Ｃ３、Ｃ４」とラベルされた加数演算数６１６、乗算器６２０、バイアス発生器６４０、拡張ロジック６５０、加算器６３０、出力選択回路６６０、「Ｒ１、Ｒ２、Ｒ３、Ｒ４」とラベルされた結果６１８を含む。
【００３９】
演算処理部６００の接続と操作は、図２の演算処理部２００に似ているが、例外として演算数６１２、６１４、及び６１６、そして結果６１８の各々は、それぞれが４つの別個の１６ビット符号付き整数を含むパックされた演算数である。パックされた演算数を、複数多重精度演算数と呼ぶ事も出来る。演算処理部６００は、４つの乗算加算演算を並行して実行する。例えば、演算処理部６００は、Ｒ１＝（Ａ１×Ｂ１）＋Ｃ１、Ｒ２＝（Ａ２×Ｂ２）＋Ｃ２、Ｒ３＝（Ａ３×Ｂ３）＋Ｃ３、及びＲ４＝（Ａ４×Ｂ４）＋Ｃ４の結果を計算する。演算処理部６００は、図２の演算処理部２００を参照して説明したのと同様の方法で、これらの各計算を個々に実行する。乗算器６２０は、それぞれが複数の積を表す、１２８ビットのキャリー・シグナルと１２８ビットの和シグナルを提供する。バイアス発生器６４０は、それぞれの計算に対応する一意のバイアス値を提供する。出力選択回路６６０は、それぞれの計算がオーバフローまたはアンダフローになるかを決定し、必要に応じて表現可能な最大値または表現可能な最小値を置換する。
【００４０】
上記の一般説明で記載されている全ての活動や要素が必須ではない事、特定の活動または装置の一部が不要になる可能性がある事、１つ以上のさらなる活動が行われる可能性がある事、または記載されているものに加えて、要素が含まれる可能性がある事に留意されたい。さらにまた、活動がリストされている順序は、それらが実行される順序とは限らない。
【００４１】
さらに、各概念は特定の実施形態を参照して説明されている。しかしながら、当業者は様々な修正および変更が以下の特許請求の範囲に記載された本開示の範囲から逸脱する事なく行う事が出来る事を理解出来る。それに応じて、仕様および図面は限定的な意味ではなく、例示としてみなされるべきであり、全てのそのような修正は本開示の範囲内に含まれる事が意図されている。
【００４２】
例えば、本明細書中で使用される技法は、乗算演算を行う事が出来るが乗算加算操作ができない乗算器でも使える。この場合においては、加数の入力が省略される。しかしながら、乗算加算演算を行う事が出来る演算処理部は、実行制御部によって、単純な乗算操作を実行するために入力された加数を無効にするよう設定出来る。開示された技術は、乗算または乗算加算演算の結果が、対応する中間積を表すために使用されるビット数よりも少ないビット数の情報を含む場合、いつでも適用出来る。例えば、最終結果を表すために使用されるビット数が、各演算数を表すために使用されるビット数と等しい場合、または最終結果を表すために使用されるビット数が、加数演算数を表すために使用されるビット数と等しい場合に、飽和が必要であるかもしれない。
【００４３】
利点、他の長所、及び問題の解決策は特定の実施形態に関連して上記で説明されている。しかしながら、利点、長所、問題の解決策、および任意の利点、長所、または解決策を生じさせまたはより明白なものにしえるいかなる特徴も、臨界的であるとして、必須であるとして、または任意のもしくは全ての請求項の本質的な特徴として解釈されるべきではない。
【図１】
0005640081.tif 000003
【図２】
0005640081.tif 000004
【図３】
0005640081.tif 000005
【図４】
0005640081.tif 000006
【図５】
0005640081.tif 000007
【図６】
0005640081.tif 000008