デザイン プランニング

ARF (任意リサンプリング フィルター) のデザイン (XAPP1373)

Document ID
XAPP1373
Release Date
2022-02-28
Revision
1.0 日本語

3·L·K·Input_Sample_Rateに従って、表 1 の仕様を満たすのに必要な乗算の数は、3 x 16 タップ x 350 MSPS x 2.0 = 33.6 GMAC です。これは 1 GHz で動作する 1 つの AI エンジンの性能である 32 GMAC を超えています。つまり、図 1図 2 のそれぞれに、少なくとも 2 つの AI エンジンが必要です。また、図 2 のインプリメンテーションには、大きなルックアップ テーブル {Fk} および {Gk} が含まれます。これらのテーブルから、1 つの出力サンプルにつき全 16 個の係数を同時に読み出す必要があります。これに加えて、図 1 のベクトル化されたインプリメンテーションは、並列演算用に 4 つの出力サンプルの係数をインターリーブする必要があります。係数をインターリーブするために、AI エンジンをもう 1 つ挿入する必要があります。

図 4 に、ARF から Versal AI コア デバイスへのマップを示します。図 1図 2 をインプリメントする AI エンジンは、それぞれ FILT と INTP という名前です。3 つ目の AI エンジン INLV は、係数のインターリーブに使用されます。各入力から計算される出力サンプルの数は、AI エンジン内で K = 2 に固定されます。PL 内の OutIF モジュールは、CTRL ブロックが生成したフラグに従って無効なデータを削除します。CTRL ブロックは、係数補間用の位相情報 {s, α} も計算します。

AI エンジンの入力および出力インターフェイスは、AXI プロトコルに厳密に従います。AXI プロトコルでは、Ready 信号と Valid 信号はいつでも Low に遷移し、アイドル サイクルを発生させることがあります。PL 内の CTRL モジュールは、入力に対して FIFO のような簡単なインターフェイスを提供します。出力 FIFO は、すべてのアイドル サイクルを削除し、出力クロック ドメイン内に連続データ ストリームを形成します。スループットの要件を満たすには、AI エンジンの出力サンプル レートは、入力サンプル レートの K = 2 倍でなければなりません。したがって、出力 AXI バスは 64 ビット、入力は 32 ビットです。入力サンプル レートが 350 MSPS の場合は、アイドル サイクルであっても十分なスループットを確保できるように、375 MHz のクロックを選択します。また、入力位相情報はデータと共に瞬時に変化することがあるため、PL 内の各入力に対して {s, α} をオンザフライで計算する必要があります。

図 1. 任意フラクショナル SRC フィルターの分割と Versal デバイスへのマップ

メモリ ストールが発生しないように、各 AI エンジン カーネルの入力遅延を入念に平衡化する必要があります。たとえば、次の図では、FILT カーネルへの係数入力とデータ入力にはレイテンシに大きな差があり、メモリ ストールとスループットの低下をもたらしています。この問題を解決するために、AI エンジン アレイ内部にダイレクト メモリ アクセス (DMA) FIFO を構築し、遅延の差を吸収します。

図 2. DMA FIFO による FILT 入力遅延の平衡化

FILT カーネルは、1 つの出力サンプルを計算するのに 1 クロック サイクルかかります。したがって、ピーク サンプル レートは最大 1 GSPS です。目標スループットは 700 MSPS であるため、30% のマージンはレイテンシの処理に利用できます。図 2 では、AI エンジンの総処理遅延は、1 つのデータ ウィンドウを処理する時間の 2 倍より多少長くなります。128 サンプルのウィンドウは、INTP カーネルで 128 x 1/375 = 340ns のレイテンシに変換されます。これに INLV で 340 ns が加算され、FILT で 170 ns が加算されます。総レイテンシは 850 ns と見積もられます。読み出しの開始前に出力 FIFO を充填するためのマージンは、1 μs のバジェットのうち 150 ns あります。FIFO には、事前に充填されたデータをすべて受け入れるのに十分な深さに加えて、出力がアクティブのときの FIFO アンダーフローやオーバーフローを防ぐための多少のマージンが必要です。