複素乗算器

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

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

乗算に使用する複素共役の生成

2 つの連続する DSP58 にまたがる 18 ビット複素乗算器は、複素積を生成します。複素共役の生成の詳細とコーディング例は、DSP58 のアプリケーションの複素乗算器の例を参照してください。

OPMODE 制御

基本ファンクションと複素加算器右側の DSP58左側の DSP58 の図に示したように、X、Y、Z、W マルチプレクサーの動作は OPMODE によって制御されます (DSPCPLX 基本ブロックを構成する DSP58 の場合と同様。詳細はW、X、Y、および Z マルチプレクサー 参照)。

ここでは、OPMODE_RE と OPMODE_IM を使用して最終結果を求める方法について詳しく説明します。ここからの例では、CONJUGATE_RE=CONJUGATE_IM=1'b0 とします。これら信号にほかの値を代入した場合の影響に関する詳細は、DSPCPLX を使用した 18 x 18 複素乗算 の表を参照してください。

X、Y マルチプレクサー: OPMODE_RE[3:0] = OPMODE_IM[3:0] = 4'b0101。
この設定では、実数部と虚数部のマルチプレクサー出力がいずれも X および Y マルチプレクサーを経由して最終 ALU に入力されます。これによって必要な複素乗算が可能となるため、X および Y マルチプレクサーをほかの用途には使用できません。唯一の例外は、MACC 拡張アプリケーションです。MACC 拡張の式は、次の「Z マルチプレクサー」のセクションで説明します。詳細は、MACC の拡張 を参照してください。
複素乗算の式 OPMODE_RE OPMODE_IM

PRE + j PIM = (ARE + j AIM ) (BRE + j BIM ) =

(ARE × BRE - AIM × BIM ) + j (ARE × BIM + AIM × BRE )

9'b00_000_01_01 9'b00_000_01_01
Z マルチプレクサー: PMODE_RE[6:4] = OPMODE_IM[6:4] = Kz。
これらの制御信号に代入された値によって、ALU に送られる Z マルチプレクサー出力が決まります。次の表の「DSPCPLX 下位」と「DSPCPLX 上位」は、複素数モードにおける DSP カスケード接続構成を表します (このサブセクション最後の図を参照)。
  複素乗算と加算の式 OPMODE_RE OPMODE_IM
DSPCPLX 下位

PLRE + j PLIM =

( ALRE + j ALIM ) × ( BLRE + j BLIM )

( ALRE × BLRE - ALIM × BLIM ) + j ( ALRE × BLIM + ALIM × BLRE )

9'b00_000_01_01 9'b00_000_01_01
DSPCPLX 上位

PURE + j PUIM =

