孟锐
摘要:浮点运算的应用领域越来越广泛,对其运算速度的要求也在不断提高。本文通过介绍浮点单精度和双精度数据在计算机内的表示方式,分析了在提高其运算速度方面的相关技术,例如指数比较中的对数复杂度比较器、two-path算法和前导零预测电路,通过在FPGA上的仿真验证了其可行性。
关键词:浮点运算;two-path算法;前导零预测
中图分类号:TP302 文献标识码:A
文章编号:1009-3044(2019)24-0247-02
开放科学(资源服务)标识码(OSID):
随着科技和经济的快速发展,计算机处理在处理大数量级数值的需求日益剧增,实现快速地科学数值计算已经成为我们面对的一个关键问题。浮点运算由于其运算速度快、有效精度高、计算范围宽等特点已经成为计算机运算的重要方式。
1 FPGA技术的发展
FPGA技术具有高速、高集成、低成本、可在线编程等优点。近年来,随着大规模集成电路技术的不断发展和芯片工艺的不断提高,FPGA技术得到了广泛的应用,使其在控制成本具有明显的优势,同时也克服了专用处理器灵活性不足的缺点。因此,由于FPGA技术在器件容量、速度和资源方面的优势使其成为实现数字电路设计的一种趋势并显示出了极大的潜力[1]。
2浮点数的描述
浮点运算分为规格化和非规格化两种。格式化浮点运算必须将浮点数规格化,运算结果也要加以规格化处理;而非规格化浮点运算,对操作数和运算结果均不要求规格化处理。目前计算机中常用的就是规格化浮点数,并且规格化浮点数的表示形式是唯一的。IEEE754标准中规定的32位和64位浮点数[2],标准规定每种格式都把二进制浮点数表示为:
Vat=(-1)s·l.f·2e
其中f是尾数(23 bits/52 bits),采用原码表示的无符号定点小数。s是尾数的符号(1 bit),s=0表示正数,s=1表示负数;e是阶码(8 bits/11 bits),即用移码表示的偏置指数,是有符号整数,等于指数E加上偏移量。尾数用原码表示第一位总为1,因此尾数在存储时省略第一位的1,不需要存儲,称为隐藏位。因此单精度的23位尾数实际上表示了24位,双精度的52位实际上表示了53位。在IEEE中规定了隐藏位1的位置应该在小数点之前的一位,即实际的尾数应该为1.f。
3浮点运算器的研究
浮点运算单元比定点运算单元的设计要复杂很多,早期的处理器中不配备专门的浮点运
算单元,大多采用软件的设计方法实现,简化了硬件电路的设计但是浮点运算的速度却不高。现代随着工艺的进步,CPU能够使用硬件来实现浮点运算单元(FPU)。FPU单元的设计包括了浮点加法器、浮点乘法器、浮点除法器和浮点的开方,在这四种运算中,主要浮点运算使用频率如表1所示,通过对比可以看出浮点加法器的使用频率是最高的达到了55%,所以设计高速的浮点加法器对FPU性能的提高起到至关重要的作用[3]。
4浮点数的加法运算
浮点数在进行加减法算法时,首先要进行对阶,也就是先要将两个浮点数的指数进行转换,使其相同,然后才能对尾数进行加减运算。
指数对阶以及尾数的调整,浮点加法运算步骤如下:
(1) 对阶:通过执行减法操作,确定两个浮点数阶码的大小,在对阶的时候一般采用的是小阶像大阶看齐的方法。
(2) 尾数移位:将阶码较小的浮点数阶码通过尾数的右移调整使其与另一浮点数的阶码相同,移位的次数即两个阶码的差。
(3) 尾数加减:尾数采用补码的加法运算,可以将有符号的尾数加减都转换为加法运算。
(4) 规格化:对上一步运算的结果进行规格化处理,通过移位使其最高有效位为1。
(5) 指数调整:在结果进行规格化时,根据移位的次数及方向调整指数,尾数左移n位则指数加n,尾数右移n位,则指数减n。
5 浮点加法器的基本结构
在浮点加法器的设计中根据原理和结构的不同,各种加法器的实现方法有所不同[4],主要可以分为下面几类:
(1) 一位加法器:包括了半加器(HA)、全加器(FA)、计数器。
(2) 进位传播加法器CPA:包括了行波进位加法器RAC、进位跳跃加法器CSKA、进位选择加法器CSLA、进位自增加法器CIA、超前进位加法器CLA、并行前缀加法器PPA以及条件和加法器CPSA。
(3) 进位保存加法器CSA:这类加法器架构又可以分为三操作数CSA和多操作数CSA。
(4) 多操作数加法器MOA:这类加法器有两种结构,阵列加法器和树形加法器。
在具体的实际应用中,往往是多种加法器的综合使用从而达到最佳的效果,下面就影响浮点加法器的运算速度的几个方面进行了分析。
(1) 指数比较
在浮点数的加法运算过程中可以看出指数的比较是浮点加法运算的前提,通过指数比较确定较小的指数转化成与较大的指数相同,从而为后续的尾数加法运算奠定基础。在IEEE754标准中指数的比较即是两个有符号整数的大小比较问题。指数操作数位宽较小,要求该部分运算速度非常快,才能减少整个浮点加法运算的执行时间。因此,在设计中采用对数复杂度整数比较器提高运算速度。该比较器通过将两个浮点数A和B的指数EA和EB分为多级并行的逻辑,分别比较左半串和右半串,左半串相同时比较右半串,反之亦然。然后将这一思路继续应用到两个半串,这样递归直至不可再分。
(2)浮点加法two-path算法
双路径算法的基本思想就是根据两个操作数的指数差异大小来划分数据通路。两条路径CLOSE路径和FAR路径的划分标准是根据指数的差值。如果指数差d小于等于1则选择CLOSE路径,反之 d大于1时,则属于FAR路径 [5]。采用two-path的优点在于FAR路径中要么进行加法运算,要么进行指数差异较大的减法运算,在尾数规格化的时候最多只需要左移一位,当尾数结果为正时就不需要再进行原码转换。另外CLOSE路径对齐操作的移位最多为1位,并且d的计算由最后两位相减,最后的舍入处理可以避免。
(3)尾数处理中前导零预测
前导零检测主要是根据尾数运算的结果进行规格化移位控制的逻辑电路。其功能是检测出浮点加法运算结果中的前导零个数,从而确定规格化移位的操作[6]。传统的浮点加减流程中采用串行结构,往往是首先计算出尾数的加法的结果然后再进行尾数的规格化及舍入处理,而使用前导零预测就是将加减运算与统计使用前导零预测电路(LZA)同时进行,能够有效地减少延迟,具体的结构如图1所示。
6 FPGA的实现
对浮点加法器的验证采用了altera公司的QuatusII,仿真工具使用的Modelsim,使用Verilog硬件描述语言进行编程,通过综合验证,组合逻辑的电路与传统的浮点加法器相比逻辑延迟11.9ns。
7结论
本文介绍了浮点单精度数和双精度数在计算机中的表示方式以及浮点加法器的几种结构,讨论了影响浮点加法器性能的几个因素,分析了在浮点加法器中可以采用的并行指数比较、two-path算法以及前导零预测电路技术,通过在EDA环境中的仿真验证了其可行性。
参考文献:
[1] 任爱锋.基于FPGA的嵌入式系统设计[M].西安电子科技大学出版社,2004.
[2] IEEE standard for binary floating point arithmetic. ANSI/IEEE754-1985
[3] 夏宏等.浮点加法器电路设计算法的研究[J].计算机工程与应用,2001,37(13):10-12.
[4] 付娟.浮点处理单元结构和算法研究[D].西安:西北工业大学,2004.
[5] 冯为.一种快速浮点加法器的优化设计[D].中国科技大学,2009.
[6] 孙岩,张鑫,等.基于并行预测的前导零预测电路设计[J].电子测量技术,2008.31(1):84-87.
【通联编辑:梁书】