最近用到系数可以重新配置的fir滤波器,调用xilinx提供的ip core,使用了use reloadable coefficient功能,但有以下几点疑问,哪位有用过的大虾能否指点迷津下 1、使用use coefficients reloadable之后,仍需导入.coe文件,这个文件的作用是什么,此时滤波器系数不是由coe_din输入了吗? 2、number of coefficient sets的作用是什么,与导入的.coe系数个数有关系。 3、_reload_order.txt中的系数顺序是说coe_din输入系数的顺序还是coefficients file文件的顺序,还是两者都需要按这个顺序?
lxza521 (2011-9-17 09:50:01)
.coe为xilinx的部分IP初始化文件,示波器,RAM都能使用.coe文件进行初始化,滤波器的IP核xilinx只提供了结构,具体的系数需要.coe配置。
lxza521 (2011-9-17 09:50:40)
.coe为xilinx的部分IP初始化文件,示波器,RAM都能使用.coe文件进行初始化,滤波器的IP核xilinx只提供了结构,具体的系数需要.coe配置。
110500623 (2011-9-17 11:29:13)
回复 3# lxza521 谢谢回答,这个我知道,我问的是如果用到系数是由外部配置的,这个coe文件就不需要了吧,或者需要是用来做什么的,初始化吗?
laoxing (2011-9-20 19:30:35)
第一个问题:导入.coe文件,相当于给滤波器一个默认的系数,可能是软件需要的。如果你不重新输入滤波器系数,就默认这组系数了。 第二个问题:那个参数要跟系数个数相同,比滤波器阶数大1。(对称的情况下,例如阶数为32,该参数为33,实际滤波器系数取17) 第三个问题:你用matlab生成的系数文件,需要反过来装入XILINX中。 希望您能试一下,这是我小小的看法~~~以上都是系数对称的情况·
110500623 (2011-9-21 08:16:07)
回复 5# laoxing 回答很详细,很是受用,非常感谢
laoxing (2011-9-22 20:20:28)
回复 6# 110500623 没事,但愿能帮助您~
qiujian333 (2011-11-23 14:44:19)
用xilinx ise12.4的CORE FIRV5.0生成了FIR滤波器 其中设置了使用系数重载功能, 但是在用modelsim仿真的时候,系数无法正确的配置进去, 求解。 我是这样想的,首先不采集数据,coef_ld先高后低,然后coef_we使能一直为高,接着输入49个系数。(滤波器是49阶的) 但是这样系数配不好,无法得到正确的结果。 有没有高手弄过系数重配的,还请帮下忙解释下,谢谢啊。 还有1个问题,生成的滤波器中,输出口rfd在无数据输入情况下,会一直为高。但是datasheet上第44页说,可以利用coef_ld来强制rfd为低,可是rfd为滴说明已经在采集数据了,这怎么理解的,我不太清楚。 求帮助
catt28 (2011-11-30 23:05:08)
回复 8# qiujian333 这个你得分情况,在DA FIR里面,coef_ld一旦拉高,就指示要开始采集新的系数了,滤波器同时就停止工作了,直到采集完一组新的系数,采集的时间有公式,这个你得在datasheet 里面看,而在transpose FIR和systolic FIR里面,coef_ld拉高滤波器并不停止工作,直到采集完一组新的系数后滤波器才采用新的系数重新工作,采集的时间是系数的长度加一个时钟码片,采集的时间一定要保证足够,不然肯定不能正常工作,同时要注意此时采集的系数要re-order,不然结果也不对,re-order的顺序也要看datasheet。还有RFD是系数采集指示信号,coef_ld拉高会迫使RFD为低,表示一组新的系数还没采集完毕,这个是没有问题的。 我最近也在学习滤波器的Reload功能,这是我的理解,望多交流。
catt28 (2011-11-30 23:06:51)
回复 8# qiujian333 这个你得分情况,在DA FIR里面,coef_ld一旦拉高,就指示要开始采集新的系数了,滤波器同时就停止工作了,直到采集完一组新的系数,采集的时间有公式,这个你得在datasheet 里面看,而在transpose FIR和systolic FIR里面,coef_ld拉高滤波器并不停止工作,直到采集完一组新的系数后滤波器才采用新的系数重新工作,采集的时间是系数的长度加一个时钟码片,采集的时间一定要保证足够,不然肯定不能正常工作,同时要注意此时采集的系数要re-order,不然结果也不对,re-order的顺序也要看datasheet。还有RFD是系数采集指示信号,coef_ld拉高会迫使RFD为低,表示一组新的系数还没采集完毕,这个是没有问题的。 我最近也在学习滤波器的Reload功能,这是我的理解,望多交流。
陆琦 (2012-12-11 10:03:56)
大神啊
你这个问题,原来就有人问过的,当时的一位大虾给解答的非常的好,你看一下 首先,我要告诉你的是Xilinx是如何给出的输出位宽。 OutputWidth=coefwidth+inputwidth+ceil(log2(Tap)) (*) 比如,这里coefwidth=12, inputwidth=12, Tap是滤波器的阶数,ceil是向上取整。如果阶数为48,最接近48的2^n为64,那么,(*)式最后一项即为6,那么输出位宽即为30。 如何截位?首先,应该求出输出的最大值, Max(output)=Max(input)*sum(abs(coef)) (a) 这样保证不溢出,求得输出的最大值,化为二进制当然是补码了,即可确定输出最大位宽,系数和输入都是有符号二进制补码表示,那么高两位都是符号位,从次高位向下截取 (a)式所确定的位宽,但这时所得位宽仍较大,实际上由于ad量化噪声引起的部分还可以去除,使得最终位宽仍可进一步减小。但目标是大信号不溢出,小信号不损失。 |