インプリメンテーションの詳細

ブロックごとにコンフィギュレーション可能な高速フーリエ変換の AI エンジンでの実装 (XAPP1356)

Document ID
XAPP1356
Release Date
2021-01-11
Revision
1.0 日本語

FFT への入力は、3 ビットの制御ワードと、それぞれ 1024 のサンプルからなる 4 つのデータ ブロックです。制御ワードの下位 2 ビット (Sz[1:0]) は、FFT のサイズ (すなわち、N= 4096/2Sz) を示します。制御ワードのビット 2 は、データに対して FFT と IFFT のどちらを実行するかを指定します。次の図に、さまざまな FFT サイズのデータ ブロックの定義を示します。

図 1. 入力データ フォーマット

制御ワードとデータ ブロック 0 および 1 は 1GSPS の AXI パケット ストリームにマルチプレクスされ、データ ブロック 2 および 3 はその他のパケット ストリームにマルチプレクスされます。パケット ID は、コンパイル中に ザイリンクス ツールによって割り当てられ、後処理を容易にするよう JSON ファイルにレポートされます。AI エンジン アレイのパケット スイッチングの詳細は、 『Versal ACAP AI エンジン プログラミング環境ユーザー ガイド』 (UG1076) を参照してください。次の図は、FFT デザインの入力パケット ストリームのタイミングを簡潔に図示したものです。

図 2. 入力パケット ストリームのタイミング図

FFT の出力は、1GSPS サンプルの 2 本のストリームです。データ フォーマットは FFT サイズによって異なります。一部のアプリケーションでは、出力フォーマットを変更することでプログラマブル ロジックのデザインをシンプルにできます。その場合は FFTz の C 関数を変更できます。

図 3. FFT の出力フォーマット

1024 ポイント FFT と 4 ポイント FFT 間の線形位相回転は、大容量 ROM を使用する代わりに AI エンジンのスカラー ユニットに組み込まれた sincos() 関数を使用して、FFTb、FFTc、および FFTd カーネルに実装されます。この手法により、3 つの AI エンジン x 1024 x 4 バイト/サンプル = 12,288 バイトのメモリを削減できます。この容量はメモリ バンク 1.5 個分に相当します。具体的には、8 つの回転因子からなるベクターが並列に計算されます (次式)。



この式の右辺の最初の項は、AI エンジンのスカラー ユニットの sincos() 関数によって計算されます。2 番目の項は、ループの前に (sincos() を使用して) 計算済みのベクターです。

AI エンジンおよびバッファーのロケーション ピンニングを使用して、メモリ競合を最小限に抑えながら、2 つの FFT モジュールを 5x2 の AI エンジン アレイにパックします。図 4 に示すように、このデザインは 5x2 AI エンジン アレイ内のすべてのメモリ バンクと AI エンジン を使用して最大限のスループットを実現します。図 4 では、網掛けの AI エンジンは 5x2 の AI エンジン アレイのうち 5 つの AI エンジンの一方のセットで、白地の AI エンジンはもう一方のセットです。

図 4. 5x2 AI エンジン アレイにパックされた 2 つの FFT モジュール