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

更常见的用例是将部分参数更改为非默认值。执行此操作的方式是基于默认参数化结构体创建用户定义的新参数化结构体并更改部分默认值。

在以下示例中,定义了 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_pointfloating_point,其中默认值为 fixed_point。但输入变量会随 hls_fft.h 库一起传递给 FFT 函数,用于判定 data_format 而不是参数。
表 1. FFT 结构体参数
参数 描述 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_lutsbutterfly_type = hls::ip_fft::use_xtremedsp_slices