实际上,超前进位加法器只是提高了进位传递的速度,其计算过程与行波进位加法器同样需要等待进位传递的完成。借鉴并行计算的思想,人们提出了进位选择加法器结构,其算法的实质是增加硬件面积换取速度性能的提高。利用二进制加法的特点,进位或者为逻辑1,或者为逻辑0,二者必居其一。将进位链较长的加法器分为M块分别进行加法计算,对除去包含最低位计算的M-1块加法结构复制两份,其进位输入分别预定为逻辑1和逻辑0,于是M块加法器可以同时并行进行各自的加法运算,然后根据各自相邻低位加法运算结果产生的进位输出,选择正确的加法结果输出。进位选择加法器的逻辑结构图如图3所示。
4 基于FPGA设计FIR数字滤波器
FIR数字滤波器的结构如图4所示,图中clk1为取样时钟(读数时钟),clk2为FIR数字滤波器的工作时钟,clk2频率远大于clk1频率。其工作过程:clk1时钟的上升沿启动一次计算过程,控制器输出reset信号使触发器1清0;其后每个clk2周期计算一个h(i)[x(i)+x(N-i-1)]并进行累加,共需N/2个clk2周期完成计算,完成计算后控制器输出OE信号将结果输出。
(1) 对冲激响应系数h的处理:由Matlab设计FIR滤波器系数是一系列的浮点数,而FPGA不支持浮点数的运算,因此浮点数需转换成定点数,设计可采用Q值量化法,把系数扩大了27=128倍,然后转化为8位二进制数补码。最终结果再右移7位就可等到真正结果。
(2) 本设计对于有符号数采用补码表示的方法,在设计中多次出现加法运算,可能会产生溢出,所以应进行符号位扩展。将符号位扩展到输出统一的最高位,才能够保证计算结果的正确性。
扩展方法为:
P9P8P7P6P5P4P3P2P1P0
=P9P9P9P9P9P8P7P6P5P4P3P2P1P0
其中:P9为补码的符号位。
(3) Booth编码处理由于存在求“-x”的运算,需进行求反加1。如果每1次调用Booth编码都进行加1运算,不仅使资源大大浪费,而且由于位数较长,也会大大影响乘法器的速度。而本设计将加1放在Wallace树中计算,尽管多了1级Wallace树,但速度和资源上都大大提高了。
(4) 由于FIR是线性相位,h(i)=h(15-i),可以将乘法运算由16次减少到8次;再通过对h(i)进行Booth编码可以将部分积减少到4个;最终利用Wallace树以及超快速加法器将4个部分积的相加,得到8*8乘法器的结果。由于将Booth编码中的加1放在Wallace树中,经过分析需要3级Wallace树。
5 FIR滤波器的频率特性分析
利用Matlab中rand()和round()函数产生-128~128之间中100个整随机数,求幅频响应如图5所示。
再将这100个数通过FIR滤波器,求输出的幅频响应如图6所示。
比较输入x与输出y的幅频特性,可以看出FIR滤波器为低通滤波,指标符合设计要求。
6 用ISE综合分析FIR滤波器的性能分析
分析设计框图可以看出,占用时间最长的路径为8位加法器——乘法器——累加器,这是影响工作频率最主要的部分。设计中采用流水线技术,在这条路径中增加寄存器,将最长路径拆分成较短路径,可以取得比较好的效果,提高系统的工作频率。
FIR滤波器的最高工作频率如下:
可以看出最高工作频率可以达到154.84 MHz,实现了高速FIR数字滤波器的设计。