(1)門級(jí)電路的功耗優(yōu)化綜述
門級(jí)電路的功耗優(yōu)化(Gate Level Power Optimization,簡(jiǎn)稱GLPO)是從已經(jīng)映射的門級(jí)網(wǎng)表開始,對(duì)設(shè)計(jì)進(jìn)行功耗的優(yōu)化以滿足功耗的約束,同時(shí)設(shè)計(jì)保持其性能,即滿足設(shè)計(jì)規(guī)則和時(shí)序的要求。功耗優(yōu)化前的設(shè)計(jì)是已經(jīng)映射到工藝庫(kù)的電路,如下圖所示:
門級(jí)電路的功耗優(yōu)化包括了設(shè)計(jì)總功耗,動(dòng)態(tài)功耗以及漏電功耗的優(yōu)化。對(duì)設(shè)計(jì)做優(yōu)化時(shí),優(yōu)化的優(yōu)先次序如下:
由此我們可以找到, 優(yōu)化時(shí),所產(chǎn)生的電路首先要滿足設(shè)計(jì)規(guī)則的要求,然后滿足延遲(時(shí)序)約束的要求,在滿足時(shí)序性能要求的基礎(chǔ)上,進(jìn)行總功耗的優(yōu)化,再進(jìn)行動(dòng)態(tài)功耗的優(yōu)化和漏電功耗的優(yōu)化,最后對(duì)面積進(jìn)行優(yōu)化。
優(yōu)化時(shí)先滿足更高級(jí)優(yōu)先權(quán)的約束。進(jìn)行低級(jí)優(yōu)先權(quán)約束的優(yōu)化不能以犧牲更高優(yōu)先權(quán)的約束為代價(jià)。功耗的優(yōu)化不能降低設(shè)計(jì)的時(shí)序。為了有效地進(jìn)行功耗優(yōu)化,需要設(shè)計(jì)中有正的時(shí)間冗余(timing slacks)。功耗的減少以時(shí)序路徑的正時(shí)間冗余作為交換,即功耗優(yōu)化時(shí)會(huì)減少時(shí)序路徑上的正的時(shí)間冗余。因此,設(shè)計(jì)中正的時(shí)間冗余越多,就越有潛力降低功耗。
通過上面的描述,對(duì)門級(jí)功耗優(yōu)化有了一下了解之后,這里先介紹一下靜態(tài)功耗優(yōu)化的方法——多閾值電壓設(shè)計(jì),然后介紹基于EDA工具的動(dòng)態(tài)功耗的優(yōu)化,接著介紹總體功耗的優(yōu)化;在最后介紹一種常用的門級(jí)低功耗的方法——電源門控。電源門控我放在明天發(fā)表,今天的內(nèi)容主要就是圍繞靜態(tài)、動(dòng)態(tài)、總功耗來寫。
(2)多閾值電壓設(shè)計(jì)
①多閾值電壓設(shè)計(jì)原理
由于半導(dǎo)體工藝越來越先進(jìn),半導(dǎo)體器件的幾何尺寸越來越小,器件中的晶體管(門)數(shù)越來越多,器件的供電電壓越來越低,單元門的閾值電壓越來越低。由于單位面積中的單元門越來越多,功耗密度高,器件的功耗大。因此,設(shè)計(jì)時(shí),我們要對(duì)功耗進(jìn)行優(yōu)化和管理。在90nm或以下的工藝,靜態(tài)功耗要占整個(gè)設(shè)計(jì)功耗的20%以上。因此,使用超深亞微米工藝時(shí),除了要降低動(dòng)態(tài)功耗,還要降低靜態(tài)功耗。在超深亞微米工藝,單元門的閾值電壓和漏電功耗(靜態(tài)功耗)有如下圖所示的關(guān)系:
由圖可見,閾值電壓Vt以指數(shù)關(guān)系影響著漏電功耗。閾值電壓Vt與漏電功耗和單元門延遲有如下關(guān)系:
閾值電壓Vt越高的單元,它的漏電功耗越低,但門延遲越長(zhǎng),也就是速度慢;
閾值電壓Vt越低的單元,它的漏電功耗越高,但門延遲越短,也就是速度快。
我們可以利用多閾值電壓工藝庫(kù)的這種特點(diǎn),進(jìn)行漏電功耗的優(yōu)化,設(shè)計(jì)靜態(tài)功耗低性能高的電路。
一般的設(shè)計(jì)中,一個(gè)時(shí)序路徑組((timing path group)有多條時(shí)序路徑,延遲最大的路徑稱為關(guān)鍵路徑。根據(jù)多閾值電壓?jiǎn)卧奶攸c(diǎn),為了滿足時(shí)序的要求,關(guān)鍵路徑中使用低閾值電壓的單元(low Vt cells),以減少單元門的延遲,改善路徑的時(shí)序。而為了減少靜態(tài)功耗,在非關(guān)鍵路徑中使用高閾值電壓的單元(high Vt cells),以降低靜態(tài)功耗。因此,使用多閾值電壓的工藝庫(kù),我們可以設(shè)計(jì)出低靜態(tài)功耗和高性能的設(shè)計(jì)。上面的描述如下圖所示:
②門級(jí)網(wǎng)表/RTL代碼的多閾值電壓設(shè)計(jì)
多閾值電壓設(shè)計(jì)可以在門級(jí)網(wǎng)表或者RTL代碼的時(shí)候就進(jìn)行,也可以在后面布線后進(jìn)行。門級(jí)網(wǎng)表/RTL代碼的多閾值電壓設(shè)計(jì)(或者說是靜態(tài)功耗優(yōu)化)流程如下所示:
一個(gè)對(duì)應(yīng)的示例腳本如下所示:
set target_library "hvt.db svt.db lvt.db"
······
current_design top
source myconstraint.tcl
······
set_max_leakage -power 0mw
compile
······
與以前的腳本不同,設(shè)置target_library時(shí),我們用了多個(gè)庫(kù)。上列中,目標(biāo)庫(kù)設(shè)置為 "hvt.db svt.db lvt.db"腳本中使用set_max_leakage_power命令為電路設(shè)置靜態(tài)功耗的約束。在運(yùn)行compile命令時(shí),Power Compiler將根據(jù)時(shí)序和靜態(tài)功耗的約束,在目標(biāo)庫(kù)選擇合適的單元,在滿足時(shí)序約束的前提下,盡量使用Svt或Hvt單元,使優(yōu)化出的設(shè)計(jì)性能高,靜態(tài)功耗低。
PS:如果在Physical Compiler工具(現(xiàn)在我們使用DC的拓?fù)淠J剑├镒雎╇姽膬?yōu)化時(shí),我們可以保留一點(diǎn)正的時(shí)間冗余(positive slack),使電路不會(huì)在極限的時(shí)序下工作.這些時(shí)間冗余量也可被后面其他的優(yōu)化算法所使用。設(shè)置時(shí)間冗余的命令如下:
set physopt_power_critical_range 時(shí)間量
③布線后的多閾值電壓設(shè)計(jì)
上面是門級(jí)網(wǎng)表/RTL代碼的多閾值電壓設(shè)計(jì),下面簡(jiǎn)單介紹布線后的多閾值電壓設(shè)計(jì),流程如下圖所示:
相應(yīng)的一個(gè)示例腳本如下所示:
set target_library "hvt.db svt.db lvt.db"
read_verilog routed_design.v
current_design top
source top.sdc
······
set_max_leakage -power 0mw
physopt-preserve_footprint -only_power_recovery -post_route-incremental
physopt命令中使用了“-poat_route”的選項(xiàng),特別用于進(jìn)行布線后的漏電功耗的優(yōu)化。優(yōu)化時(shí),單元的外形名稱(footprint)保留下來,原有的布線保持不變。
④多閾值電壓設(shè)計(jì)與多閾值庫(kù)的報(bào)告
進(jìn)行漏電功耗的優(yōu)化時(shí),Power Compile將報(bào)告如下的漏電優(yōu)化的信息:
LEAKAGE POWER的列(Column)展出了內(nèi)部?jī)?yōu)化的漏電成本值。它和報(bào)告出來的漏電功耗可能不一樣。我們用“report_power”命令得到功耗的準(zhǔn)確的報(bào)告。
我們現(xiàn)在來看一下多閾值庫(kù)。多閾值庫(kù)定義了兩個(gè)屬性,一個(gè)為庫(kù)屬性:default_threshold_voltage_group,另一個(gè)為單獨(dú)庫(kù)單元的屬性:threshold_voltage_group。然后報(bào)告多閾值電壓組的命令是:report_threshold_voltage_group.我們可以使用多閾值庫(kù)的這兩個(gè)屬性,報(bào)告出設(shè)計(jì)中使用多域值庫(kù)單元的比例,一個(gè)示例的腳本如下所示:
set_attr -type stringlvt.db:slowdefault_threshold_voltage_group LVt
set_attr -type string svt.db:slow default_threshold_voltage_group SVt
set_attr -type string hvt.db:slowdefault_threshold_voltage-group HVt
report_threshold_voltage_group
報(bào)告得到的結(jié)果如下所示:
(3)基于EDA工具的動(dòng)態(tài)功耗優(yōu)化
前面介紹了靜態(tài)功耗的優(yōu)化,下面介紹動(dòng)態(tài)功耗的優(yōu)化。動(dòng)態(tài)功耗優(yōu)化通常在做完時(shí)序優(yōu)化后進(jìn)行。動(dòng)態(tài)功耗優(yōu)化時(shí),需要提供電路的開關(guān)行為,工具根據(jù)每個(gè)節(jié)點(diǎn)的翻轉(zhuǎn)率,來優(yōu)化整個(gè)電路的動(dòng)態(tài)功耗。用compile/physopt命令可以同時(shí)對(duì)時(shí)序和功耗做優(yōu)化。設(shè)置動(dòng)態(tài)功耗的命令為:
set_max_dynamic_power xxmw.(一般設(shè)置為0)
動(dòng)態(tài)功耗優(yōu)化的流程如下所示:
一個(gè)對(duì)應(yīng)的示例腳本如下所示:
read_verilog top.v
source constraints.tcl
set target_library "tech.db"
compile
read_saif
set_ max_dynamic_power 0 mw
compile -inc
動(dòng)態(tài)功耗的優(yōu)化的實(shí)現(xiàn)如上面所示。優(yōu)化過程用了很多技術(shù)比如插入緩沖器、相位分配之類的。由于這些都是power compiler在背后自動(dòng)實(shí)現(xiàn)(或者說是進(jìn)行低功耗優(yōu)化時(shí)工具使用的原理),不需要我們進(jìn)行設(shè)置,因此這里不進(jìn)行介紹。
(4)總體功耗優(yōu)化
前面分別介紹了靜態(tài)功耗和動(dòng)態(tài)功耗的優(yōu)化方法。我們可以把它們結(jié)合在一起,進(jìn)行整個(gè)設(shè)計(jì)總功耗的優(yōu)化。總功耗是動(dòng)態(tài)功耗和靜態(tài)功耗的和,總功耗的優(yōu)先級(jí)比動(dòng)態(tài)功耗和靜態(tài)功耗高。總功耗優(yōu)化時(shí),工具盡量減少動(dòng)態(tài)功耗和靜態(tài)功耗的和。優(yōu)化時(shí)如果減少了漏電功耗增加了動(dòng)態(tài)功耗,但它們的和減少了,優(yōu)化是有效的。反之亦然。我們可以通過設(shè)置開關(guān),使動(dòng)態(tài)功耗優(yōu)化和靜態(tài)功耗優(yōu)化用不同的努力級(jí)別(effort levels)和權(quán)重(weights)進(jìn)行優(yōu)化。
總功耗的優(yōu)化流程如下圖所示:
一個(gè)對(duì)應(yīng)的示例腳本如下所示:
read_verilog top.v
source constraints.tcl
set target_library "hvt.db svt.db lvt.db"
······
compile
read_saif
set_max_total_power 0 mw -leakage_weight 30
compile -inc
······
腳本中,target_library設(shè)置為多閾值電壓的庫(kù),用于做靜態(tài)功耗的優(yōu)化。讀入含有開關(guān)行為的saif文件,用于約束動(dòng)態(tài)功耗的優(yōu)化。在設(shè)置總功耗的約束時(shí),我們可以在set_max_total_power命令中使用靜態(tài)或/和動(dòng)態(tài)功耗權(quán)重(weight)的選項(xiàng),使工具在優(yōu)化時(shí),偏重于靜態(tài)或動(dòng)態(tài)功耗。假設(shè)P、Pd和Pl分別為總功耗、動(dòng)態(tài)功耗和靜態(tài)功耗,Wd和Wl分別為動(dòng)態(tài)功耗和靜態(tài)功耗的權(quán)重,則
總功耗P = (Wd*Pd+Wl*P1)/Wd
我們可以在DC或PC中設(shè)定只對(duì)功耗做優(yōu)化。這時(shí)候,工具僅優(yōu)化設(shè)計(jì)的功耗,而不會(huì)對(duì)更高優(yōu)先級(jí)的約束做任何的優(yōu)化和修正設(shè)計(jì)規(guī)則DRC違例。但是這種優(yōu)化也不會(huì)使設(shè)計(jì)的更高優(yōu)先級(jí)約束的性能變差和引起DRC違例。這種優(yōu)化的優(yōu)點(diǎn)在于運(yùn)行時(shí)間較短,可用于優(yōu)化設(shè)計(jì)的動(dòng)態(tài)功耗、靜態(tài)功耗和總功耗。在DC和PC中,只能以增量編輯的形式工作。
PC中只對(duì)功耗做優(yōu)化的命令如下:
set_max_total -power 0 mw
physopt -only_power_recovery
DC中只對(duì)功耗做優(yōu)化的命令如下(由于現(xiàn)在PC在DC中,因此下面的腳本更常用):
set compile_power_opto_only true
set_max_leakage_power 0 mw
compile -inc
-
晶體管
+關(guān)注
關(guān)注
77文章
9641瀏覽量
137876 -
電壓設(shè)計(jì)
+關(guān)注
關(guān)注
0文章
4瀏覽量
5763 -
門級(jí)電路
+關(guān)注
關(guān)注
0文章
15瀏覽量
1956
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論