ここに記載するオーバーフロー/アンダーフローの説明は、1 つの DSP58 に実装されたシーケンシャル アキュムレータ (MACC または加算器/アキュムレータ) に当てはまります。アキュムレータには 1 ビット以上のガード ビットが必要です。パターン検出器がマスク 0011111 …1
(デフォルト設定) でパターン = 00000…0
を検出するように設定されている場合、DSP58 は 00111 … 1
を超えるオーバーフロー、または 11000… 0
を下回るアンダーフローに対してフラグを立てます。USE_PATTERN_DETECT 属性を PATDET に設定すると、パターン検出ロジックの使用が有効になります。このオーバーフロー/アンダーフローの実装は冗長符号ビットを使用し、出力ビット幅を 57 に削減します。
マスク値を 0000111 …1
など別の値に変更すると、オーバーフローが検出されるビット値 P[N] を変更できます。このロジックは、2N –1 の正の値への飽和および 2 の補数表現での 2N の負の値への飽和をサポートします (N はマスク フィールド内の値 1 の桁数)。
N = 2 の場合、オーバーフロー/アンダーフロー条件を確認するには、次の例を使用します。
- マスクが
0...11
に設定されている。 - (N) LSB ビットは、比較には考慮されない。
- N = 2 の場合、合法的な値 (パターン) は、22–1 ~ –22 、すなわち 3 ~ –4。
次の図に、オーバーフローとアンダーフローの例を示します。オーバーフロー/アンダーフローの原因となった P 出力が生成されると、その同じサイクルでパターン検出ロジックはオーバーフロー/アンダーフロー信号を 1 クロック サイクルだけアサートします。
- P == pattern または mask の場合、PATTERNDETECT は
1
- P == patternb または mask の場合、PATTERNBDETECT は
1
オーバーフローは、加算によって加算器/減算器/論理ユニットの出力値が 3 を超えると発生します。最終値 0..0011
に 1 を加算すると 0..0100
となり、これにより PATTERNDETECT 出力は 0 になります。PATTERNDETECT 出力が 1
から 0
になると、オーバーフローがアサートされます。
アンダーフローは、減算によって値が –4 未満になると発生します。1..1100
から 1 を減算すると 1..1011
(–5) となり、これにより PATTERNBDETECT 出力は 0
になります。PATTERNBDETECT 出力が 1
から 0
になると、アンダーフローがアサートされます。