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);
更常见的用例是将部分参数更改为非默认值。执行此操作的方式是基于默认参数化结构体创建用户定义的新参数化结构体并更改部分默认值。
在以下示例中,定义了 1 个新的用户结构体 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
而不是参数。参数 | 描述 | C 语言类型 | 默认值 | 有效值 |
---|---|---|---|---|
input_width | 数据输入端口宽度。 | 无符号 | 16 | 8-34 |
output_width | 数据输出端口宽度。 | 无符号 | 16 | 介于 input_width 到 (input_width + max_nfft + 1) 之间 |
status_width | 输出状态端口宽度。 | 无符号 | 8 | 取决于 FFT 配置 |
config_width | 输入配置端口宽度。 | 无符号 | 16 | 取决于 FFT 配置 |
max_nfft | FFT 数据集大小指定为 1 << max_nfft。 | 无符号 | 10 | 3-16 |
has_nfft | 判定在运行时 FFT 大小是否可配置。 | bool | false | True 和 False |
channels | 通道数。 | 无符号 | 1 | 1-12 |
arch_opt | 实现架构。 | 无符号 | pipelined_streaming_io | automatically_select pipelined_streaming_io radix_4_burst_io radix_2_burst_io radix_2_lite_burst_io |
phase_factor_width | 配置内部相位因子精度。 | 无符号 | 16 | 8-34 |
ordering_opt | 输出排序模式。 | 无符号 | bit_reversed_order | bit_reversed_order natural_order |
ovflo | 启用上溢模式。 | bool | true | true、false |
scaling_opt | 定义缩放选项。 | 无符号 | scaled | scaled unscaled block_floating_point |
rounding_opt | 定义舍入模式。 | 无符号 | truncation | truncation convergent_rounding |
mem_data | 指定使用块 RAM 还是分布式 RAM 作为数据存储器。 | 无符号 | block_ram | block_ram distributed_ram |
mem_phase_factors | 指定使用块 RAM 还是分布式 RAM 作为相位因子存储器。 | 无符号 | block_ram | block_ram distributed_ram |
mem_reorder | 指定使用块 RAM 还是分布式 RAM 作为输出重新排序存储器。 | 无符号 | block_ram | block_ram distributed_ram |
stages_block_ram | 定义实现中使用的块 RAM 阶段数。 | 无符号 | (max_nfft < 10) ? 0 : (max_nfft - 9) | 0-11 |
mem_hybrid | 针对数据、相位因子或重排序缓冲器指定使用块 RAM 时,mem_hybrid 用于指定在何处混用块 RAM 与分布式 RAM 来减少某些配置中的块 RAM 计数,或者指定不混用这两者。 | bool | false | true、false |
complex_mult_type | 定义用于复数乘法的乘法器类型。 | 无符号 | use_mults_resources | use_luts use_mults_resources use_mults_performance |
butterfly_type | 定义用于蝶形 FFT 的实现。 | 无符号 | 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
。