摘要:1.2算法級低功耗設計策略算法級低功耗設計主要在于軟件代碼的優化,減少由于算法的低效率引起的不必要功耗。一方面是對標準C代碼的優化。C語言具有易讀性、可移植性,但是C語言在實際工程應用中,不便于對系統硬件資源的直接控制,無法發揮SoC的特點。用匯編語言編程,可以根據芯片自身硬件結構特點,對匯編程序進行優化與精簡,往
1.2 算法級低功耗設計策略
算法級低功耗設計主要在于軟件代碼的優化,減少由于算法的低效率引起的不必要功耗。一方面是對標準C代碼的優化。C語言具有易讀性、可移植性,但是C語言在實際工程應用中,不便于對系統硬件資源的直接控制,無法發揮SoC的特點。用匯編語言編程,可以根據芯片自身硬件結構特點,對匯編程序進行優化與精簡,往往能夠使一些復雜的算法和功能模塊在實時處理方面取得非常好的效果。另一方面分析了影響執行效率的數據相關、控制相關和資源沖突等因素后,在手工匯編的基礎上充分挖掘算法的潛力,最大限度發揮硬件性能,以達到實時要求和低功耗設計的指標。
在本設計里主要根據SoC平臺的資源和指令集特點,使用軟硬件協同設計方法在C代碼轉化為匯編代碼時,通過分析標準C算法發現,大部分循環和函數的調用存在冗余,頻繁的函數調用操作(壓棧出棧)占用了CPU的部分處理時間。在匯編代碼中可以通過循環展開以減少不必要的循環判斷,其基本原則的原始代碼為:普通的單循環,一個周期執行一次乘累加(MAC)指令,優化后進行了4次循環展開。在優化后的代碼中,4個MAC被同時使用,并且在作乘累加時,提取下次運算的數據,消除了流水線等待,充分應用了硬件資源,提高了效率。除了循環展開,在某些情況下進行循環合并也可提高效率。主要原因是每個循環體均需要有控制指令,減少循環的個數自然會減少控制指令的條數。注意兩個合并的循環必須有相同的循環數。
對于在代碼里多次用到的函數,應考慮用調用指令,這樣可以大大減少代碼的體積;而對于只調用少次的函數,則宜嵌入主函數中,因為它不僅可以減少傳參過程中的指令,而且可以減少調用函數的壓棧出棧操作。當然,對于一些大而復雜的函數,雖然它只被調用1次,但由于寄存器的數目有限,如果考慮直接嵌入主函數,可能要頻繁地做push和pop操作,反而得不償失,這時就應該用調用指令。
如果有些處理比較復雜,在整個解碼過程中運算量大且耗時長,有必要設計相關硬件協處理器,通過匯編指令直接操作協處理器,既可以提高效率減少運算量也有利于控制功耗,但成本會增加。這種處理方法在實時影響明顯的模塊尤其關鍵和有效。例如在MP3的解碼中,通過增加矩陣乘法器以提高子帶綜合濾波的處理速度,取得明顯效果:可減少運算時間91%。這種軟硬件協同的設計手段在語音解碼器中多處用到。
在算法級中還涉及其他方面的低功耗設計,如減少存儲器的存取次數,縮短片選信號的寬度等方面的考慮,本設計也做了相應的處理。總的說來,算法級的優化設計在降低系統功耗方面潛力大,對降低整個語音解碼器的功耗具有重要意義。
通信工程師備考資料免費領取
去領取
專注在線職業教育25年