日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

(五)门级电路低功耗设计优化

發(fā)布時間:2023/12/10 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (五)门级电路低功耗设计优化 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

(1)門級電路的功耗優(yōu)化綜述

  門級電路的功耗優(yōu)化(Gate Level Power Optimization,簡稱GLPO)是從已經(jīng)映射的門級網(wǎng)表開始,對設(shè)計進行功耗的優(yōu)化以滿足功耗的約束,同時設(shè)計保持其性能,即滿足設(shè)計規(guī)則和時序的要求。功耗優(yōu)化前的設(shè)計是已經(jīng)映射到工藝庫的電路,如下圖所示:

?    

  門級電路的功耗優(yōu)化包括了設(shè)計總功耗,動態(tài)功耗以及漏電功耗的優(yōu)化。對設(shè)計做優(yōu)化時,優(yōu)化的優(yōu)先次序如下:

?    

由此我們可以找到, 優(yōu)化時,所產(chǎn)生的電路首先要滿足設(shè)計規(guī)則的要求,然后滿足延遲(時序)約束的要求,在滿足時序性能要求的基礎(chǔ)上,進行總功耗的優(yōu)化,再進行動態(tài)功耗的優(yōu)化和漏電功耗的優(yōu)化,最后對面積進行優(yōu)化。

  優(yōu)化時先滿足更高級優(yōu)先權(quán)的約束。進行低級優(yōu)先權(quán)約束的優(yōu)化不能以犧牲更高優(yōu)先權(quán)的約束為代價。功耗的優(yōu)化不能降低設(shè)計的時序。為了有效地進行功耗優(yōu)化,需要設(shè)計中有正的時間冗余(timing slacks)。功耗的減少以時序路徑的正時間冗余作為交換,即功耗優(yōu)化時會減少時序路徑上的正的時間冗余。因此,設(shè)計中正的時間冗余越多,就越有潛力降低功耗。

  通過上面的描述,對門級功耗優(yōu)化有了一下了解之后,這里先介紹一下靜態(tài)功耗優(yōu)化的方法——多閾值電壓設(shè)計,然后介紹基于EDA工具的動態(tài)功耗的優(yōu)化,接著介紹總體功耗的優(yōu)化;在最后介紹一種常用的門級低功耗的方法——電源門控。電源門控我放在明天發(fā)表,今天的內(nèi)容主要就是圍繞靜態(tài)、動態(tài)、總功耗來寫。

?

  (2)多閾值電壓設(shè)計

①多閾值電壓設(shè)計原理

  由于半導(dǎo)體工藝越來越先進,半導(dǎo)體器件的幾何尺寸越來越小,器件中的晶體管(門)數(shù)越來越多,器件的供電電壓越來越低,單元門的閾值電壓越來越低。由于單位面積中的單元門越來越多,功耗密度高,器件的功耗大。因此,設(shè)計時,我們要對功耗進行優(yōu)化和管理。在90nm或以下的工藝,靜態(tài)功耗要占整個設(shè)計功耗的20%以上。因此,使用超深亞微米工藝時,除了要降低動態(tài)功耗,還要降低靜態(tài)功耗。在超深亞微米工藝,單元門的閾值電壓漏電功耗(靜態(tài)功耗)有如下圖所示的關(guān)系:

?      

由圖可見,閾值電壓Vt以指數(shù)關(guān)系影響著漏電功耗。閾值電壓Vt與漏電功耗和單元門延遲有如下關(guān)系:

        閾值電壓Vt越高的單元,它的漏電功耗越,但門延遲越長,也就是速度

        閾值電壓Vt越低的單元,它的漏電功耗越,但門延遲越短,也就是速度

