引言 面向便攜式設備的SoC設計,不僅僅要求性能高、體積小,更要求功耗低。一般而言,SoC的靜態功耗很小,而對負載電容充放電的動態功耗很大。 SoC內部,總線上掛著很多功能設備,導致總線的電容負載很大。如果總線與片外設備聯系,那么,它還要驅動很長的片外連線以及片外設備,負載高達50pF,比SoC內部各個節點的電容負載0.05pF高出三個量級。一般而言,總線的功耗占SoC總功耗的10%~80%;一個已經對內部電路優化過的SoC,總線功耗約占50%[1]。隨著寬度的增加,總線消耗的功率占 SoC總功率的比重越來越大,因此,總線的低功耗設計很重要。 很多通過減少總線動態翻轉來降低總線功耗的算法已經被提出來。數據總線的數據隨機性較大,地址總線的地址向量連續性較大。它們傳送的數值各有特點,所以,針對不同類型總線的算法也不一樣。針對數據總線有bus- invert算法,針對地址總線有PBE (Page-Based Encoding)算法、WZE(Working Zone Encoding)算法等。本文利用地址總線零翻轉編碼方法,通過設計編碼器和解碼器的結構,有效地降低SoC地址總線的功耗。 1 集成電路功耗分析 數字集成電路的靜態功耗非常小,往往只有nW(納瓦)級,因此,它的功耗近似等于動態功耗 [2],如式(1)所示: ![]() 其中,P表示數字集成電路的總功耗;Ci表示電路第i個節點的負載電容;Vdd表示電源電壓;f表示工作頻率;表示t時刻節點i的活動因子,正比于節點i的電平翻轉頻率。 設參數Cint表示內部節點的平均負載,Cbus表示總線各位的平均負載,Nint表示單位時間所有內部節點的平均翻轉次數,Nbus表示單位時間總線的平均翻轉次數。那么,式(1)可以簡化為式(2): ![]() 因為內部節點的個數遠遠大于總線的位數,所以平均翻轉次數Nint遠遠大于Nbus;而負載Cint卻遠遠小于Cbus。前者大約只有后者的千分之一,所以,式(2)中Nbus具有很大的權重。減小Nbus,能夠顯著地降低P。 2 低功耗設計 2.1 地址總線零翻轉編解碼原理 總線寬度為N,t時刻,總線需發送的數據為Bt。如果Bt與Bt-1相等,則時刻總線狀態完全不變;如果Bt與Bt-1不相等,則t時刻,總線就會發生電平翻轉。Bt與 Bt-1不同的比特位數目(0≤≤N)越大,總線電平翻轉的位數就越多,功耗就越大。當Bt與Bt-1互為反碼,則總線每一位都要翻轉,此時總線翻轉的功耗最大。 零翻轉編碼法利用降低總線的電平翻轉次數,來降低總線功耗。定義bt為內核MCU計算出來的t時刻總線數據(即編碼前的數據),Bt是t時刻已放到總線上的數據(即編碼后的數據),Jt是解碼器解碼后的數據。 總線連續取址時,相鄰兩次地址的差是相等的,定義為Stride。一般的ROM尋址Stride=1;對Cache尋址時,Stride根據Cache的尋址特性而定。如果Cache尋址步長是一個word,則Stride=2。 編碼需要一個額外的狀態信號INC。 零翻轉編碼的算法步驟如下: ① 計算bt-1+Stride,比較bt與bt-1+ Stride; ② 如果bt=bt-1+Stride,表明是連續尋址,那么Bt= Bt-1,置INC=1; ③ 如果bt≠bt-1+Stride,表明是不連續尋址,那么Bt=bt,置INC=0; ④ 接收端解碼器根據INC來處理收到的總線數據。 零翻轉解碼的算法步驟如下: ① 計算Jt-1+Stride; ② 如果INC=1,表明是連續尋址,那么Jt=Jt-1+stride; ③ 如果INC=0,表明是不連續尋址,那么Jt=Bt。 中斷和跳轉子程序的多少,會影響功耗的降低。中斷和跳轉越少,地址向量連續性越高,零翻轉編碼后總線電平翻轉越少,節省的功耗就越大。當地址總線一直連續尋址時,零翻轉法理論上可以達到地址總線的零翻轉,并且,Stride變量可以根據尋址對象的不同而設置成對應的數值。 2.2 零翻轉編解碼器電路結構 編碼器組成如圖1左半部分。D1寄存bt-1,加法器將bt-1與Stride相加。比較器EQ比較 bt和bt-1+Stride,輸出INC。選擇器MUX的兩組輸入是bt和Bt-1。 ![]() 圖1 零翻轉編碼器和解碼器 編碼器是組合邏輯,不可避免的有毛刺。毛刺雖然時間很短,但依然會增加總線功耗,因此,利用D2、D3觸發器來同步,過濾掉所有的毛刺。 解碼器結構如圖1右半部分,在接收設備Memory控制邏輯中實現。寄存器D存儲Jt-1,MUX的兩組輸入是(bt-1+Stride)和Bt。它的結構比編碼器簡單得多。 相對整個SoC而言,編碼器和解碼器的電路規模很小,帶來的額外硬件面積和功耗也很小[3,4]。 3 驗證結果分析 將零翻轉法應用于SoC中,改變SoC設計的地址總線寬度,分別是8、16、32、64位。對內部地址總線和外部地址總線分別計算出優化前后的功耗,并分析結果。使用的EDA工具是Synopsys公司的功耗分析軟件Power Compiler。 3.1 零翻轉編碼對內部地址總線功耗的影響 本測試方案中,地址總線上懸掛了15個功能模塊,完全在SoC電路內部,總線每一位的負載最大為2.1pF。以10 000個完全連續的地址向量運行SoC,計算地址總線功耗。計算結果如表1所列。 表1 內部總線功耗測試 ![]() 當總線寬度N增大時,編碼器的MUX寬度隨之增大,它的控制信號sel的負載增加,導致sel時延增大。當 N = 32時的RTL代碼,基于TSMC-0.25μm工藝庫,經Design Compiler綜合,得出的關鍵路徑從D1觸發器時鐘端到MUX的輸出,最大延時為4.7ns。時鐘頻率是50MHz,編碼器的延遲只占時鐘周期的 23.5%。這個百分比很小。解碼器的結構比編碼器更簡單。可見,編碼器和解碼器都能夠滿足時序要求。 如圖2所示,優化后的總線功耗降低了。其中8位總線降低幅度最大,達到了88.3%;而隨著N的增加,功耗降低的幅度變小。由于驗證的10 000組地址向量沒有變,所以優化后總線活動減少而節省的功耗幾乎不隨N的變化而變化;而當N增大時,編碼器的規模成倍增大(見表1),編碼器硬件所消耗的功率上升很快。因此,編碼器的功耗不斷增大,總線活動節省的功耗幾乎不變,導致總功耗降低的幅度越來越小。 ![]() 圖2 零翻轉編碼降低的功耗與總線寬度的關系 如果地址不完全連續,那么功耗降低的幅度更小。所以,當內部地址總線寬度過大,超過32位時,不適宜應用零翻轉算法。 3.2 零翻轉編碼對外部地址總線功耗的影響 本測試方案中,地址總線經過PAD連接到片外存儲器,總線每一位的負載為50pF。運行一個帶有循環和跳轉的程序對片外存儲器寫值,總線功耗結果如表2 所列。 表2 外部總線功耗測試 ![]() 總線負載為50pF,優化后節省的功耗遠大于編碼器硬件產生的功耗,后者對功耗降低比例的影響減小。所以, 隨著N的增大,功耗節省比例降低的幅度變小。SoC總線寬度一般在64位以內,因此,零翻轉編碼法幾乎適用于所有的SoC外部地址總線。 由表1與表2的功耗量級的差別知道,總線負載越大,零翻轉法優化的功耗就越大,編碼器硬件的負面影響越小。 結語 本文介紹了零翻轉編碼地址總線低功耗設計方法。當地址總線一直連續取址時,通過零翻轉編碼,理論上可以達到地址總線電平的零翻轉,最大限度地降低地址總線功耗。這種設計方法,既適用于片外地址總線,也適用于寬度在32位以內的SoC內部地址總線。 參考文獻 1. Stan M R.Burleson W P Bus-invert coding for low-power I/O 1995 2. Weste N.Eshraghian K Principles of CMOS VLSI Design 1988 3. Mehta H.Owens R M.Irwin M J Some Issues in Gray Code Addressing 1996(96) 4. Benini L.De Micheli G.Macii E Asymptotic ZeroTransition Activity Encoding for Busses in Low-power Microprocessor-Based Systems 5. Benini L.De Micheli G.Macii E Address Bus Encoding Technique for System-Level Power Optimization 1998 作 者:東南大學 殷宏 陸生禮 來 源:單片機與嵌入式系統應用2004(1) |