パターン検出器を使用すると、カウント値に達したときに収束丸めとカウンター自動リセットを DSP58 で実行できます。また、アキュムレータのオーバーフロー、アンダーフロー、および飽和もサポートされます。ここに記載するオーバーフロー/アンダーフローの説明は、1 つの DSP58 に実装されたシーケンシャル アキュムレータ (MACC または加算器/アキュムレータ) に当てはまります。アキュムレータには 1 ビット以上のガード ビットが必要です。
DSP58 の専用のオーバーフローおよびアンダーフロー出力は、パターン検出器を使用して、DSP58 内の演算が P[N] ビット (N = 0 ~ 56) を超えてオーバーフローまたはアンダーフローしたかを判断します。パターン検出器が 58 ビットのマスク 0011111 …1
(デフォルト設定) を使用して 58 ビットのパターン 00000 …0
を検出するように設定されている場合、DSP58 は 00111 …1
を超えるとオーバーフローし、11000…0
を下回るとアンダーフローします。つまり、DSP58 は 57 番目のビット P[56] を超えるとオーバーフローを検出します。USE_PATTERN_DETECT 属性を PATDET に設定すると、パターン ロジックの使用が有効になります。このオーバーフロー/アンダーフローの実装は冗長符号ビットを使用し、出力ビット幅を 57 に削減します。
オーバーフローおよびアンダーフロー フラグは、1 サイクル間だけ High となります。オーバーフロー/アンダーフローの発生時に飽和値を使用する場合は、これらフラグの値をプログラマブル ロジックのレジスタに取り込む必要があります。レジスタに取り込んだフラグの値は、マルチプレクサー セレクト信号として使用します。マルチプレクサーの入力は正の最大値 (0011…1
) または負の最大値 (1100..0
) に接続します。オーバーフローまたはアンダーフローのいずれが発生したかに応じて、出力で適切な入力を選択します。
58 ビットのマスクを 0000111 …1
など別の値に変更すると、オーバーフローが検出されるビット値 P(N) を変更できます。このロジックは、2N – 1 の正の値に対するオーバーフロー、および 2 の補数表現での 2N の負の値に対するアンダーフローの検出をサポートします (N はマスク フィールド内の値 1
の桁数、すなわち 0 ~ 56)。
P[57] よりも後のオーバーフロー/アンダーフローを検出するには、プログラマブル ロジックのフリップフロップに格納したガード ビット (符号は P[57] と同じ) をユーザーが提供する必要があります。P[57] が 1 でガード ビットが 0 の場合、オーバーフローが発生しています。P[57] が 0 でガード ビットが 1 の場合、アンダーフローが発生しています。それ以外の場合は通常動作です。
オーバーフロー/アンダーフロー条件下での MACC の動作に関する詳細は、MACC の拡張 を参照してください。