2 の補数乗算器

Versal ACAP DSP エンジン アーキテクチャ マニュアル (AM004)

Document ID
AM004
Release Date
2022-09-11
Revision
1.2.1 日本語

図 1 に示すように、DSP58 の 2 の補数乗算器は、27 ビットの 2 の補数入力と 24 ビットの 2 の補数入力、および積のネゲートを制御する条件ビットの入力を受け取ります。乗算器は 51 ビット部分積を 2 つ生成します。この 2 つの部分積が結合されて、下図に示すように乗算器出力から 51 ビットの結果が出力されます。

注記: 積のネゲート入力によってオーバーフローが発生することはなく、乗算器入力の値にかかわらず安全に使用できます。具体的には、N ビットの 2 の補数の範囲は [–2N-1, 2N – 1 – 1] です。

この範囲の値は、最小値の –2N – 1 を除き、ネゲート後の値も N ビットに収まります。ただし DSP58 は入力ではなく積をネゲートします。Sign(A) != Sign(B) の場合、乗算器の出力は符号が反転されます。このステータス信号によって入力の数は多くなりますが、乗算器の入力を増やさずにオーバーフローを回避できるようになります。このため、乗算器入力の片方または両方が負の最大値であってもオーバーフローは発生しません。DSP58 の乗算器は最大 27 ビットまでの 2 の補数の絶対値を計算できます。DSP58 の乗算器を mult(A[26:0],[B[23:0], p) ≡ (–1)p AB (ただし A は 27 ビット入力、B は 24 ビット入力、p はブーリアン型の積のネゲート制御入力) と定義すると、A の絶対値は mult(A[26:0], 1, A[26]) として求めることができます。

より大きな積を得るために乗算器をカスケード接続するには、23 ビット右方向シフトするカスケード出力バスを使用します。右方向シフトを使用して、適切なビット数だけ部分積をシフトして右揃えにします。このカスケード パスは、隣接する DSP58 の加算器/減算器に接続している Z マルチプレクサーへ接続します。入力オペランドの MSB を 0 に設定すると、乗算器は符号なしの演算をエミュレートできます。

次の図に、乗算器出力用のオプションのパイプライン レジスタ (MREG) を示します。レジスタを使用すると、1 クロック分のレイテンシが生じますがパフォーマンスは向上します。

図 1. 2 の補数乗算器とオプションの MREG