張 華,劉 偉,吳友宇
(1.武漢理工大學信息工程學院,湖北 武漢 430070;2.中船重工710所,湖北 宜昌 443003)
德州儀器(texas instruments,TI)公司生產(chǎn)的C54x系列數(shù)字信號處理器(digital signal processor,DSP)以低價高效的特點得到了電子工程師的喜愛。TI公司也為DSP配套了庫函數(shù)[1],方便開發(fā)人員的調(diào)用和移植,但庫函數(shù)作為通用代碼,對其運行效率考慮較少。為了提高程序運算效率,滿足實際中1/3OCT分析的實時要求,筆者設計和實現(xiàn)了一種采用C54x系列DSP快速雙精度求平均算法。
C54x系列DSP總線寬度為16位(單字),內(nèi)部有兩個40位的累加器,分別稱為A和B。兩個累加器都支持雙精度指令。C54x系列DSP累加器A和B框圖[2]如圖1所示。
圖1 DSP累加器A和B框圖
16位DSP累加器裝載的臨時數(shù)據(jù)如果數(shù)值大于0xFFFFFFFF,就會產(chǎn)生溢出錯誤;而16位DSP存儲器裝載的數(shù)據(jù)如果數(shù)值大于0xFFFF,就會產(chǎn)生溢出錯誤[3]。
以往基于DSP處理器SUBC指令的多字除法算法大多采用若干單字除法組合的方法[4],操作比較繁雜,沒有利用SUBC指令支持雙精度除法的功能。筆者分兩步來實現(xiàn)快速求平均運算:先用累加器保存源數(shù)據(jù)的累加結果,以作為被除數(shù),再將累加次數(shù)作為除數(shù),進行快速雙精度除法。該方法在源數(shù)據(jù)數(shù)值不超過雙字、累加次數(shù)不溢出超過單字且累加和不超過3個字時有效。如果不能同時滿足以上3個條件,則要采用多個數(shù)據(jù)存儲區(qū)暫存累加結果,或?qū)⒃磾?shù)據(jù)分別乘以被除數(shù)的倒數(shù)[5]再進行累加。
設有雙字數(shù)據(jù)源 S1,S2,…,Sy(y < 65 536),每個數(shù)據(jù)分成高字和低字,即S1=S1H×0x10000+S1L,S2=S2H × 0x10000+S2L,…,Sy=SyH ×0x10000+SyL。雙精度累加運算時,累加器A裝載S1L,S2L,…,SyL的累加結果,累加器 B裝載S1H,S2H,…,SyH的累加結果。然后將AH與累加器B累加的結果再裝載進累加器B。最后得到的雙字數(shù)據(jù)源累加結果,如式(1)所示。
式(1)中X數(shù)據(jù)的寬度為3個字。
以上介紹了累加結果X的計算方法,在雙精度除法中,X為被除數(shù),累加次數(shù)Y為除數(shù),并且2≤Y<65 536,Z為商。由于求的是平均運算,因此,商不會超過數(shù)據(jù)源的最大值。
借鑒將雙字被除數(shù)拆解成高字和低字,再分別與除數(shù)運算的思想[6-7],先將 X 拆解成高字XH、中字XM和低字XL,如式(2)所示。
由式(2)可推出三字除法,如式(3)所示。
對比式(1)與式(2)可知,累加器B的高字BH已經(jīng)裝載了XH,低字BL已經(jīng)裝載了XM。因為能保證不會溢出,可以直接讓B除以Y。程序代碼如下:
RPT #15
SUBC @tempB,B ;B為被除數(shù),@tempB為除數(shù)。
利用SUBC指令進行快速除法的原理已有介紹[8-9],在此不再敘述。
將式(4)代入式(3),得到式(5)。
對比式(1)與式(2)可知,累加器A的低字AL已經(jīng)保存了XL,現(xiàn)在將VH裝載進累加器A的高字AH中。因為能保證
式(6)中,WH×0x10000相當于將WH左移16位。實際操作中是將WH裝載到Z的高字ZH,而將WL項的結果裝載到ZL。
由式(1)到式(6)的推導可以看出,高字除法產(chǎn)生的余數(shù),參與了低字除法,最后的總誤差來自余數(shù)VL,是定點運算不可避免的,計算誤差降到不會溢出,可以直接讓A除以Y,得到的商WL自動保存在AL,余數(shù)VL自動保存在AH。最后得到的求平均算法如式(6)所示。了最低。
根據(jù)上述雙精度除法運算原理,采用DSP快速求平均算法的程序流程如圖2所示。
圖2 求平均算法程序流程圖
關鍵代碼如下:
雙精度除法運算原理在C54x系列DSP編譯平臺CCS(code composer studio)仿真模式下進行代碼驗證。為了方便誤差測試,作如下設置:源數(shù)據(jù) Xi(i=1,2,…,且 i<65 536)放在 FFT_G_k 起始的存儲單元中。設置程序循環(huán)運行1 024次,以t∈(1,2,…,1 024)來標記循環(huán)中的某一次。累加數(shù)從相對起始地址St開始按遞增順序從Xi中提取,并且St數(shù)值依次存放在fm_K起始的奇數(shù)存儲單元中。每次求平均運算的累加次數(shù)Yt依次放在fm_K起始的偶數(shù)存儲單元中。將每次運算的平均結果Zt按遞增順序保存在_oct_data1起始的存儲單元中。如果代碼運算正確,Zt、Yt與Xi應滿足式(7)。
式(7)不能產(chǎn)生直觀的驗證結果,為此進一步將Xi、St及 Yt作簡化設置,如式(8) ~式(10)所示。
由式(7)~式(10)聯(lián)合得到簡化后的驗證表達式,如式(11)所示。
在CCS中以圖形界面顯示_oct_data1起始的存儲單元,以1步進,并作一些簡化設置,如圖3所示。
圖3 CCS對求平均算法測試結果的圖形顯示
為了直觀顯示,圖3(a)縱坐標顯示的Z't為Zt除以0x40的結果,圖3(b)縱坐標顯示的Z't為Zt除以0x200000的結果;又因為CCS圖形界面的X軸以0起始,設置t'=t-1。如果算法正確,代碼運行結束后圖3中縱坐標Z't與橫坐標t'應滿足式(12)。
通過分析圖3可知,波形函數(shù)滿足式(12),由此推出求該代碼對1~1 024之間的數(shù)據(jù)量求平均,其誤差幾乎為0。
運行該代碼所需的時鐘數(shù),可通過CCS配套的View Clock工具進行測試,最后得到循環(huán)次數(shù)與執(zhí)行時鐘的關系如表1所示。
表1 快速求平均算法代碼循環(huán)次數(shù)與執(zhí)行時鐘的關系
CCS中采用C語言進行求平均運算,得到相應的循環(huán)次數(shù)與執(zhí)行時鐘關系如表2所示。
表2 C語言求平均運算循環(huán)次數(shù)與執(zhí)行時鐘的關系
從表1和表2可知,運行一次的平均時鐘等于循環(huán)結束的運行總時鐘除以循環(huán)次數(shù)。循環(huán)次數(shù)不同,運行一次的平均時鐘也不同。因為在求平均運算所費時鐘數(shù)一定的情況下,循環(huán)次數(shù)越少,執(zhí)行累加運算的時鐘越少[10-11]。通過手工計算可以粗略得知,快速求平均算法執(zhí)行一次的平均時鐘是421,C語言求平均運算執(zhí)行一次的平均時鐘是12 516,兩者相差約30倍。由此可見快速求平均算法為系統(tǒng)實時運行提供了保障。
通過對快速求平均算法的測試,表明了其正確性和實時性,為實時處理系統(tǒng)做了可靠的鋪墊。所研究內(nèi)容已移植于某項目的1/3OCT分析中。
[1] Texas Instruments Incorporated.Optimized DSP library for C programmers[DB/OL].[2011 - 10 - 18].http//www.Texas Instruments Incorporated.
[2] 戴明楨,周建江.TMS320C54x DSP結構、原理及應用[M].北京:北京航空航天大學出版社,2007:28-29.
[3] 張家田,劉新英,嚴正國.DSP的定點溢出處理技術[J].中國科技信息雜志,2008(24):83 -85.
[4] 張文英,史小軍,張端金.TMS320C2XX型數(shù)字信號處理器多字除法的實現(xiàn)[J].鄭州大學學報:自然科學版,2001(6):68-71.
[5] NENADIC N M,MLADENOVIC S B.Fast division on fixed-point DSP processors using Newton-raphson method[C]//EUROCON 2005 The International Conference on“Computer as a Tool”.Belgrade:Serbia and Montenegro,2005:705 -708.
[6] 趙慧,張淼,馮垛生.TMS320C2XX(DSP)中無符號多字除法程序的實現(xiàn)[J].河南科學,2005,23(1):124-126.
[7] AGGARWAL N,ASOOJA K,VERMA S S,et al.An improvement in the restoring division algorithm[C]//International Conference on Computer Science and Information Technology.Beijing:[s.n.],2009:146 -149.
[8] 鄒彥,唐冬,寧志剛,等.DSP原理及應用[M].北京:電子工業(yè)出版社,2006:153-154.
[9] 丁電寬,萬毅.除法運算在定點DSP中的實現(xiàn)[J].安陽師范學院學報,2006(2):29-31.
[10] 陳雪梅,韓潔瓊.C語言可視化編程環(huán)境的設計與實現(xiàn)[J].武漢理工大學學報:信息與管理工程版,2010,32(4):561 -564.
[11] MULLER J M,TISSERAND A,DINECHIN D,et al.Division by constant for the ST100 DSP microprocessor[C]//17th IEEE Symposium on Computer Arithmetic.USA:Cape Cod Massachusetts,2005:124 –130.