Vector FFT ブロックは、ベクター型入力の FFT 処理をサポートします。
説明
入力データの実数部を in_re
ポートに、虚数部を in_im port
ポートに供給する必要があります。
in_valid
が High の場合、入力データが有効であることを示します。out_valid
が High の場合、出力データが有効であることを示します。有効なインジケーターは、入力と出力のサンプルのセットごとに供給されます (例: R 個のサンプルごと)。バック プレッシャー フロー制御はないため、一度 FFT 変換が始まったら、連続する N/R 個のクロック間、毎クロック R 個のデータ サンプルをコアに入力する必要があります。N は FFT の長さです。ただし、連続変換の場合は、有効な制御入力はギャップなしで High に保持できます。
in_scale
入力ポートは、スケーリングが必要な場合に使用されます。内部オーバーフローがある場合は、out_scale
が使用されます。
データ型サポート
-
in_scale
ビットの数はlog2(FFT length)
に等しくなる必要があります。 -
in_valid
およびout_valid
のデータはブール型です。
ブロック パラメーター
FFT の長さ (N) は変換のサイズであり、2^3 から 2^16 までの 2 のべき数である必要があります。SSR はスーパー サンプル レートの略語で、1 クロックごとに並列処理されるサンプル数を指します。N=1024、SSR=4 の典型的な例では、コアは 256 クロックごとに 1K FFT を計算し、クロックごとに入力サンプルを 4 つ処理します。
固定小数点出力データ サイズは 27 ビット以下にする必要があり、これは DSP48 の乗算器 A ポート サイズによって制限されます。
BRAM_THRESHOLD は、機能的には意味のないインプリメンテーション パラメーターで、遅延ラインをインプリメントする際に分散 RAM とブロック RAM の使用を制御します。これら 2 種類のリソース間で使用数をトレードするのに使用できます。この値が大きいほど、ブロック RAM よりも分散 RAM の方が多く使用されます。一般的によく使用される値は、258、514、1026 です。
- [Scaling Ports]
-
スケーリング ポートは SI および SO と呼ばれます。これらのポートの幅は FFT のサイズ N と同じで、常に log2(N) になります。SI ビットは、内部オーバーフローが発生する可能性のある加算/減算ステージごとに 1 つずつあります。ビットが 0 の場合、スケーリングは実行されず、ビット増加は、内部データ サイズのビットを各ステージごとに 1 ビットずつ増加させることにより処理されます。ビットが 1 の場合は、ステージは 2 分割され、オーバーフローを回避するために内部データを増加させる必要は必要はなくなります。
通常、出力データ サイズが入力サイズより log2(N) ビット大きい場合、スケーリングは不要で、SI はすべて 0 に設定されます。入力と出力のデータ サイズが等しい場合は、各ステージでスケーリングが必要で、SI はすべて 1 に設定されます。実際には、スケーリングはデータに依存し、出力サイズの増加と 0 でない SI ビットの組み合わせが使用されます。部分的なスケーリングが使用される場合は、SI の 0 でないビットは MSB である必要があります。SI はスタティックである必要があり、コアがデータを処理している間 (VI が High のとき) は変更できません。
内部オーバーフローを回避するために重要なもう 1 つの要件は、データ入力が 1 つの MSB マージン ビットを持つようにすることです。つまり、I.RE と I.IM の 2 つの MSB は同じである必要があります。これにより、複素乗算器のオーバーフローが回避されます。前述の 2 つの規則に従えば、内部オーバーフローは設計上発生しません。
SO ポートは内部オーバーフローが発生しているかを示すインジケーターであり、通常は使用されず、サイズが log2(N) の符号なしの信号に接続されます。