当前位置:文档之家› 快速浮点加法器的FPGA实现

快速浮点加法器的FPGA实现

—202— 快速浮点加法器的FPGA 实现郭天天,张志勇,卢焕章(国防科技大学ATR 实验室,长沙 410073)摘 要:讨论了3种常用的浮点加法算法,并在VirtexII 系列FPGA 上实现了LOP 算法。

实验结果表明在FPGA 上可以实现快速浮点加法器,最高速度可达152MHz ,资源占用也在合理的范围内。

关键词:浮点加法器;移位器;前导1预测;FPGAFPGA Implementation of Fast Floating-point AdderGUO Tiantian, ZHANG Zhiyong, LU Huanzhang(ATR Lab, NUDT, Changsha 410073)【Abstract 】Three commonly used Floating-point addition algorithms are discussed, and the LOP algorithm is implemented on VirtexII series FPGA. The implementing results show that the fast floating-point adder can be implemented on FPGA, the highest running frequency is 152MHz and the area cost is rational compare to the entire resources.【Key words 】Floating point adder ;Shifter ;Leading-one predicator ;FPGA计 算 机 工 程Computer Engineering 第31卷 第16期Vol.31 № 16 2005年8月August 2005·开发研究与设计技术·文章编号:1000—3428(2005)16—0202—03文献标识码:A中图分类号:TP302浮点加/减法是数字信号处理中的一个非常频繁并且非常重要的操作。

在现代数字信号处理应用中,浮点加减运算几乎占到全部浮点操作的一半以上。

浮点算法比定点算法更复杂,占用更多资源。

目前在大多数数字信号处理系统中,一般都是由DSP 芯片来完成浮点运算。

用DSP 芯片完成浮点运算的好处是容易实现,精度高,缺点是加重DSP 芯片的负担,系统速度可能会受到影响。

在某些情况下需要使用专门的浮点处理部件才能满足系统要求。

FPGA 具有可编程、资源丰富、开发周期短、小批量成本低等优点,它已经成为数字电路研究开发的一种重要实现形式,并广泛应用于各种数字信号处理系统当中。

原来在FPGA 中实现浮点处理部件是很困难的,主要是由于早期的FPGA 速度较慢,资源较少,浮点算法对它来说过于复杂。

例如一个32位的浮点加法器就要占用Altera 8188 72%的资源,时钟频率最大只有10MHz [1],这样的效果当然不能令人满意。

近年来随着集成电路工艺水平的不断提高,以及体系结构方面的发展,FPGA 的容量、速度、资源等方面都有了很大的提高。

例如Xilinx 公司最新的FPGA 已经采用90nm 工艺,最高时钟频率达到420MHz ,容量达到1 000万逻辑门以上,内部还包括处理器、数字锁相环、块RAM 、大量的寄存器等多种资源,支持多种I/O 接口标准[6]。

FPGA 的速度和容量已经不再是瓶颈了,所以研究浮点处理部件的FPGA 实现具有很强的实际意义。

本文将介绍在Xilinx 公司的VirtexII 系列FPGA 上快速浮点加法器的一种实现形式。

1 浮点格式常用的浮点格式为IEEE 754标准,IEEE 754标准有单精度浮点数、双精度浮点数和扩展双精度浮点数3种,单精度为32位,双精度为64位,扩展双精度为80位以上,位数越多精度越高,表示范围也越大。

在通常的数字信号处理应用中,单精度浮点数已经足够用了,本文将以它为例来设计快速浮点加法器。

单精度浮点数如图1所示。

图1 IEEE 754单精度浮点数格式其中s 为符号位,s 为1时表示负数,s 为0时表示正数;e为指数,取值范围为[1,254],0和255表示特殊值;f 有22位,再加上小数点左边一位隐含的1总共23位构成尾数部分。

由它表示的浮点数v 的值如下式所示。

(127)(1)2(1.)s e v f −=−•• 32位浮点数可以表示的范围为38381.210 3.410−+±×−±×。

在某些情况下可能不需要32位的精度,那么可以用24位或者16位来表示浮点数,如16位浮点数表示如图2所示。

图2 16位浮点数格式16位浮点数v 的值如下式所示。

(31)(1)2(1.)s e v f −=−••16位浮点数可以表示的范围为9108.581510 6.98510−±×−±×。

2 浮点加法器算法浮点加法一般包括求阶差、对阶、尾数求和、规格化和舍入等步骤,具体的算法在各种文献[1,2]上都有详细的叙述,这里就不再一一介绍了。

目前比较常用的浮点加法有3种[3],如图3所示。

图中用到的符号描述如下:a E ,b E :加数a 和加数b 的指数;aM,b M :加数a 和加数b 的尾数;diff :两个指数的绝对差,diff=b a M M −;作者简介:郭天天(1974—),男,博士生,主研方向为ASIC 与实时系统、DSP 与FPGA 应用等;张志勇,博士生;卢焕章,教授、博导 定稿日期:2004-07-08 E-mail :ttguo0452@位数位数—203—bmans:指数较小的加数通过移位器后的尾数;SUM :尾数和;aexp:较大的那个指数。

