DSP58 の入力データ ポートは、一般的なアルゴリズムを多数サポートしています。DSP58 には、4 つの直接入力データ ポート (A、B、C、D) があります。A データ ポートは 34 ビット幅、B データ ポートは 24 ビット幅、C データ ポートは 58 ビット幅、前置加算器 D データ ポートは 27 ビット幅です。
27 ビット A (A[26:0]) および 24 ビット B ポートは、27 x 24 ビットの 2 の補数乗算器へ入力データを送信します。独立型 C ポートを使用すると、各 DSP58 で乗算/加算、乗算/減算、および乗算/丸め演算が可能になります。
連結された A ポートと B ポート (A:B) は、乗算器をバイパスして X マルチプレクサー入力へ接続します。34 ビットの A 入力ポートは、A:B 連結データパスの上位 34 ビットを形成し、24 ビットの B 入力ポートは、A:B データパスの下位 24 ビットを形成します。A:B データパスと C 入力ポートを使用すると、各 DSP58 に 58 ビットの加算器/減算器を実装できます (USE_MULT を NONE に設定して乗算器を使用しない場合)。
また、各 DSP58 には 2 本のカスケード入力データパス (ACIN および BCIN) があり、同じカラムの隣接する DSP58 との入力をカスケード接続します。A 入力のカスケード パスは 34 ビット幅で、B 入力のカスケード パスは 24 ビット幅です。これらの使用は、FIR フィルター、複素乗算 (> 18 x 18)、高精度乗算、および複素 MACC (> 18 x 18) などのアプリケーションで有効です。
A および B 入力ポートと ACIN および BCIN カスケード ポートは、データパス上のパイプライン段数を 0、1、または 2 として設定できます。図 1 に、デュアル A、D、および前置加算器のポート ロジックを示します。図 2 はデュアル B レジスタのポート ロジックを示しています。属性を使用して異なるパイプライン段数にも設定できます。ALU への X マルチプレクサーの A および B 直接入力用のパイプライン ステージ数を選択する場合は、AREG および BREG 属性を使用します。また、乗算器のパイプライン ステージ数は INMODE[0] で動的に変更できます。ACOUT および BCOUT カスケード データパス上のパイプライン ステージ数を選択する場合は、ACASCREG および BCASCREG 属性を使用します。表 1 に、使用可能な属性値を示します。コンフィギュレーション ビットで制御されるマルチプレクサーは、パス、オプションのレジスタ、またはカスケード接続された入力を使用してフローを選択します。データ ポート レジスタにより、クロック周波数を増加 (パフォーマンス向上) させることが可能になりますが、データ レイテンシというトレードオフが生じます。
次の表に、動的制御ビットの INMODE[4:0] および静的制御ビットの AMULTSEL、BMULTSEL、PREADDINSEL のエンコードを示します。
これらのビットにより、前置加算器、A、B および D 入力レジスタの機能が決定されます。表に示す前置加算器ファンクションを有効にするには、AMULTSEL/BMULTSEL 属性を AD に設定する必要があります。また、新しい動的制御ポート NEGATE を使用し、乗算器の積を条件に応じてネゲートできます。
つまり、動的制御信号の INMODE と静的属性の AMULTSEL、BMULTSEL、および PREADDINSEL を使用して、乗算器の前にある前置加算器と A、B、および D レジスタのバス マルチプレクサーを制御します。また、NEGATE 制御信号で制御する乗算器の積のネゲートも乗算器に影響します。DSP58 は 2 段構成の A または B に接続する前置加算器、並びに前置加算器の 2 乗機能をサポートします。
NEGATE[0] 4 | INMODE[4] | INMODE[3] | INMODE[2] | INMODE[1] | INMODE[1]A 1 | INMODE[1]B 1 | INMODE[0] | PREADDINSEL | BMULTSEL | AMULTSEL | 乗算器 A ポート | 乗算器 B ポート 3 | 前置加算器/乗算器ファンクション |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0/1 | 0/1 | 0 | 0 | 0 | 0 | 0 | 0/1 | A/B | B | A | A2/A1 | B2/B1 | ±A[26:0] * B[23:0] |
0/1 | 0/1 | 0/1 | 1 | 0 | 0 | 0 | 0/1 | A | B | AD | D ± A2/A1 2 | B2/B1 | ±(D[25:0] ± A[25:0]) * B[23:0] |
0/1 | 0/1 | 0 | 0 | 1 | 1 | 0 | X | A | B | A | Zero | B2/B1 | Zero |
0/1 | 0/1 | 0 | 0 | 1 | 0 | 1 | X | B | B | A | A2/A1 | Zero | Zero |
0/1 | X | 0/1 | 1 | 0 | 0 | 0 | 0/1 | A | AD | AD | D ± A2/A1 2 | D ± A2/A1 2 | ±(D[22:0] ± A[22:0]) 2 |
0/1 | X | 0 | 1 | 1 | 1 | 0 | X | A | AD | AD | D | D | ±D[23:0] 2 |
0/1 | X | 0/1 | 0 | 0 | 0 | 0 | 0/1 | A | AD | AD | ± A2/A1 | ± A2/A1 | ±A[23:0] 2 |
0/1 | X | 0/1 | 1 | 0 | 0 | 0 | 0/1 | A | AD | A | A2/A1 | D ± A2/A1 2 | ±(D[22:0] ± A[22:0]) * A[22:0] |
0/1 | 0/1 | 0/1 | 1 | 0 | 0 | 0 | 0/1 | B | AD | A | A2/A1 | D ± B2/B1 2 | ±(D[22:0] ± B[22:0]) * A[26:0] |
0/1 | X | 0 | 1 | 1 | 0 | 1 | 0/1 | B | AD | A | A2/A1 | D | ±D[23:0] * A[26:0] |
0/1 | 0/1 | 0/1 | 1 | 0 | 0 | 0 | 0/1 | B | AD | AD | D ± B2/B1 2 | D ± B2/B1 2 | ±(D[22:0] ± B[22:0]) 2 |
0/1 | 0/1 | 0/1 | 0 | 0 | 0 | 0 | 0/1 | B | AD | AD | ± B2/B1 | ± B2/B1 | ±B[23:0] 2 |
0/1 | 0/1 | 0/1 | 1 | 0 | 0 | 0 | 0/1 | B | B | AD | D ± B2/B1 2 | B2/B1 | ±(D[25:0] ± B[22:0]) * B[22:0] |
A[26] | 0 | X | 0 | 0 | 0 | 0 | 0 | X | B | A | A | B = 1 | |A[26:0]| |
B[23] | 0 | X | 0 | 0 | 0 | 0 | 0 | X | B | A | A = 1 | B | |B[23:0]| |
D[26] | 0/1 | 0 | 1 | 1 | 1 | 0 | 0/1 | A | B | AD | D + Zerp | B = 1 | |D[26:0]| |
|
INMODE[0] は、A1 (INMODE[0] = 1)、または AREG で制御される A2 マルチプレクサー (INMODE[0] = 0) のいずれかを指定します。
INMODE [1] を使用して A または B データパスをゲート制御することで、INMODE[2] 制御信号と前置加算器で 2:1 バス マルチプレクサーを構成できます。
INMODE[2] = 0 の場合、前置加算器への D 入力は 0 です。INMODE[1] および INMODE[2] を使用すれば、D レジスタと A または B レジスタを、リセットによって強制的に 0 に設定することなく多重化できます。前置加算器を 2:1 マルチプレクサーとして構成する方法は、前置加算器ブロックの用途 を参照してください。
INMODE[3] = 1 は減算を意味し、INMODE[3] = 0 は A または B の D への加算を意味します。D をゲート遮断すると、この動的な反転によって A または B の絶対値を求めることができます。
INMODE[4] は、B1 (INMODE[4] = 1)、または BREG で制御される B2 マルチプレクサー (INMODE[4] = 0) のいずれかを指定します。
58 ビットの C ポートは、W、Y および Z マルチプレクサー共通の入力として使用され、加算、減算、4 入力加算/減算、およびロジック ファンクションを実行します。C 入力はパターン検出器にも接続され、これを使用して丸め機能を実装できます。次の図に、C ポート ロジックを示します。CREG 属性を使用し、C 入力データパスのパイプライン数を選択します。