基于vivado的fir ip核的重采样设计与实现
创建vivado工程
1. 首先打开vivado,创建一个新的project(勾选create project subdirectory选项),并将工程命填为firfilter。
2.选择工程创建的类型为RTL project。在设计PCB会用到I/Oplanning这种类型,用在原理图和封装兼容性设计。
3.选择芯片family和封装,这种基于芯片选型的工程,其能implement的资源量受芯片自身容量限制。
创建design文件
1.创建设计文件,在flow navigator栏里,选中project manager,其展开的子项中,单击Add Source,并在跳出的框中选择Add or create desigine sources
2 填写创建的文件名为fir,类型是verilog。
定制FIR IP 核
1.类似创建design source文件一样,单击Project Manager子菜单下的IP catalog,在软件的右侧工作栏显示一个IP catalog标签,在search过滤器中选择fir,双击FIR Compiler选项。
2 定制FIR参数第一页,
a:按如下方式填写,这里的fdacoe.coe文件由matlab生成,先参考matlab一节,生成该文件。
b:在Filter type中选择Decimation,抽取方式,抽取因子填3,即将48k采样率降采样到16k。
3 定制FIR IP,第二页
3.第三页
4.第四页
5 第五页
6 第六页
基于MATLAB的FIR滤波器设计
FIR滤波器设计
a.在command window敲fdatool命令
b.在弹出的窗口中,将Response Type选中Lowpass,Designed Method选中FIR,其后下拉窗口,选中Window,即基于窗函数法设计FIR滤波器。
c.在Filter Order中选中Specify Order,填32这个数字,即32阶,窗口设计方法
按如下窗口内容填写。
FIR滤波器系数量化
先点击图中1标号按钮,进入量化界面,由于FPGA实现,2标号选定点,3标号内容照抄,4在设计有误时,返回继续设计有用。
FIR滤波器系数导出
点击菜单栏上的Target按钮,有两个选项,一个是generate c header,一个是XILINX Coefficient (.COE) file。这两个选项导出的系数都可以使用在xilinx 的fpga上,它们导出的系数是相等的。C语言导出系数如下:
- const int BL = 33;
- const int16_T B[33] = {
- -90, 0, 148, 219, 0, -467, -658, 0, 1220,
- 1626, 0, -2875, -3909, 0, 8719, 17911, 21851, 17911,
- 8719, 0, -3909, -2875, 0, 1626, 1220, 0, -658,
- -467, 0, 219, 148, 0, -90
- };
COE导出的文件内容如下:
- ; XILINX CORE Generator(tm)Distributed Arithmetic FIR filter coefficient (.COE) File
- ; Generated by MATLAB(R) 8.6 and the DSP System Toolbox 9.1.
- ; Generated on: 17-Feb-2016 09:57:13
- Radix = 16;
- Coefficient_Width = 16;
- CoefData = ffa6,
- 0000,
- 0094,
- 00db,
- 0000,
- fe2d,
- fd6e,
- 0000,
- 04c4,
- 065a,
- 0000,
- f4c5,
- f0bb,
- 0000,
- 220f,
- 45f7,
- 555b,
- 45f7,
- 220f,
- 0000,
- f0bb,
- f4c5,
- 0000,
- 065a,
- 04c4,
- 0000,
- fd6e,
- fe2d,
- 0000,
- 00db,
- 0094,
- 0000,
- ffa6;
FIR滤波实现
- 新建fir_test.m文件,文件内容如下:
- B = [ -90 0 148 219 0 -467 -658 0 1220 1626 0 -2875 -3909 0 8719 17911 21851 17911 8719 0 -3909 -2875 0 1626 1220 0 -658 -467 0 219 148 0 -90 ];
- a=1;
- x=[ -1 4 1 8 1 -1 0 8 1 1 2 12 1 2 1 0 21 2 4 8 0 1 32 1 8 1 -35 2 1 65 2 75 0 1];
- y=filter(B,a,x)
执行该文件,文件输出如下:
- y =
- Columns 1 through 14
- 90 -360 -238 -347 934 1960 690 -3748 -5923 -1383 9253 14206 3326 -21802
- Columns 15 through 28
- -35693 -8499 63482 155587 219005 222924 174176 109373 73680 105663 192691 285199 320053 262058
- Columns 29 through 34
- 167516 134487 244845 429404 550320 478771
例化FIR滤波器
依次点击图中,1,2,3,4,然后可见窗口5显示的内容,该内容适用verilog来instanceFIR的template
2.将template内容粘贴到前面创建的Design file,.v文件。
3.添加应有的端口信息:
4,最终的fir.v文件内容如下:
- `timescale 1ns / 1ps
- //
- // Company:
- // Engineer:
- //
- // Create Date: 02/16/2016 04:31:37 PM
- // Design Name:
- // Module Name: fir
- // Project Name:
- // Target Devices:
- // Tool Versions:
- // Description:
- //
- // Dependencies:
- //
- // Revision:
- // Revision 0.01 - File Created
- // Additional Comments:
- //
- //
- module fir(aclk,s_axis_data_tready,s_axis_data_tvalid,m_axis_data_tvalid,s_axis_data_tdata,
- m_axis_data_tdata
- );
- output s_axis_data_tready;
- input aclk;
- input s_axis_data_tvalid;
- output m_axis_data_tvalid;
- output[39:0] m_axis_data_tdata;
- input[15:0] s_axis_data_tdata;
- //----------- Begin Cut here for INSTANTIATION Template ---// INST_TAG
- fir_compiler_0 fir_decimate_by_3 (
- .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 [23 : 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 [39 : 0] m_axis_data_tdata
- );
- endmodule
创建test bench 文件
创建文件过程类似Design file,但文件类型要选择simulation类型,名称填为fir_tb,并在弹出的窗口中选择其为顶层module。
2.fir_tb.v文件的内容如下:
- `timescale 1ns / 1ps
- //
- // Company:
- // Engineer:
- //
- // Create Date: 02/16/2016 04:40:22 PM
- // Design Name:
- // Module Name: fir_tb
- // Project Name:
- // Target Devices:
- // Tool Versions:
- // Description:
- //
- // Dependencies:
- //
- // Revision:
- // Revision 0.01 - File Created
- // Additional Comments:
- //
- //
- module fir_tb;
- //Inputs
- reg s_axis_data_tvalid;
- reg aclk;
- reg[15:0] s_axis_data_tdata;
- reg[15:0] Mem[37:0];
- //Outputs
- wire s_axis_data_tready;
- wire m_axis_data_tvalid;
- wire[39:0] m_axis_data_tdata;
- integer k,i;
- //Instantiate the Unit Under Test(UUT)
- fir uut(
- .aclk(aclk),
- .s_axis_data_tready(s_axis_data_tready),
- .s_axis_data_tvalid(s_axis_data_tvalid),
- .m_axis_data_tvalid(m_axis_data_tvalid),
- .s_axis_data_tdata(s_axis_data_tdata),
- .m_axis_data_tdata(m_axis_data_tdata)
- );
- initial begin
- //Initialize Inputs
- // s_axis_data_tvalid = 1;
- s_axis_data_tvalid = 0;
- for(i=0;i<40;i=i+1)
- begin
- #90 s_axis_data_tvalid = 1;
- #10 s_axis_data_tvalid = 0;
- end
- end
- initial begin
- //clock generate
- aclk = 0;
- forever #5 aclk = !aclk;
- end
- initial $readmemh("/home/gsc/FIR_1/fir/fir.srcs/sim_1/new/data_in.txt", Mem);
- // Add stimulus here
- // Data input Generation
- initial begin
- s_axis_data_tdata = 0;
- for(k=0;k<=38;k=k+1)
- #100 s_axis_data_tdata = Mem[k];
- end
- endmodule
3仿真时用到一个输入文件,data_in.txt,,其文件内容如下,该文件内容就是matlab一节中的x的十六进方式制表示,由于开发基于linux,所以readmemh的路径是linux下的表示方式。
- FFFF
- 0004
- 0001
- 0008
- 0001
- FFFF
- 0000
- 0008
- 0001
- 0001
- 0002
- 000c
- 0001
- 0002
- 0001
- 0000
- 0015
- 0002
- 0004
- 0008
- 0000
- 0001
- 0020
- 0001
- 0008
- 0001
- FFDD
- 0002
- 0001
- 0041
- 0002
- 004B
- 0000
- 0001
4 完成后如下图,注意红框内文件目录结构是否和图中一直。
前仿真
依次点击1,2,在跳出的窗口中,双击类似4的窗口,注意观察3那行。
0x5a是十进制的90,ffea5是十进制的-347,可以观察matlab FIR设计输出结果,90之后的3个就是-347,至此验证了设计的正确性。
基于vivado的fir ip核的重采样设计与实现相关推荐
- verilog实现汉明权重_(学习Verilog)6. FIR IP核的基础功能使用总结
滤波器是信号处理技术绕不过的内容,而在BSPK的实现框图(见 BPSK的Simulink仿真实现)中,也需要用到滤波器. m序列的时域波形是一个矩形,矩形在频谱上是所有奇次谐波之和,为了节省带宽资源, ...
- ISE的FIR IP核实现
IP核参数设置 滤波器系数产生 和Quartus不一样,Vivado的FIR Compiler没有提供设计FIR滤波器和生成滤波器系数的功能,因此需要使用MATLAB等其它工具设计好滤波器再将系数导入 ...
- Vivado定制DDR3 IP核注意事项
1.1 Vivado定制DDR3 IP核注意事项 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)Vivado定制DDR3 IP核注意事项: 5)结束语. 1.1.2 本 ...
- VIVADO 自定义封装ip核(超详细)
版本:vivado 2018.3 vivado 自定义封装ip核,可以将ip核封装成带AXI总线,也可将ip核封装成不带AXI总线. 本次设计介绍,如何将当前工程封装成ip核(不带AXI总线) 目录 ...
- FPGA(五):Quartus II 调用Fir IP核使用说明
这几天在忙着写通信原理的项目,其中用到了fir滤波器的部分,从最初的一脸懵逼到初步理解了该怎么去调用ip核以及参数设置,这其中的过程着实不易.这篇博客主要是为了记录自己的学习过程以便日后也可以回想起来 ...
- FPGA数字信号处理(四)Quartus FIR IP核实现
该篇是FPGA数字信号处理的第四篇,选题为DSP系统中极其常用的FIR滤波器.本文将在前两篇的基础上,继续介绍在Quartus开发环境下使用Altera(或者叫Intel)提供的FIR IP核进行FI ...
- Xilinx的FIR IP核使用方法(参数重构改变滤波器形式)
FIR IP核可配置为极点系数为0的横向滤波器结构 IP 核配置 Filter coefficients 这里配置滤波器的类型,在Filter type中可将滤波器配置为单比率.抽取.插值滤波器.对于 ...
- 基于ISE的QDR IP核调用与硬件自检
平台:ISE(IP核用法同VIVADO) 语言:VHDL(Verilog用法类似) FPGA型号:V6-315T,ffg1156-1 QDR型号:GS8342D08GE-300I(类似) XILINX ...
- 手撕IP核系列——Xilinx FIR IP核之一
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 手撕IP核系列--Xilinx FIR IP核之一 前言 FIR 滤波器模块的设置 实现分析 前言 在Xilinx和Intel平台的F ...
最新文章
- NDKJNI Android 相关资料整理(四)
- WF4.0入门系列1——创建一个简单的工作流
- 网络:HTTP报文格式
- Create Tables and Build inserts from Tables by using Mygeneration Templates(Sql Server)
- 通信网络基础实验报告_建设亚太信息枢纽港、实现5G网络全覆盖!临港新片区通信基础设施规划发布...
- tplink连接服务器失败_管家婆财贸双全连接失败,服务器端没有找到加密狗
- 乘法更新规则对于并发的非负矩阵分解和最大间隔分类
- 关于HTTPS认证,这里解决你所有疑惑
- 【Elasticsearch】中文分词器比对表
- Servlet和JSP学习指南
- Atitit 二进制数据字节转字符串 base64 base16 Quoted-printable BINHEX
- ai人工智能的本质和未来_什么是人工智能,它将如何塑造我们的未来?
- MySql常用函数大全
- SQL处理表结构的基本方法整理(创建表,关联表,复制表)
- 大牛直播SDK-Windows RTMP/RTSP/本地FLV播放器使用说明
- 博科300 java配置,博科300 光纤交换机如何设置为SSH登录?
- oem13c安装参考
- C++二维数组的定义及理解
- creat是什么意思中文翻译_CREAT是什么意思中文翻译
- 《Loy解说SpringCloud之Zuul》
热门文章
- 测量音叉153kHz谐振器的幅频特性
- 国赛来咯!智能车竞赛-百度赛道开始报名啦!
- 第十六届全国大学生智能车竞赛创意组-讯飞智慧餐厅
- 7 开机启动文件路径_为什么当我登录的时候,总有一些文件会被打开
- vc 文本框 只显示下划线_【Axure9百例】36.文本框搜索自动匹配
- ubuntu下php服务器搭建_Ubuntu服务器下搭建php运行环境的方法
- swing中怎么在原来图片的基础上切换第二张图片_狂戳痛点!毕业论文图片和公式排版!...
- php 最大数字,PHP 计算至少是其他数字两倍的最大数的实现代码
- java 4d_GitHub - wm3445/Java-concurrency at 4d10ae51a9deec37340fc40d03f205cfbe8de43b
- java命名$_java命名规范