IP核参数设置

滤波器系数产生

和Quartus不一样,Vivado的FIR Compiler没有提供设计FIR滤波器和生成滤波器系数的功能,因此需要使用MATLAB等其它工具设计好滤波器再将系数导入到IP核中。有两种方法:

1、MATLAB的FDATOOL工具在设计好滤波器后,可以直接生成IP核需要的coe文件:

matlab的命令行输入filterDesigner打开滤波器设计工具,设计合适的滤波器后记得选fix point,然后导出coe文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dpLfJali-1610718093604)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/4829af6e-c02f-4b28-88dc-14a094240928/Untitled.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tE43nRMd-1610718093621)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/c0a197ac-4fc9-43b4-abbc-d10951cab033/Untitled.png)]

2、在已经写好的matlab代码中提取系数,然后写函数生成合适格式的coe文件:

这是很见到的fir滤波器,

Lb=fir1(101,2.5e6*2/1e9);       %低通滤波窗口

附上保存系数并生成coe文件的代码,

function fir_save(filename,data,gain,number)
%FIR_SAVE 此处显示有关此函数的摘要
%   输入滤波器系数
%   输出数据到coe文件
global path;if nargin < 4number = 1;
end
temp = fix(data*gain);
fid = fopen([path,filename,num2str(number),'.coe'],'w');
fprintf(fid, 'radix = 10;\n');
fprintf(fid, 'coefdata = \n');
fprintf(fid, '%d,',temp); end

IP核系数输入

IP核支持两种FIR系数输入方式,以“Vector”的形式直接写入;或者以“COE File”的形式导入coe文件。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b9lKYlFy-1610718093625)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/e58699e7-c3c4-4ad2-9b8c-68c8f08971a4/Untitled.png)]

滤波器硬件过采样设置

  1. 特别需要注意的是采样设置和时钟周期,采样频率应该和信号相联系,时钟周期和系统时钟周期一致。
  2. 也要注意工程选用的设备可用dsp slice数量,滤波器的阶数,过采样设置均会影响数量。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5TSv9zVS-1610718093632)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/3d516f15-8011-41b9-9366-9e2c25ca53b8/Untitled.png)]

IP核接口说明

Vivado的很多IP核采用的是AXI4接口,主要有数据(tdata)、准备好(tready)、有效(tvalid)几种信号,还有主机(m)和从机(s)之分。另外在Interface这个Tab还可以配置使用更多辅助的AXI4接口信号。

在设置为多通道、可变系数模式时,还会用到其它的接口。上表中的接口已经足够完成一次单通道、固定系数的FIR滤波器设计。其它接口在后文的设计中使用到FIR滤波器的其它模式时,再做介绍。

FPGA设计

IP核的接口在Verilog HDL中进行设计时,一定要参考官方文档中给出的时序图。在IP核的配置界面点击“documentation”,可以找到IP核的user guide。 也可以在Xilinx官网或DocNav工具中搜索pg149,查阅FIR Compiler的说明。

接口输入

AXI4接口的tdata位宽是以字节为单位,即只会是8的倍数,因此需要结合设计的实际位宽做相应处理。

直接将信号赋值到实例化接口,

wire signed [12:0] bpf1_abs, bpf2_abs;lpfir lpfir_inst1 (.aclk(clk), // input aclk.s_axis_data_tvalid(1'b1), // input s_axis_data_tvalid.s_axis_data_tready(), // output s_axis_data_tready.s_axis_data_tdata(bpf1_abs), // input [15 : 0] s_axis_data_tdata.m_axis_data_tvalid(), // output m_axis_data_tvalid.m_axis_data_tdata(lpf1_data) // output [23 : 0] m_axis_data_tdata
);

也可以严谨的规定一下线宽对应,少的用补码,

input signed [12:0]din,          //信号输入fir1 bpf_fir1_inst (.aclk(clk), // input aclk.s_axis_data_tvalid(1'b1), // input s_axis_data_tvalid.s_axis_data_tready(), // output s_axis_data_tready.s_axis_data_tdata({{3{din[12]}},din}), // input [15 : 0] s_axis_data_tdata.m_axis_data_tvalid(), // output m_axis_data_tvalid.m_axis_data_tdata(bpfir1_data) // output [23 : 0] m_axis_data_tdata
);

