摘 要:本文研讨了一种运用FPGA进行数据处理的办法,包括:提取输入数据的高log2M个比特位的数据,作为高有用位,依据预先设置的方针函数的核算表格,查找所述高有用位对应的方针函数值y(n)以及高有用位+1对应的方针函数值y(n+1);提取输入数据的剩下比特位数据,作为低有用位,并将所述低有用位与y(n)和y(n+1)的差值相乘,得到偏移值off(n),将该偏移值与所述高有用位对应的方针函数值y(n)相加,将核算结果作为所述输入数据对应的方针函数值。本办法具有操控简略、结构规矩、单运算周期、核算精度较高的特色,合适于FPGA的数据处理完成。
导言
现场可编程门阵列(FPGA)芯片在许多范畴均有广泛的运用,尤其是在无线通信范畴。FPGA具有极强的实时性和并行处理才能,这使其对信号进行实时处理成为可能。FPGA内部一般都包括逻辑单元(查找表/触发器)、存储单元(BRAM)、乘加单元(MAC)和一些其他的时钟、引脚单元等[1-3]。
现代数字信号处理的首要发展趋势是:算法结构日趋杂乱,核算量大,实时性要求高,并且包括很多的三角函数、开方、对数等杂乱函数的核算。但FPGA内部的乘加单元并不合适直接进行此类函数的核算,需求把各种杂乱函数分解为简略的移位、加法和乘法结构,进而在FPGA中完成[4]。
当时,在FPGA上完成三角函数、开方、对数等杂乱函数的核算,技术范畴最常见的是除法,其次为开方和三角函数,很少触及对数和其他杂乱一些的函数。而在FPGA具体的完成上,此类函数一般选用直接查表法或幂级数打开法,关于三角函数和开方的核算,也会选用CORDIC的核算办法,但这三种办法的运用都有必定的局限性[4]。
1 现有的FPGA完成办法
(1)在FPGA上选用直接查表办法,来完成函数的核算,具有:
长处——通用性强、结构简略;
缺陷——跟着输入位宽的添加,内部存储量的耗费呈指数性添加。
表1给出了不同输入输出位宽所需求的存储单元(BRAM)。
表1 不同输入输出位宽所需求的存储单元
可以看出,输入输出位宽较小时,直接查表法可以满意完成要求,但在数字信号处理范畴,输入输出一般都在16bits以上,这时选用直接查表法就很难满意完成需求。
这儿以开方算法为例进行阐明。选用直接查表法进行开方核算有2种办法。
办法一:在彻底确保精度的条件下,选用直接查表法。若开方为16bits输入16bits输出,在彻底确保精度的条件下,FPGA就需求存储216深度的数据,需求64块18k BRAM的存储空间。而一片中等FPGA一般包括几十块到几百块的18k BRAM存储单元,此刻核算就要用掉大部分的存储单元,显着不满意完成的资源需求。
办法二:下降精度,削减输入位宽,选用直接查表法。
表2 直接查表法开方差错表
可以看出,跟着实践有用输入的添加,核算精度变大,很难满意核算的差错要求。
(2)在FPGA上选用幂级数打开法核算函数。
长处——核算精度可控,多级打开可以到达较高的核算精度;
缺陷——幂级数打开法为了到达较高的精度,需求多级打开,这样就需求选用较多的资源来完成。
以exp为例(0~π/4规模内),选用三角函数幂级数打开法:
若输入为16bits,选用幂级数打开法的核算框图如图1。
从资源方面考虑,三角函数幂级数打开法在FPGA中的完成需求5级乘法和3级加法,考虑每级乘法位宽需求扩展,实践需求FPGA的12个乘法器
(18bitsmes;18bits)资源。此外从差错方面考虑,0~π/4规模内,cosΦ的最大差错为0.046%, sinΦ的最大差错为0.35%。
图 1 幂级数打开法完成exp核算
此外幂级数打开法的运用规模也比较有限,开方、倒数、对数、三角函数的核算可以选用幂级数打开法,但关于等较杂乱的函数核算就不再合适用此办法进行核算。
(3)在FPGA上选用CORDIC法来完成函数的核算。
长处:将杂乱的运算分解为简略移位、加迭代
运算,结构规矩,运算周期可以猜测,比较合适于FPGA完成;
缺陷:一般运用多周期办法,单周期办法资源耗费较高,并且核算仅限于向量旋转、开方等有限的规模。
选用CORCIC核算三角函数,16bits输入,在多周期条件下需求500个左右的LUT/FFs,在单周期条件下,需求1000个左右的LUT/FFs。
2 本文提出的办法
本文在FPGA上选用两级办法进行函数核算:榜首级,直接使用输入数据的高有用位确认核算结果的有用规模;第二级,直接使用输入数据的低有用位进行核算结果的差错调整。本研讨办法充分使用FPGA内部的各种逻辑资源、乘加器(或乘法器)资源和BRAM资源:可以依据FPGA内部BRAM资源的巨细选用相应深度的数据表存储榜首级数据的有用规模;选用FPGA内部的乘加器(或乘法器)资源进行乘加操作。此办法具有操控简略,结构规矩,单运算周期,核算精度较高的特色,合适于FPGA的算法完成。
此外,选用本研讨办法的两级核算的办法,不同函数的核算完成办法共同,只需修正榜首级核算高有用位数据表格中的数据,就可以复用规划,有利于资源共享和模块化完成。
图2 FPGA两级法进行函数的核算
同现有计划的比较剖析:
(1)同直接查表法比较
以开方为例进行,资源和差错的列表如表3。可以看出,在资源和差错方面,本研讨办法在FPGA上完成函数核算优势显着。此外,FPGA可以经过添加存储单元和扩展输出位宽来进一步进步核算精度。
表3 两级核算法开方同直接查表法差错比较表
(2)同幂级数打开法的比较
首要,本问题出的新办法比幂级数打开法的运用规模更广泛。其次,在相同的函数下,以exp的核算为例,本文提出的新办法资源更好,差错更小。在资源方面,FPGA上选用的两级核算办法, 一起核算只需求2个乘法器即可,远远少于幂级数打开法的资源耗费;在差错方面,0~π/4规模内,16bits输入,cosΦ和sinΦ的最大差错都小于10-5,因而此办法差错比幂级数打开法差错要小。
(3)同CORDIC办法比较
首要,本文提出的新办法比幂级数打开法的运用规模更广泛。其次,在相同的函数下,以exp的核算为例,新办法资源耗费相对较少,cosΦ和sinΦ一起核算只需求300个左右的LUT/FFs即可。并且,新办法选用的是单运算周期形式,运算速度更高。
3 完成流程
如图3所示,本论文采纳的完成办法如下:
过程一:依据一维函数的核算,预先生成必定深度的核算表格;
过程二:移位(可选),把数据的高有用位移位成1,添加较小数据的核算精度;
过程三:提取数据的高bits,作为榜首级数据表的地址,得到数据值y(n);
过程四:提取数据的高bits,加1后作为榜首级数据表的地址,得到下一个数据值y(n+1);
过程五:核算差值diff(n)=y(n+1)-y(n);
过程六:提取数据的低bits,作为有用的偏移数据,同核算的差值相乘,得到偏移off(n)=data_lsb(n)*diff(n);
过程七:高位查表数据值y(n)同偏移相加得到核算值out=y(n)+off(n);
过程八:依据过程一的移位逆操作(可选),得到实践输出值。
图3 FPGA两级法求解函数的流程框图
如图4所示,对本研讨办法进行进一步的具体阐明。
关于恣意一个一维函数,若采样点满足密布,那么任何2个采样点之间可以看作是线性关系,可以经过插值的办法来核算。
图4 FPGA两级法求解函数的具体阐明
由图6可得出,南北极法的差错规模更小。
4 定论
在现代数字信号处理方面,FPGA具有极强的实时性和并行处理才能[5]。在FPGA的完成上,本文介绍了现有的直接查表法、幂级数打开法、CORD%&&&&&%核算办法的优缺陷。在此基础上,本文研讨了根据FPGA的南北极核算法,并把它和以上三种办法进行比较,得出南北极算法具有操控简略、结构规矩、单运算周期、核算精度较高的特色。此外,本文具体介绍了南北极算法的完成流程,并举例来进行阐明,使读者可以更好地把握南北极算法。
参考文献
Xilinx-Virtex7 Data Sheets. 2014.11.
Xilinx-Virtex7 User Guides. 2014.11.
Altera-StraTIx V Device Datasheet. 2015.7.
贝耶尔.数字信号处理的FPGA完成(第3版)[M].2011.
John G.Proakis,Dimitris G.Manolakis.数字信号处理DD原理、算法与运用(第四版)[M].