VIVADO 实现一个滤波器(使用FIR\DDS软核)

13 篇文章 6 订阅

滤波器

最开始学习FPGA的时候会知道FPGA除了一些普通硬件单元外还有一些IP核,这里我们用部分软核来实现滤波。滤波器的参数来着于MATLAB的工具箱。

软核的调用

如何建立一个IP核:在VIVADO的左边菜单种点击Create Block Design(实际也可以编写对应的HDL语句来实现这些软核)
在这里插入图片描述
之后在右边的Diagram中点击中间的加号或者在空白出右击Add ip… 然后在搜索框选择DDS软核:
在这里插入图片描述出现的软核应该如图所示。同样再建立同样的一个DDS软核。
在这里插入图片描述之和需要点击对应软核选择部分参数(双击)。

需要将输出频率选择为5。另一个软核就选4.(后期会用他们进行信号相乘)
在这里插入图片描述
其他参数设置如下
在这里插入图片描述在这里插入图片描述

在这里插入图片描述

同样的方法调用一个乘法器。
在这里插入图片描述
参数设置如下:
在这里插入图片描述
设置好这些之后要把两个DDS的输出连接到乘法器上面。但是对于开始的输入和最后的输出是没有对于连线的,要建立额外的管脚。
在这里插入图片描述
就可以引入管脚,如图:
在这里插入图片描述完成连线后就可以进行相乘之后的显示。连好的图为:
在这里插入图片描述(不用管aclk连上去的线和出界的线,另外再乘法器的输出make external)。

连好后右击空白处,单击valid design。如果出现
![在这里插入图片描述](https://img-blog.csdnimg.cn/c4c79eb38b934321ac9beca308c52f00.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDQ0MTI2Mw==,size_16,color_FFFFFF,t_70说明没有什么错误了。保存工程后,在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

这样就可以来进行仿真来查看滤波器的仿真效果。

  • 8
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值