FFT のスタティック パラメーター - 2023.2 日本語

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

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

FFT のスタティック パラメーターは、FFT の設定方法を定義し、FFT のサイズ、サイズを動的に変更可能にするか、インプリメンテーションをパイプライン処理するか radix_4_burst_io を使用するかなどの固定パラメーターを指定します。

hls_fft.h ヘッダー ファイルでは、スタティック パラメーターのデフォルト値を設定するのに使用可能な hls::ip_fft::params_t という構造体が定義されています。デフォルト値を使用する場合は、FFT 関数と共にパラメーター指定構造体を直接使用できます。

hls::fft<hls::ip_fft::params_t >  
    (xn1, xk1, &fft_status1, &fft_config1);

より一般的には、パラメーターの一部がデフォルト値以外の値に変更されます。これには、デフォルトのパラメーター指定構造体に基づく新しいユーザー定義のパラメーター指定構造体を作成し、一部のデフォルト値を変更します。

次の例では、新しいユーザー構造体 my_fft_config を定義し、出力順序を新しい値 (natural_order に変更) に変更しています。FFT のその他すべてのスタティック パラメーターにはデフォルト値が使用されます。

struct my_fft_config : hls::ip_fft::params_t {
    static const unsigned ordering_opt = hls::ip_fft::natural_order;
};

hls::fft<my_fft_config >  
     (xn1, xk1, &fft_status1, &fft_config1);

次に、FFT 構造体 hls::ip_fft::params_t に使用されるパラメーターについて説明します。パラメーターのデフォルト値および使用可能な値のリストを示します。

ヒント: FFT LogiCORE IP は、data_format パラメーターを使用して、fixed_point または floating_point の値を指定します。デフォルトは fixed_point です。ただし、hls_fft.h ライブラリを使用すると、FFT 関数に渡される入力変数によって、パラメーターではなく data_format が決まります。
表 1. FTT の構造体パラメーター
パラメーター 説明 C データ型 デフォルト値 有効な値
input_width データ入力ポート幅。 unsigned 16 8 ~ 34
output_width データ出力ポート幅。 unsigned 16 input_width ~ (input_width + max_nfft + 1)
status_width 出力ステータス ポート幅。 unsigned 8 FFT コンフィギュレーションによって異なる
config_width 入力コンフィギュレーション ポート幅。 unsigned 16 FFT コンフィギュレーションによって異なる
max_nfft FFT データ セットのサイズを 1 << max_nfft に指定します。 unsigned 10 3 ~ 16
has_nfft FFT のサイズをランタイムに設定できるようにするかどうかを指定します。 bool false True、False
channels チャネル数。 unsigned 1 1 ~ 12
arch_opt インプリメンテーション アーキテクチャ。 unsigned pipelined_streaming_io automatically_select pipelined_streaming_io radix_4_burst_io radix_2_burst_io radix_2_lite_burst_io
phase_factor_width 内部位相係数の精度を設定します。 unsigned 16 8 ~ 34
ordering_opt 出力順序モード。 unsigned bit_reversed_order bit_reversed_order natural_order
ovflo オーバーフロー モードをイネーブルにします。 bool true true false
scaling_opt スケーリング オプションを定義します。 unsigned scaled scaled unscaled block_floating_point
rounding_opt 丸めモードを定義します。 unsigned truncation truncation convergent_rounding
mem_data データ メモリにブロック RAM を使用するか分散 RAM を使用するかを指定します。 unsigned block_ram block_ram distributed_ram
mem_phase_factors 位相係数メモリにブロック RAM を使用するか分散 RAM を使用するかを指定します。 unsigned block_ram block_ram distributed_ram
mem_reorder 出力順序並べ替えメモリにブロック RAM を使用するか分散 RAM を使用するかを指定します。 unsigned block_ram block_ram distributed_ram
stages_block_ram インプリメンテーションで使用されるブロック RAM の段数を定義します。 unsigned (max_nfft < 10) ? 0 : (max_nfft - 9) 0 ~ 11
mem_hybrid ブロック RAM がデータ、位相係数、または順序並べ替えバッファーに指定されている場合に、ブロック RAM と分散 RAM のハイブリッドを使用して特定のコンフィギュレーションでのブロック RAM 数を削減するかどうかを指定します。 bool false true false
complex_mult_type 複素乗算器に使用する乗算器のタイプを定義します。 unsigned use_mults_resources use_luts use_mults_resources use_mults_performance
butterfly_type FFT バタフライに使用されるインプリメンテーションを定義します。 unsigned use_luts use_luts use_xtremedsp_slices
重要: 整数またはブール型ではないパラメーター値を指定する際は、HLS FFT 名前空間を使用する必要があります。たとえば、次の表の butterfly_type パラメーターに使用可能な値は use_luts および use_xtremedsp_slices です。C プログラムでは butterfly_type = hls::ip_fft::use_luts および butterfly_type = hls::ip_fft::use_xtremedsp_slices を使用する必要があります。