前言
作为一个有一定工作经验(划水好多年)的FPGA工程师,很多模块都已经学习过或者使用过,但是如果让我重新实现,感觉又是一脸懵。因此,这是我发文档的原因。对于自己来说,这是一个总结归纳的过程,对读者,可能是一次解惑。
后期,将会逐渐分享DDR/ETH/SERDES/PCIe/SPI/FFT/FIR等等应用、调试经历。2022.8.4@gz
预告:下一篇文章,将讲述FFT这个IP的使用以及注意事项。
本文末尾有相关的仿真文件,但是没有好好的整理以及写注释,将就着看,不懂得可以留言问。
如果有疑惑的地方,可以站内信->共同探讨!
-
一、 概述
在项目中,需要实现一个多通道的FIR滤波器,滤波器的信号速率不高,是一个300Hz~4KHz范围的滤波器。问题在于多通道,预计是需要实现16通道的。如果是实现16通道并行的滤波器,即使这个滤波器是串行结构,那消耗的资源也是非常可观的。幸好,xilinx提供的IP中支持实现多通道的滤波器。
有点感慨:xilinx提供的这个fir滤波器IP,功能实在是有点强大。不但可以实现多种结构的滤波器,还支持多通道、多组系数等功能,另外,matlab提供了超级简便的系数生成模块,弄一个fir模块,简直便捷到飞起。
瞬时,觉得自己以前手撕代码写的滤波器,有点low的感觉。
使用xilinx提供的FIR滤波器IP,要点有:
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的时钟;
滤波器设置选项
|
通道设置
|
实现设置
|
详细实现方案
|
接口设置
|
最终滤波器设计
|
2. 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信号输入不正确,这个信号会拉高的。
如何区分输出通道信号?
3. 仿真结果
仿真事项设置
|
-
三、 总结与感想
到此,如何使用该IP实现多通道滤波器,已经基本搞明白了。需要注意的是,最好是自己建立一个简单的仿真工程,尝试多设置一下系数,就可以更好的理解与设置;
经验如下:
1、 注重event标志信号,如果有置高的,就必须检查输入信号是否不符合要求;
2、 注意检查输入输出的时序关系,最好仿真一下;
相关的仿真工程文件
链接: https://pan.baidu.com/s/1htwozeuPkYoDQsb0MUlExQ?pwd=wy33
没有回复内容