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>
注释: 在这 2 种情况下,此结构体需获取静态参数化结构体的名称,在此处示例中显示的名称为 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();