专利论文

  • 格式:docx
  • 大小:651.21 KB
  • 文档页数:15

专利论文基于FPGA的IEEE浮点加法乘法实现(无格式草稿版)姓名:洪小沯摘要:由于FPGAs算法的复杂性,浮点运算很难实现。

另一方面,诸多科学问题对浮点运算有高精度的要求。

因此,我们探索基于FPGA的IEEE单精度浮点加法乘法实现问题。

本文用自定义模型来探究是否能够节约芯片面积或者最有效地使用模型板问题。

实现结果为了追求精度,放弃了面积和速度。

加法器是一个位并行加法器,而乘法器是数字串行乘法器。

原型已在Altera FLEX SONOs上实现峰值为7MFlops的32位加法和峰值为2.3MFlops的32位乘法。

关键词:计算机科学技术FPGAs 自定义计算器数字串行运算浮点运算一、引言:由于FPGAs算法的复杂性,浮点运算很难实现。

浮点运算通常要求过多的芯片面积,而芯片面积资源在FPGAs中总是受限。

如果32位浮点运算是必须的,这个问题就变得更加困难。

另一方面,诸多科学问题对浮点运算有高精度的要求。

而且,许多科学问题具有高度正规性以使自身适应硬件加速的实现。

因此,有必要在FPGAs中实现浮点运算。

为了适应这一需求,我们使用了IEEE 754标准二进制浮点运算(单精度)在Altera FLEX8000 FPGA中实现浮点加法和浮点乘法运算。

加法器是建立在一个平行结构和能够增加其吞吐量的流水线技术上。

乘法器在数字串行结构中得以实现,这是因为一个32位并行乘法器太大以至于在单个FPGA芯片实现浮点乘法几乎是不可能的。

在采用数字串行运算的情况下,32位乘法器能适合FLEX 81188的1/2。

早期为适应不同位并行所做的设计尝试均失败了,这是因为所需要的逻辑要素超过了100%。

这些运算法的设计细节、速度和面积要求将在本文中讨论。

本文首先简要回顾了IEEE 754标准二进制浮点运算法。

在接下来的两个章节中,将详细地描述加法器和乘法器。

然后我们将演示如何将加法器和乘法器互联,并基于此我们提出了面积-速度权衡的小型研究。

最后,我们总结了运算法的应用并对今后的改善措施提出了展望。

二、相关研究Shirazi 等人[5]提出了相关研究,其文章认为测绘困难是由于浮点运算的复杂性。

此复杂性意味着一个大的芯片面积。

在他们的研究中,他们调查执行浮点运算法在速度和面积的最佳组合方式。

为了尽量减少面积的需求,本文使用了小浮点表示格式(采用16位和18位宽,而不是完整的IEEE 32位宽的格式)。

此外,流水线技术被用于生产每个时钟周期。

所提出的运算法能实现一种信号处理应用,所以使用浮点数表示的自定义格式有了特定性能,而这种性能能够适应应用程序的特定需求。

通过使用小的格式,能够建立更小和更快的实现。

然而,计算的精度却降低了。

在我们的实现结果中,精度是主要目标,这就是为什么要设计32位运算法。

这种转化为我们的位并行加法器提供了更多芯片面积,为数字串行乘法器减少了速度。

这些权衡是公平的,因为精确度对特定算法是非常重要的,例如最初研发这些运算法的重力N体问题。

三、浮点格式如上所述,IEEE标准二进制浮点运算(ANSI/IEEE标准754-1985)将贯穿于我们的研究中。

单精度格式如图1所示,这种格式的数字由以下三个部分组成:1-bit sign, S: “1”值表示该数是负数,“0”表示一个正数。

Bias-127 exponent, e = E + bias:这使我们有指数范围从Emin = -126 到Emax=127。

Fraction, f: 数的小数部分小数部分一定不能和有效位数混淆,有效数位就是1加上小数部分。

