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