基于fpga的流水浮点乘累加方法

文档序号:6366422阅读:163来源:国知局
专利名称:基于fpga的流水浮点乘累加方法
技术领域
本发明主要涉及到嵌入式系统的设计领域,特指一种基于FPGA的流水浮点乘累加方法。
背景技术
计算机运算主要分两种定点运算和浮点运算。其中,定点运算主要是用于算术运算、逻辑运算、地址计算等,比如对定点整数和小数的运算、对逻辑数据的运算;浮点运算与定点运算相比,具有运算速度快、有效精度高、计数范围宽等特点,因此其更适合运用在工程计算与科学计算中,它已成为计算机运算的重要方式。当前浮点运算多数采用DSP芯片来实现运算功能,这样可以简化算法,精度也变得更高。但是在某些情况下必须采用专门的浮点运算处理器来实现浮点运算,这是由于浮点运算结构比较复杂,在系统对速度要求较高的情况下采用DSP芯片来实现浮点运算会增加系统的负担并降低系统的速度,使得继续采用DSP来实现浮点运算的优势不再明显。然而随着FPGA技术的不断成熟以及它所具有的高速、高集成、低成本、可在线编程等优点使FPGA广泛应用于各科学领域。乘累加(Multiply Accumulate, MAC)是一个基本的数学运算,大型浮点数乘累加运算在DSP算法中有着举足轻重的地位,广泛的应用于图像处理、统计分析、生物医学等众多领域。近年来,很多学者基于FPGA的特性来研究浮点乘累加的算法,但都是基于目前比较成熟复杂的算法进行优化与改进,虽然此种思路可以细微的优化、提升整个算法在FPGA上的性能,但是并没有从业人员充分的利用知识产权核(Intellectual Property, IP)来设计优化乘累加器。由于IP核是FPGA的开发商根据自身FPGA的工艺与设计进行功能与布线的优化,从某种程度上讲已经达到较佳的性能,而且浮点运算的IP核全部都是基于流水线设计,为在此基础上进行进一步的设计应用提供了很好的基础。因此综合分析、巧妙的运用IP核的特性设计出实现浮点乘累加的方法,可以更好的达到FPGA的速度与面积的优化和算法性能的提升。

发明内容
本发明要解决的技术问题就在于针对现有技术存在的技术问题,本发明提供一种原理简单、通用性好、可提高运算速度的基于FPGA的流水浮点乘累加方法。为解决上述技术问题,本发明采用以下技术方案一种基于FPGA的流水浮点乘累加方法,其步骤为(I)输入需要进行乘累加计算的数量M ;(2)将需要计算的M对32位二进制浮点数A、B依次输入浮点乘法器进行乘法运算,直至完成所有M对数据的运算;同时,将浮点乘法器的乘积结果与第一浮点加法器自身的加法结果连续输入到第一浮点加法器完成部分累加运算得到累加结果;(3)将所述步骤(2)得到的累加结果中的最后N级流水线的数据输入至第二浮点加法器中进行运算以得到整个乘累加过程的结果。作为本发明的进一步改进所述步骤(2)中的执行流程为(2. I)根据浮点乘法计算的流水特性,将外部要计算的数据直接连续输入到浮点乘法器中进行运算,并在乘积输出流水线数据有效的时候使能第一浮点加法器的使能信号;
(2. 2)根据浮点加法计算的流水特性,将浮点乘法器的结果作为第一浮点加法器的一个数据,而第一浮点加法器自身的输出和作为另一个数据连续输入,不断完成加法的操作。所述步骤(3)中第二浮点加法器采用加法树,第二浮点加法器的流水线为7级,它的执行流程为(3. I)加法树的第一级分别将6个数据划分为三组,在第1-3个周期输入第二浮点加法器;由于流水线为7级,因此在第8、9、10个周期的时候分别输出三组结果;(3. 2)加法树的第二级在第10和11个周期的时候分别将步骤(3. I)中的三个结果和之前剩下的一个数据组成两组连续输入到第二浮点加法器进行运算,分别在第17、18个周期的时候输出两个结果;(3. 3)最后在第19个周期的时候将步骤(3. 2)中的两个结果同时输入第二浮点加法器完成加法树的最后一级运算,在第26个周期的时候输出最终的累加结果。与现有技术相比,本发明的优点在于(I)本发明的浮点乘累加方法可以实现任意大小的乘法累加运算,不对数据有任何的约束与局限,能够广泛的应用于任何从简单到复杂的数字信号处理算法中;(2)本发明的结构是基于流水线进行设计,巧妙的应用浮点乘法器与浮点加法器IP核的流水线特性,使得复杂的乘累加运算在经过前端的乘法与加法运算之后,最后只需要计算加法器N级流水线的数据之和即可,不仅简化了乘累加器的实现方法,同时提升了其在FPGA上的运行速度,可以有效的加快各种复杂的数学运算速度;(3)本发明具有模块化设计思想,使得本发明的可移植性较强,通用性较好,针对不同平台只需要重新配置IP核即可使用。