我們可以利用多閾值電壓工藝庫的這種特點,進行漏電功耗的優(yōu)化,設(shè)計靜態(tài)功耗低性能高的電路。

  一般的設(shè)計中,一個時序路徑組((timing path group)有多條時序路徑,延遲最大的路徑稱為關(guān)鍵路徑。根據(jù)多閾值電壓單元的特點,為了滿足時序的要求,關(guān)鍵路徑中使用低閾值電壓的單元(low Vt cells),以減少單元門的延遲,改善路徑的時序。而為了減少靜態(tài)功耗,在非關(guān)鍵路徑中使用高閾值電壓的單元(high Vt cells),以降低靜態(tài)功耗。因此,使用多閾值電壓的工藝庫,我們可以設(shè)計出低靜態(tài)功耗和高性能的設(shè)計。上面的描述如下圖所示:

?          

?

?

②門級網(wǎng)表/RTL代碼的多閾值電壓設(shè)計

  多閾值電壓設(shè)計可以在門級網(wǎng)表或者RTL代碼的時候就進行,也可以在后面布線后進行。門級網(wǎng)表/RTL代碼的多閾值電壓設(shè)計(或者說是靜態(tài)功耗優(yōu)化)流程如下所示:

?      

一個對應(yīng)的示例腳本如下所示:

    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

    ······

與以前的腳本不同,設(shè)置target_library時,我們用了多個庫。上列中,目標(biāo)庫設(shè)置為 "hvt.db ??svt.db ??lvt.db"腳本中使用set_max_leakage_power命令為電路設(shè)置靜態(tài)功耗的約束。在運行compile命令時,Power Compiler將根據(jù)時序和靜態(tài)功耗的約束,在目標(biāo)庫選擇合適的單元,在滿足時序約束的前提下,盡量使用Svt或Hvt單元,使優(yōu)化出的設(shè)計性能高,靜態(tài)功耗低。

  PS:如果在Physical Compiler工具(現(xiàn)在我們使用DC的拓撲模式)里做漏電功耗優(yōu)化時,我們可以保留一點正的時間冗余(positive slack),使電路不會在極限的時序下工作.這些時間冗余量也可被后面其他的優(yōu)化算法所使用。設(shè)置時間冗余的命令如下:

    set ??physopt_power_critical_range ??時間量

?

③布線后的多閾值電壓設(shè)計

  上面是門級網(wǎng)表/RTL代碼的多閾值電壓設(shè)計,下面簡單介紹布線后的多閾值電壓設(shè)計,流程如下圖所示:

?        

相應(yīng)的一個示例腳本如下所示:

    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”的選項,特別用于進行布線后的漏電功耗的優(yōu)化。優(yōu)化時,單元的外形名稱(footprint)保留下來,原有的布線保持不變。

?

?

④多閾值電壓設(shè)計與多閾值庫的報告

  進行漏電功耗的優(yōu)化時,Power Compile將報告如下的漏電優(yōu)化的信息:

?      

LEAKAGE POWER的列(Column)展出了內(nèi)部優(yōu)化的漏電成本值。它和報告出來的漏電功耗可能不一樣。我們用“report_power”命令得到功耗的準(zhǔn)確的報告。

?======================================================================

  我們現(xiàn)在來看一下多閾值庫。多閾值庫定義了兩個屬性,一個為庫屬性default_threshold_voltage_group,另一個為單獨庫單元的屬性threshold_voltage_group。然后報告多閾值電壓組的命令是:report_threshold_voltage_group.我們可以使用多閾值庫的這兩個屬性,報告出設(shè)計中使用多域值庫單元的比例,一個示例的腳本如下所示:

    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

報告得到的結(jié)果如下所示:

?    

?

?

  (3)基于EDA工具的動態(tài)功耗優(yōu)化

  前面介紹了靜態(tài)功耗的優(yōu)化,下面介紹動態(tài)功耗的優(yōu)化。動態(tài)功耗優(yōu)化通常在做完時序優(yōu)化后進行。動態(tài)功耗優(yōu)化時,需要提供電路的開關(guān)行為,工具根據(jù)每個節(jié)點的翻轉(zhuǎn)率,來優(yōu)化整個電路的動態(tài)功耗。用compile/physopt命令可以同時對時序和功耗做優(yōu)化。設(shè)置動態(tài)功耗的命令為:

            set_max_dynamic_power ?xxmw.(一般設(shè)置為0)

  動態(tài)功耗優(yōu)化的流程如下所示:

?          

一個對應(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

動態(tài)功耗的優(yōu)化的實現(xiàn)如上面所示。優(yōu)化過程用了很多技術(shù)比如插入緩沖器、相位分配之類的。由于這些都是power compiler在背后自動實現(xiàn)(或者說是進行低功耗優(yōu)化時工具使用的原理),不需要我們進行設(shè)置,因此這里不進行介紹。

?

  (4)總體功耗優(yōu)化

  前面分別介紹了靜態(tài)功耗和動態(tài)功耗的優(yōu)化方法。我們可以把它們結(jié)合在一起,進行整個設(shè)計總功耗的優(yōu)化。總功耗是動態(tài)功耗和靜態(tài)功耗的和,總功耗的優(yōu)先級比動態(tài)功耗和靜態(tài)功耗高??偣膬?yōu)化時,工具盡量減少動態(tài)功耗和靜態(tài)功耗的和。優(yōu)化時如果減少了漏電功耗增加了動態(tài)功耗,但它們的和減少了,優(yōu)化是有效的。反之亦然。我們可以通過設(shè)置開關(guān),使動態(tài)功耗優(yōu)化和靜態(tài)功耗優(yōu)化用不同的努力級別(effort levels)和權(quán)重(weights)進行優(yōu)化。

  總功耗的優(yōu)化流程如下圖所示:

?          

一個對應(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è)置為多閾值電壓的庫,用于做靜態(tài)功耗的優(yōu)化。讀入含有開關(guān)行為的saif文件,用于約束動態(tài)功耗的優(yōu)化。在設(shè)置總功耗的約束時,我們可以在set_max_total_power命令中使用靜態(tài)或/和動態(tài)功耗權(quán)重(weight)的選項,使工具在優(yōu)化時,偏重于靜態(tài)或動態(tài)功耗。假設(shè)P、Pd和Pl分別為總功耗、動態(tài)功耗和靜態(tài)功耗,Wd和Wl分別為動態(tài)功耗和靜態(tài)功耗的權(quán)重,則

        總功耗P = (Wd*Pd+Wl*P1)/Wd

  我們可以在DC或PC中設(shè)定只對功耗做優(yōu)化。這時候,工具僅優(yōu)化設(shè)計的功耗,而不會對更高優(yōu)先級的約束做任何的優(yōu)化和修正設(shè)計規(guī)則DRC違例。但是這種優(yōu)化也不會使設(shè)計的更高優(yōu)先級約束的性能變差和引起DRC違例。這種優(yōu)化的優(yōu)點在于運行時間較短,可用于優(yōu)化設(shè)計的動態(tài)功耗、靜態(tài)功耗和總功耗。在DC和PC中,只能以增量編輯的形式工作。

  PC中只對功耗做優(yōu)化的命令如下:

    set_max_total ??-power ?0 ?mw

    physopt ???-only_power_recovery

  DC中只對功耗做優(yōu)化的命令如下(由于現(xiàn)在PC在DC中,因此下面的腳本更常用):

    set ??compile_power_opto_only ??true

    set_max_leakage_power ?0 ?mw

    compile ?-inc

現(xiàn)在來記錄一下門級層次(有點書也說是在系統(tǒng)級)常用的一種低功耗方法——電源門控。

①電源門控概述與原理

  電源門控是指芯片中某個區(qū)域的供電電源被關(guān)掉,即該區(qū)域內(nèi)的邏輯電路的供電電源斷開。電源門控(Power Gating)的設(shè)計如下圖所示:

?            

?

如果某一模塊在一段時間內(nèi)不工作,可以關(guān)掉它的供電電源(關(guān)掉供電電源可以使用MTCMOS開關(guān),通常在使用后端工具進行布局布線時加入MTCMOS,這屬于后端知識,這里不進行介紹)。斷電后,設(shè)計進入睡眠模式,其漏電功率很小。喚醒時,為了使模塊盡快恢復(fù)工作模式,需要保持關(guān)電前的狀態(tài)。保持寄存器(retention ?register)可用于記憶狀態(tài)。使用保持寄存器設(shè)計電源門控如下圖所示:

?            

下面來解釋一下上面的設(shè)計:

  ·在睡眠模式,寄存器的電源Vdd2被切斷,因此它的漏電功耗極小;這時候僅僅保持鎖存器處于工作狀態(tài),寄存器的值保留在鎖存器里。由于鎖存器是用高閾值電壓的晶體管組成,漏電功耗很低。

  ·當(dāng)Restore信號被激活時,寄存器的電源Vdd2被加上,保留在鎖存器里的值被載入到寄存器。寄存器在工作(活躍)狀態(tài)時,它作為一般的寄存器工作。Save/Restore引腳也稱為電源門控引腳(power gating pins),它們被用于把電路置于適當(dāng)?shù)哪J健?/p>

  ·電源門控模塊的輸出端需要使用隔離單元(Isolation Cell)(我們在前面講過),因為在睡眠模式時,模塊的輸出為不確定值。為了保證在睡眠模式時,下一級的輸入不會懸空,插入隔離單元,提供一個"1”或”0”的輸出,使下一級的輸入為確定的邏輯值,如下所示:

?        

ISO為睡眠控制信號,用于控制隔離單元的運作。電路在正常工作模式時,ISO=0,ISO_ IN=IN。電路在睡眠模式時,ISO=1時,如果使用下面左圖的單元作為隔離單元,輸出邏輯為“1";如使用下面右圖的單元作為隔離單元,則輸出邏輯為“0":

?          

?

?

②工藝庫中的電源門控單元

  進行電源門控設(shè)計,需要用綜合庫的支持。綜合庫中的電源門控單元的庫模型如下所示:

?          

下面是庫模型的部分解釋:

  ·單元級屬性(Cell level attribute)

power_gating_cell:"type","type”不可以是“none”或空字符,它鑒別所描述的保持寄存器的類型。本例中保持寄存器的類型為PG_1。

  ·電源門控寄存器的功能描述

它是保持寄存器在活躍模式的功能。

  ·引腳級的屬性(Pin level attribute)

power_pin_1~ power_pin_5列出了現(xiàn)有的電源門控信號的名字。例如,power_pin_1可以用于定義為睡眠(sleep)信號,power_pin_2可以用于定義叫醒(wake)信號。power_pin_[1-5]信號的默認值是寄存器處于非工作(disable)狀況的值,可以是“0”或“1"。例如,如果當(dāng)power_pin_1的邏輯值為“1”時,電路進入睡眠模式,那么,其非工作(disable)狀況的值應(yīng)該是邏輯“0”。

