最小化ARM Cortex-M CPU功耗的方法與技巧
1 理解Thumb-2
本文引用地址:http://m.butianyuan.cn/article/273202.htm首先,讓我們從一個看起來并不明顯的起點開始討論節(jié)能技術(shù)—指令集。所有Cortex-M CPU都使用Thumb-2指令集,它融合了32位ARM指令集和16位Thumb指令集,并且為原始性能和整體代碼大小提供了靈活的解決方案。在Cortex-M內(nèi)核上一個典型的Thumb-2應(yīng)用程序與完全采用ARM指令完成的相同功能應(yīng)用程序相比,代碼大小減小到25%之內(nèi),而執(zhí)行效率達到90%(當針對運行時間進行優(yōu)化后)。
Thumb-2中包含了許多功能強大的指令,能夠有效減少基礎(chǔ)運算所需的時鐘周期數(shù)。減少時鐘周期數(shù)意味著現(xiàn)在你能夠以更少的CPU功耗完成手頭的工作。例如,假設(shè)要完成一個16位乘法運算(如圖1所示)。在一個8位8051內(nèi)核的MCU上執(zhí)行這個運算將需要48個時鐘周期,并占用48字節(jié)的Flash存儲空間。使用一個16位內(nèi)核的MCU(例如C166)執(zhí)行相同的運算需要8個時鐘周期,并占用8字節(jié)的Flash存儲空間。相比之下,在使用Thumb-2指令集的Cortex-M3內(nèi)核中完成相同運算僅僅需要1個時鐘周期,并占用2字節(jié)的Flash存儲空間。Cortex-M3內(nèi)核能夠通過使用更少時鐘周期完成相同任務(wù),節(jié)省了能耗;同時也能夠通過占用極少的Flash存儲空間,減少Flash存儲器訪問次數(shù),實現(xiàn)最終能耗節(jié)省的目標(除此之外,更小的應(yīng)用代碼也使得系統(tǒng)可以選擇更小的Flash存儲器,進一步降低整體系統(tǒng)功耗)。
2 中斷控制器節(jié)能技術(shù)
Cortex-M架構(gòu)中的中斷控制器(Nested Vectored Interrupt Controller or NVIC)在降低CPU功耗方面也起著關(guān)鍵作用。以前的ARM7-TDMI需要“多達”42個時鐘周期,Cortex-M3 NVIC從中斷請求發(fā)生到執(zhí)行中斷處理代碼僅需要12個時鐘周期的轉(zhuǎn)換時間,這顯然提高了CPU執(zhí)行效率,降低了CPU時間浪費。除了更快進入中斷處理程序之外,NVIC也使得中斷之間切換更加高效。
在ARM7-TDMI內(nèi)核實現(xiàn)中,需要先花費數(shù)個時鐘周期從中斷處理程序返回主程序,然后再進入到下一個中斷處理程序中,中斷服務(wù)程序之間的“入棧和出棧(push-and-pop)”操作就要消耗多達42個時鐘周期。而Cortex-M NVIC采用更有效的方法實現(xiàn)相同任務(wù),被稱為“末尾連鎖(tail-chaining)”。這種方法使用僅需6個時鐘周期處理就能得到允許,進入下一個中斷服務(wù)程序的所需信息。采用末尾連鎖,不需要進行完整的入棧和出棧循環(huán),這使得管理中斷過程所需的時鐘周期數(shù)減少65%(如圖2所示)。
3 存儲器節(jié)能注意事項
存儲器接口和存儲器加速器能夠明顯影響CPU功耗。代碼中的分支和跳轉(zhuǎn)可能會對為CPU提供指令的流水線產(chǎn)生刷新影響,在這種情況下CPU需要延遲幾個時鐘周期以等待流水線重新完成填充。在Cortex-M3或Cortex-M4內(nèi)核中,CPU配備了一條3級流水線。刷新整條流水線將導(dǎo)致CPU延遲3個時鐘周期,如果有Flash存儲器等待狀態(tài)發(fā)生,時間會更長,以便完成重新填充過程。這些延遲完全浪費功耗,沒有任何功用。為了幫助減少延遲,Cortex-M3和M4內(nèi)核包括一個被稱為推測取指(Speculative Fetch)的功能,即它在流水線中對分支進行取指的同時也取指可能的分支目標。如果可能的分支目標命中,那么推測取指能夠把延遲降低到1個時鐘周期。雖然這個特性是有用的,但顯然不夠,許多Cortex-M產(chǎn)品供應(yīng)商都增加了自己的IP以增強這個能力。
存儲器相關(guān)文章:存儲器原理
評論