<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 零翻轉(zhuǎn)編碼地址總線SoC的低功耗設(shè)計(jì)

          零翻轉(zhuǎn)編碼地址總線SoC的低功耗設(shè)計(jì)

          作者: 時(shí)間:2016-12-02 來(lái)源:網(wǎng)絡(luò) 收藏
          引言

          面向便攜式設(shè)備的SoC設(shè)計(jì),不僅僅要求性能高、體積小,更要求功耗低。一般而言,SoC的靜態(tài)功耗很小,而對(duì)負(fù)載電容充放電的動(dòng)態(tài)功耗很大。

          SoC內(nèi)部,總線上掛著很多功能設(shè)備,導(dǎo)致總線的電容負(fù)載很大。如果總線與片外設(shè)備聯(lián)系,那么,它還要驅(qū)動(dòng)很長(zhǎng)的片外連線以及片外設(shè)備,負(fù)載高達(dá)50pF,比SoC內(nèi)部各個(gè)節(jié)點(diǎn)的電容負(fù)載0.05pF高出三個(gè)量級(jí)。一般而言,總線的功耗占SoC總功耗的10%~80%;一個(gè)已經(jīng)對(duì)內(nèi)部電路優(yōu)化過(guò)的SoC,總線功耗約占50%[1]。隨著寬度的增加,總線消耗的功率占 SoC總功率的比重越來(lái)越大,因此,總線的低功耗設(shè)計(jì)很重要。

          很多通過(guò)減少總線動(dòng)態(tài)翻轉(zhuǎn)來(lái)降低總線功耗的算法已經(jīng)被提出來(lái)。數(shù)據(jù)總線的數(shù)據(jù)隨機(jī)性較大,地址總線的地址向量連續(xù)性較大。它們傳送的數(shù)值各有特點(diǎn),所以,針對(duì)不同類(lèi)型總線的算法也不一樣。針對(duì)數(shù)據(jù)總線有bus- invert算法,針對(duì)地址總線有PBE (Page-Based Encoding)算法、WZE(Working Zone Encoding)算法等。本文利用地址總線零翻轉(zhuǎn)編碼方法,通過(guò)設(shè)計(jì)編碼器和解碼器的結(jié)構(gòu),有效地降低SoC地址總線的功耗。

          1集成電路功耗分析

          數(shù)字集成電路的靜態(tài)功耗非常小,往往只有nW(納瓦)級(jí),因此,它的功耗近似等于動(dòng)態(tài)功耗 [2],如式(1)所示:



          其中,P表示數(shù)字集成電路的總功耗;Ci表示電路第i個(gè)節(jié)點(diǎn)的負(fù)載電容;Vdd表示電源電壓;f表示工作頻率;表示t時(shí)刻節(jié)點(diǎn)i的活動(dòng)因子,正比于節(jié)點(diǎn)i的電平翻轉(zhuǎn)頻率。

          設(shè)參數(shù)Cint表示內(nèi)部節(jié)點(diǎn)的平均負(fù)載,Cbus表示總線各位的平均負(fù)載,Nint表示單位時(shí)間所有內(nèi)部節(jié)點(diǎn)的平均翻轉(zhuǎn)次數(shù),Nbus表示單位時(shí)間總線的平均翻轉(zhuǎn)次數(shù)。那么,式(1)可以簡(jiǎn)化為式(2):



          因?yàn)閮?nèi)部節(jié)點(diǎn)的個(gè)數(shù)遠(yuǎn)遠(yuǎn)大于總線的位數(shù),所以平均翻轉(zhuǎn)次數(shù)Nint遠(yuǎn)遠(yuǎn)大于Nbus;而負(fù)載Cint卻遠(yuǎn)遠(yuǎn)小于Cbus。前者大約只有后者的千分之一,所以,式(2)中Nbus具有很大的權(quán)重。減小Nbus,能夠顯著地降低P。

          2低功耗設(shè)計(jì)

          2.1地址總線零翻轉(zhuǎn)編解碼原理

          總線寬度為N,t時(shí)刻,總線需發(fā)送的數(shù)據(jù)為Bt。如果Bt與Bt-1相等,則時(shí)刻總線狀態(tài)完全不變;如果Bt與Bt-1不相等,則t時(shí)刻,總線就會(huì)發(fā)生電平翻轉(zhuǎn)。Bt與 Bt-1不同的比特位數(shù)目(0≤≤N)越大,總線電平翻轉(zhuǎn)的位數(shù)就越多,功耗就越大。當(dāng)Bt與Bt-1互為反碼,則總線每一位都要翻轉(zhuǎn),此時(shí)總線翻轉(zhuǎn)的功耗最大。

          零翻轉(zhuǎn)編碼法利用降低總線的電平翻轉(zhuǎn)次數(shù),來(lái)降低總線功耗。定義bt為內(nèi)核MCU計(jì)算出來(lái)的t時(shí)刻總線數(shù)據(jù)(即編碼前的數(shù)據(jù)),Bt是t時(shí)刻已放到總線上的數(shù)據(jù)(即編碼后的數(shù)據(jù)),Jt是解碼器解碼后的數(shù)據(jù)。

          總線連續(xù)取址時(shí),相鄰兩次地址的差是相等的,定義為Stride。一般的ROM尋址Stride=1;對(duì)Cache尋址時(shí),Stride根據(jù)Cache的尋址特性而定。如果Cache尋址步長(zhǎng)是一個(gè)word,則Stride=2。
          編碼需要一個(gè)額外的狀態(tài)信號(hào)INC。
          零翻轉(zhuǎn)編碼的算法步驟如下:
          ①計(jì)算bt-1+Stride,比較bt與bt-1+ Stride;
          ②如果bt=bt-1+Stride,表明是連續(xù)尋址,那么Bt= Bt-1,置INC=1;
          ③如果bt≠bt-1+Stride,表明是不連續(xù)尋址,那么Bt=bt,置INC=0;
          ④接收端解碼器根據(jù)INC來(lái)處理收到的總線數(shù)據(jù)。

          零翻轉(zhuǎn)解碼的算法步驟如下:
          ①計(jì)算Jt-1+Stride;
          ②如果INC=1,表明是連續(xù)尋址,那么Jt=Jt-1+stride;
          ③如果INC=0,表明是不連續(xù)尋址,那么Jt=Bt。

          中斷和跳轉(zhuǎn)子程序的多少,會(huì)影響功耗的降低。中斷和跳轉(zhuǎn)越少,地址向量連續(xù)性越高,零翻轉(zhuǎn)編碼后總線電平翻轉(zhuǎn)越少,節(jié)省的功耗就越大。當(dāng)?shù)刂房偩€一直連續(xù)尋址時(shí),零翻轉(zhuǎn)法理論上可以達(dá)到地址總線的零翻轉(zhuǎn),并且,Stride變量可以根據(jù)尋址對(duì)象的不同而設(shè)置成對(duì)應(yīng)的數(shù)值。

          2.2零翻轉(zhuǎn)編解碼器電路結(jié)構(gòu)

          編碼器組成如圖1左半部分。D1寄存bt-1,加法器將bt-1與Stride相加。比較器EQ比較 bt和bt-1+Stride,輸出INC。選擇器MUX的兩組輸入是bt和Bt-1。


          圖1零翻轉(zhuǎn)編碼器和解碼器

          編碼器是組合邏輯,不可避免的有毛刺。毛刺雖然時(shí)間很短,但依然會(huì)增加總線功耗,因此,利用D2、D3觸發(fā)器來(lái)同步,過(guò)濾掉所有的毛刺。

          解碼器結(jié)構(gòu)如圖1右半部分,在接收設(shè)備Memory控制邏輯中實(shí)現(xiàn)。寄存器D存儲(chǔ)Jt-1,MUX的兩組輸入是(bt-1+Stride)和Bt。它的結(jié)構(gòu)比編碼器簡(jiǎn)單得多。

          上一頁(yè) 1 2 下一頁(yè)

          評(píng)論


          技術(shù)專(zhuān)區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();