陳殿杰,李雨桐,陳凡勝
(北京長城電子裝備有限責任公司,北京 100082)
水聲遙控裝置通過水聲發射換能器向水下節點發送遙控指令,遙控水下節點完成指定任務。其中遙控接收裝置需在水中超長時間待機。對遙控接收裝置的低功耗設計有利于提高用戶的使用感受。現階段水聲遙控裝置低功耗設計一般進行硬件的低功耗設計,在硬件設計中,選取性能較高、功耗較低的設備和模塊,適時控制電源。在軟件設計中,按照可靠性、簡潔性和標準化的原則進行編寫,可大大降低對硬件的需求。因此采用硬件軟件相結合、相配合的方法,充分降低系統功耗,延長水聲遙控裝置通海上運行時間,不僅能夠延長設備的使用時間,而且能夠減少資源的浪費。遙控接收裝置的低功耗設計主要從 2方面進行考慮:1)硬件的低功耗設計;2)軟件的低功耗設計。軟件低功耗設計的最根本原則是在保證程序正確運行的大前提下,提高運算速度和占用更少的運行資源。
本文中的遙控接收裝置低功耗軟件優化主要從源級低功耗優化、算法級低功耗優化及編譯級算法優化3個方面進行,以達到編譯級匯編語言編寫的程序代碼能夠以最快的速度、占用最少的硬件資源進行正確的運行,從而實現對接收端低功耗的需求。
從普遍意義上講,在功耗優化這個問題上,研究者普遍比較關注硬件功耗優化,應用各種技術想方設法改進硬件的功耗。比如,在芯片制造工藝上采用更精細的納米技術,不斷降低芯片驅動電壓,改變片內系統結構等。事實上,整個系統的運行管理是由軟件體現的。在硬件基礎一定的情況下,只有將軟件系統對能量的損耗降至最小,才能使整個系統工作于最佳狀態。軟件設計中,所有頻繁調用的函數都需要優化[1-2]。代碼優化是一件非常有意義的事情。優化處理是指產生更高效的目標代碼所做的工作。目標代碼占空間更小、執行速度更快。低功耗軟件優化的原則是基于阿姆達爾定律[3],優化經常使用的代碼,不經常使用的代碼不做較多優化考慮(或者完全不優化)。
阿姆達爾定律:

式中:S表示固定負載情況下描述并行處理效果的加速比;a表示并行計算部分所占比例;n表示并行處理節點個數。
阿姆達爾定律同樣適合低功耗的軟件優化,由此低功耗優化的基本原則:1)等價原則優化后不改變原程序運行的功能;2)有效原則優化后產生的目標代碼運行時間較短;3)優化后占用空間較小,包括代碼空間和數據空間。
一般而言,低功耗的優化過程如圖1。其中:中間代碼優化表示與硬件無關的優化,目標代碼優化依賴于硬件的優化。

圖1 代碼優化過程Fig.1 Code optimization process
根據以上過程并結合遙控接收裝置的自身特點,從算法級、源程序級(與硬件無關)以及編譯級(與硬件相關)3個方面研究常用的水聲遙控裝置接收軟件低功耗優化方法。
水聲遙控裝置接收端系統如圖2所示,接收裝置獲得遙控信號后,首先去載波,然后進行信號搜索,搜到信號后進行跟蹤,并進行多普勒修正,然后由測量信號進行信道估計,根據估計的結果進行RAKE接收,解碼后得到輸出的信息。

圖2 遙控裝置接收系統框圖Fig. 2 Block diagram of remote control device receiving system
去載波是接收端所有信號處理算法執行的大前提,對其進行優化具有十分重要的意義。首先對其信號結構進行改造,按照傳統的操作,其流程如圖3。

圖3 去載波流程Fig. 3 Carrier elimination flow
去載波的改進優化可分成數據流的改進優化和數據結構的改進優化2部分:
1)關于數據結構的改變,進行硬件平臺的低功耗性能優化時,要建立對內存數據進行操作的概念。先分析內存,然后再根據算法的需要進行合理的分配設置。在本項目中,實現了真正意義的復數結構。去載波的過程中包絡數據的實部和虛部分別放到不同的地址中,進行后續的處理。改進優化后的方案將分開存放包絡數據的實部和虛部,放到了數組內相鄰的2個short型中。從內存的角度看,這一操作是把數據放到了一個 4字節的高位和低位,不僅節約了內存,實現了內存的優化,而且使后續的編譯級得到優化。
2)對數據流進行改進優化,在原有的算法中硬件中斷到達的時刻,將采集到的接收信號數據放到固定的地址,數據達到遙控裝置的1個信號周期后進行去載波的處理,處理后的數據進行后續的解碼計算。進行低功耗優化后的數據流結構如圖5所示,中斷到達后直接進行去載波處理得到基帶信號,累計處理后的基帶信號達到1個周期后再進行后續算法處理。

