零翻轉編碼地址總線SoC的低功耗設計
面向便攜式設備的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。它的結構比編碼器簡單得多。
評論