电子技术与软件工程官方 国内统一刊号:CN 10-1108/TP
国际标准刊号:ISSN 2095-5650
* 投稿网站
电子技术与软件工程
《 电子技术与软件工程 》
级别:国家级     分类:科技    周期:半月刊
主管单位:中国科学技术协会
主办单位:中国电子学会
国内刊号:CN 10-1108/TP
国际刊号:ISSN 2095-5650
收稿编辑:QQ /电话2880067970 / 0531-85701017
投稿邮箱:dzjszazhi@163.com
期刊名称 (*)投稿期刊名称
文章标题 (*)投稿论文的题目
作者姓名 (*)只需填写通讯作者
作者电话 (*)方便编辑及时沟通
作者邮箱 (*)方便编辑做详细用稿答复
上传稿件 (*)限word文件
投稿附言   
期刊信息
期刊名称:电子技术与软件工程
主      编:宋俊龙
出版周期:半月刊
出版地区:北京市
定      价:25.00元
收      录:知网、万方、维普、龙源
社      址:北京市海淀区北洼路9号世纪新景园四号楼一单元12B
邮政编码:100036
范文-基于FPGA的全流水浮点乘累加器的设计及实现-电子技术与软件工程

 基于FPGA的全流水浮点乘累加器的设计及实现(仅供写作、选题参考,部分公式图表未上传)

李世平、陈铠
南京电子技术研究所 江苏南京210039
摘要:为提升浮点乘累加的流水性能,本文提出了一种基于FPGA全流水浮点乘累加器的设计和实现方法。通过无阻赛流水累加和串形全加等技术,实现了任意长度单精度浮点复向量的乘累加计算,且相邻两个向量之间无流水间隙。该累加器在Xilinx的XC7VX690T FPGA上实现,乘法器和逻辑资源消耗不到1%,最高运行频率可达279MHz。
关键词:FPGA、浮点乘累加、全流水
1 引言
随着半导体技术的不断发展,FPGA的功能和性能显著提升,正逐渐成为雷达、通信等诸多领域数字系统设计的重点[1],通常被用做复杂信号处理算法的硬件加速。浮点乘累加作为信号处理算法中的常用基本单元,在矩阵乘、矩阵协方差、FIR[2-4]等计算过程中都有着广泛应用。
传统累加器是通过将加法器的输出反馈到输入端来实现,对于浮点运算而言,由于浮点加法计算较复杂,需要经历对阶、尾数运算、结果规格化、舍入处理和溢出判断五个步骤[5],一般会有7~14级的流水延迟,进而会导致流水线阻塞,因此需要研究采用合理的累加结构来提高流水性能。Ling Zhuo等人[6]提出了一种面向矩阵运算的流水累加结构,提高了流水性能,但该结构控制机制复杂,且缓存资源消耗大,正比于流水延迟量的平方;袁松等人[7]采用了分级流水线方法,缓存消耗较小,但在中小规模矩阵累加时会出现流水线暂停,而且输出时延较大,与矩阵总数据个数成正比。
本文提出了一种基于FPGA的全流水浮点乘累加器结构,能够实时完成任意长度单精度浮点复向量的乘累加计算,且相邻两个向量之间无流水间隙,该累加器在Xilinx的XC7VX690T FPGA上实现,乘法器和逻辑资源消耗不到1%,最高运行频率可达279MHz,目前已成功在矩阵协方差、求逆等算法实现过程中推广应用。
2 方案设计
基于FPGA的全流水乘累加器结构如图1所示。A和B为两个等长度的浮点向量, valid表示输入数据有效,last表示当前处理向量的最后一个数据;Q为输出累加结果,Qvalid为累加结果的有效标志。整个累加过程分成了两个部分,第一部分为无阻塞流水累加,第二部分为串形全加器。
 1.jpg