图I是本发明的整体流程示意图。图2是用来实现本发明方法的模块结构原理示意图。图3是本发明中所采用单精度浮点数的存储格式示意图。图4是具体实施例中浮点乘法器与第一浮点加法器的结构示意图。图5是具体实施例中浮点乘法器与第一浮点加法器工作的流程示意图。图6是具体实施例中第一浮点加法器实现累加的原理示意图。图7是具体实施例中第二浮点加法器实现加法树的流程示意图。图8是具体实施例中加法树的结构示意图。
具体实施方式
以下将结合说明书附图和具体实施例对本发明做进一步详细说明。如图I所示,本发明基于FPGA的浮点乘累加器方法,其流程为(I)通过外部模块输入需要进行乘累加计算的数量M ;整个计算过程将根据M值来驱动浮点乘法器、浮点加法器以及各个计算模块的使能信号;(2)根据乘法累加器的计算法则以及浮点乘法器与加法器IP核的流水特性,将需要计算的M对32位二进制浮点数A、B依次同时输入浮点乘法器进行乘法运算,每对A、B为一组输入,直至完成所有M对数据的运算;同时,根据控制信号分别将乘积结果与第一浮点加法器自身的加法结果连续输入第一浮点加法器中完成部分累加运算得到累加结果;
(3)将步骤(2)得到的累加结果中最后N级流水线的数据输入第二浮点加法器中进行加法树的运算来实现整个乘累加过程的运算。如图2所示,为具体实施例中用来实现本发明方法的模块结构原理示意图。其中,通过逻辑单元来控制浮点乘法器、第一浮点加法器、第二浮点加法器的使能信号及数据流向;再通过第一状态机来实现第一浮点加法器往存储模块中的数据结果存储以及通过第二状态机来实现最后第二浮点加法器中加法树的运算控制。正是经过上述各个模块的相互控制与运算,进而得出最终的累加结果输出。图中的En、En’表示模块的使能信号;Control、control’、Control "表示信号按照箭头所指方向控制后面模块;M_Result和A_Result、A_Result’分别表示浮点乘法器、第一浮点加法器、第二浮点加法器的计算结果。本实施例中,采用的浮点数格式为IEEE754标准格式,其存储格式如图3所示。IEEE754标准是现代处理器中最常用的浮点数表示方法,它不仅规定了浮点数的格式,还规定了摄入模式和处理舍入误差、上溢出、下溢出等异常情况的方法,IEEE754标准规定了单精度浮点数表示为32位,由三部分组成23位的尾数f,8位偏指数e,I位符号位S。s位中0表示正数,I表示负数;1. f是有效数,I是隐藏位,f是小于I的小数。浮点数值的计算公式可表示为Val = (-l)s*l. f*2(e_b)其中b为偏置值127。如图4和图5所示,在本实施例中,上述步骤(2)的具体步骤为(2. I)根据浮点乘法计算的流水特性,将外部要计算的数据直接连续输入到浮点乘法器中进行运算,并在乘积输出流水线数据有效的时候使能第一浮点加法器的使能(En)
信号;(2. 2)由于浮点加法计算的流水特性,可以将浮点乘法器的结果作为加法的一个数据,第一浮点加法器自身的输出和作为另一个数据连续输入,不断完成加法的操作;将最终只有加法流水线级数N (本实施例为7级)的结果送入第二浮点加法器的加法树中,完成部分乘法的累加。S卩,该步骤中是将浮点数据A、B分别输入到浮点乘法器中完成乘法运算,之后将乘积和第一浮点加法器自身的结果分别作为第一浮点加法器的数据进行加法运算。根据时序条件判断是否为加法器流水线级数(即N个加法结果);如果是,则只存储这N个数据来进行随后的加法树运算;如果否,则继续进行加法运算等待直至满足条件。由于浮点运算的复杂性,在FPGA硬件逻辑中,所有的运算都不可能像定点数一样基于组合逻辑在一个时钟周期内完成,在完成基本数据运算的同时还需要分别完成指数与尾数的操作,包括指数对阶和尾数调整的过程,因此累加运算成为整个MAC的重点也是整个设计的核心。本实施例中,采用的累加结构如图6所示,如上所述将加法器自身的输出和作为一个加数完成累加的运算。第一浮点加法器的结果初始化为0,假设一个具有N级流水线的加法器从第一个时钟开始进行加法,在第N+1个周期时输出第一次运算的结果,并将其作为第N+1次加法的输入,N+2个周期时输出第二次运算的结果再作为第N+2次加法的输入,……如此循环,若有M(M>N)个数据参与运算,则当M+1个周期时输出的为(M+1-N)
次加法的结果,此结果包含了第(M+l-N)、(M+1-2N)、(M+1-3N)、......次相加的所有结果,当
(M+N)个周期时输出的为M次加法的结果,此数据包含了第(M-N)、(M-2N)、……次相加的所有结果,……因此只需要将最后从第(M+1)到(M+N)个周期的结果进行相加(共加法流水线周期数N个数),通过最后的第二浮点加法器中加法树运算即完成了前面所有数据的加法运算,实现乘法积的累加运算。本发明正是巧妙的应用了浮点乘法与加法IP核的流水特性,设计出了此方法来完成乘法累加方法的运算。如图7所示,在本实施例中,第二浮点加法器中加法树运算的具体流程为根据浮点加法器的流水特性及复杂的时序关系,通过第二状态机从上一个过程存储的数据与本加法树的中间结果中选择参与加法运算的数据A、B,直至完成最后N个数据的加法运算,计算出最终的乘法累加结果并输出。如图8所示,在本实施例中,将最后7个数实现加法树运算的具体步骤为(I)加法树的第一级分别将6个数据划分为三组在第1-3个周期输入加法器,由于加法器的流水线为7级,因此在第8、9、10个周期的时候分别输出三组结果x,y,z。(2)加法树的第二级在第10和11个周期的时候分别将x,g和y,z两组数据输入加法器进行运算,在第17、18个周期的时候输出结果m和n。(3)最后在第19个周期的时候将m与n同时输入加法器完成加法树的最后一级运算,在第26个周期的时候输出最终的累加结果result。图8中,第二浮点加法器左侧的a、b、C、d、e、f、x、y、z、g、m、n都表示浮点加法器的按照流水线的输入数据,右侧的x、y、z、m、n表示加法器的输出结果,result为最终累加器的数据结果。Altera的一个7级流水线加法器占用FPGA796个LE、339个Registers、36个Memory bits的资源,因此综合考虑加法树实现的速度、占用PGA的面积以及加法器的流水线特性,本发明采用了上述的设计方法,而不是直接使用三个或者四个加法器来并行处理第一级中7个数据的相加运算。本实施例经Synplify综合最高频率可以达到150. 9MHZ,占用1549个LE,1258个Registers, 72 个 Memory bits,分别只占了 Cyclone III EP3C25 开发板资源的 6. 3%、4*%和1%。此综合报告已可以看出本发明设计基于PGA的浮点乘法累加器达到了速度与面积的综合优化。以上仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,应视为本发明的保护范围。
权利要求
1.一种基于FPGA的流水浮点乘累加方法,其特征在于,步骤为 (1)输入需要进行乘累加计算的数量M; (2)将需要计算的M对32位二进制浮点数A、B依次输入浮点乘法器进行乘法运算,直至完成所有M对数据的运算;同时,将浮点乘法器的乘积结果与第一浮点加法器自身的加法结果连续输入到第一浮点加法器完成部分累加运算得到累加结果; (3)将所述步骤(2)得到的累加结果中的最后N级流水线的数据输入至第二浮点加法器中进行运算以得到整个乘累加过程的结果。
2.根据权利要求I所述的基于FPGA的流水浮点乘累加方法,其特征在于,所述步骤(2)中的执行流程为 (2. I)根据浮点乘法计算的流水特性,将外部要计算的数据直接连续输入到浮点乘法器中进行运算,并在乘积输出流水线数据有效的时候使能第一浮点加法器的使能信号; (2. 2)根据浮点加法计算的流水特性,将浮点乘法器的结果作为第一浮点加法器的一个数据,而第一浮点加法器自身的输出和作为另一个数据连续输入,不断完成加法的操作。
3.根据权利要求I所述的基于FPGA的流水浮点乘累加方法,其特征在于,所述步骤(3)中第二浮点加法器采用加法树,第二浮点加法器的流水线为7级,它的执行流程为 (3. I)加法树的第一级分别将6个数据划分为三组,在第1-3个周期输入第二浮点加法器;由于流水线为7级,因此在第8、9、10个周期的时候分别输出三组结果; (3. 2)加法树的第二级在第10和11个周期的时候分别将步骤(3. I)中的三个结果和之前剩下的一个数据组成两组连续输入到第二浮点加法器进行运算,分别在第17、18个周期的时候输出两个结果; (3. 3)最后在第19个周期的时候将步骤(3. 2)中的两个结果同时输入第二浮点加法器完成加法树的最后一级运算,在第26个周期的时候输出最终的累加结果。
全文摘要
一种基于FPGA的流水浮点乘累加方法,其步骤为(1)输入需要进行乘累加计算的数量M;(2)将需要计算的M对32位二进制浮点数A、B依次输入浮点乘法器进行乘法运算,直至完成所有M对数据的运算;同时,将浮点乘法器的乘积结果与第一浮点加法器自身的加法结果连续输入到第一浮点加法器完成部分累加运算得到累加结果;(3)将所述步骤(2)得到的累加结果中的最后N级流水线的数据输入至第二浮点加法器中进行运算以得到整个乘累加过程的结果。本发明具有原理简单、通用性好、可提高运算速度等优点。
文档编号G06F7/52GK102629189SQ20121006900
公开日2012年8月8日 申请日期2012年3月15日 优先权日2012年3月15日
发明者周圣韬, 张婷, 张良, 徐成, 戚芳芳, 文龙, 李涛, 秦云川, 聂敏, 肖雄仁 申请人:湖南大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1