首页> 中国专利> 一种基于FPGA的浮点运算方法

一种基于FPGA的浮点运算方法

摘要

本发明提供了一种基于FPGA的浮点运算方法,该方法包括:将具有指数相同,而尾数不同的一组数据作为数据块进行处理,运算中的数据采用定点格式来表示,通过左移来调整数据精度,并通过右移来避免定点运算出现溢出错误,在运算结束之后将结果数据除以预设增益,得到正确数据。本发明提出了一种浮点运算方法,解决了定点算法和浮点算法之间的矛盾,提高了浮点运算效率,降低了成本。

著录项

  • 公开/公告号CN104679719A

    专利类型发明专利

  • 公开/公告日2015-06-03

    原文格式PDF

  • 申请/专利权人 成都金本华科技股份有限公司;

    申请/专利号CN201510116402.2

  • 发明设计人 黄建喜;刘宇波;

    申请日2015-03-17

  • 分类号G06F17/14(20060101);

  • 代理机构11340 北京天奇智新知识产权代理有限公司;

  • 代理人杨春

  • 地址 610000 四川省成都市高新区科技孵化园内

  • 入库时间 2023-12-18 09:13:55

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2018-11-23

    专利权的转移 IPC(主分类):G06F17/14 登记生效日:20181102 变更前: 变更后: 申请日:20150317

    专利申请权、专利权的转移

  • 2017-11-10

    授权

    授权

  • 2015-07-01

    实质审查的生效 IPC(主分类):G06F17/14 申请日:20150317

    实质审查的生效

  • 2015-06-03

    公开

    公开

说明书

技术领域

本发明涉及可编程处理器,特别涉及一种基于FPGA的浮点运算方法。

背景技术

在通讯和雷达信号处理中,FFT是一种常用的工具,在速度要求比较高或集 成度较高的情况下大多使用FPGA完成。绝大多数的处理器处理数据采用定点数 据格式,这样虽然使得处理结构相对简单,但是溢出现象则比较严重,而采用 简单的定点截位又会将小信号淹没在大信号之中,使结果数据失去必要的精度。 随着对数据精度的要求越来越高,一般的定点算法已经无法满足高精度的要求, 需要求助于浮点处理器来进行运算,以避免应用中的溢出问题。国外的FFT Core 大多采用定点运算或块浮点运算,国外的FFT Core一般采用小于24位定点或 小于24位块浮点。但是浮点处理器消耗资源比较大,包含有复杂的硬件结构(浮 点执行单元),从而大大地增加了设计成本和功耗,降低了计算效率。在同样的 处理速度下,浮点处理器相对昂贵,功耗较大。浮点运算执行单元只能自行设 计,在设计过程还要考虑运算精度、运算速度、资源占用、设计复杂度的折衷 等。因此相对定点运算而言,浮点运算具有开发难度大、研发周期长、研制费 用高等缺点。

因此,针对相关技术中所存在的上述问题,目前尚未提出有效的解决方案。

发明内容

为解决上述现有技术所存在的问题,本发明提出了一种基于FPGA的浮点运 算方法,包括:

将具有指数相同,而尾数不同的一组数据作为数据块进行处理,运算中的 数据采用定点格式来表示,通过左移来调整数据精度,并通过右移来避免定点 运算出现溢出错误,在运算结束之后将结果数据除以预设增益,得到正确数据。

优选地,所述数据采用定点格式来表示,进一步包括:

在数据表示上,采用定点数制表示方式,数据存储器RAM位宽为M位,最 高位M位为符号位,其余位为有效数据位,运算过程中采用定点的运算器,中 间加法结果保持精度不截位,为了防止加减溢出在每一级运算后都进行判决, 检测是否在有效的数据表示范围内,以决定下一级的蝶形运算读取数据的位数 选择。

优选地,该方法还包括:

在基二DIF形式FFT运算中,每一级的蝶形输入的原始数据之间首先进行 的是简单的加减运算,将每级所有数据在进入蝶形时需要左移/右移,如果是将 所有数据右移一位,那么就使该级输出数据格式相对于该级输入数据格式来说 多了一位小数位,每级运算后为前一级的1/2,并将其称为浮点因子,经过m级 的蝶形迭代后,如果总共右移了m位,即浮点因子位m,则计算结果数据放大2m倍后得到最终结果。

本发明相比现有技术,具有以下优点:

本发明提出了一种浮点运算方法,解决了定点算法和浮点算法之间的矛盾, 提高了浮点运算效率,降低了成本。

附图说明

图1是根据本发明实施例的基于FPGA的浮点运算方法的流程图。

图2为根据本发明实施例的块浮点FFT结构图。

图3为根据本发明实施例的三位块浮点因子判决程序流程图。

