Xilinx滤波器IP核的延时问题

可编程逻辑

1333人已加入

描述

前一段时间一直在研究通信系统,必然就会和各种滤波器打交道,同样也遇到了一些问题。比如说本文的主要内容,滤波器的延时问题。

在生成滤波器IP核之前需要产生抽头系数,这个抽头系数的阶数是自己设定的,阶数越高代表滤波器乘累加运算越多,但是阶数大小的选择要看是否满足自己的设计要求(例如衰减db是否满足要求)。同时,生成的滤波器抽头系数的值是与自己设计滤波器的各种参数确定的,如数据采样速率,通带截止频率、阻带起始频率(低通)、滤波器类型等。

这些抽头系数可以用MATLAB生成,MATLAB中有一个FDATool的工具,以图形化的方式供使用者产生所需的滤波器,然后将系数导出(以coe格式),这样我们在ISE中新建FIR IP核之后就可以直接导入刚刚产生的抽头系数表,非常方便。

下面直接开始用MATLAB生成抽头系数表:

1、利用 matlab 的 FDATool,产生需要的滤波器系数,打开【FDATool】

Xilinx

2、滤波器参数设置

Xilinx

注意:

Order数=滤波器阶数-1

尽量设计偶数阶滤波器,偶数阶滤波器乘法器利用率高。

3、滤波器系数量化

Xilinx

一般量化位数在12-16之间,量化位数越低乘法器消耗的资源越少,需要设计者权衡资源与精度。对于FIR Compiler,他使用的是DSP48 slices,经测试14位输入时16位量化位数与16位量化位数消耗相同资源,应选择16位系数。(至于为什么消耗相同的资源,是因为FPGA内部的DSP48E1硬核乘法器是25*18的,所以无论是16位还是14位都会占用一个DSP)。

4、导出量化系数点击【file -> export】

Xilinx

点击【Export】,即可把数据导入fcf文件,保存后用UltraEdit打开即可。

Xilinx

5、如果使用IP core则将16进制数拷贝生成coe文件;

Xilinx

如果使用乘法/加法器则直接将数据在代码中生成parameter。

注意:由于FIR的对称性,parameter的数量为(阶数+1)/2。

FIR Compiler生成:

1. 看图说话,基于s6的FIR,k7与其设计方式相同,都是5.0版本

Xilinx

2. (1)左边的部分是通带阻带设计,如图通带0.0-0.5pi,阻带0.5-1.0pi。(显然,低通滤波器是以2pi为周期关于pi对称,所以只需要设计0到pi的部分)

例如,滤波器参数80MSPS,通带0-3.75MHz,阻带8-40MHz,那么通带参数0.0-0.09375pi,阻带参数0.2-1.0pi。

(2)改成coe形式,然后找到coe文件,用“show”检查滤波器系数。

注意:IP核生成后不能更换coe文件,coe文件数据不能更改,拷贝到其他目录下或者其他电脑内都会导致IP核失效。

解决办法是删除IP核重建,并且需要在ipconfig文件夹内手动删除文件。

(3)时钟频率与输入采样数据速率。输出数据速率与输入采样数据速率相等。时钟频率指的是提供给FIR工作的时钟频率,该参数影响复用,也就是影响DSP的复用。

Xilinx

Xilinx

3、 (1)滤波器系数设置,一般都是有符号数,宽度参见coe文件。

(2)输入输出设置,一般都是有符号数,输出数据选择全精度输出,在FIR模块外面再用assign代码截位,这样截位可控。

Xilinx

4. 一般选择优化目标为area,节约资源。

Xilinx

5. 生成

点击generate就可以了

滤波器输出截位设置与测试:

滤波器截位调整的主要目的是使得输入峰峰值接近最大量程的正弦波时经过该滤波器能够产生峰峰值接近最大量程的输出正弦波,这样做的目的是滤波器输出的精度最大化。

好了,上面讲了滤波器系数的产生及ISE中生成FIR IP核的方法,下面讲一个问题,就是滤波器延时的问题。

在FPGA工程中调用FIR IP核,把系数文件导进去,输入进FIR IP核的数据速率为2.5k,采样速率为10k,FIR工作时钟为50M。接着用Chipscope抓取数据时发现第一个送进滤波器的数据会延时11ms输出,直接上图。第一张图是输入滤波器数据,第二张图是滤波器输出数据

Xilinx

Xilinx

后来查了一下FIR的datasheet,发现里面确实有这个延时相关的信息,数据手册上说这个延时其实可以直接在生成IP核的最后一页的Summary中看到。。。。。。

打开IP核后确实有这一项,而且数值也为11ms

Xilinx

在数据手册中也解释了这个时延是FIR 的initial startup latency (初始化启动时延)

Xilinx

就是说FIR会有一个初始化的时间,初始化完成后才开始正常工作,而这个时延的大小与滤波器的参数有关,即滤波器阶数、通道数、系数是否对称,时延是这些参数的一个函数,但是没有给出计算公式。所以只能理解这个时延究竟是什么。。。。。。

这里还有一个时延的说明,贴个图

Xilinx

翻译:

FIR的时延周期个数是阶数、滤波器类型、通道个数及系数是否对称的函数。时延周期个数指的是从RFD失效(表明一个DIN引脚数据已经被采样到)到RDY引脚有效(表明滤波器输出一个有效的数据)。

当输入数据速率与 ip core的工作时钟一样的时候,RFD信号引脚在每一个周期都不会失效。同样对于单数据速率滤波器,RDY引脚也一直保持有效(就是说当工作时钟与采样时钟相等时,每一个时钟周期输出的数据都是有效的)。在这种情况下,周期延时个数就表示输入到FIR的采样数据到这个数据输出时需要经过的周期个数。

对于那些将FIR配置成具有多通道抽取或内插功能的情况,IP 核就会包含一些采样的缓冲器,这些缓冲器会产生延时,延时个数与缓冲器的大小有关。此时延时周期个数表示的是从输入的最后一个采样数据的RFD信号失效(表明输入数据已经接收)到RDY信号的有效(输出数据有效)。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分