滤波器中的乘法运算设计
IIR 或FIR中有很多的乘加运算,在是用verilog 描述时,乘法运算采用什么方法来描述比较好呢?
这个基本上比较难,恐怕要做定点或者浮点运算单元。
当然是定点啊
大部分是定点吧,看你要好大的精度。
如果对面积不是太苛刻,用a*b或调用design ware的乘法器都可以,FPGA的话也可以调用资源里面的乘法器。
乘法好像在FPGa中实现都比较麻烦,最好看看你FPGA里面有没有硬件乘法器。不行的话可以考虑用《数字信号处理的FPGA实现》上面的方法,或者参考http://www.spiral.net/上的用加法器、减法器与移位器表示的乘法模块的办法
最好看看你的FPGA中有没有专门的硬件乘法器,或者参考www.spiral.com网站上的用加法、减法和移位操作来实现乘法的办法。
定点运算,最好采用的FPGA有硬件乘法器!
Thank you.Ding
硬件乘法器!
现在的FPGA芯片通常都带硬件乘法器,但个数不一
首先要确定所用芯片的硬件乘法器个数是否够用
若够,直接采用
若不够,再想其他方法实现,例如分时复用
如果是ASIC设计该怎么处理呢?
如果是ASIC设计该怎么处理呢?
IIR系数采用Sfix56.En54位量化,也就是要用56用的乘法,直接乘肯定是不行的。有资料说可以把定系数用CSD来表示再做乘法。
另外我做的是ASIC设计。
如果是ASIC设计该怎么处理呢?
就用组合逻辑移位就好了。
用CSD码进行计算,
例:10*0.0104=0.104
10是16位的2进制数即
0000000000001010
0.0104 的 Q=10 的定点数是11(16位)0000-0000-0000-1011
11=16-4-1=2^4-2^2-2^0
10*0.0104=(10<<4-10<<2-10)/2^10=110/1024=0.10742
10<<4=160 10<<2=40
0.104-0.10742=-0.00342 此误差值在接受范围内。
多谢你的回复。CSD果然利害啊。
在FIR中用DA算法也是经典,不知大哥有没有研究,还想向你请教。盼回复。
RE: 滤波器中的乘法运算设计
分布式算法就是乘加运算的变形。
举例
2*11=22
五位量化 11=01011(2);
假设2为不变量系数,11为变量
2^0(2*1)+2^1(2*1)+2^2(2*0)+2^3(2*1)+2^4(2*0)=2+4+0+16+0=22
如果做滤波器系数是matlab 算出来的系数,然后把系数与2^b的乘积结果算出来放到RAM里啥是运算读出来求合就好了。
貌似IIR对参数精度要求好高啊~ 用定点算貌似会麻烦点~