图1 基于FPGA的全流水累加器结构图
2.1 无阻塞流水累加
A和B流水相乘后得到结果向量记为C,C进入延迟为11的浮点加法器的输入端1,为提高时序性能,加法器输出通过MUX后寄存一拍再反馈给浮点加法器的输入端2。设第一个数据C(0)进入加法器时为时间零点,则加法器的两个输入端及输出端的数据变化如表1所示。
在第11个周期,加法器输出0时刻C(0)+0的结果,C(0)寄存一拍后反馈到加法器输入端2,意味着第12个周期加法器输入端2为C(0),而此时输入端1为C(12),于是在第23个周期加法器会输出C(0)+C(12)的结果,依次类推,在第M个周期加法器将输出C(M+1-12)+C(M+1-2*12)+…+ C(M+1-k*12),其中,k为满足M-k*12≥0的最大值。
设当前向量长度为N,且N≥12,则在第N-1个时钟周期last将有效,继而会通过MUX将加法器的输入端2清0,并一直保持直到第N+11个周期。此时加法器输入端2的值为R(-1) = C(N-1-12) + C(N-1-2*12) + … + C(N-1-k11*12),接下来在第N-1~N+10个周期,加法器将输出12个数据,记为R(0)~R(11),其中R(i) = C(N-12+i)+C(N-2*12+i)+… + C(N-ki*12+i),ki为满足N-ki*12+i ≥0的最大值,i =0,1,…,11,这12个数据的累加结果如下式:
    2.jpg       (1)
其中,显然,此即为长度为N的向量C的累加结果。因此,在第N+10个周期,当前环形存储器的写地址和待累加的数据个数(N≥12时该个数恒为12)会被写入FIFO,后端的串形全加器将根据FIFO中的信息从环形存储器读出12个数据并完成累加。
以N=48为例,第47周期加法器输出C(36) + C(24) + C(12) + C(0),第48周期加法器输出C(37) + C(25) + C(12) + C(1),依次类推,第58周期加法器输出C(47) + C(35) + C(23) + C(11),这12个数据的累加结果即为C(47) + C(46) + … + C(0),亦即向量C的累加值。
N<12与N≥12的区别仅在于流水累加输出给串形全加器的待累加数据个数n不同,串形全加器需根据FIFO中的待累加数据个数n读出环形存储器对应地址段的n个数据进行累加,n的取值为:
                    3.jpg                                 (2)
此外,在第N个周期,下一个向量C’已经输入,由于此时加法器的输入端2仍然被锁存为0,直到第N+11个周期向量C输出结束,故向量C的输出和下一个向量C’的处理并不冲突,实现了多个向量的无间隙流水累加。
表1 流水累加过程中加法器输入输出端的数据变化
时间/clock 加法器输入端1 加法器输入端2 加法器输出端
0 C(0) 0 0
1 C(1) 0 0
11 C(11) 0 C(0)+0
12 C(12) C(0) C(1)+0
23 C(23) C(11) C(0)+C(12)
35 C(35) C(11)+C(23) C(0)+C(12)+C(24)
N-1 C(N-1) R(-1) R(0)
N C’(0) 0 R(1)
N+10 C’(10) 0 R(11)
N+11 C’(11) 0 C’(0)
N+12 C’(12) C’(0) C’(1)
2.2 串形全加器
流水累加将得到n(n≤12)个串行数据,记为S(i),i=0,1,…,n-1,串形全加器通过4个级联的串形全加单元来完成S的全流水累加。串形全加单元的典型工作时序如图2所示,其中,valid为输入数据S(i)的有效标志,add_in1和add_in2分别为加法器的两个输入端,add_in1_valid为输入到加法器的数据有效标志,odd_even_flag为当前有效数据序号的奇偶标志,result为加法器输出,result_valid为加法器输出结果的有效标志。
当i为偶数时,odd_even_flag置高,输入数据被锁存到add_in1上,当i为奇数时,odd_even_flag置低,输入数据送给add_in2,并置add_in1_valid为1,将S(2*i)和S(2*i+1)相加,依次类推,若n为偶数,则最终将得到n/2个相邻数据相加的结果;若n为奇数,则在last到达时,将S(n-1)送给add_in1,将add_in2强制置0,并置add_in1_valid为1,即将S(n-1)直接输出,最终可得到(n+1)/2个相加结果。
以输入12个数据为例,经过第一级串形全加单元后,将得到6个相邻数据相加的结果,第二级输出3个,第三级输出2个,第四级即可得到12个数据的累加输出。
 4.jpg
