基于xilinx-IP的FIR滤波器多通道实现

前言

作为一个有一定工作经验(划水好多年)的FPGA工程师,很多模块都已经学习过或者使用过,但是如果让我重新实现,感觉又是一脸懵。因此,这是我发文档的原因。对于自己来说,这是一个总结归纳的过程,对读者,可能是一次解惑。

后期,将会逐渐分享DDR/ETH/SERDES/PCIe/SPI/FFT/FIR等等应用、调试经历。2022.8.4@gz

如果有疑惑的地方,可以站内信联系,共同探讨!

本文的仿真工程文件,放在末尾的公众号中,不需要积分就可以下载。

  • 概述

在项目中,需要实现一个多通道的FIR滤波器,滤波器的信号速率不高,是一个300Hz~4KHz范围的滤波器。问题在于多通道,预计是需要实现16通道的。如果是实现16通道并行的滤波器,即使这个滤波器是串行结构,那消耗的资源也是非常可观的。幸好,xilinx提供的IP中支持实现多通道的滤波器。

设计目标:基于xilinx的FIR ip、单组系数、多通道(16通道)

有点感慨:xilinx提供的这个fir滤波器IP,功能实在是有点强大。不但可以实现多种结构的滤波器,还支持多通道、多组系数等功能,另外,matlab提供了超级简便的系数生成模块,弄一个fir模块,简直便捷到飞起。

瞬时,觉得自己以前手撕代码写的滤波器,有点low的感觉。

使用xilinx提供的FIR滤波器模块,要点有:

  1. 如何使用matlab设计fir滤波器系数并且导出coef文件;
  2. 如何对vivado提供的FIR滤波器系数进行重载;
  3. 如何对vivado提供的FIR滤波器系数进行切换;
  4. 如何使用vivado提供的FIR滤波器实现多通道应用;(本文重点

  • IP配置

  1. 目标滤波器参数

滤波器描述

在配置IP之前,我们预先使用matlab获得了对应的FIR滤波器系数。FIR滤波器是一个300Hz~3KHz的带通滤波器,系数量化成16bit,450阶。信号的采样率:6.4kHz

IP运行时钟:120MHz的时钟;

滤波器设置选项

通道设置

实现设置

详细实现方案

接口设置

最终滤波器设计

  1. IP接口信号说明

S_axis_data_tlast:该信号表示滤波器信号输入的最后一个。如何理解?比如,在设计中一共有16个通道的滤波器,也就是相当于有16个独立的滤波器。在输入端,只有一组信号输入接口,如果是并行的,那么s_axis_data_tdata应该有16*32bit位宽,实际上只有32bit。因此,需要使用tuser结合tlast来对各个通道进行数据输入。而tlast在tuser=15的时候需要拉高。其余的时候置地。如图:

event_s_data_chanid_incorrect:如果tuser信号输入不正确,这个信号会拉高的。

如何区分输出通道信号?

  1. 仿真结果

仿真事项设置

  • 总结与感想

到此,如何使用该IP实现多通道滤波器,已经基本搞明白了。需要注意的是,最好是自己建立一个简单的仿真工程,尝试多设置一下系数,就可以更好的理解与设置;

经验如下:

  1. 注重event标志信号,如果有置高的,就必须检查输入信号是否不符合要求;
  2. 注意检查输入输出的时序关系,最好仿真一下
  • 7
    点赞
  • 79
    收藏
    觉得还不错? 一键收藏
  • 13
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值