圖4 優化前去載波流程Fig.4 Carrier elimination flow before optimization

圖5 優化后去載波流程Fig.5 Carrier elimination flow after optimization
去載波低功耗優化的有益效果在當下步驟主要體現在程序占用內存的大量減少。統計僅對去載波部分進行比較,不包含程序的其他部分,不進行整體比較。在未進行編譯級優化及源級優化時速度的提高,是由于釋放了大量的內存,程序可以充分使用片內空間,消除了片內外讀寫速度的差異,同時節省了數據搬移的開銷。
要想進一步提高遙控接收裝置的抗多普勒、抗多途能力,就要在接收端采取額外措施——多普勒頻率搜索和多途分量的提取,再加上同步信號搜索和信號的解擴,這將會帶來很大量的相關運算。要進行低功耗的優化,僅僅在編譯級進行優化效果不是特別明顯,所以要在算法級進行優化。一個快速算法,對低功耗性能優化有著十分重要的意義。本設計中主要采用了快速沃爾什變換代替快速傅里葉變換。
快速沃爾什變換(FWHT)類似于FFT,WHT也有快速算法FWHT,也可將輸入序列f(x)按奇偶進行分組,分別進行 WHT[4]。FWHT的基本關系為

WHT是將一個函數變換成取值為+1或-1的基本函數構成的級數,用它來逼近數字脈沖信號時要比FFT有利。同時,WHT只需要進行實數運算,存儲量比 FFT要少得多,運算速度也快得多。沃什-阿達瑪快速轉換圖解與傅里葉快速轉換圖解外觀相似,區別在于完全沒有復數乘法。這種特點在大多數硬件平臺上都占有絕對的優勢,其避免了平臺對乘法器的需求和依賴。同時WHT將一個函數變換成取值為+1或-1,占用的存儲空間小,為硬件平臺的低功耗優化帶來了極大的優勢。沃什-阿達瑪快速轉換與傅里葉快速轉換相比帶來的效果增益,使其運行速度提高了4.3倍。
雖然水聲遙控裝置接收部分的軟件部分全部采用編譯級匯編代碼進行編寫,但是在編寫匯編程序之前進行了源程序級的 C語言程序設計,然后再進行匯編程序的編寫。所以高效的源程序記得代碼編寫及優化是十分必要的,也是后續匯編程序的基礎。
常用優化技術包括:刪除多余運算、循環不變代碼外提、強度削弱、變換循環控制條件、合并已知量與復寫傳播、刪除無用賦值等。這些方法在遙控通信的接收裝置的低功耗性能優化中同樣有效。具體實施可實例化到堆棧和寄存器的合理利用,避免調用開銷[5],局部變量和使用查找表方面。主要體現在以下幾個方面:
1)堆棧和寄存器的合理利用包括:避免或減少使用本地變量,減少函數參數的個數,盡量避免數據轉換[6],全局變量合理分配。
2)避免不必要的開銷包括:避免調用的開銷,尤其是循環的合理利用[7];局部變量的合理使用,應該盡可能地不使用 char和 short類型的局部變量;函數通常可以設計成查找表,這樣可以顯著提升性能;減小運算強度[6],非必要情況不采用除法和取余實現程序;充分利用指令層的并行機制。
由于水聲遙控裝置接收部分對低功耗的要求極高,所以僅僅對軟件部分進行算法的低功耗優化及源程序級的低功耗優化無法滿足需要。雖然軟件部分全部采用編譯級匯編代碼進行編寫,但是在編寫匯編程序之前進行了源程序級的 C語言程序設計,然后再進行匯編程序的編寫。所以高效的源程序記得代碼編寫及優化是十分必要的,也是后續匯編程序的基礎。
編譯級的低功耗優化主要集中在使用并行指令,用有用的指令(取代 NOP)填充延遲間隙,循環展開,字長優化(使用LDW);排流水。
在指令級并行的機器上,程序的運行速度依賴于:程序中潛在的并行、處理器上可用的并行、從串行程序提取并行的能力、在給定的調度約束下發現最佳并行調度的能力。
指令級并行時,通常是一個處理器在單個時鐘周期內發射幾個操作。而指令級并行的獲得是通過使用流水線技術指令流水線和分支延遲。發現應該執行一個分支而不是直接后繼,轉向一個分支時會引起取分支目的地址指令的延遲并引起指令流水線“打嗝”[8]??梢酝ㄟ^使用硬件,根據分支的執行歷史來預測分支結果并從預測的目的地址預取指令。分支延遲不可避免,因為分支預測會發生偏差,此部分可以通過排流水的方法來解決。此處不過多說明。
NOP指令相當于未優化,消除不必要的NOP指令,在很大程度上能提高程序的運算速度避免不必要的時序浪費[8]。其算法優化的沃爾什哈達瑪變換中的速度提高,本質上可以看成是一種有效的去延遲間隙。
在不過度占用程序空間的情況下,展開循環來提高程序的運算速度是一種非常有效的方法。
字長優化是指,在對一段連續地址內存的數據進行運算時,打破常規的按數據類型按址取數的方法,一次性獲取需要的地址的盡可能多的數據量的方法。例如short型數據一次獲取2個或4個short數據再進行計算,取數只占用一個指令時序。在前面涉及的沃爾什哈達瑪變換就十分適用這種方式。
這種方法可以運用到去載波的算法中,大大提高了運算速度,在之后的排流水結構中能大大調高程序的運行速度。尤其是在運算過程中,數據的讀取及乘法計算占運算時間的大部分時間,所以此部分優化極有意義。
流水線是一種在時間上串行,在空間上并行的技術。將整個電路劃分為若干個流水線級,流水線每級之間設置寄存器鎖存上一級輸出的數據;每一級只完成數據處理的一部分;一個時鐘周期完成一級數據處理,然后在下一個時鐘到來時將處理后的數據傳遞給下一級;第1組數據進入流水線后,經過1個時鐘周期傳到第2級,同時第2組數據進入第1級,數據隊列依次前進。每組數據都要經過所有的流水級后才能得到最后的計算結果,但是對整個流水而言,每個時鐘都能計算出一組結果,所以平均計算一組數據只需要1個時鐘周期的時間,這樣就大大提高了數據處理的速度。
排流水能使關鍵路徑縮短,從而提高時鐘速度,或者在同樣速度下降低功耗;同時流水的并行處理,多個輸入在一個時鐘周期內并行地處理,可使有效速度提高與并行級數相當的倍數,同樣也可以降低功耗。
經軟件功耗優化改進后,在單片機上進行了多次的時間測試,測試條件為相同工作主頻。未改進前信號的去載波、搜索、跟蹤時間分別為 2.0 s、2.7 s、2.0 s。優化后去載波、搜索、跟蹤時間分別為0.11 s、0.14 s、0.13 s。經過統計最長解碼時間提高了近20倍。同時算法對空間的需求從原來的8 MB空間的需求降低為313 KB的需要,不需要硬件平臺提高額外的存儲空間。
優化后可以對硬件進行無外部存儲空間設計,并且降主頻正常工作。經測試,原硬件功耗為130 mW,優化后約為12 mV,大大降低了平臺的功耗,相同電池電量的情況下可在海上進行更長時間的工作。

圖6 低功耗優化測試仿真Fig.6 Low power optimization test simulation
在水聲遙控裝置項目中,為了實現接收端的低功耗穩定運行,項目中采用了編譯級的機器語言(匯編語言)進行程序的編寫。在過程中經歷了算法優化設計、源程序優化設計到將源程序轉化成所需的機器語言并進行手工流水的過程,極大地提高了程序的運行速度,降低了程序數據空間的占有率,使得在硬件運算芯片上實現算法設計成為可能,無需額外設計外掛存儲芯片,大大降低了設備的功耗。同時,在同樣的主頻下,運行程序的時間提高了近20倍,這種有利的條件可以使算法程序在一個更低的主頻條件下進行運算,對設備的低功耗運行也是十分有益的。