?

③電源門控設(shè)計流程

了解了電源門控的原理和綜合庫的電源門控單元,下面我們就來介紹電源門控的設(shè)計流程。使用電源門控的設(shè)計流程和相應(yīng)的腳本如下所示:

?            

下面進行解釋一下部分命令:

  ·腳本中使用set_power_gating_style命令來映射保持寄存器。例如對于下面的代碼

    ······

    always@ (posedge clk) ?begin:sub_block_1

    ??g=d;

    end

    ······

set_power_gating ?-style ?-type ??PG_1 ?-hdl_block ??sub_block_1命令可以把代碼中的寄存器映射為保持寄存器。選項“-type PG_1”指定使用庫中類型為PG_1的保持寄存器。選項“-hdl_block ??sub_block_1”指定把RTL代碼中進程(process)名為“sub_block_1"中的所有寄存器用類型為PCG_ 1的保持寄存器代替。

  · 腳本中使用hookup_power_gating_ports命令來自動插入power_pin[1-5]端口和層次模塊的引腳。同類功耗引腳的端口或引腳會被連接在一起。例如屬性同為“power_pin_1”的引腳將被連接在一起,其默認名為“power_pin_1"。下圖為執(zhí)行hookup_power_gating_ports命令后設(shè)計中插入端口和層次模塊的引腳。我們可以使用選項“-default_port_naming_style”和“-port_naming_styles”來改變端口和/或?qū)哟文K引腳的命名:

?            

下面的腳本用set_power_gating_signal命令指定把電源門控引腳與現(xiàn)有的端口或?qū)哟我_連接起來,如下所示:

    set_power_gating_signal ?-power_pin_index ?1 ?[get_ports ?Save]

    set_power_gating_signal ?-power_pin_index ?2 ?[get_pins ?A/p1]

    ······

    hookup_power_gating_ports

結(jié)果如下所示:

?           

  ·最后,我們可以用report_power_gating命令報告設(shè)計中的電源門控單元,如下所示:

?          

總結(jié)

以上是生活随笔為你收集整理的(五)门级电路低功耗设计优化的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。