(數字IC)低功耗設計入門(六)——門級電路低功耗設計優化


三、門級電路低功耗設計優化

  (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"

    ······

    read_verilog   mydesign.v

    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 string  lvt.db:slow  default_threshold_voltage_group  LVt

    set_attr   -type string  svt.db:slow  default_threshold_voltage_group  SVt

    set_attr   -type string  hvt.db:slow  default_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

 

今天就先介紹到這里,明天將介紹門控電源的內容。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM