低功耗系統設計全方位解析:從硅片工藝到嵌入式軟
電源的考慮。片上穩壓器為系統設計者提供了更高的靈活性,從而能從一只電池榨取更多電能。例如,片上開關降壓轉換器(如Silicon Labs公司的SiM3L1xx MCU產品)可以從一只3.6V工業電池獲得輸入,以高于80%的效率將其轉換為1.2V.很多MCU沒有這種特性,而是采用線性元件降壓到合適電平,會有大量的消耗。在高級的實現中,當電池放電到某個水平,轉換器無法做轉換工作時,降壓穩壓器可以關閉。因此,電源可以在設備的整個生命周期上做到優化能效,一切均在軟件控制下。
軟件的決策
性能的縮放。高能效嵌入應用的實現有賴于軟件的設計,軟件要以最適當的方式使用硬件資源。什么樣才是適合,這不僅取決于應用,而且要看硬件實現。同樣,硬件越靈活(包括CPU、時鐘、電壓和存儲器使用),開發者可以獲得的節能潛力也越大。能感知硬件的軟件工具為嵌入系統工程師提供了更高的認知度,使他們能夠更多地了解到哪種更高節能是可實現的。
一種選擇是采用動態電壓縮放,如圖3和圖4所示。使該技術得以實現的是片上dc/dc轉換器與性能監控電路,當應用不需要以最高速度執行指令時,它們提供了降低電壓的能力。在這些情況下,系統就工作在較低的功耗下。最終的益處是一個輸入電壓的函數,可以在產品的生命周期內變化。圖中顯示了無電壓縮放(VDD固定)、SVS(靜態電壓縮放),以及AVS(動態電壓縮放)之間的相對差別。


AVS有一個有意思的地方,這就是AVS策略可以根據系統輸入電壓而改變。在本例中,當輸入為3.6V時,用一個高效的內部dc/dc轉換器為內部邏輯以及閃存供電,效率更高。但隨著在產品生命周期內的電池放電,輸入電壓跌落,用輸入電壓為閃存子系統直接供電就成了更高效的方法,因為內部邏輯可以工作在較閃存更低的電壓下。例如,Silicon Labs公司的SiM3L1xx系列MCU就有一個靈活的電源架構,有六個獨立和可變的電源域,能夠實現這種動態的優化。
增加硬件塊(如DMA)可以進一步改變對能耗的折衷。
通常來說,CMOS邏輯電路工作得較慢,因為它們電壓低。如果應用可以容忍較低的性能,則較低電壓可以因能耗中的二次項而獲得大的節能效果,例如常有這種情況,要處理的通信協議,其提交數據的速度不高于某種標準頻率。泄漏為電壓縮放提供了下限。如果每次運行花費時間太長,則泄漏就開始占據能耗方程的主要地位,從而增加了總能耗。因此,執行一個功能越快越好,然后就使處理器回到睡眠模式,盡量減少泄漏成份。
考慮一個需要完成相當多數字信號處理的無線傳感器應用,例如玻璃破碎探測器。在本例中,應用會通過一個快速富利葉變換來分析由音頻傳感器拾取的振動,其特性頻率來自于玻璃的碎裂。FFT比較復雜,因此,如要降低電壓而以較低頻率執行這個變換,就會大大增加泄漏,
即使是采用較老的工藝技術。本例的最佳方案是以接近最高頻率運行這個變換,然后返回睡眠模式,直到要向主結點報告任何結果時。
不過,無線協議代碼會產生不同的要求。射頻協議要求事件有固定的時序。在這些情況下,協議可能要完全由硬件處理。這就使降低處理器核心電壓有了更大的意義。因此,需要做分組組裝與傳輸的代碼要運行在適合于無線協議的速度。
增加硬件塊(如智能DMA)可以進一步改變能耗的折衷情況。很多DMA控制器都需要處理器的頻繁干預,如原生ARM Cortex-M3處理器所提供的DMA控制器。但更多智能DMA控制器能支持一種排隊與鏈接的組合,處理器就可以計算報頭、加密數據、分組組裝,然后以適當的間隔,將數據的傳送工作轉交給緩沖存儲區,供射頻前端使用。在射頻鏈路激活的大多數時間內,處理器可以睡眠,節省大量能源。
存儲器使用。對于現代32 bit MCU,軟件工程師在存儲器塊的使用方式上有高度自由。通常MCU會提供一組存儲器,包括長期保存代碼和數據的非易失存儲器,以及存放臨時數據的 SRAM.多數情況下,訪問閃存的功耗要高于SRAM.對于正常使用情況,閃存讀取次數是SRAM讀取數的三倍。閃存寫入消耗的功率更多(需要將整塊擦除,然后用一個相對高電壓脈沖的漫長序列重新寫入)。但對于大多數應用來說,閃存寫入操作并不頻繁,實際上不會影響到平均功耗。
閃存功耗的一個更進一步因素是如何分配來自處理器的存取。每個閃存塊都包含多個頁面,每個頁面的大小最多可達4k字節。要支持存取,每個頁面都必須加電;未被使用的頁面則可以維持在低功耗狀態。如果一個定期存取的代碼段要跨兩個閃存頁,而不是全在一個頁面上,則讀取指令相關的能耗就會增加。將跨不同頁面的頻繁存取代碼與數據在內存中重新分配,就可以在一只電池的放電壽命期間節省不小的能量,而不必修改物理硬件。
通常有意義的是復制功能,它更多地使用片上SRAM而不是閃存,無論是讀還是寫,雖然這種方法看似是對存儲容量的低效使用。電池長壽命的優點可以輕易抵消掉更多的內存消耗。
代碼優化。能量優化亦可以顛覆傳統的代碼效率概念。幾十年來,嵌入系統工程師很注重針對存儲器大小來優化代碼,除非性能是壓倒一切的指標。能量優化提供了另一種全新的度量標準集。一個重要的考慮是采用32 bit平臺上已經普遍提供的片上緩存。
對代碼大小的優化能夠在緩存中保存更多的可執行代碼,從而提高了速度和節省了能耗。不過,函數調用與分支(可重新使用公共代碼,從而減少應用的尺寸)會在同列緩存的代碼段之間造成不可預期的沖突。這樣當需要從主內存中獲取指令時,會造成浪費的“緩存顛覆”,以及多閃存頁激活。
在產品生命周期內要頻繁工作的那些代碼,可以充分壓縮到能裝入緩存中,而不做分支或調用函數,這是有意義的。考慮一個煙霧報警器:即使報警器每周觸發一次(也許源于廚房活動所產生的過多煙氣),也僅是報警器十年壽命中3.15億次事件中的520個。絕大部分時間中,代碼只要讀一下傳感器值,然后發現其未超閾值,就讓處理器核心返回睡眠狀態,等待系統定時器的喚醒。
評論