FFT ランタイム コンフィギュレーションとランタイム ステータス - 2023.2 日本語

Vitis 高位合成ユーザー ガイド (UG1399)

Document ID
UG1399
Release Date
2023-12-18
Version
2023.2 日本語

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();