一種降低DSP芯片總線功耗的設(shè)計(jì)方案
1 引言
近年來,功能強(qiáng)大和密集型的數(shù)字信號處理器(DSP)已廣應(yīng)用于當(dāng)前許多小型移動(dòng)產(chǎn)品中,并成為必不可少的部分。
這些使用廣泛的小型移動(dòng)產(chǎn)品包括蜂窩電話、手持PDA 和GPS導(dǎo)航器等。對于此類微型產(chǎn)品的設(shè)計(jì),要求DSP芯片必須具有極低功耗從而最大程度延長電池壽命和減小產(chǎn)品尺寸。
現(xiàn)代的高性能DSP芯片中或多或少采取了一些與通用處理器相同的低功耗設(shè)計(jì),如對于DSP芯片的片內(nèi)存儲(chǔ)器,就有通過設(shè)計(jì)低功耗的存儲(chǔ)單元,采用Divided-Word-L ine (DWL)譯碼設(shè)計(jì)等方法來降低DSP芯片的存儲(chǔ)器部分的功耗。但是對于SoC而言,由于其總線上掛有很多設(shè)備,導(dǎo)致總線的電容負(fù)載很大。如果總線與片外設(shè)備聯(lián)系,那么,它還要驅(qū)動(dòng)很長的片外連線以及片外設(shè)備,負(fù)載高達(dá)50pF,比SoC內(nèi)部各個(gè)節(jié)點(diǎn)的電容負(fù)載0. 05pF高出三個(gè)量級。一般而言, SoC總線的功耗占SoC總功耗的10% ~80%;一個(gè)已經(jīng)對內(nèi)部電路優(yōu)化過的SoC,總線功耗約占50%。隨著寬度的增加,總線消耗的功率占SoC總功率的比重越來越大,因此,總線的低功耗設(shè)計(jì)很重要。
然而現(xiàn)代的許多高性能DSP芯片在設(shè)計(jì)過程中,并沒有考慮到這一問題,隨著集成電路工藝的不斷提升,如何降低總線功耗的問題已經(jīng)越來越重要。在文獻(xiàn)[ 1 ]中由Paul P. Sotiriadis和Anantha P. Chandrakasan提出的一個(gè)DSM總線的線間電容的模型下,人們已經(jīng)對于降低總線功耗提出了一些編碼算法和譯碼器,并且通過在采用RISC體系結(jié)構(gòu)處理器的芯片上試驗(yàn)取得了較好的效果,其中比較有代表性的有Bus2Invert Code譯碼器、T0 Code譯碼器等。
(1)Bus2Invert Code譯碼器
定義總線的寬度是N, b ( t)為內(nèi)核MCU計(jì)算出來的t時(shí)刻總線數(shù)據(jù)(即編碼前的數(shù)據(jù)) , B ( t)是t時(shí)刻已放到總線上的數(shù)據(jù)(即編碼后的數(shù)據(jù)) , J ( t)是解碼器解碼后的數(shù)據(jù), H ( t)是指b ( t)和b ( t-1)的Hamming Distance。總線傳輸數(shù)據(jù)時(shí),相鄰兩次讀取的數(shù)據(jù)都是確定的,因此可以確定兩次數(shù)據(jù)b ( t)和b ( t-1)的Hamming Distance,如果2 ×H ( t) >N ,這說明總線上有超過一半的信號需要翻轉(zhuǎn),這時(shí)如果將第二次傳輸?shù)臄?shù)據(jù)逐位取反再傳輸,就可以減少信號翻轉(zhuǎn)的次數(shù)。這種譯碼器適用于數(shù)據(jù)總線,可以在數(shù)據(jù)總線上傳輸隨機(jī)數(shù)據(jù)時(shí)大幅降低的功耗,但是對于隨機(jī)性不強(qiáng)的地址總線的優(yōu)化并不明顯。
(2) T0 Code譯碼器
T0 譯碼器的原理在于盡可能地減少總線的翻轉(zhuǎn)次數(shù),由于指令總線上的地址在多數(shù)情況下都是以相同的增量增加(在沒有跳轉(zhuǎn)等情況下PC = PC +N。這里N 是一個(gè)定值) ,因此規(guī)定當(dāng)兩個(gè)相鄰的數(shù)據(jù)的差為N 時(shí),總線上的數(shù)據(jù)不變化,只有當(dāng)不為N 時(shí)才傳輸新的數(shù)據(jù)。如果在設(shè)計(jì)中采用T0編碼的譯碼器和解碼器,那么則在下面這種情況下可以達(dá)到最低的功耗:如果數(shù)據(jù)流中的數(shù)據(jù)都是以同樣的間隔的無限序列,T0 編碼可以使得在總線上傳輸這些數(shù)據(jù)時(shí),總線上沒有出現(xiàn)翻轉(zhuǎn)。譯碼器則對于有規(guī)律性變化的地址總線的優(yōu)化非常顯著,而對隨機(jī)性較大的數(shù)據(jù)總線的功耗降低沒有什么幫助。
由于DSP處理器與通用處理器的體系結(jié)構(gòu)的差異,決定了一些適用于通用處理器的方法并不一定適用于DSP處理器,以上的方法還未應(yīng)用在DSP處理器中。
然而DSP處理器的獨(dú)特構(gòu)造也為DSP處理器的低功耗總線設(shè)計(jì)提供了條件:DSP處理器執(zhí)行的程序中需要執(zhí)行大量的乘加運(yùn)算來實(shí)現(xiàn)DSP算法,需要獨(dú)立的地址生成器生成大量有相同間隔的連續(xù)地址,從而極其利于類似T0的編碼算法對其優(yōu)化;而DSP處理器處理的數(shù)據(jù)大多為隨機(jī)性非常強(qiáng)的隨機(jī)數(shù)列,可以發(fā)揮Bus-Invert Code譯碼器的作用。
2 總線模型
在芯片的制造技術(shù)到達(dá)了深亞微米級(DSM)時(shí),總線功耗已經(jīng)成為一個(gè)重要的問題,總線功耗的降低對于芯片整體的功耗降低已經(jīng)越來越重要,因此在DSM下建立一個(gè)合理的總線模型是首先要解決的問題。
圖1是在文獻(xiàn)[ 1 ] 中由Paul P. Sotiriadis和Anantha P. Chandrakasan提出的一個(gè)DSM總線的線間電容的模型。從圖1可以看出,當(dāng)工藝水平達(dá)到深亞微米級時(shí),總線模型已經(jīng)與以往的模型發(fā)生了較大的變化,我們必須細(xì)致的考慮線間的電感效應(yīng),因此,圖1模型具有較好的說明性。實(shí)際中,用到的是如圖2所示經(jīng)過簡化的模型。
用式(1)和式(2)表示在不同時(shí)刻第i根總線上的電壓:
其中T表示總線上的時(shí)鐘周期,Vinew表示第i根總線上的電壓(0或者是Vdd ) ,Vi ( x, t)表示t時(shí)刻上第i根總線上的電壓值,而當(dāng)一根總線的電壓發(fā)生變化時(shí),其消耗的能量可以計(jì)算出為 Ei=∫T 0VddIi( x)dx,
而全部n根總線上的消耗的功耗為E = ∑Ei ,由此可以用矩陣的寫法式(3)和式(4)來表示
從式(6)可以明顯地發(fā)現(xiàn), 如果想降低總線上的功耗,主要的方法就是使總線上傳遞數(shù)據(jù)時(shí),在兩次傳輸?shù)臄?shù)據(jù)過程中,盡量減少總線的翻轉(zhuǎn)次數(shù)。因此,在降低總線功耗的編碼方法中,就是通過編碼的方式進(jìn)行優(yōu)化,使得當(dāng)傳輸相同的數(shù)據(jù)時(shí),經(jīng)過優(yōu)化的總線上的翻轉(zhuǎn)次數(shù)減少,從而降低總線上的功耗。
3 最小海明距離編碼的設(shè)計(jì)思路
現(xiàn)代的高性能DSP芯片中也或多或少采取了一些與通用處理器相同的低功耗設(shè)計(jì),如對于DSP芯片的片內(nèi)存儲(chǔ)器就有通過設(shè)計(jì)低功耗的存儲(chǔ)單元, 采用Divided-Word-L ine(DWL)譯碼設(shè)計(jì)等方法來降低DSP芯片的存儲(chǔ)器部分的功耗,而由于DSP芯片的特殊性,我們可以采用一些特有的低功耗設(shè)計(jì):DSP芯片支持的常用算法有FFT, F IR等,都需要大量乘加運(yùn)算,因此DSP芯片中有一個(gè)獨(dú)特的部件地址生成器來提高數(shù)據(jù)的地址生成速度,而生成的地址通常為具有固定步長的地址。
在總線上傳輸?shù)臄?shù)據(jù)也經(jīng)常出現(xiàn)具有固定步長地址序列,那么可以利用這一特點(diǎn)對其加以優(yōu)化。而乘加運(yùn)算中的數(shù)據(jù)是一個(gè)隨機(jī)的序列,需要用特殊的譯碼器來解決。對于超哈佛總線結(jié)構(gòu)的DSP芯片的低功耗總線設(shè)計(jì),則要綜合考慮這兩方面的需求。
現(xiàn)在已經(jīng)提出的一些譯碼器和編碼算法都只是從一方面進(jìn)行優(yōu)化,如Bus-Invert Code對于降低隨機(jī)序列的功耗比較有效,但是對于順序序列的效果并不明顯; T0 Code由于需要增加一個(gè)信號參加譯碼器的譯碼,因此使譯碼器的硬件設(shè)計(jì)更為復(fù)雜,而且對于時(shí)序的控制比較困難。如果能找到一種合適的方法兼顧到各種不同的需要,就可以應(yīng)用在DSP芯片的總線設(shè)計(jì)中并達(dá)到降低總線功耗的作用。
首先,我們需要從編碼的角度看,設(shè)計(jì)出一種新的編碼算法,從而在不增加任何硬件開銷的情況下,通過采用改進(jìn)的編碼器來降低總線上的功耗;然后,再選取一種低功耗譯碼器,使它能彌補(bǔ)編碼算法的不足,從而進(jìn)一步降低功耗。
需要注意的是,兩種譯碼器不能是基于同一原理,否則兩者的結(jié)合無法互相彌補(bǔ)彼此的不足,其效果與單獨(dú)使用一種方法無本質(zhì)區(qū)別。我們不采用T0編碼器的原因在于,它只針對間隔固定的序列有效,由于這個(gè)間隔是一個(gè)確定的值,所以不是很靈活,而最小海明距離編碼算法則比它靈活一些。
4 最小海明距離編碼算法
(1)局部化原理
局部化原理分為時(shí)間局部性原理和空間局部性原理。我們根據(jù)計(jì)算機(jī)的空間局部性原理,也就是說由于在相對較短的一段時(shí)間內(nèi),處理器會(huì)重復(fù)訪問相對集中的一部分?jǐn)?shù)據(jù),因此在總線上傳輸?shù)臄?shù)據(jù)有這樣一個(gè)特點(diǎn):總線上傳輸?shù)牡刂肪哂幸欢ǖ倪B續(xù)性,也就是說,在一段時(shí)間內(nèi),總線上的數(shù)據(jù)具有連續(xù)性(如0000, 0001, 0010, 0011, .) 。隨著多媒體技術(shù)和DSP技術(shù)的廣泛應(yīng)用,現(xiàn)代高速處理器更是具有這樣的特點(diǎn),在大部分?jǐn)?shù)字處理算法中,需要進(jìn)行大量的乘加運(yùn)算,通常這些數(shù)據(jù)都是存放在連續(xù)地址的存儲(chǔ)器內(nèi),對此加以利用,就可以找到一些方法來降低總線的功耗。
(2) 算法目標(biāo)
通過一個(gè)合理的編碼方案,盡可能地減少當(dāng)有相同間隔的連續(xù)地址在總線上傳輸時(shí)總線上的翻轉(zhuǎn),從而達(dá)到降低總線功耗的目的。
(3) 編碼算法數(shù)學(xué)模型
由于在前面已經(jīng)確定了算法的目的,因此建立了一個(gè)取得編碼的數(shù)學(xué)模型。算法的中心思想在于:將對于連續(xù)地址(更廣泛地說是指固定步長)的兩個(gè)碼字的編碼采取變化,使得在總線上傳輸?shù)膬蓚€(gè)相鄰的數(shù)據(jù)之間的海明距離變小,從而減少總線的翻轉(zhuǎn)次數(shù)。因此,可以將對于任意間隔固定步長兩個(gè)碼字的海明距離降到最低,即為1。
定義一個(gè)無向圖G,定義總線寬度是N,總線上可能出現(xiàn)的所有的數(shù)據(jù)則有2N個(gè),將其命名為M ( 1 ) , M ( 2 ) ,M(2N )作為圖的2N 個(gè)節(jié)點(diǎn),當(dāng)且僅當(dāng)兩個(gè)節(jié)點(diǎn)M ( s)和M ( t(0 s, t 2N + 1)所對應(yīng)的編碼的海明距離為1時(shí),存在一條無向邊連接這兩個(gè)節(jié)點(diǎn),這樣就構(gòu)成了一個(gè)無向圖,因此,我們的目標(biāo)就是在這個(gè)無向圖中找到一個(gè)Hamilton圈,使得所有連續(xù)地址的編碼順次在這條軌上出現(xiàn),從而當(dāng)總線上順次出現(xiàn)連續(xù)地址時(shí),總線翻轉(zhuǎn)減少。
也就是說,我們需要在一個(gè)有2個(gè)節(jié)點(diǎn)的無向圖中找到一個(gè)Hamilton圈,然后將地址依次對應(yīng)到每個(gè)節(jié)點(diǎn)上。在一個(gè)有n個(gè)節(jié)點(diǎn)的無向圖中搜索一個(gè)Hamilton圈本來是一個(gè)NP問題但是,由于這里n = 2N ,并且兩個(gè)節(jié)點(diǎn)之間的連接關(guān)系有一定的特殊性,因此,在這樣一個(gè)特定條件下在O ( n)的復(fù)雜度內(nèi)完全可以實(shí)現(xiàn)。
5 算法及其證明
(1)構(gòu)造算法
①首先構(gòu)造一個(gè)地址為兩位的排列,如圖3所示。兩位地址構(gòu)造,圓圈代表編碼,只有海明距離為1的點(diǎn)之間才有連線。
②當(dāng)n = k時(shí)成立,利用n = k的編碼序列作為基礎(chǔ),構(gòu)造n = k + 1的編碼序列。
注意:由于當(dāng)我們構(gòu)造一個(gè)n = k + 1情況下的編碼時(shí),是利用一個(gè)已經(jīng)完成的n = k的編碼,因此當(dāng)選用不同的n = k的編碼,所得到的n = k + 1的編碼也是不同的。
(2)證明。在這里,采用歸納的方法來證明算法的正確性
①在N = 2的情況下,可以很容易找到一個(gè)解(圖4) 。
②當(dāng)N = K有解時(shí),由于K≥2,因此,在N = K的Hamilton圈中至少有一條邊可以滿足擴(kuò)展時(shí)的需要。由構(gòu)造的方法可知,可以將N = K + 1情況下所有的點(diǎn)包含,因此,這樣構(gòu)造出的Hamilton圈是符合我們要求的。
③同時(shí),我們可以通過在擴(kuò)展時(shí)選用不同的邊,可以構(gòu)造出所有滿足要求的Hamilton圈??梢?,在總線編碼這種特殊的模型下,在圖中搜索到一條Hamilton圈是可行的。
6 設(shè)計(jì)的實(shí)現(xiàn)及硬件譯碼器的選擇
(1)設(shè)計(jì)的實(shí)現(xiàn)方法
在具體的實(shí)現(xiàn)上,我們采用將編碼算法固化的方法來實(shí)現(xiàn)這一方案。在DSP芯片的地址產(chǎn)生器的輸出端增加一個(gè)譯碼器,通過譯碼器對程序產(chǎn)生的地址進(jìn)行一次映射,由于這種映射是一一對應(yīng)的映射,因此對于程序員編寫程序沒有任何影響;存儲(chǔ)器的設(shè)計(jì)人員也不需要考慮譯碼器的問題,只需要采用Bus-Invert Code譯碼器代替通常采用的譯碼器。
這樣就可以兼顧兩者的優(yōu)點(diǎn):當(dāng)總線上傳輸?shù)牡刂肥沁B續(xù)地址時(shí),地址譯碼器輸出的地址碼是一個(gè)海明距離很小的序列,可以減少總線的翻轉(zhuǎn)次數(shù);當(dāng)總線上傳輸?shù)牡刂凡皇沁B續(xù)地址時(shí),也就是說是一個(gè)較為隨機(jī)的序列,如果兩個(gè)數(shù)據(jù)之間的海明距離比較大時(shí),Bus-Invert Code電路就可以發(fā)揮作用,使海明距離大于總線寬度一半的編碼序列,從而降低總線傳輸?shù)墓摹?/FONT>
(2)舉例
以一個(gè)0~16的序列在總線上傳輸為例,左邊一列是常規(guī)方法的譯碼結(jié)果,右邊一列為采用新方法的結(jié)果。
通過本例可以很明顯地看出當(dāng)總線上的數(shù)據(jù)出現(xiàn)連續(xù)序列時(shí),可以大大降低總線上的翻轉(zhuǎn)次數(shù),從而降低總線功耗。
7 實(shí)驗(yàn)結(jié)果
首先取得總線模型翻轉(zhuǎn)時(shí)在Hspice上的仿真結(jié)果。
圖5中顯示的是總線在翻轉(zhuǎn)時(shí)電流的變化圖,我們可以清晰地看出當(dāng)總線翻轉(zhuǎn)時(shí)電流的變化非常大,而圖6則顯示的是總線在翻轉(zhuǎn)時(shí)電壓的變化圖,通過這兩幅圖可以得出結(jié)論,總線翻轉(zhuǎn)時(shí)的功耗遠(yuǎn)大于保持原狀態(tài)所需的功耗,因此通過減少翻轉(zhuǎn)的方法降低總線功耗是一個(gè)有效的途徑。通過在公司的ls0201DSP芯片上的仿真測試,得到如表1的結(jié)果。
從表1可以看出,對于新的設(shè)計(jì)方案降低總線的功耗是有效的。其中,編碼算法對于地址譯碼器的數(shù)據(jù)線的優(yōu)化最為突出,這是由于DSP芯片自身的特點(diǎn)造成的。DSP處理器執(zhí)行的程序中需要執(zhí)行大量的乘加運(yùn)算,需要獨(dú)立的地址生成器生成大量的連續(xù)地址,從而極利于編碼算法對其優(yōu)化。因此,可以說新的設(shè)計(jì)方案對于全面降低DSP芯片內(nèi)總線的功耗是有效的。
表1 模擬仿真結(jié)果
8 結(jié)論
DSP芯片,需要綜合考慮總線上傳輸指令地址和數(shù)據(jù)兩種情況,新方案兼顧了兩種編碼器的優(yōu)點(diǎn)。針對超哈佛總線結(jié)構(gòu)的DSP芯片的特點(diǎn),利用編碼算法對指令地址的傳輸情況進(jìn)行優(yōu)化,并用硬件上Bus2Invert Code對數(shù)據(jù)傳輸情況進(jìn)行改良。試驗(yàn)結(jié)果證明新方案對于降低超哈佛總線結(jié)構(gòu)的DSP芯片總線功耗是十分有效的;而在既傳輸數(shù)據(jù)又傳輸指令的普林斯頓總線上,新方案在傳輸指令和傳輸數(shù)據(jù)兩種情況下都可以降低總線功耗,達(dá)到了試驗(yàn)的目的,證明通過多種編碼器來降低DSM總線上的功耗是一種可行的辦法。
評論