具体实施方式

下文与图示本发明原理的附图一起提供对本发明一个或者多个实施例的详 细描述。结合这样的实施例描述本发明,但是本发明不限于任何实施例。本发 明的范围仅由权利要求书限定,并且本发明涵盖诸多替代、修改和等同物。在 下文描述中阐述诸多具体细节以便提供对本发明的透彻理解。出于示例的目的 而提供这些细节,并且无这些具体细节中的一些或者所有细节也可以根据权利 要求书实现本发明。

本发明的一方面提供了一种基于FPGA的浮点运算方法。图1是根据本发明 实施例的基于FPGA的浮点运算方法流程图。

FFT是将原有N点序列分解成为两个或更多的较短序列,这些短序列的DFT 可重新组合成原序列的DFT,而总的运算次数确比直接的DFT少的多,可以极大 的降低计算量,从而达到提高运算速度的目的。基二DIF形式FFT是将频域X (k)按序号k的奇、偶分开,假设N=2m,则第一次分开得到两个N/2点的DFT, 称为第一级(Class m);再将其分别分解可得到四个N/4点的DFT,称为第二级 (Class m-1);依次类推,直到得到两点的DFT。FFT运算的基本单元是蝶形 运算单元,基二DIF的蝶形运算单元运算式如下所示:

x′a+jy′a=xa+xb+j(ya+yb)

x′b+jy′b=(xa-xb)wr-(ya-yb)wi+j[(xa-xb)wi+(ya-yb)wr]

即:x′a=xa+xb

y′a=(ya+yb)

x′b=(xa-xb)wr-(ya-yb)wi

y′b=(xa-xb)wi+(ya-yb)wr

从上式可以得出,基二蝶形运算只需一次复数乘法和两次复数加法,则N =2n个点的DFT复数乘法量由N2次降为次,复数加法由N(N-1)次降 为Nlog2N。所以在大点数DFT运算时,使用FFT将会极大的降低运算量,提高 运算效率。

二进制小数点在数码中位置固定不变的称为定点制。定点制中,小数点右 边各位表示数的小数部分,左边各位表示数的整数部分。通常为了方便,采取 了两种方法,一种就是把所有数据都表示为整数;另一种就是把数值限制在-1.0 到+1.0之间的小数形式。在第二种方法中,小数点固定在第一位二进制码之后, 整数位作为“符号位”,数的本身只有小数部分。相对而言第二种方法比较常用, 在定点数运算中,所有结果的绝对值都不能超过1。如果运算过程中数的绝对值 超过1,整数部分的符号位就会出现错误进位,称为溢出,这在定点算法中是无 法避免出现的情况,一般采用简单的截位来解决,但是这样就会时一些小数据 被淹没在大数据之中。

浮点制将一个数的表示分为阶码部分和尾数部分。阶码是一个有符号的整 数,它表示了尾数中的二进制小数点位置应该朝左或右移动以得到原数的大小; 尾数有两部分:一个一位二进制整数(也被引用为J-bit)和一个二进制小数, J-bit通常不表示出来,而是作为隐含值。四种浮点格式包括单精度格式、扩展 单精度格式、双精度格式和扩展双精度格式,它能表示的值的范围要宽得多, 可以避免大多数应用中的溢出问题。在大多数情况下,处理器以规格化的形式 表示实数。也就是说,除了零之外,尾数总是由一个整数和一个小数构成,如 下所示:

对于小于1的值来说,主要消掉高位零,即可成为规格化数。(每消掉一个 高位零,阶码都要减1)以规格化形式来表示数据,使装入给定宽度的尾数的有 效位个数最多。总之,规格化数的尾数表示在1到2之间的实数,而由阶码给 出实际的小数点的位置。

浮点格式表示数据的动态范围比定点数大,在计算过程中可以使得指数部 分加减“1”来扩展数据,这样对小数据在运算中可保持更高的精度,有利于保 护小数据。在硬件实现时,需要设置专用的浮点运算执行单元来进行浮点加减 乘除运算,由于在运算中要分别考虑到数据的阶码和尾数,所以浮点执行单元 的结构和控制都比较复杂,严重影响到浮点运算的效率。