在有效数字的前导1是隐含的。

当使用这种格式进行运算,隐含位通常是明确的。

为了确定这种格式的浮点数的值,我们使用下面的公式:详细的例证讨论请见[4]。

四、浮点加法器浮点加法难于实现是因为有效数字以符号数值格式表示。

加法有可能成为一个减法,这取决于两个运算数的符号。

这时困难便产生了,因此要求其中一个运算数来加以补充。

对于加法,其存在进位的可能性,在这种情况下,计算结果将非标准化。

对于减法,可能得到负的结果,这意味着符号位和有效数字都需要反向。

一个实现浮点加法的算法必须考虑到所有这些可能性。

我们使用的算法将在下一小节解释。

4.1 加法算法本节我们将解释实现浮点加法的算法。

给定两个数N1和N2,我们可以使用图2的流程图来计算它们的总和,给定e1,e2和s1,s2分别为这些数值的指数和有效数。

该算法的详细说明如下:1、使第24位(隐藏位)外显,如果ei=0,(Ni=0),则使之成为“0”,否则为“1”。

在这一点上,需要33位来存储数,8为指数,24为有效数字,1为相关符号。

2、比较e1和e2大小。

如果e2>e1,则交换N1和N2。

注意如果发生交换,在流程图中的未来参考值S1(e1)将参照原来的S2(e2),反之亦然。

3、将S2移到右边,相当于d=le2-e1l ,将0填在最左边的位上。

注意这两个数值现在是简单的符号/数值格式。

4、如果N1和N2符号不同,将S2替代为它的二进制补码。

5、将S1和S2相加,计算有效位数S。

6、如果S是负的,将其替代为它的二进制补码。

对于S为负,以下所有的条件应该均为真:(a)N1和N2不同符号;(b)S的最大有效数位为1;(c)步骤5不存在进位。

7、标准化步骤:(a)如果N1和N2同号并且步骤5存在进位,那么将S向右移一位,去除最显著位并用“1”填充;(b)另外,将S向左移直到“1”出现在最显著位,移动的数值需储存;(c)如果S向左移的次数超过24次,那么结果为0。

8、该结果的符号与N1和N2两者较大值的符号一致。

S的最显著位(24位宽)替换为符号位。

9、得到的指数(e1)是在步骤7中通过添加确定数额调整得来的。

如果在步骤7中(c)S=0已确定,那么将指数设置为0。

10、将结果汇总为32位格式。

(由IEEE标准定义的各种舍入选项尚未实现。

)4.2加法器的实现硬件实现的浮点加法器如图3所示。

这基本上反映了上述4.1节提出的算法。

有两点值得一提的是,隐位提取和重组成32位格式的结果。

首先,每个运算数的隐含位必须变成明确位。

虽然大多数情况下都是“1”,但是数值为“0”的可能性不能忽视。

根据IEEE标准,当偏置指数和小数字段为“0”,则表示该数为0。

因此,为了提取正确的位,我们使用2个8输入或者使用开关。

如果指数的所有位均为”0”,则此数为零,并且它的第24位将为零。

否则,“1”将被插入。

一旦获得了加法结果,就必须转换回32位格式。

标准化单元一直转变结果直到最显著位在第24位上变成“1”。

在数值标准化后,第24位将被该结果的符号取代。

此外,选出的指数作为结果指数必须进行调整,以反应所发生的转变。

因此,这种转变量需添加到e1以获得正确的指数。

此时,计算结果的所有32位均可获得,所以它们可以被传递到下一个操作符或者存储在存储器中。

4.3时序分析当与MAX + PLUS Ⅱ时序分析器工具进行最坏情况的时序仿真时,估计有385ns的延迟(在针对EPF811883)。

通过使用流水线,设计可分为3个阶段,这显著增加了吞吐量。

在算法第一阶段,执行步骤1和2;在第二阶段执行步骤3至步骤6;在第三阶段执行步骤7至步骤10。

