図 1 に示すように、DSP58 の 2 の補数乗算器は、27 ビットの 2 の補数入力と 24 ビットの 2 の補数入力、および積のネゲートを制御する条件ビットの入力を受け取ります。乗算器は 51 ビット部分積を 2 つ生成します。この 2 つの部分積が結合されて、下図に示すように乗算器出力から 51 ビットの結果が出力されます。
[–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 クロック分のレイテンシが生じますがパフォーマンスは向上します。