【转】Xilinx FIR IP core滤波器系数重载的两种方法
总结起来就是有两种方法,一种是只利用config channel 来选择滤波器组,另外一种方法是使用reload channel 动态输入滤波器组的系数值,然后配合使用config channel 来重载滤波器系数。
看到这个标题大部分人都会想到系数重载。我一开始也是这么理解的,这个让我在读Vivado提供的FIR compiler的文档时犯了极大错误。我有一个module需要在运行的过程根据输入信号来调整系数。我的第一反应就是系数重载。所以,我在看完IP core的基本输入输出端口就直接看FIR core关于reload信道的部分。然后,我就发现reload的工作方式异常复杂(其实后面发现其实不复杂),再次就不多说。在完整看完IP core文档第二遍的时候,灵感一现。发现自己犯了一个极大的错误(浪费了自己一个周时间)。其实,可以直接通过config来控制选择系数组。所以,我不用重载而用修改这两个字。
其实,在输入系数的时候,就可以同时输入几组滤波器系数。而后来只需要通过config信道来选择用哪一组滤波器就可以了。
IP core生成时,有两种方式可以输入系数,就是vector方式和.coe file方式。第一种方式理解上比较简单,就是直接在Coefficient Vector内输入系数就好。但是,我不建议这种方式,这种方式在实际操作比较复杂,而且容易出错。第二种方式,实际操作比较容易,且不易出错。可以直接通过MATLAB产生.coe文件,在Vivado FIR IP core生成的时候直接导入就好(以下过程也只就第二种方式介绍)。
记下来介绍如何同时导入几组滤波器系数吧。假如两个滤波器的coe文件如下:
Coefficient set 0 :1 2 3 4 3 2 1;
Coefficient set 1 : 2 3 4 5 4 3 2;
则同时输入的coe文件就会是:
Coefficient :1 2 3 4 3 2 1 2 3 4 5 4 3 2;
并且需要将Numberof Coefficient sets设置为2。而后,直接在config信道上选择系数的组别就好。
若系数长度相差太多,就可以用reload来重载系数。
本文转自:Xilinx FIR IP core滤波器系数的重载方法_长弓的坚持的博客-CSDN博客