结合这流水线,能够实现约为7MFlops的峰值。

4.4面积需求在以精度为主要目标的设计之后,需要考虑的第二个重点是面积最小化。

浮点加法器的实际逻辑设计并非太复杂,而且大多数设计时间花在试图尽量减少使用的逻辑资源。

最后的设计占用芯片面积略多于47%。

最大的部件分别是标准化单元和移位单元,分别占有152个和123个逻辑单元。

交换单元、二进制的补码单元和24位加法器的有效数也占据这最显著的区域,尽管这些不如其他两个占据的面积大。

交换单元和加法器每个就需要48个逻辑单元,而二进制的补码单元需要38个逻辑单元。

剩余的逻辑单元由两个8位的加法器或者减法器,以及用于控制单元的逻辑所占据。

最初的设计版本大约占据了725个逻辑单元,其中约72%为Altera81188芯片。

通过尽可能的在Flex 8000逻辑元件中实现算术模式,面积减少化得以大程度的实现。

最终47%的结果已经好很多,但未来的努力是将其更小化。

五、浮点乘法虽然乘法运算比加法容易些,但是我们在尝试使用FPGAs实现它的时候,依然遇到了速度和芯片面积最小化的难题。

当我们使用32位的格式的时候,情况更是如此。

在本节中,我们提出了乘法算法,引入数字串行算法,并详细解释了24位乘法器。

5.1 乘法运算符号-数值格式简化了乘法运算,因为它与整数格式非常相似。

所需的唯一附加步骤是正确指数的计算方法。

正如在第3节中所述,一个二进制浮点数值由符号位、有效数位和指数表示。

因此如果两数要相乘,计算结果将由如下公式给出:指数的加法是微不足道的运算法,只要我们记住它们是有偏差的。

这意味着,为了得到正确的结果,我们必须从它们的和中减去127。

结果的符号是两个符号位的XOR。

如上述说明的那样,有效数的乘法运算仅仅是一个无符号的整数的乘法运算。

实现这个乘法的方法完整解释见第5.3节,我们首先介绍数字串行运算。

5.2 数字串行运算算术运算符(整数和浮点数),可以使用不同的样式,如位串行、位并行和数字串行来实现。

首先每个时钟周期处理运算数的一位,接着在一个时钟周期中处理运算数的所有位。

位并行产出最大速度以及位串行产出最小面积,这应该是显而易见的。

数字串行运算能满足在这两个极端点之间的需求。

我们在一个时钟周期内使用数字串行操作,来处理多个但并非所有位。

因此,我们可以追求面积最小化来权衡速度,反之亦然。

数字尺寸被定义为每时钟周期处理的位的数量。

位串行和位并行是数字串行运算的特殊情况。

第一个数字大小为1,第二个数字大小为D,其中D为要被处理的数据宽度。

例如,一个24位宽的运算数将在一个周期中以位并行执行,在24个周期中以位串行执行,以及在6个周期中以数字串行和数字大小为4执行。

数字串行运算之所以在此实现中被使用是因为其具有改变位尺寸和最佳权衡速度和面积的优点。

这对于基于FPGAs开发的应用程序尤其重要,因为其逻辑元件是一种稀缺资源。

一些复杂的应用程序,例如重力N体问题,它们过于庞大以至于不能使用32位浮点数值和位并行算法来实现。

5.3 数字串行乘法器虽然我们的加法器是以数字大小为4、24位来实现的,但是本文将从数字大小为2、4位乘法器来详述方法。

这简化了加法器的呈现方式,而不会牺牲任何重要细节。

5.3.1 样例加法器为了了解数字串行乘法器,我们首先去研究它以人工呈现的方式。

例如,乘法器(无符号二进制)证明如下。

1011 x 1001 = 01100011在数字串行乘法中,乘数1011位列在平行位置,而被乘数1001以数字串行格式呈现,最低有第一有效位。