e mbe m(a )标准算法 (b )LOP 算法(c )双通道算法图3 3种常用的浮点加法算法图3(a)所示为标准的浮点加法算法,a E ,b E 送入指数比较器进行比较,得到阶差diff ,前移位器将指数较小的那个数的尾数右移diff 位,得到新的尾数b mans ,然后送入定点加法器进行尾数相加。

如果尾数相加产生了进位,那么把和右移一位,指数加一。

规格化单元对结果进行规格化。

在规格化单元里有一个前导1检测电路(Leading-One- Detector ),可以检测出尾数中第一个1的位置,后移位器根据此位置对尾数进行左移,同时指数减去相应的值。

图3(b)为LOP 算法,它与标准算法的区别在于用前导1预测电路(Leading-One-Predicator )代替了前导1检测电路(Leading-One-Detector )。

LOP 电路可以与尾数加法并行执行,这样可以减少整个系统的延迟。

图3(c)为双通道算法。

它有两个并行的数据通道,当指数差大于1时,选择far 通道,指数对阶时分配较长的时间,尾数运算结果规范化时的移位分配较少的时间;否则选择close 通道,此时尾数最多移一位,甚至不用移位,这样可以去掉前移位器。

在上述3种算法中,标准算法延迟最大,占用资源最少;双通道算法延迟最小,占用资源最多;而LOD 算法介于两者中间。

本文将以LOD 算法为例,实现32位的浮点加法器。

为了专注于算法的实现,下面讨论的都是无符号浮点数相加。

3 浮点加法器的实现选用Xilinx 公司的VirtexII 系列FPGA 来实现32位浮点加法器,具体器件为XC2V1000-5。

下面本文将根据器件的特点介绍,浮点加法器中几个关键部件的实现方案。

3.1 移位器实现移位器的方法有很多,例如用选择器来实现,在VirtexII 器件中也可以用内置的块乘法器实现移位[4],也可以用3态缓冲器来实现移位。

用选择器实现移位时,如果采用2选1选择器,则所需级数太多;如果采用4选1、8选1选择器则延时比较大。

在VirexII 系列FPGA 中内置了一些18位的硬件乘法器,这些乘法器可以用来实现移位器[4],但通常的做法是把这些乘法器留给乘法运算用。

所以本文选用3态缓冲器来实现移位器。

具体实现如图4所示。

I I I I 321上图所示为一个由3态缓冲器构成的4位移位器,可以看出整个移位器的延时基本固定,即只有1级3态缓冲器的延时,不随位数的增加而增加,这给流水操作增加了不少方便,有一点要注意,移位位数是one-hot 编码。

这种实现方式需要内置的3态缓冲器,不过对于本文使用的FPGA 来说不成问题。

本文设计的24位深度移位器占用资源为24个slices ,最大延时为2.685ns 。

3.2 加法器VirtexII 系列FPGA 中有专用的超前进位逻辑,可以构成快速行波进位加法器。

虽然行波进位加法器结构由于速度比较慢一般不被专用IC 采用,但在可编程逻辑器件上,行波进位加法器由于结构最为工整,且速度能满足大多数应用的要求,是用得最多的加法器结构。

VirtexII 系列FPGA 的每个slice 可以实现两个如图5所示的全加器。

其中i i i s ds c =⊕,1i i i i i c ds b ds c +=+,i i i ds a b =⊕。

此全加器与普通全加器不同,它有专用的快—204—速进位逻辑,可以在低级进位到达时,更快速地输出该位的运算结果;此外在FPGA 内部同一列的两个slice 之间专门为进位信号保留了一条最短连线。

本文使用Xilinx 公司的开发工具ISE5.1中的Core Generator 生成24位的行波进位加法器,占用资源为12个slices ,最大延时为3.089ns 。

3.3 前导1预测电路前导1预测电路包括预编码模块和前导1检测模块。

预编码模块的原理是:首先通过执行一个有效位的二进制符号-数字(signed-digit )减法获得O=A-B ,然后根据Oi 串决定前导1的位置。

具体算法请看文献[5]。

前导1检测模块一般采用真值表的方式实现,具体算法参见文献[7]。

前导1预测n A n B A B n A n B n B n A图6 VirtexII 中的前导1预测电路其中A 是被减数,B 是减数,LUT 实现的函数是11()&(&)i i i i F A B A B −−=⊕。

这种实现方式也需要用到FPGA 中的快速行波进位,进位依次从最高位到最低位。

LOP 电路的延时和行波加法器的延时大致相当。

这种实现方案可能会产生一位的误差,需要在规格化单元中进行修正,修正的操作可以通过移位完成。

3.4 实验平台实验平台是自制的DSP-FPGA 实验板,如图7所示。

图7 实验平台板上有一片XC2V1000FPGA ,一片C6701-150DSP ,以及各种存储器资源等。

相关主题