滤波器
最开始学习FPGA的时候会知道FPGA除了一些普通硬件单元外还有一些IP核,这里我们用部分软核来实现滤波。滤波器的参数来着于MATLAB的工具箱。
软核的调用
如何建立一个IP核:在VIVADO的左边菜单种点击Create Block Design(实际也可以编写对应的HDL语句来实现这些软核)
之后在右边的Diagram中点击中间的加号或者在空白出右击Add ip… 然后在搜索框选择DDS软核:
出现的软核应该如图所示。同样再建立同样的一个DDS软核。
之和需要点击对应软核选择部分参数(双击)。需要将输出频率选择为5。另一个软核就选4.(后期会用他们进行信号相乘)
其他参数设置如下
同样的方法调用一个乘法器。
参数设置如下:
设置好这些之后要把两个DDS的输出连接到乘法器上面。但是对于开始的输入和最后的输出是没有对于连线的,要建立额外的管脚。
就可以引入管脚,如图:
完成连线后就可以进行相乘之后的显示。连好的图为:
(不用管aclk连上去的线和出界的线,另外再乘法器的输出make external)。连好后右击空白处,单击valid design。如果出现
说明没有什么错误了。保存工程后,在diagram左边的source框中有
这个就是工程的BD文件,右键点击,选择create a HDL wapper,生成一个顶层文件。
建立好工程后添加一个测试文件。选中Design Sources后点那个加号,选择仿真文件,建立空文件。
点击Create File。
注意这个文件名要和模块一致。(tb_top)然后一值往后点即可。
在该仿真文件(点source中的simulation找到这个仿真文件)中的代码如下:
module tb_top(
);
reg aclk_0 ;
initial
begin
aclk_0 = 1;
end
always #5 aclk_0 = ~aclk_0 ;
DSP_TEST_wrapper DSP_TEST_wrapper_i
(.aclk_0(aclk_0));
endmodule
点左边菜单栏中的run simulation。
左边Scope可以选择输出的是哪些接口的波形。右击可以添加到波形中。要注意在波形显示的时候要改两个东西,改成显示的那个。(右键单击要修改的参数)
到这里,波形的混合就完成了,下一步主要是通过FIR的软核来实现频率的滤除。
首先介绍一下,FIR滤波器中需要添加滤波器参数,市面上有很多软件可以实现,我选择的是matlab中的滤波器工具箱。
根据设计要求设置好对应参数后,从菜单栏中的目标导出coe文件(可以看到还能导出HDL文件哦,小伙伴可以试一试)。在VIVADO中添加软核filter并连续,如图:(tdata\tvalid都是AXI通讯的内容,各位可以自己学习)
双击filter,添加coe文件
(默认是向量文件)返回source框中,右键生成输出产品更新顶层top文件
更新后
output [31:0]M_AXIS_DATA_0_tdata;
output M_AXIS_DATA_0_tvalid;
input aclk_0;
可以看见多了个tdata的量。
这样就可以在top文件中修改代码为
module tb_top(
);
reg aclk_0 ;
wire[39:0] M_AXIS_DATA_0_tdata;
initial
begin
aclk_0 = 1;
end
always #5 aclk_0 = ~aclk_0 ;
DSP_TEST_wrapper DSP_TEST_wrapper_i
(.M_AXIS_DATA_0_tdata(M_AXIS_DATA_0_tdata),
.aclk_0(aclk_0));
endmodule
这样就可以来进行仿真来查看滤波器的仿真效果。