浮点数的基本运算包括加法、减法、乘法和除法。浮点加法算法主要有基本算法、Two-Path算法和Triple-data-path算法。在一般的处理器中,浮点加法、减法、转换和传送最终都是可以转换为采用浮点加法器实现,所以浮点加法器的使用
频率高达55%,是使用频率最高的浮点运算模块。
基本概念
在一般的处理器中,浮点加法、减法、转换和传送最终都是可以转换为采用浮点加法器实现,所以浮点加法器的使用
频率高达55%,是使用频率最高的浮点运算模块。浮点加法的两个特点,一是它复杂,二是它被使用的频率在所有操作里面是最高的,所以它是现代
微处理器和
数字信号处理器中非常关键的部分。因此,浮点加法器的设计对FPU的整体性能十分重要。
浮点数的基本运算包括加法、减法、乘法和除法。浮点加法算法主要有基本算法、Two-Path算法和Triple-data-path算法。
基本算法
标准数据格式
IEEE标准格式的二进制浮点加法器完成两个二进制数相加时,要求输入的两个二进制数与输出的和数均为56位,其指数(e)为8位,尾数(f)为47位,符号位(s)为1。lEEE格式的标准数如下:
它与普通二进制浮点数的差别是增加了2位:第47位设为尾数为‘1’的隐含位;第56位是指数为‘0’的符号扩展位。
浮点加法器的框图
设加法运算的两个数为:
加法运算表达式为:
浮点数的加(或减)运算可分3步做:
第1步:比较数据大小,以便对数据小的尾数进行移位,从而在尾数运算前完成对阶的工作。
第2步:对尾数进行加(减)法运算。
第3步:对运算结果格式化,还原为IEEE浮点格式。浮点加法器框图如图3所示:
算法设计和结构映射
当浮点数的格式化完成后,第1步就是用比较指数的大小,完成对阶的工作。这也是整个加法器设计的核心部分。其主要作用是把运算结果作为尾数运算的条件,控制尾数运算始终由大数加(或减)小数,同时结果的符号以大数的符号作为参照。具体作法是并行地比较指数的大小,得出的值,只在x=0(阶对齐)的情况下做尾数比较大小的运算,并根据x的值对小指数的尾数右移对阶,最后对运算结果的指数按输出数据的格式做相应修正,以满足数据格式要求。
步骤
对于浮点加法操作来说,一般要求以下一系列的基本操作步骤:
(1)阶码相减:完成两十操作数阶码相减,形成阶差。
(2)对齐:小的操作散的有效位右移d位。
(3)有效位相加:根据摊作码和操作散的符号完成加法或减法。
(4)转换:当有救位的结果为负数时,转换为符号一尾数的表示方式。因为尾数采用原码表示,所以转换需要求补操作,即包括一个加法步骤。
(5)前导1的判定:判定由于减法结果产生的左移位数,对于加法判定是否右移一位或不移。对前导1判定的结果进行编码以驱动规格化移位。
(6)规格化:规格化有效位并且根据移位的方向和位数修改大的阶码。
(7)舍入:根据IEEE标准判定对最终结果的舍入,如果需要入,则在最末有效位加1。假如舍入引起溢出,则需要有效位右移1位,同时阶码加1。
由于需要很多的部件,这个算法的延时很大。
浮点加法的Two-Path算法
浮点加法器的设计经过多年的发展,在算法的改进上取得了大量的成果,其中最重要的就是Two-Path算法。基于这种算法的加法器已经在一些商用机上设计实现。随后,人们在此基础上逐步完善,使算法的性能进一步提高,并得到了更加广泛的应用。结构图如图4:
Frmwald针对浮点加法的基本算法进行了一系列的改进,提出了Two-Path算法。此算法的目的就是使各十操作步骤尽可能地并行化,以减少算法总的延时。这些改进一般都需要附加的硬件。改进是基于浮点加/减计算的某些特性。
(1)阶码差的符号决定两个操作数哪一个大。交换操作数,使其总是大的藏小的,在所有情况下,除了阶码相等的情况外,第4步转换将被取消。在阶码相等的情况下,第3步的结果可能是负的,仅在这种情况下需要转换。因为不需要初始的对阶移位,减后的结果是一个精确值,因此也就不需要舍入。所以遥过操作数的交换,使第4步的加法和第7步的加法互斥。这样可以消减三个全长加法延时中的一个。
(2)在有效的加法中.规格化移位操作是不需要的。因此,只有一个全长的对阶移位。对于减法,需要区分两种情况。第一,阶差d>1,可能需要一个生长的对阶移位。然而,它却不需要超过1位的规格化左移。同样,如果d1则不需要全长的对阶移位,但是需要一个垒长的规格化移位。在这种情况下,一位的对阶和条件交换能够通过阶码的低两位预测,减少这一路径的延时,因此,垒长的对阶移位和全长的规格化移位是互斥的,并且,在关键路径上只出现一个。这两种情况可以表示为:当d1为CLOSE路径;当d>1为FAR路径。在每一个路径的组成中.只有一个全长的移位。
(3)更进一步采用前导1的预测判定.在有效位加法完成之后,可能直接从操作数中预测结果前导0的数量。采用特殊的硬件前导1的预测可以与有效位加法并行处理。利用过三种情况,可以提高加法器的性能。按照数据分成两个路径实现有效位的运算:CLOSE路径和FAR路径。在这一优化中,为了增加加法器的性能的代价是一个附加的有效位加法器和一个多路进通器来选择两条路径产生的最终结果。如果采用流水技术一个浮点加法器可分成四级流水,完成一个浮点加法运算需要4个周期。
Triple-data-path算法
进一步的分析表明,当两个操作数的指数差的绝对值比尾数的有效宽度还要大时,浮点加法的结果即为两个操作数中较大的一个,加法运算不需要执行,因此根据Two-Path算法的原理,我们引入Triple-data-path算法。在此算法中,浮点加法过程分为三个通道,其中两个数据通道为计算通道,另外一个为旁路数据通道。当指数差的绝对值大于尾数的位宽时,旁路通道为当前通道,否则计算通道为当前通道。Triple.data-path算法的结构图如图5所示:
左数据通道尾数的移位只需单级的
多路选择器即可完成,由于有效数的预对准操作速度很快,所以加法完成后再进行先导0计数,而不采用先导零预测逻辑,这样也能达到右数据通道相同的执行速度。由于先导零计数器远比先导零预测逻辑简单,所以简化了硬件复杂度,降低了功耗。右数据通道有效数的预对准需要移多位,这一操作用
桶形移位器来实现。由于减法是用补码来实现的,所以补码器只有在减法运算中才被激活。无论是左数据通道还是右数据通道,舍入的计算与尾数的加法运算并行执行,提高了加法的执行速度。结果选择器根据舍入条件选择合适的加法结果。时序控制逻辑用于为不同的输入选择合适的通道,并将它们传送到所选的数据通道,同时产生不同的选通信号用于控制数据通道的状态。标志位逻辑用于标记异常情况,并进行相应的异常处理。
Triple-data-path浮点加法器结构在降低功耗方面有突出的优势,但其流水线设计较复杂,硬件规模大,实现起来难度较大。