( PURE + j PUIM + ( ( AURE + j AUIM ) × ( BURE + j BUIM ) ) =

( ( ALRE × BLRE + AURE × BURE ) - ( ALIM × BLIM + AUIM × BUIM ) )

+ j ( ( ALRE × BLIM + AURE × BUIM + ALIM × BLRE + AUIM × BURE ) )

9'b00_001_01_01 9'b00_001_01_01
Kz: 2'b11 - RND: 現在の DSPCPLX の結果への加算。ダウンストリーム DSPCPLX (DSP 下位) の (DSP 上位) インスタンス
複素乗算と累算の式 OPMODE_RE OPMODE_IM

PRE + j PIM = (P*RE + j P*IM ) + ( ( ARE + j AIM ) × ( BRE + j BIM ) ) =

( P*RE + ( ARE × BRE - AIM × BIM ) ) + j ( P*IM + ( ARE × BIM + AIM × BRE ) )

* = PRE および PIM レジスタに格納された値

9'b00_010_01_01 9'b00_010_01_01
Kz: 3'b010 - P: 出力の累算を実数部と虚数部に対して独立して実行。PREG = 1 とする必要がある。
複素乗算と加算の式 OPMODE_RE OPMODE_IM

PRE + j PIM = ( CRE + j CIM ) + ( ( ARE + j AIM ) × ( BRE + j BIM ) ) =

( CRE + ( ARE × BRE - AIM × BIM ) ) + j ( CIM + ( ARE × BIM + AIM × BRE ) )

9'b00_011_01_01 9'b00_011_01_01
Kz: 3'b011 - C: 実数部と虚数部に対して独立して加算される追加の複素数。
MACC 拡張の式 OPMODE_RE OPMODE_IM

PRE + j PIM = ( P*RE + j P*IM ) + ( ( ARE + j AIM ) × ( BRE + j BIM ) ) =

( P*RE + ( ARE × BRE - AIM × BIM ) ) + j ( P*IM + ( ARE × BIM + AIM × BRE ) )

* = PRE および PIM レジスタに格納された値

DSPCPLX 下位 9'b00_010_01_01

DSPCPLX 上位 9'b00_100_01_01

DSPCPLX 下位 9'b00_010_01_01

DSPCPLX 上位 9'b00_100_01_01

Kz: 3'b100 - P: 出力の累算を実数部と虚数部に対して独立して実行。MACC 拡張用に設計された DSPCPLX カスケード接続では、上位 DSPCPLX が次の条件を満たす必要があります。
  • PREG=1
  • OPMODE_RE[1:0]=OPMODE_IM[1:0]=2'b00
  • OPMODE_RE[3:2]=OPMODE_IM[3:2]=2'b10
  • OPMODE_RE[8:7]=OPMODE_IM[8:7]=2'b00
3'b101 と 3'b110 のケースは多ビット乗算器用で、DSPCPLX での使用は推奨されません。

MACC 演算の使用の詳細は、MACC の拡張 を参照してください。

W マルチプレクサー: OPMODE_RE[8:7] = OPMODE_IM[8:7] = Kw
これらの制御信号に代入された値によって、ALU に送られる Z マルチプレクサー出力が決まります。
複素乗算と累算の式 OPMODE_RE OPMODE_IM

PRE + j PIM = ( P*RE + j P*IM ) + ( ( ARE + j AIM ) × ( BRE + j BIM ) ) =

( P*RE + ( ARE × BRE - AIM × BIM ) ) + j ( P*IM + ( ARE × BIM + AIM × BRE ) )

* = PRE および PIM レジスタに格納された値

9'b01_000_01_01 9'b01_000_01_01
Kw: 2'b01 - P: 出力の累算を実数部と虚数部に対して独立して実行。PREG = 1 とする必要がある。
複素乗算と加算の式 OPMODE_RE OPMODE_IM

PRE + j PIM = (CRE + j CIM ) + ( ( ARE + j AIM ) × ( BRE + j BIM ) ) =

( CRE + ( ARE × BRE - AIM × BIM ) ) + j ( CIM + ( ARE × BIM + AIM × BRE ) )

9'b10_000_01_01 9'b10_000_01_01
Kw: 2'b10 - C: 実数部と虚数部に対して独立して加算される追加の複素数。
複素乗算と加算の式 OPMODE_RE OPMODE_IM

PRE + j PIM = (RNDRE + j RND IM ) + ( ( ARE + j AIM ) × ( BRE + j BIM ) ) =

( RND + ( ARE × BRE - AIM × BIM ) ) + j ( RND + ( ARE × BIM + AIM × BRE ) )

9'b11_000_01_01 9'b11_000_01_01
Kw: 2'b11 - RND: コンパイル時に定義される追加の複素数パラメーターで、主に丸めに使用。パラメーターは実数部と虚数部に対して独立して加算。

ALUMODE 制御

ALUMODE は、最終 ALU によって実行される動作を制御します (詳細はALUMODE 入力の表を参照)。ALUMODE_RE は DSPCPLX の実数部の ALU によって実行される動作を制御し、ALUMODE_IM は虚数部の ALU によって実行される動作を制御します。

前の OPMODE のセクションで説明した主な演算 (複素乗算、複素乗算と累算、および複素乗算と加算) では、ALUMODE_RE = ALUMODE_IM = 4'b0000 とする必要があります。それ以外の場合、ALUMODE_RE ≠ ALUMODE_IM と設定することが必要になる場合があります。次に、動作の例を示します。

PRE + j PIM = ( CRE - j CIM ) + ( ( ARE + j AIM )× ( BRE + j BIM ) ) =

( CRE + ( ARE × BRE - AIM × BIM ) ) + j ( -CIM + ( ARE × BIM + AIM × BRE ) )

表 1. 乗算用の複素共役
ポート 説明
OPMODE_RE = 9'b00_011_01_01 Mux: X,Y = M
Mux: Z = C
OPMODE_IM = 9'b00_011_01_01 Mux: X,Y = M
Mux: Z = C
ALUMODE_RE = 4'b0000 PRE = ZRE + WRE + XRE + YRE + CINRE
ALUMODE_IM = 4'b0001 PIM = -ZIM + WIM + XIM + YIM + CINIM - 1
CIN_RE = 1'b0 PRE = CRE + MRE
CIN_IM = 1'b1 PRE = -CIM + MIM
(ALUMODE_IM の選択によって生じた -1 を CIN_IM = 1'b1 で補正)
実際のアプリケーションで必要な ALUMODE の値を理解するには、次を考慮します。
  1. 上で説明した OPMODE の選択を使用して、X、Y、Z、W マルチプレクサーの入力/出力の関係を定義する。
  2. ALUMODE 入力の表を参照し、前の手順で説明した式の X、Y、Z、W マルチプレクサーの出力値を置き換える。
図 1. DSPCPLX モード