代码示例

单通道、固定系数的FIR Compiler接口,用于接收机设计实例,示例代码如下所示:

`timescale 1ns / 1ps
module top(input clk,          //32MHz系统时钟input rst,input signed [12:0]din,          //信号输入output [12:0] realout  //FSK解调数据输出);//wire [15:0]din;wire signed [12:0] bpfir1_data, bpfir2_data;
wire signed [12:0] bpf1_abs, bpf2_abs;
wire signed [12:0] lpf1_data, lpf2_data;
wire [15:0] dout;
wire signed [15:0] m_tdata;fir1 bpf_fir1_inst (.aclk(clk), // input aclk.s_axis_data_tvalid(1'b1), // input s_axis_data_tvalid.s_axis_data_tready(), // output s_axis_data_tready.s_axis_data_tdata({{3{din[12]}},din}), // input [15 : 0] s_axis_data_tdata.m_axis_data_tvalid(), // output m_axis_data_tvalid.m_axis_data_tdata(bpfir1_data) // output [23 : 0] m_axis_data_tdata
);fir2 bpf_fir2_inst (.aclk(clk), // input aclk.s_axis_data_tvalid(1'b1), // input s_axis_data_tvalid.s_axis_data_tready(), // output s_axis_data_tready.s_axis_data_tdata({{3{din[12]}},din}), // input [15 : 0] s_axis_data_tdata.m_axis_data_tvalid(), // output m_axis_data_tvalid.m_axis_data_tdata(bpfir2_data) // output [23 : 0] m_axis_data_tdata
);Rectify Rectify_inst (.clk(clk), .rst(rst), .bpf1(bpfir1_data), .bpf2(bpfir2_data), .bpf1_abs(bpf1_abs), .bpf2_abs(bpf2_abs));lpfir lpfir_inst1 (.aclk(clk), // input aclk.s_axis_data_tvalid(1'b1), // input s_axis_data_tvalid.s_axis_data_tready(), // output s_axis_data_tready.s_axis_data_tdata(bpf1_abs), // input [15 : 0] s_axis_data_tdata.m_axis_data_tvalid(), // output m_axis_data_tvalid.m_axis_data_tdata(lpf1_data) // output [23 : 0] m_axis_data_tdata
);lpfir lpfir_inst2 (.aclk(clk), // input aclk.s_axis_data_tvalid(1'b1), // input s_axis_data_tvalid.s_axis_data_tready(), // output s_axis_data_tready.s_axis_data_tdata(bpf2_abs), // input [15 : 0] s_axis_data_tdata.m_axis_data_tvalid(), // output m_axis_data_tvalid.m_axis_data_tdata(lpf2_data) // output [23 : 0] m_axis_data_tdata
);endmodule

备注:

  1. 程序中认为输入的采样数据始终有效,因此将s_axis_data_tvalid永远置1;
  2. 由于s_axis_data_tdata为16bit位宽,但输入信号数据为13bit位宽,因此用拼接运算符{}在高位填充补码的符号位;
  3. 由于m_axis_data_tdata为32bit位宽,但输出信号数据有效位仅有13bit位宽,因此仅需取低13bit作为FIR滤波器输出。

ISE的FIR IP核实现相关推荐

  1. 基于vivado的fir ip核的重采样设计与实现

    创建vivado工程 1. 首先打开vivado,创建一个新的project(勾选create project subdirectory选项),并将工程命填为firfilter. 2.选择工程创建的类 ...

  2. verilog实现汉明权重_(学习Verilog)6. FIR IP核的基础功能使用总结

    滤波器是信号处理技术绕不过的内容,而在BSPK的实现框图(见 BPSK的Simulink仿真实现)中,也需要用到滤波器. m序列的时域波形是一个矩形,矩形在频谱上是所有奇次谐波之和,为了节省带宽资源, ...

  3. FPGA(五):Quartus II 调用Fir IP核使用说明

    这几天在忙着写通信原理的项目,其中用到了fir滤波器的部分,从最初的一脸懵逼到初步理解了该怎么去调用ip核以及参数设置,这其中的过程着实不易.这篇博客主要是为了记录自己的学习过程以便日后也可以回想起来 ...

  4. FPGA数字信号处理(四)Quartus FIR IP核实现

    该篇是FPGA数字信号处理的第四篇,选题为DSP系统中极其常用的FIR滤波器.本文将在前两篇的基础上,继续介绍在Quartus开发环境下使用Altera(或者叫Intel)提供的FIR IP核进行FI ...

  5. Xilinx的FIR IP核使用方法(参数重构改变滤波器形式)

    FIR IP核可配置为极点系数为0的横向滤波器结构 IP 核配置 Filter coefficients 这里配置滤波器的类型,在Filter type中可将滤波器配置为单比率.抽取.插值滤波器.对于 ...

  6. 手撕IP核系列——Xilinx FIR IP核之一

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 手撕IP核系列--Xilinx FIR IP核之一 前言 FIR 滤波器模块的设置 实现分析 前言 在Xilinx和Intel平台的F ...

  7. Vivado Fir Ip核动态更改滤波器系数的两种方法

    有时在设计过程中,可能需要不同的滤波效果,如果采样率一样的情况下,我们有两种方式进行切换系数. 第一种就是真正意义上的动态切换,如下图: 这种方式适合真正意义上的系数从新加载,但是配置相对复杂,但是省 ...

  8. 二相并行FIR滤波器的matlab及使用FIR IP 核的FPGA实现

    二相并行FIR滤波器的matlab及modelsim仿真 二相FIR滤波器即并行FIR滤波器,以面积换取速度,可以在同样的时钟频率下,提高原始滤波器的有效吞吐量,或者降低原始滤波器的功耗. 1 并行F ...

  9. ise的时钟ip核_ISE的IP核clocking wizard使用和例化

    datasheet:https://www.xilinx.com/support/documentation/ip_documentation/clk_wiz/v4_2/pg065-clk-wiz.p ...

最新文章

  1. vba 根据分辨率 缩放显示比例_【显示百闻录】第一讲:关于屏幕尺寸、比例以及分辨率...
  2. CNN tflearn处理mnist图像识别代码解说——conv_2d参数解释,整个网络的训练,主要就是为了学那个卷积核啊。...
  3. (转) oc static extern 和const
  4. 递归法实现库函数strlen
  5. 一个数据仓库转型者眼中的数据挖掘
  6. mysql中视图和表的区别及联系_MySQL中Update、select联用操作单表、多表,及视图与临时表的区别...
  7. PHP数据结构预热:PHP的迭代器(转)
  8. 【收藏干货】axios配置大全
  9. 开课吧Java课堂:如何运用equals( )和 equalsIgnoreCase( )
  10. EIGRP sutb
  11. 996程序员办公室猝死?公司:没死,继续上班了
  12. 闲置路由器做无线打印服务器
  13. multisim如何添加8050(例),8550,9013,9014
  14. 《深入理解计算机系统》Lab2-Bomblab
  15. oracle 11客户端精简版,oracle_11g精简版客户端配置
  16. NCT全国青少年编程能力等级测试教程(图形化编程、Python语言编程)
  17. 详细区分offsetX,clientX,pageX,screenX,layerX和X的区别
  18. 如何打造自己有创意的平面设计灵魂作品
  19. edge如何导入html文件收藏夹,win10系统edge浏览器收藏夹导入/导出的操作方法
  20. 图像正交变换的研究意义

热门文章

  1. java实现二维数组推箱子小游戏
  2. LSTM中的归一化与反归一化问题、预测未来值问题
  3. css拖动音乐进度条,利用CSS3实现3D滑块进度条拖动动画特效
  4. MySql中保留两位小数
  5. idea-快速打开项目所在文件夹
  6. scip指令集_「欧盟」SCIP数据库提交专题问答 QA
  7. JS 前端获取系统当前时间存入数据库datetime可识别格式(yyyy-mm-dd HH:mm:ss)
  8. 字符串输入输出函数和字符串处理函数
  9. C语言fgets读取整个文本文件的内容
  10. A Word Can Make You Miss Your Deadline