芯片設(shè)計中的功耗估計與優(yōu)化技術(shù)
3.2估算的流程
因為指令與行為級估算的精確度太差,電路級估算的耗時過多,所以在業(yè)界的實踐中采用較少。RTL與gate級估算是常用的選擇。實際功耗分析的執(zhí)行必須借助工具的輔助,目前業(yè)界通常的選擇是在RTL級采用power compiler,在門級采用primepower。
![門級](http://editerupload.eepw.com.cn/fetch/20160912/303352_2_0.jpg)
圖2
下面以power compiler為例,說明門級估算的步驟。
在dc compile前,設(shè)置下面的變量:
power_preserve_rtl_hier_names = false/true
編譯
寫出ddc文件
仿真生成vcd 文件
vcd2saif轉(zhuǎn)化為.saif文件 (注意vcd2saif由csh調(diào)用,而不是在dc_shell界面調(diào)用)
讀入ddc網(wǎng)表
read_saif
report_power
4 功耗的優(yōu)化
4.1優(yōu)化的原則
圖3是幾個典型設(shè)計中功耗分布數(shù)據(jù):
![功耗分布](http://editerupload.eepw.com.cn/fetch/20160912/303352_2_1.jpg)
(數(shù)據(jù)來自“International Solid-State Circuits Conference”)
圖3
我們的目標(biāo)是減少時鐘樹、標(biāo)準(zhǔn)單元和存儲器的功耗。功耗與性能通常是充滿矛盾的:
1)使時鐘變慢(更少的轉(zhuǎn)換),但我們想要更快的處理速度。
2)減小Vdd,但Vdd變小會限制時鐘速度。
3)更少的電路,但更多的晶體管可以做更多的工作。
簡言之,我們想用最少的能量完成最大量的任務(wù)。實現(xiàn)方式是對電路動作的控制精細(xì)化,僅讓恰好需要的電路,在需要的時間內(nèi)動作,而不浪費分毫。完成這一任務(wù),需要設(shè)計者有效率地管理電路的動作。
現(xiàn)代系統(tǒng)是如此復(fù)雜,以致設(shè)計者必須切分為若干層次,分步前行才能把握:
軟件 -> 架構(gòu) -> 邏輯 -> 電路
每一層次中,設(shè)計者對電路動作的控制范圍和手段都是不同的。軟件是硬件動作的總調(diào)度師,設(shè)計者可以根據(jù)特定應(yīng)用,關(guān)掉整個模塊或減少無效的動作。進(jìn)入架構(gòu)層,視角轉(zhuǎn)為怎樣將設(shè)定任務(wù)合理分配到各個模塊,協(xié)調(diào)動作最有效率,如pipeline、分布式計算、并行計算等。在邏輯層,則考慮怎樣實現(xiàn)一步動作僅使需要的電路動作。電路層的視角更為精細(xì),通過調(diào)節(jié)平衡信號到達(dá)時間,驅(qū)動單元大小等手段,使電路的動作耗能最小。這里存在一個重要規(guī)律,稱作效率遞減率:
在高的抽象層次減少功耗的效率會比低的層次更高。
所以,降低功耗是一個系統(tǒng)工程,需要軟件、硬件、電路、工藝等人員的共同努力。這里,我們將采用架構(gòu)與邏輯的視角進(jìn)行下面的討論。
4.2 架構(gòu)考慮
1)切分工作模式,硬件要可以提供一個接口,以使軟件可以控制電路模塊的動作與否。不工作的模塊掛起。
2)分布式計算:將整個任務(wù)切分到不同模塊,在內(nèi)部處理高活動性信號。
雖然總計算量沒有改變,但對單個模塊,時間要求降低,可以降頻或降壓。
3)并行計算:相同時間內(nèi)計算量相同,但可降頻/壓。
(計算量=開關(guān)的次數(shù),開關(guān)次數(shù)沒變,但每次開關(guān)的功耗成本降了)
4)pipeline
每步的計算量減少,可以在性能相同的情況下,降低工作頻率。
5)可編程性與hard-wire的權(quán)衡
可編程性越強(qiáng),完成相同的任務(wù)耗電越多。
![門級](http://editerupload.eepw.com.cn/fetch/20160912/303352_2_2.jpg)
(見參考文獻(xiàn)[7])
圖4
4.3 RAM的功耗優(yōu)化
很明顯,大的RAM比小的RAM耗電要多,將整塊的RAM分成小塊可以降低存取功耗。
![](http://editerupload.eepw.com.cn/fetch/20160912/303352_2_3.jpg)
圖5
值得注意的一點是,多數(shù)設(shè)計者認(rèn)為片選信號無效,RAM即進(jìn)入最小功耗。實際上,若此時其數(shù)據(jù)/地址端口信號有翻轉(zhuǎn),會耗費相當(dāng)?shù)碾娏?約占激活功耗的20%)。在不存取時,最佳的方式是,保持片選無效,地址、數(shù)據(jù)是恒定值。
4.4時鐘樹單元/連線
4.4.1 時鐘門控的原理
在典型的數(shù)字芯片中,時鐘網(wǎng)絡(luò)的功耗可以占到總量的50%,這是一個龐大的數(shù)字。一個行之有效的方案是使用時鐘門控,將當(dāng)前未工作邏輯的時鐘樹關(guān)閉。比如下面的邏輯,在EN是0時,可以將右側(cè)的register bank的時鐘關(guān)閉。
![功耗](http://editerupload.eepw.com.cn/fetch/20160912/303352_2_4.jpg)
圖6
時鐘門控邏輯加入的方式有兩種:手動和自動。
a) 手動方式
在每個IP模塊的時鐘根節(jié)點加入,EN信號可以由程序設(shè)定產(chǎn)生。
b) 自動方式
dc_shell > set_clock_gating_style (options) 選擇時鐘門控的方式和條件
dc_shell > analyze -f design.v 讀入設(shè)計
dc_shell > elaborate MY_DESIGN 構(gòu)造設(shè)計
dc_shell > insert_clock_gating 將符合條件的邏輯門控
dc_shell > create_clock -period 10 -name CLK 創(chuàng)建時鐘
dc_shell > propagate_constraints -gate_clock 加入時鐘門控單元的時序約束
手動和自動結(jié)合的方式可以達(dá)到最好的效率。
4.4.2 gating 單元的選擇
a)latch-based(圖7)
![門級](http://editerupload.eepw.com.cn/fetch/20160912/303352_2_5.jpg)
圖7
b)latch-free(圖8)
![luoji](http://editerupload.eepw.com.cn/fetch/20160912/303352_2_6.jpg)
評論