无论使用哪种硬件处理器来实现算法,绝大多数的处理器使用定点运算算 法,处理数据采用定点数据格式,这样虽然使得处理结构相对简单,但是溢出 现象则比较严重,而采用简单的定点截位又会将小信号淹没在大信号之中,使 结果数据失去必要的精度。随着对数据精度的要求越来越高,一般的定点算法 已经无法满足高精度的要求,需要求助于浮点处理器来进行运算,以避免应用 中的溢出问题。但是浮点处理器消耗资源比较大,包含有复杂的硬件结构(浮 点执行单元),从而大大地增加了设计成本和功耗,降低了计算效率。在同样的 处理速度下,与定点处理器相比较,浮点处理器相对昂贵,功耗较大。在使用 ASIC器件设计时,由于浮点运算执行单元电路比较复杂,大多数的EDA软件目 前尚不支持浮点运算,浮点运算执行单元只能自行设计,在设计过程还要考虑 运算精度、运算速度、资源占用、设计复杂度的折衷等。因此相对定点运算而 言,浮点运算具有开发难度大、研发周期长、研制费用高等缺点。

为了解决定点算法和浮点算法之间的矛盾,本发明综合定点算法和浮点算 法的思想,采用块浮点算法,利用该方法可以将具有相同指数,而尾数不同的 一组数据作为数据块进行处理。

运算中的数据都采用定点格式来表示,但在运算中间将具有相同指数,而 尾数不同的一组数据作为数据块进行左移或者右移,其中左移是来调整数据精 度,右移是为了避免定点运算出现溢出错误,但是这样处理就会使数据出现增 益,所以在运算结束之后再将结果数据除以预设增益,就得到正确数据。这就 是块浮点算法的思想,其结构框图如图1。

由于块浮点算法和定点算法类似,实现起来比较方便,而且其小数据计算 时的计算精度远远优于定点截位,又称为移位定点算法。它既能够保证了数据 满足一定的精度,又避免了标准浮点运算的复杂性。

块浮点FFT算法是基于数据块的块自增益思想,块浮点不仅调整FFT输入 的信号功率,而且还根据内部每一级的计算结果进行数据调整。块浮点FFT是 在一个数据块上实现浮点,即一组数据共用一个移位因子,它在硬件上以独立 的数据字段存储。这样在硬件实现上相对于传统的浮点算法有着更小的代价, 是一个很好的折衷。块浮点中数据块的移位因子取决于整个数据块中所有数据 的最大值。如果数据块中有一个数较大,该数据块共用一个较大的因子;如果 数据块中数据都较小,该数据块就共用一个较小的因子。

在数据表示上,块浮点仍然采用定点数制表示方式,数据存储器RAM位宽 为M位,最高位M位为符号位,其余位为有效数据位。运算过程中采用定点的 运算器,中间加法结果保持精度不截位,为了防止加减溢出在每一级运算后都 进行判决,检测是否在有效的数据表示范围内,以决定下一级的蝶形运算读取 数据的位数选择。图2为块浮点FFT结构图。

由于在基二DIF形式FFT运算中,每一级的蝶形输入的原始数据(不包括 旋转因子)之间首先进行的是简单的加减运算,所以在保证数据运算精度的同 时又不会出现溢出,可以将每级所有数据在进入蝶形时需要左移/右移几位。如 果是将所有数据右移一位,那么就使得该级输出数据格式相对于该级输入数据 格式来说多了一位小数位,这样每级运算后为前一级的1/2,并将其称为浮点因 子,经过m级的蝶形迭代后,如果总共右移了m位,即浮点因子位m,则计算结 果数据应放大2m倍才能得到真正的结果。

块浮点FFT的精度要优于定点FFT运算,当数据量增加时,这种表现更为 明显;块浮点的实现简单,硬件开销与定点运算基本相同,只在每一级的数据 运算完毕经过一个专门的块浮点运算模块。

块浮点FFT算法的主要依据就是块浮点因子,在本文提出三位块浮点因子 的判断提取,也就是检测判断最多实现三位移动。

三位块浮点因子判决的具体做法是在每一级的每次蝶形运算之后检查每一 个结果数据的前四位,如果该级所有结果数据的前四位都相同,则可以将所有 数据全部左移三位而不会溢出,因为最高位是符号位,左移一位丢失的是符号 位,但是因为所有的接下来的位都和最高位相等,所以这样移位不会改变数据 的值;同样如果所有数据的前三位相同都相同,则可以将所有数据全部左移两 位;如果所有数据的前两位相同都相同,则可以将所有数据全部左移一位。

在FPGA的程序中,4 096点数据为一数据块,共有12级蝶形运算,它的每 一级共用一个块浮点移位因子。通过4 096点数据在每级运算前根据上一次的 块浮点因子判决状态进行判断,来决定该次数据存储器输出时的移位选择。这 样保证每个蝶形运算的数据精度,而最后通过对每级的移位之和来控制最后输 出的增益。图3为三位块浮点因子判决程序流程图。

对于三位块浮点判断提取,在完成每个蝶形运算后,有一个等待过程。在 该过程中完成对本次蝶形运算结果数据的块浮点因子判决,对每级数据块浮点 因子进行判决采用了状态机的结构,S0、S1、S2和S3为块浮点因子的不同状态:

S0-代表数据在FFT下一级运算时可以左移零位;

S1-代表数据在FFT下一级运算时可以左移1位;

S2-代表数据在FFT下一级运算时可以左移2位;

S3-代表数据在FFT下一级运算时可以左移3位。

在FFT运算的每一级开始时将块浮点因子设为S3状态,在蝶形运算模块中 采取一票否决制,当检测的一个数据的前四位不相同,就把块浮点因子的状态 置为S2;同样有一个数据的前三位不相同,块浮点因子的状态就为S1,依次类 推,当检测到有一组数据的块浮点因子为S0状态时,该级剩余的蝶形运算就不 再进行块浮点因子判决,因为该级不满足块浮点因子移位条件。如果在FFT运 算的每一级将块浮点因子从S2状态开始判断,就是两位块浮点判断提取,从S1 状态开始就是一位块浮点判断提取。三位块浮点因子判断提取处理会在每个蝶 形运算中比定点FFT多两个时钟周期,而一位块浮点因子则同定点FFT处理具 有相同的处理速度。

为了进一步改进块浮点因子提取判断,提高其提取速度,采用了并行处理, 在每一个蝶形运算模块完成蝶形运算后,同时对四个数据的前四位、前三位、 前两位进行比较,最后对结果进行比较,这样就会使三位或者更多位的块浮点 蝶形运算比定点蝶形运算多一个时钟周期,这样做的牺牲是处理器资源的消耗。

当4 096点数据所有级FFT运算完成后,通过移位累加单元实现对每一级 移位次数的累加,以便给出该组数据块浮点FFT运算结束后总的移位次数,由 此可确定最后结果的增益。

三位块浮点因子判断提取真值表

*Y代表成立;N代表不成立;X代表任意

在FFT运算之前,所有数据按照顺序地址的形式排列,每级蝶形运算前取 数地址和运算结束后存数地址相同,所以可以统一将读数时地址延时到存数; 另外第一级所取每两个数地址相隔为总点数的一半,第二级则是上一级相隔点 数的一半,依次类推。由于每级蝶形运算是流水线操作,每个时钟都要从存储 器读取数据,所取数据地址如果都使用专用寄存器存储,就会影响运算速度和 存储资源,这里我们通过在主程序中定义一个时钟计数器和一个级数计数器, 级数计数器随级数的增加自加,在每完成一个FFT之后清零,时钟计数器随每 一个时钟自加,在每完成一级FFT之后清零,通过将时钟计数器减去一次蝶形 运算耗费的时钟数来实现读取数据和存储数据地址的一致性,另外可以将时钟 计数器循环右移来产生每次两个数据之间的地址间隔。

当一组数据所有级蝶形完成后,输出数据地址不再是原来的正序,这是由 于在运算过程中对x(n)作奇、偶分开所产生的。例如对于8点基二DIF形式的 FFT,其第一级输入数据地址是正序:0,1,2,3,4,5,6,7。最后一级数据 输出数据地址为反序:0,4,2,6,1,5,3,7。为了得到最终正确的输出数 据,必须将反序变为正序输出,可以通过二进制码位反转将反序变为正序。在 程序中,数据的地址都是由二进制数表示,反序0,4,2,6,1,5,3,7分别 由三位二进制数表示为000,100,010,110,001,101,011,111,将每个数 的第2位和第0位交换,第1位保持不动,可以得到000,001,010,011,100, 101,110,111,即0,1,2,3,4,5,6,7,即将反序变为正序。对于其他点 数的FFT,如果数据地址由n位表示,位反转的规则为:第n-1位和第0位交换, 第n-2位和第1位交换,第n-3位和第2位交换……,依此类推就可以将反序 转换为正序。

综上所述,本发明提出了一种浮点运算方法,解决了定点算法和浮点算法 之间的矛盾,提高了浮点运算效率,降低了成本。

显然,本领域的技术人员应该理解,上述的本发明的各模块或各步骤可以 用通用的计算系统来实现,它们可以集中在单个的计算系统上,或者分布在多 个计算系统所组成的网络上,可选地,它们可以用计算系统可执行的程序代码 来实现,从而,可以将它们存储在存储系统中由计算系统来执行。这样,本发 明不限制于任何特定的硬件和软件结合。

应当理解的是,本发明的上述具体实施方式仅仅用于示例性说明或解释本 发明的原理,而不构成对本发明的限制。因此,在不偏离本发明的精神和范围 的情况下所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围 之内。此外,本发明所附权利要求旨在涵盖落入所附权利要求范围和边界、或 者这种范围和边界的等同形式内的全部变化和修改例。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号