27 x 24 ビットの乗算で生成される結果は、最大 51 ビットで表現できます。MACC 演算では、DSP がオーバーフロー/アンダーフロー条件に達し、出力が DSP 出力 (P) の利用可能な 58 ビットを超えることがあります。
MACC 演算は P = P + (a × b) として表すことができるため、出力結果を表現するのに必要なビット数は累算の回数によって変化し、次のように定義できます。
C ≥ log2 ( ( 2N-1 × 2M-1 × K) + 1) + 1
- N = 「a」オペランドのビット数 (2 の補数で表現)
- M = 「b」オペランドのビット数 (2 の補数で表現)
- K = 累算の回数
- C = 結果「P」のビット数 (2 の補数で表現)
DSP の OVERFLOW/UNDERFLOW 出力を使用して、P[56] より後の潜在的なオーバーフロー/アンダーフローを検出できます。詳細は、オーバーフロー/アンダーフロー/飽和 を参照してください。
下位 DSP は PLOWER = PLOWER + (A × B)を実行し、その出力が最終結果の下位 58 ビットとなります。上位 DSP は最終 MACC 演算の上位 58 ビットを提供しますが、このとき、CARRYINSEL ポートは 3'b010 に設定して CARRYCASCIN パスを選択します。OPMODE はこのユース ケースでは OPMODEUPPER = 9'b00_100_10_00 とする必要があります。この OPMODE によって MULTSIGNIN 信号が内部 ALU へ送られ、正しい最終結果が得られます。また、これはリセットがディアサートされた後に選択する必要があります。このため、OPMODEREG = 1 です。(リセットがアサートされている間、DSP の内部レジスタはすべて 0 に強制されます。)
AREG | BREG | OPMODEREG | CARRYINSELREG | |
---|---|---|---|---|
DSP 下位インスタンス | 2 | 2 | 1 | 1 |
DSP 上位インスタンス | 0 | 0 | 1+1FF (ロジック内) | 1+1FF (ロジック内) |