一、概述
在通信数字信号处理的实际工程中会经常用到FIR滤波器,本文重点总结了在vivado环境下调用FIR IP核的使用方法。本次设计的是一个通带频率为500kHz的FIR低通滤波器,滤波器阶数是16阶,滤波器窗函数为汉明窗,信号采样频率为50MHz,对500KHz+10MHz的混合信号进行低通滤波器。
二、配置界面
下面对调用FIR IP核的配置过程说明如下:
步骤1
加载.coe滤波器系数文件(该文件格式请见之前的文章)。
选择滤波器类型,这里选择的是单速率,这里还支持升采样(内插)、降采样(抽取)、Hilbert等滤波器型。
步骤2
配置输入信号的采样频率及系统时钟频率,其他参数默认即可。
步骤3
配置滤波器系数是否是有符号数以及位宽。
配置滤波器结构为对称结构。
配置输入信号是否是有符号数以及位宽。
最后配置滤波输出信号为全精度,位宽会自动生成24位(8位输入+16位滤波器系数)。
步骤4
下面界面采用默认配置,可根据需求更改。
下面是最终生成的滤波器参数,左侧是该滤波器的幅频响应(按照π进行了归一化),右侧是生成的滤波参数summary。
三、生成的滤波器模块接口
生成的模块采用的AXI接口:
模块接口模版如下:
fir_compiler_0 your_instance_name (
.aclk(aclk), // input wire aclk
.s_axis_data_tvalid(s_axis_data_tvalid), // input wire s_axis_data_tvalid
.s_axis_data_tready(s_axis_data_tready), // output wire s_axis_data_tready
.s_axis_data_tdata(s_axis_data_tdata), // input wire [7 : 0] s_axis_data_tdata
.m_axis_data_tvalid(m_axis_data_tvalid), // output wire m_axis_data_tvalid
.m_axis_data_tdata(m_axis_data_tdata) // output wire [23 : 0] m_axis_data_tdata
);
各个接口功能说明如下:
调用的具体代码如下:
module fir_top(
input wire sclk,
input wire rstn,
output wire indata_ready,
output wire [23:0] firdataout,
output wire dataout_v
);
wire [8:0] datain;
fir_compiler_0 fir_compiler_0_inst(
.aclk(sclk), // input wire aclk
.s_axis_data_tvalid(1'b1), // input wire s_axis_data_tvalid
.s_axis_data_tready(indata_ready), // output wire s_axis_data_tready
.s_axis_data_tdata(datain[8:1]), // input wire [7 : 0] s_axis_data_tdata
.m_axis_data_tvalid(dataout_v), // output wire m_axis_data_tvalid
.m_axis_data_tdata(firdataout) // output wire [23 : 0] m_axis_data_tdata
);
design_dds design_dds_inst(
.sclk(sclk),
.rst_n(rstn),
.sin_sig(datain)
);
四、滤波仿真效果
通过仿真可以看出,原来500KHz+10MHz的混合信号经滤波后恢复出原来的500KHz单音信号。