前面講解了使用EDA工具(主要是power compiler)進行功耗分析的流程,這里我們將介紹在數字IC中進行低功耗設計的方法,同時也結合EDA工具(主要是Design Compiler)如何實現。我們的講解的低功耗設計主要是自頂向下的設計,也就是說,我們首先介紹在系統架構層面上如何進行低功耗設計(或者可以從哪些方面進行低功耗設計);然后我們在RTL層面和門級層面上介紹低功耗設計的方法,這兩個種方法主要是依靠RTL代碼和Design Compiler實現的,這是我們前端設計人員進行低功耗設計與優化所需要知道的,我們會著重介紹;最后我們簡單介紹在物理設計層次上面降低功耗的方法。今天我們記錄系統與架構級的低功耗設計。
?
1.系統與架構級低功耗設計
系統與架構層次的低功耗設計,可以節省70%以上的功耗。這個層次上的設計往往是由系統和架構設計人員進行的,這些人員往往是有著豐富經驗的設計人員。他們制定了低功耗設計方案,由下一級的設計人員(比如做前端設計、做Flow的人員)進行具體實現。下面就來介紹一下在系統架構方面,可以從哪些方面進行低功耗設計,由于我只是只菜鳥,因此這些內容只是我在前人的經驗中進行總結學習的筆記,僅供參考。
(1)多電壓設計技術(Multi-VDD)
①多電壓設計技術介紹
從前面的功耗方程中,我們可以知道,電壓與功耗有著密切的聯系。因此功耗的降低可以考慮使用低一點的電壓。多電壓設計技術有三種方式:
?
?
A:各電壓區域有固定的電壓,如上圖(a)所示 ;
B:各電壓區域具有固定的多個電壓,由軟件決定選擇哪一個電壓,如上圖(b)所示;
C:自適應的方式,各電壓域具有可變的,由軟件決定選擇哪一個電壓,如上圖(c)所示。
A是固定分配的電壓;而B和C為動態電壓管理,涉及到軟硬件協同設計,這里我們放到后面進行介紹。這里主要是從整體上進行介紹多電壓設計技術及其要求,然后給出A方式的一個例子以及一個多電壓低功耗設計的腳本示例。
?
②多電壓綜合庫及電壓模式控制單元
無論是哪一種低電壓設計方式,都需要綜合庫的支出。這低功耗設計的綜合庫中,需要包含同一個單元在不同電壓下的描述。此外綜合庫還要多電壓設計的特殊單元,這些單元主要是:
·電平轉換器(level shifter):把高(低)電壓區域的信號轉換到低(高)電壓區域。信號通常包括數據、時鐘、掃描鏈數據等。電平轉換器的示意圖如下所:
?
·電源隔離單元(power isolation cell):主要用于模塊的輸入、輸出。它可以關掉電源時,將信號保持為常數,從而避免單元的輸入懸空。電源隔離單元如下圖所示:
?
·保持寄存器(retention register):在不工作的情況下,將寄存器的狀態保留下來。
電源隔離單元和保持寄存器我們將在后面的電源門控中進行詳細介紹,這里先給出一個概念。
為了實現電壓的動態管理——無論是使用硬件還是軟件進行動態管理,都需要在設中加入電壓模式控制單元。一個電壓模式控制單元的例子如下所示:
?
該模塊的功能是:系統不工作時, 進入IDLE模式, 這時候可以關掉不工作模塊的電源; 當系統工作時, 給工作模塊提供正常電壓。這個模塊可以是軟件實現,也可以是硬件實現。
?
③多電壓設計舉例
對于多電壓設計(尤其是A設計),關鍵是電壓分配。在劃分供電區域時, 要盡量與設計的層次結構一致, 并且要考慮到設計復雜性。 下面例子(左圖)中(電壓分配采用固定分配方案), 存儲器、 處理器核 、 其他邏輯用不同的工作電壓。
? ? ? ??? ?
右圖中的設計有3個工作頻率,分別為300,250和400MHz。由于單元的延遲與供電電壓成相反關系,即供電電壓越高,單元的延遲越小。因此為了滿足時序的要求,對于工作頻率高的模塊,使用供電電壓高的電源,以降低時序路徑中單元的延遲,從而降低整條時序路徑的延遲。上例中,工作頻率為400MHz的模塊,時序要求最高,因此供電電壓最高,為1.2V。工作頻率為250 MHz的模塊,時序要求最低,因此供電電壓最低,為0. 8V。通過對不同的模塊設置不同的供電電壓,可以使整個設計既能滿足時序的要求,又可以降低其功耗。使用多電壓技術,版圖設計時,要產生多個電壓區域(Voltage Area),把供電不同的模塊,分配到不同的電壓區域。
在power compiler中,可以使用"Top Down Compile"的方法進行多電壓的功耗設計,一個示例腳本如下所示:
?
?
?
(2)軟/硬件協同設計
前面介紹了多供電電壓設計,同時介紹了使用EDA工具實現的一個示例腳本。多供電電壓設計中涉及到電壓的動態管理,而動態管理可以使用軟件實現,這就設計到了軟硬件協同設計的問題。在這里,我們主要介紹軟硬件協同設計中的軟硬件劃分以及電壓的動態管理技術。
①軟硬件劃分
系統中的功耗都是硬件單元消耗的,但是軟件組織對硬件的功耗有著很大的影響。在設計過程中,系統的功能可以用硬件實現,也可以使用使用軟件進行實現。低功耗軟件的設計需要注意:在滿足系統應用的基礎上,速度應該盡可能慢,電壓應該盡可能低,盡可能滿足時間要求。系統設計者根據規范和自身經驗對系統性能進行推測(仿真建模),決定哪一部分使用硬件來實現,哪一部分使用軟件來實現,從而達到性能和功耗最佳平衡。這些是系統設計者需要考慮的,這里不進行詳細敘述,只需要知道,軟硬件劃分可以很大程度上降低功耗。
?
②動態電壓頻率調節DVFS技術
DVFS技術:dynamic voltage dynamic frequency scaling,動態電壓頻率技術,是一種通過將不同電路模塊的工作電壓及工作頻率降低到恰好滿足系統最低要求,來實時降低系統中不同電路模塊功耗的方法。
電路模塊中的最大時鐘頻率和電壓緊密相關,如果一個電路能夠估算出它必須做多少工作才能完成當前的任務,那么理論上講就可以將時鐘頻率調低到剛好能適時完成該任務的水平。降低時鐘頻率意味著可以同時降低供電電壓。頻率和電壓同時降低,功耗就大大降低了。這個是DVFS的原理。
DVFS技術這個種方法屬于電壓的動態管理,可以通過軟件和硬件的方式實現。將DVFS合并到操作系統的調度程序和實時嵌入式任務管理服務當中,利用一個可編程的DC-DC開關電壓調節器、一個可編程的時鐘產生器和一個寬操作域的高性能處理器等資源進行實現。這種技術的使用需要系統使用者決定,這里不進行詳述,只需要知道在系統層面可以考慮使用這種方法進行降低功耗。
?
③低功耗軟件(操作系統)的動態功耗管理
前面也說了,可以使用軟件的方式進行自適應地選擇功耗。在系統軟件過程運行過程中,可以在操作系統中加入功耗管理機制,把沒有使用到的硬件單元關掉,這便是系統功耗的動態管理。加入功耗管理機制的操作系統的示意圖如下所示:
?
這種功耗的動態管理依賴于前面描述的電壓模式控制單元,只不過個單元是用軟件進行實現的(因為是操作系統進行動態功耗管理)。具體的功耗動態管理實現這里就不詳細說明,這應該是屬于系統設計者和軟件設計人員考慮的。
?
(3)系統時鐘分配
系統時鐘的分頻也是系統層面降低功耗可以考慮的方面。時鐘是系統中頻率最高的信號,其功耗功之高是不容置疑的。在系統設計層面,可以考慮應用要求,將系統設置為不同的工作模式,加入時鐘控制模塊,在不同的工作模式下選用不同頻率的時鐘,并且將一些不需要的模塊時鐘關閉。時鐘的分配可以使用內部的狀態機實現,也可以使用軟件實現。
例如,可以將系統分為4種工作模式:normal 、 slow、idle、sleep。在不同的模式下,器分頻的時鐘如下所示:
?
?
(4)算法與IP選擇
在系統設計層次上面,還可以通過算法和IP這兩個方面降低功耗。
算法:
算法級在算法級降低功耗是非常有價值的。 在設計算法時, 要分析該算法需要多少ALU操作, 需要多少次存儲器訪問, 要盡量使那些耗能多的操作最小化。算法級低功耗設計跟具體設計有關。比如,對于大規模運算的應用(比如FFT),使用對數系統(logarithmic number system,lns)比使用線性系統更好。lns在降低平均位元活躍度(也就是降低0和1的變化程度)的同時使用加法和減法實現乘除法,使效率比線性系統更高。因此基于lsn算法來實現FFT可以節省大量的功耗,但是加法器和乘法器的寬度會增加,使用FPGA實現時就會需要更大的LUT(查找表),而且這個查找表的大小是以指數增長的。
在一些行為綜合工具中,可采用延時功耗乘積表示系統的優化目標,以降低完成特定計算所需的狀態轉換數,生成高效的計算結構。算法這一方面的低功耗設計讓算法工程去考慮吧,我們來了解一下就可以了。
IP:
現在的SoC設計依賴于IP的集成。在選擇IP時,除了考慮到性能要求,還需要考慮到功耗問題。例如,在選擇CPU時,可以分析在完成相同的功能時,哪種CPU功耗更大。
?
(5)其他
在系統層次上,除了可以上面那些因素外,我們還可以考慮異步設計。在現在的系統設計中,一個系統可能使用多個時鐘,但是在每個時鐘控制的區域內部都設計成一個同步的子系統。通過時鐘樹綜合、插入緩沖器減少時鐘的偏移。這種方法在時鐘網絡上添加了大量的緩沖器,時鐘網絡消耗的功耗也增加。在異步設計里面,不需要全局時鐘,兩個模塊通過握手信號進行交互,這時候就可以減少功耗。因此異步設計也是降低功耗的一種方法。
在大多是DSP中,需要用到FFT算法。FFT算法需要頻繁訪問存儲器,我們可以在存儲器和處理器之間添加緩存,在處理器需要之前,預先將相關數據從存儲器中取到緩存里面。使用小范圍的緩存能夠使計算能耗大量下降,提高的FFT的效能。因此在系統設計的時候,特別是系統架構設計的時候,可以考慮基于緩存的系統體系結構進降低功耗。
系統層次上面的低功耗設計方法還有很多,比如說可測性設計上進行低功耗設計、存儲器(內存)的低功耗設計等,這些都可以在系統層次上面進考慮,這里就不一一列出來了。