FFT では、コンフィギュレーション ポートとステータス ポートを介したランタイム コンフィギュレーションおよびランタイム ステータスの監視がサポートされます。これらのポートは FFT 関数への引数として定義され、次の例では fft_status1
および fft_config1
変数として記述されています。
hls::fft<param1> (xn1, xk1, &fft_status1, &fft_config1);
ランタイム コンフィギュレーションとランタイム ステータスには、FFT の C ライブラリから定義済み構造体を使用してアクセスできます。
-
hls::ip_fft::config_t<param1>
-
hls::ip_fft::status_t<param1>
注記: どちらの場合も、構造体にはスタティック パラメーター指定構造体が必要で、例では param1 と記述されています。スタティック パラメーター指定構造体の詳細は、前のセクションを参照してください。
ランタイム コンフィギュレーション構造体を使用すると、C コードで次を実行できます。
- ランタイム コンフィギュレーションがイネーブルの場合は、FFT 長を設定
- FFT の方向を前方向または逆方向に設定
- スケーリング スケジュールを設定
FFT 長は、次のように設定できます。
typedef hls::ip_fft::config_t<param1> config_t;
config_t fft_config1;
// Set FFT length to 512 => log2(512) =>9
fft_config1.setNfft(9);
重要: ランタイム中に指定する長さは、スタティック コンフィギュレーションの
max_nfft
で定義されているサイズを超えることはできません。FFT の方向は、次のように設定できます。
typedef hls::ip_fft::config_t<param1> config_t;
config_t fft_config1;
// Forward FFT
fft_config1.setDir(1);
// Inverse FFT
fft_config1.setDir(0);
FFT のスケーリング スケジュールは、次のように設定できます。
typedef hls::ip_fft::config_t<param1> config_t;
config_t fft_config1;
fft_config1.setSch(0x2AB);
出力ステータス ポートには、次を判断するために、定義済み構造体を使用してアクセスできます。
- FFT 中にオーバーフローが発生したかどうか
- ブロックの指数値
FFT オーバーフロー モードは、次のようにチェックできます。
typedef hls::ip_fft::status_t<param1> status_t;
status_t fft_status1;
// Check the overflow flag
bool *ovflo = fft_status1.getOvflo();
重要: 各トランザクションが完了した後、オーバーフロー ステータスを確認して FFT が正しく動作していることを確認してください。
ブロックの指数値は、次を使用すると取得できます。
typedef hls::ip_fft::status_t<param1> status_t;
status_t fft_status1;
// Obtain the block exponent
unsigned int *blk_exp = fft_status1.getBlkExp();