图2 串形全加单元的典型工作时序图
3 仿真分析
以连续两对不等长复数向量为例,记为A/B、A’/B’,为便于说明,令A(k)=[(k+1) + j * k]/100,B(k) = [(k+1) + j * (k+1)]/100,k=1,2,…,200;A’(k)=[2*k - 1 + j*(k+2)]/100,B’(k) = [3*k - 2 + j*k]/ 100,k=1,2,…,100。使用ISim工具进行仿真,得到的波形如图3所示。
 可以看到,valid信号持续有效,两对向量无间隙输入,last信号在两对向量最后一个数据到达时均有效1个时钟周期,每当last信号到达后,流水累加器输出的n个待累加数据会被写入环形存储器,同时数据起始地址和n的值会写入FIFO,串形全加器据此从环形存储中读出待累加的n个数据完成累加,最终输出乘累加结果。当输入向量长度N≥12时从last到达到最终的乘累加结果输出的延迟时间固定为98个时钟周期,当N≤12时延迟值会稍有下降。
设定的第一对向量A和B的预期累加结果为:
5.jpg      (3)
用浮点数表示即为:0x4001EB85+j*0x4407D8F6,从图3可以看到,仿真波形与预期结果一致。同样的,第2对向量A’和向量B’的预期乘累加结果为:164.65+j*170.65,用浮点数表示即为0x4324A666+j*0x432AA666,仿真波形符合预期。
 6.jpg
图3累加器在典型激励数据下的仿真波形图
4 FPGA实现
Xilinx Virtex-7是基于28 nm工艺技术的FPGA系列,逻辑单元多达200万个,容量是V6系列的2.5倍,具有高性能、大容量的特点,适用于复杂的信号处理算法实现。本文以Xilinx Virtex7 XC7VX690T FPGA为目标器件,并采用Verilog HDL实现了硬件设计,通过Xilinx ISE14.5得到的综合结果及资源使用情况如表2所示。可以看到,乘法器DSP48E1s和逻辑资源的使用率均不超过1%,因采用了分布式RAM,故block RAM使用率为0%,最高运行频率可达279MHz。
表2 FPGA综合结果和资源使用情况
 
5 结语
本文面向单精度浮点复数向量高速乘累加的应用需求,提出了一种基于FPGA的全流水乘累加器的设计和实现方法,通过采用无阻塞流水累加和串形全加等技术,其能够实时完成任意长度浮点复向量的乘累加计算,且实现了多个向量的无间隙流水计算,该累加器在Xilinx的XC7VX690T FPGA上的综合结果显示,乘法器和逻辑资源消耗不到1%,最高运行频率可达279MHz,目前已成功在矩阵协方差、求逆等算法实现过程中推广应用。
参考文献
[1] 张文丰,探析FPGA技术在电子设计中的相关应用[J],电子技术与软件工程,2014,3: 130-131.
[2] 何健标,王宏远,郭跃等,一种基于FPGA的FIR滤波器实现结构[J],微电子学与计算机,2008, 25(3): 47-50.
[3] 张禾,陈客松,基于FPGA的稀疏矩阵向量乘的设计研究[J],计算机应用研究,2014, 31(6): 1756-1759.
[4] 王峰,陈斌辉,程辉,基于FPGA的大规模复数矩阵协方差计算[J],通信对抗,2012,31(1): 9-11.
[5] 陈天超,冯百明,单精度浮点数累加和误差研究[J],计算机应用,2013, 33(6): 1531-1533.
[6] Ling Zhuo, Viktor K Prasanna. High-performance and area-effcient reduction circuits on FPGAs[C], Proceedings of the 17th International Symposium on Computer Architecture and High Performance Computing, 2005: 1-8.
[7] 袁松,唐敬友,刘莉,一种基于多级流水线加法器的累加电路设计研究[J],四川理工学院学报( 自然科学版),2012,25(5): 50-53.