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