在 C++ 设计中可使用 hls_fir.h 库调用 AMD FIR IP 块。本节解释了在 C++ 代码中配置 FIR 的方式。
要在 C++ 代码中使用 FIR,请执行以下操作:
- 在代码中包含 hls_fir.h 库。
- 使用预定义的
hls::ip_fir::params_t
结构体设置静态参数。 - 调用 FIR 函数。
- (可选)定义运行时输入配置以动态修改部分参数。
以下代码示例提供了每个步骤的执行方式的摘要信息。后文对每个步骤进行了更详细的探讨。
首先,在源代码中包含 FIR 库。此头文件位于 Vitis HLS 安装区域内的 include 目录中。执行 Vitis HLS 时,会自动搜索此目录。在 Vitis HLS 内编译时,无需指定到该目录的路径。
#include "hls_fir.h"
定义 FIR 的静态参数。包括诸如输入宽度、系数和滤波率(single
、decimation
和 hilbert
)等静态属性。FIR 库包含参数化 hls::ip_fir::params_t
结构体,可用于以默认值初始化所有静态参数。
在此示例中,系数定义为驻留在阵列 coeff_vec
中,并使用用户定义的 myconfig
结构体(基于预定义结构体)来覆盖系数的数量、输入宽度和量化模式的默认值。
struct myconfig : hls::ip_fir::params_t {
static const double coeff_vec[sg_fir_srrc_coeffs_len];
static const unsigned num_coeffs = sg_fir_srrc_coeffs_len;
static const unsigned input_width = INPUT_WIDTH;
static const unsigned quantization = hls::ip_fir::quantize_only;
};
使用含已定义的静态参数(此示例中为 myconfig
)的 HLS 名称空间来创建 FIR 函数实例,然后使用 run
方法调用并执行该函数。函数实参按顺序为输入数据和输出数据。
static hls::FIR<param1> fir1;
fir1.run(fir_in, fir_out);
(可选)可使用运行时输入配置。在 FIR 的某些模式下,此输入上的数据用于判定交织通道期间或者需要重新加载系数时的系数使用方式。此配置可采用动态配置,因而将其定义为变量。要获取有关哪些模式需使用此输入配置的完整说明,请参阅 FIR Compiler LogiCORE IP 产品指南(PG149)。
使用运行时输入配置时,将使用以下 3 个实参来调用 FIR 函数:输入数据、输出数据和输入配置。
// Define the configuration type
typedef ap_uint<8> config_t;
// Define the configuration variable
config_t fir_config = 8;
// Use the configuration in the FFT
static hls::FIR<param1> fir1;
fir1.run(fir_in, fir_out, &fir_config);