A、B、C、および D ポート

Versal ACAP DSP エンジン アーキテクチャ マニュアル (AM004)

Document ID
AM004
Release Date
2022-09-11
Revision
1.2.1 日本語

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 に、使用可能な属性値を示します。コンフィギュレーション ビットで制御されるマルチプレクサーは、パス、オプションのレジスタ、またはカスケード接続された入力を使用してフローを選択します。データ ポート レジスタにより、クロック周波数を増加 (パフォーマンス向上) させることが可能になりますが、データ レイテンシというトレードオフが生じます。

図 1. デュアル A、D、および前置加算器のロジック
図 2. デュアル B レジスタのロジック

次の表に、動的制御ビットの 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 乗機能をサポートします。

表 1. INMODE[4:0] の機能 (前置加算器のオプションを含む)
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]|
  1. INMODE[1]A および INMODE[1]B は、PREADDINSEL および INMODE[1] のユーザー設定で定義される内部信号です。PREADDINSEL = A の場合、INMODE[1]A (図 1 参照) は INMODE[1]、INMODE[1]B (図 2 参照) は 0 です。PREADDINSEL = B の場合、INMODE[1]B は INMODE[1]、INMODE[1]A は 0 です。
  2. 前置加算器は飽和をサポートしていないため、前置加算器がオーバーフローもしくはアンダーフローしないよう、D および A または B ポートにデータを入力します。前置加算器を参照してください。
  3. 前置加算器をマルチプレクサーとして構成した場合、B ポートを経由する A または B は 24 ビットに制限されます (1 つのバスが 0 の場合のみ)。A と D の両方が 0 以外で、PREADDINSEL = A、BMULTSEL = AD、および前置加算器を加算器/減算器として構成した場合、A または D は符号拡張した 23 ビットの 2 の補数に制限されます。
  4. DSP58 では、前置加算器を使用して入力の 1 つをネゲートするのではなく、NEGATE[0] = 1 と設定して積をネゲートする必要があります。これにより前置加算器段がスキップされ、高クロック周波数では 1 サイクルのレイテンシが削減されます。また、前置加算器は 26 ビットの 2 の補数のネゲートしかできませんが、NEGATE[0] ピンは 27 × 24 乗算器の積を直接ネゲートします。

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 入力データパスのパイプライン数を選択します。

図 3. C ポート ロジック