, ,,
(北京廣利核系統(tǒng)工程有限公司,北京 100094)
基于FPGA的浮點指數(shù)函數(shù)算法研究與實現(xiàn)
史雄偉,王成,張春雷,陳乃奎
(北京廣利核系統(tǒng)工程有限公司,北京100094)
基于FPGA的核電站儀控設備中涉及大量浮點指數(shù)運算,而常用的CORDIC算法和線性逼近法等存在計算范圍小、計算精度不高等問題,對FPGA硬件實現(xiàn)指數(shù)函數(shù)的方法進行研究,并提出一種改進的級數(shù)近似法;該方法對輸入進行預處理,將輸入分解后采用查找表和泰勒級數(shù)展開結(jié)合的方法,在展開很少項數(shù)的情況下快速收斂,發(fā)揮查找表法和級數(shù)近似法的優(yōu)勢,提高算法的運算精度和效率;在Matlab環(huán)境下對改進算法的有效性進行仿真驗證,且采用Verilog語言進行編程實現(xiàn),在Microsemi公司的IGLOO2系列FPGA上進行具體算法性能驗證;Matlab仿真和FPGA驗證結(jié)果均表明,改進的級數(shù)近似法能夠大幅增大指數(shù)函數(shù)的自變量輸入范圍,并提高計算精度。
指數(shù)函數(shù); FPGA;級數(shù)近似法
在核電站儀控系統(tǒng)中,需要采集堆芯外核檢測儀表的數(shù)據(jù)以實現(xiàn)對核反應堆的實時監(jiān)控。對于一部分核測設備,需要進行指數(shù)、對數(shù)等超越函數(shù)的算法運算才能得到實際物理值。FPGA憑借其并行定制計算的高效性和可重構(gòu)的靈活性,在核電站儀控設備中得到越來越廣泛的應用。然而FPGA本身對指數(shù)函數(shù)的直接計算缺乏有效地支持,而且通用、高效的超越函數(shù)計算IP核也較少[1],因此有必要研究運算高效、精度高、計算范圍大的浮點指數(shù)函數(shù)硬件實現(xiàn)方法。
在對CORDIC算法、分段線性逼近法等常用算法進行性能分析的基礎上,針對其計算范圍小、精度差等問題,提出一種改進的級數(shù)近似法,與查表法結(jié)合實現(xiàn)浮點指數(shù)函數(shù),能有效提高計算精度和計算效率。通過Matlab仿真分析和Microsemi的IGLOO2系列的FPGA器件的硬件實現(xiàn),對算法進行性能測試評估。實驗結(jié)果表明,相比于CORDIC 算法、分段線性逼近法,本方法在計算精度和收斂域范圍方面的性能更好。而且本方法能適應于多種常見超越函數(shù)的計算,適用性較好。
目前在FPGA中硬件實現(xiàn)指數(shù)函數(shù)常用的方法有CORDIC算法、分段線性逼近法、查表法、級數(shù)近似法等[2-6]。
1.1 CORDIC算法實現(xiàn)
CORDIC即坐標旋轉(zhuǎn)數(shù)字計算方法是一種數(shù)值逼近算法,最初應用于解決三角學問題,通過多次迭代將一些在硬件實現(xiàn)中既耗時又占用資源的運算轉(zhuǎn)換為簡單的移位、加減運算,便于硬件實現(xiàn),后來被廣泛用于多種初等函數(shù)的運算中(包括三角函數(shù)、乘除法運算、指數(shù)運算、對數(shù)運算等)[3-6]。
最初的CORDIC算法基本原理為通過一系列固定的、與運算基數(shù)有關的角度的不斷偏擺以逼近所需的旋轉(zhuǎn)角度。1971年,J.S.Walther提出了統(tǒng)一的CORDIC算法,引入工作模式參數(shù)m:m=1為圓周系統(tǒng)、m=0為線性系統(tǒng)、m=-1為雙曲系統(tǒng)),采用一個CORDIC迭代方程統(tǒng)一表示3種系統(tǒng):
xi+1=xi-mδiyi·2-i
yi+1=yi+δixi·2-i,i=0,1,2,…,N-1
zi+1=zi-δiθi
選擇不同參數(shù)可得到不同的計算結(jié)果,如表1所示。
表1 CORDIC算法的參數(shù)選擇及結(jié)果
下面介紹利用CORDIC算法的雙曲旋轉(zhuǎn)法實現(xiàn)自然指數(shù)函數(shù)運算。
由于指數(shù)函數(shù)ex=sinhx+coshx,采用雙曲系統(tǒng)的旋轉(zhuǎn)模式可以計算sinhx和coshx,初始值設置為:x0=Kh,y0=0,z0=x。
需要注意的是在雙曲系統(tǒng)下要保證迭代序列收斂,需要從第4項開始每隔3n+1項必須重復一次,即n=1,2,3,4,4,5,6,…,13,13,14,…,40,40,…,重復迭代的位置為:i= 4, 13, 40,…,k, 3k+1,...
根據(jù)文獻[6],自變量的收斂范圍僅為(-1.1182,1.1182),函數(shù)的輸入范圍受到極大限制。
即1.1182,解決的辦法是增加i為負數(shù)的迭代,改進的迭代公式為:
當i>0時,xi+1=xi+δiyi·2-i
yi+1=yi+δixi·2-i
zi+1=zi-δiarctanh(2-i)
當i<=0時,xi+1=xi+δiyi·(1-2i-2)
yi+1=yi+δixi·(1-2i-2)
zi+1=zi-δiarctanh(1-2i-2)
硬件實現(xiàn)時,首先計算出Kh的值,然后給定x0=Kh,y0=0,z0=x,進行多次迭代后,z趨近于0,指數(shù)函數(shù)的計算結(jié)果為x+y。
1.2 分段線性逼近法
分段線性逼近法是將查找表與多項式逼近相結(jié)合,保存各段多項式的系數(shù),計算速度快,消耗資源少,易于硬件實現(xiàn)[7],廣泛應用于人工神經(jīng)網(wǎng)絡、圖像處理等非線性函數(shù)的計算過程[8]。
分段線性逼近法采用多段直線來逼近曲線,創(chuàng)建查找表保存各段直線的系數(shù),計算時根據(jù)輸入選擇合適的直線段逼近非線性函數(shù)。每個直線段表示為y=kix+bi,根據(jù)每一個分段區(qū)間逼近基點處直線與非線性函數(shù)的值相同,可以求得各段直線段的k值和b值。
基于分段線性逼近法在FPGA 中實現(xiàn)指數(shù)函數(shù)的主要步驟為:
步驟1:按照一定的分段規(guī)則將指數(shù)函數(shù)的輸入?yún)^(qū)間進行劃分,求取各個直線段的逼近基點。本文根據(jù)需求定義輸入?yún)^(qū)間為[-10,10],采用均分輸入?yún)^(qū)間的方法,以s為步進針對[-10,10]區(qū)間劃分為20/s個區(qū)間。
步驟2:根據(jù)相鄰2個逼近基點的指數(shù)函數(shù)值,計算各個直線段y=kix+bi中的k、b值。為方便硬件實現(xiàn)直接使用,需要將k、b值轉(zhuǎn)換成相應的數(shù)據(jù)格式。一般采用最小二乘法擬合得到每段的k、b值,并將其存儲在FPGA的片內(nèi)RAM中。
步驟3:使用硬件描述語言實現(xiàn)硬件設計。首先要計算的指數(shù)函數(shù)自變量x,選擇正確的k、b值,然后再進行一次乘法和加法操作即得到計算結(jié)果,其計算速度較快。
1.3 查表法原理
查表法是根據(jù)計算精度要求,先將指數(shù)函數(shù)的輸入值分為若干個點,分別求出對應點的函數(shù)值,并將結(jié)果寫入ROM/RAM等存儲器中。然后通過適當?shù)倪\算將輸入變量與存儲器地址對應起來,再計算時直接查表得到結(jié)果。
用查表法實現(xiàn)函數(shù)計算,雖然沒有輸出延時,但其所需存儲單元隨著函數(shù)輸入域的增大或是計算精度的提高呈指數(shù)形式增加,資源消耗巨大[2],甚至是不可行的。
1.4 級數(shù)近似法原理
級數(shù)近似法利用泰勒展開式將超越函數(shù)的復雜運算轉(zhuǎn)換為基本的乘法和加減法運算,再根據(jù)計算精度對級數(shù)進行截取。級數(shù)近似法需要的乘法器、加法器較多,硬件實現(xiàn)復雜,資源消耗較大。
根據(jù)泰勒公式可以得到指數(shù)函數(shù)ex的冪級數(shù)展開式為:
針對現(xiàn)有算法存在精度不高、計算范圍小、消耗資源多等問題,提出一種改進的級數(shù)近似法,采用查找表與級數(shù)近似法相結(jié)合實現(xiàn)浮點函數(shù)計算,有效提高計算精度和計算效率。
2.1 改進級數(shù)近似法的原理
針對泰勒級數(shù)近似法的缺點進行改進,將輸入數(shù)據(jù)x進行預處理,將其轉(zhuǎn)換到0點附近的區(qū)域,采用較少的展開項滿足誤差需求。原理為:
x=a+c,其中a為整數(shù)部分,c為小數(shù)部分。但是在c取值接近1時,需要的迭代步驟仍然較多,進一步,令x=a+b1*2^(-1)+b2*2^(-2)+…+bn*2^(-n)+c其中,a為整數(shù)部分,b1~bn分別2-1~2-n的二進制系數(shù),c為接近與0的余項。c<2(-n),能夠保證只采用冪級數(shù)展開的前幾項即可滿足精度要求。最終結(jié)果ex=ea·eb·ec。其中,b=b1*2^(-1)+b2*2^(-2)+…+bn*2^(-n)。
在n確定后,根據(jù)IEEE754標準浮點數(shù)的表示方法,可以方便求得a,b1~bn,和c.以n取3為例,x=1.3125時,浮點表示為0x3FA80000,即:
符號位(1bit)指數(shù)位(8bit)尾數(shù)位(23bit)00111111101010000000000000000000
則a=1,b1=0,b2=1,b3=0,c=0.00010000000000000000000(0.0625)
硬件實現(xiàn)時,根據(jù)所需精度確定n的取值和泰勒級數(shù)展開的項數(shù),并將ea的值事先計算出來做成查找表,a=0,1,2,…,88(單精度浮點數(shù)能表示的數(shù)值范圍決定a最大值為88),同理將eb也分別計算出來存入查找表中備用。
基于該算法在FPGA 中實現(xiàn)指數(shù)函數(shù)的計算,主要步驟為:
步驟1:將輸入值x進行預處理,拆分成整數(shù)部分a,并通過移位等操作得到b1,b2,b3,…bn和小數(shù)余項c。
步驟2:根據(jù)a的結(jié)果查找ea的值,根據(jù)b1,b2,b3,…bn查找eb的值。
步驟3:根據(jù)泰勒級數(shù)展開式計算ec的值。
步驟4:計算最終結(jié)果ex=ea·eb·ec。
地鐵使人們出行更加便捷,所以對房價影響較大。小區(qū)與地鐵站的間距每增加一千米,房價下降356元/m2,對住宅價格影響較顯著。交通軌道能使居住區(qū)的通達度得到提高,使沿線住房價格得到提高,為開辟和建造新居住區(qū)予以潛在的利潤保證,開發(fā)居住區(qū)的最佳位置大多數(shù)選擇在交通干道兩側(cè)和快速路進出口周圍區(qū)域。
本方法采用級數(shù)近似和查找表結(jié)合的方法,能夠在整個定義域內(nèi)都得到滿意的精度。
2.2 性能分析
經(jīng)過理論分析可得,展開式項數(shù)越多,計算精度越高,但是消耗的資源會越大,為了適合硬件實現(xiàn),以展開至x4項進行分析。
其次確定n的數(shù)值,b1~bn不存在,即n=0的情況,即只將數(shù)據(jù)分解為整數(shù)部分和小數(shù)部分,最大相對誤差是0.01049。n=1,2,3的情況下最大相對誤差分別為:1.19277e-004,3.15153e-006,9.05842e-008;仿真結(jié)果與理論分析一致,n的取值越大,最后得到的小數(shù)余項c越小,展開項數(shù)一致的情況下精度越高。綜上所述為了平衡資源和精度,F(xiàn)PGA硬件實現(xiàn)時取n=3,展開至x4項進行分析。
下面對提出的改進算法與CORDIC算法、分段線性逼近算法在matlab環(huán)境下進行精度性能分析比較。參考文獻[6],CORDIC算法負向迭代次數(shù)為-5時收斂域范圍擴展到(-12.42644,12.42644),從-8次迭代,收斂域擴展到(-22.82194, 22.82194)。由于硬件資源等限制,采用正向迭代22次進行分析[4]。對于分段線性逼近法,取x的范圍與CORDIC算法的收斂域一致,步長為0.01,各擬合直線段的k值和b值均采用最小二乘法擬合得出。圖1和圖2分別是3種算法在輸入范圍為(-12,12)和(-22,22)時3種算法的相對精度曲線圖。
圖1 相對誤差曲線圖
圖2 誤差曲線圖
對于CORDIC算法,負向迭代次數(shù)為-5時,最大相對誤差為7.43625e-006,負向迭代次數(shù)為-7時,最大相對誤差增大為6.71834e-004。由于單精度浮點數(shù)能夠表示的精度有限,當不能足夠精確地表示Kh時,計算結(jié)果會有較大的誤差。收斂域越大,i為負數(shù)的迭代次數(shù)越多,計算的Kh的誤差會越大,需要在收斂域和精度之間尋找平衡。
分段線性逼近法的在輸入范圍為(-12,12)和(-22,22)時,根據(jù)步長得到劃分的段數(shù)分別為2 400,4 400,最大相對誤差分別為-6.02285e-006,-7.46858e-006。
改進級數(shù)近似法在整個輸入范圍內(nèi)使用的參數(shù)一致,最大相對誤差為9.05842e-008,比CORDIC算法和分段線性逼近法精度都高,而且輸入范圍增大。經(jīng)過仿真分析,改進級數(shù)近似法在輸入范圍(-86,88.7)內(nèi)都能夠保證運算的高精度,并且所消耗的資源不隨輸入范圍的變化而改變。
為對改進級數(shù)近似法的計算精度、計算速度、資源消耗及適用范圍進行評估,將上述設計在Microsemi公司的IGLOO2系列的FPGA M2GL150上實現(xiàn),該芯片擁有多達240個mathblock資源和豐富的LUT和邏輯資源。
在硬件實現(xiàn)時,CORDIC算法從-5開始負向迭代,正向迭代次數(shù)設置為22,能夠保證計算相對精度在10-6級別。分段線性逼近法計算范圍與CORDIC的收斂域保持一致,步長為0.01。改進級數(shù)近似法n取3,即保證小數(shù)項c小于0.125。展開項為5項,即計算到x4項。為保證運算速度,所有算法均采用流水線結(jié)構(gòu)。
經(jīng)過理論分析和仿真結(jié)果以及FPGA的硬件實現(xiàn),可以得到3種算法的性能對比如表2所示。
CORDIC算法可以使用簡單的移位和累加代替乘法,實現(xiàn)簡單,但是要保證精度需要迭代的次數(shù)較多,而且計算范圍有限。
表2 3種算法的性能對比
分段線性逼近法實現(xiàn)簡單,僅使用查找表和一次乘法和加法即可計算結(jié)果,查找表的大小與計算范圍和步長相關,計算范圍越大、步長越小則需要的查找表越大。在步長較大精度差,步長小時占用的資源多,而且查找表耗費的時間也會增長。
改進級數(shù)近似法需要使用乘法器,硬件實現(xiàn)相對復雜,消耗了較多的硬件mathblock資源和邏輯資源,并且計算速度也相對較慢。但是通過改進的級數(shù)近似法能夠大幅加大計算范圍,而且計算精度在輸入范圍內(nèi)均保證高精度,比CORDIC算法高一個數(shù)量級,優(yōu)勢明顯。
本文對當前硬件實現(xiàn)指數(shù)函數(shù)的方法進行了研究,并以增大計算范圍、提高計算精度為目的,提出一種改進的級數(shù)近似法。該方法采用查找表和級數(shù)近似法相結(jié)合的方式,將輸入數(shù)據(jù)進行預處理,在展開很少項數(shù)的情況下快速收斂,既保證了計算精度,又大幅提高了指數(shù)函數(shù)的計算范圍。在Matlab環(huán)境下對CORDIC算法、分段線性逼近法和改進級數(shù)近似法進行了仿真分析,并采用Verilog語言,在Microsemi公司的IGLOO2系列的FPGA M2GL150上驗證了各算法的性能,實驗結(jié)果表明,改進的級數(shù)近似法雖然消耗較多的資源和計算時間,但是在計算范圍和計算精度方面都有明顯的優(yōu)勢,能夠更大范圍地滿足工程應用需求。文中提出的改進方法已經(jīng)在某核電站儀控平臺實現(xiàn)過程中得到應用,該算法也適用于其他基于FGPA 的系統(tǒng)實現(xiàn)中。
[1]王少軍,張啟榮,彭 宇,等. 超越函數(shù)FPGA計算的最佳等距分段線性逼近方法[J]. 儀器儀表學報,2014,35(6):1209-1216.
[2]趙海燕,周曉方,周 電. 對數(shù)/指數(shù)算法的改進及其VLSI實現(xiàn)[J]. 計算機工程與應用,2007,43(7):104-107.
[3]牟勝梅,李兆剛. 一種面向FPGA的指/對數(shù)函數(shù)求值方法[J]. 計算機工程與應用,2011,47(33):59-61.
[4]黃曉可,劉洛琨,汪 濤,等. 基于改進SF-CORDIC的指數(shù)和對數(shù)函數(shù)求值算法[J]. 計算機應用與軟件, 2014,31(2):279-282.
[5]劉小會,許 蕾,劉海穎,等. 基于CORDIC改進算法的反正切函數(shù)在FPGA中的實現(xiàn)[J]. 計算機技術與發(fā)展,2013,23(11):103-107.
[6]Hu X B, Harber R G, Bass S C. Expanding the range of convergence of the CORDIC algorithm[J]. IEEE Transactions on Computers, 1991,40(1):13-21.
[7]楊 陽,王永綱,都軍偉. Piecewise算法計算超越函數(shù)及其FPGA實現(xiàn)[J]. 核電子學與探測技術, 2010,30(6):755-758.
[8]Florea C, Vertan C. Piecewise linear approximation of logarithmic image processing models for dynamic range enhancement[J]. IEEE Transactions on Power Systems, 2011,26(4):2581-2583.
[9]郭邵忠,許瑾晨,陳建勛. 一種改進的超越函數(shù)的通用算法[J]. 計算機工程. 2012,38(15):31-34.
[10]張玲玲,李克儉,蔡啟仲.基于FPGA自主控制浮點加減乘除控制器設計[J]. 計算機測量與控制, 2014, 22(10):2941-2943.
AlgorithmResearchandImplementationofFloatPointExponentialFunctionBasedonFPGA
Shi Xiongwei, Wang Cheng, Zhang Chunlei, Chen Naikui
(China Techenergy Co., Ltd., Beijing 100094, China)
A large number of floating-point exponential calculations are involved in nuclear power plant instrumentation based on FPGA,and the methods for hardware implementation of exponential function are studied, an improved series approximation algorithm is proposed, aiming at solving the problems such as small calculation scale, low precision existing in CORDIC algorithm and linear approximation algorithm. The lookup table and series approximation algorithm are combined in the proposed algorithm, with input data splitting into two part. It takes advantage of the lookup method and the linear approximation, and can work even using a few expansion series. The validity of the improved algorithm is simulated in Matlab, and algorithm is programmed using Verilog and verified on the IGLOO2 series FPGA of Microsemi Corporation. The Matlab simulation result and the implementation result on FPGA demonstrates that this method can expand the calculation capacity and with high accuracy.
exponential function; FPGA; series approximation method
2017-04-12;
2017-05-03。
國家科技重大專項(2011ZX06004-030)。
史雄偉(1985-),男,河北石家莊人,碩士,工程師,主要從事復雜數(shù)字信號處理和實現(xiàn)方向的研究。
1671-4598(2017)10-0221-03
10.16526/j.cnki.11-4762/tp.2017.10.056
TP39
A