前面講解了門(mén)級(jí)功耗的優(yōu)化方法,包括靜動(dòng)態(tài)和總體的功耗?,F(xiàn)在來(lái)記錄一下門(mén)級(jí)層次(有點(diǎn)書(shū)也說(shuō)是在系統(tǒng)級(jí))常用的一種低功耗方法——電源門(mén)控。
①電源門(mén)控概述與原理
電源門(mén)控是指芯片中某個(gè)區(qū)域的供電電源被關(guān)掉,即該區(qū)域內(nèi)的邏輯電路的供電電源斷開(kāi)。電源門(mén)控(Power Gating)的設(shè)計(jì)如下圖所示:
如果某一模塊在一段時(shí)間內(nèi)不工作,可以關(guān)掉它的供電電源(關(guān)掉供電電源可以使用MTCMOS開(kāi)關(guān),通常在使用后端工具進(jìn)行布局布線(xiàn)時(shí)加入MTCMOS,這屬于后端知識(shí),這里不進(jìn)行介紹)。斷電后,設(shè)計(jì)進(jìn)入睡眠模式,其漏電功率很小。喚醒時(shí),為了使模塊盡快恢復(fù)工作模式,需要保持關(guān)電前的狀態(tài)。保持寄存器(retention register)可用于記憶狀態(tài)。使用保持寄存器設(shè)計(jì)電源門(mén)控如下圖所示:
下面來(lái)解釋一下上面的設(shè)計(jì):
·在睡眠模式,寄存器的電源Vdd2被切斷,因此它的漏電功耗極小;這時(shí)候僅僅保持鎖存器處于工作狀態(tài),寄存器的值保留在鎖存器里。由于鎖存器是用高閾值電壓的晶體管組成,漏電功耗很低。
·當(dāng)Restore信號(hào)被激活時(shí),寄存器的電源Vdd2被加上,保留在鎖存器里的值被載入到寄存器。寄存器在工作(活躍)狀態(tài)時(shí),它作為一般的寄存器工作。Save/Restore引腳也稱(chēng)為電源門(mén)控引腳(power gating pins),它們被用于把電路置于適當(dāng)?shù)哪J健?/p>
·電源門(mén)控模塊的輸出端需要使用隔離單元(Isolation Cell)(我們?cè)谇懊嬷v過(guò)),因?yàn)樵谒吣J綍r(shí),模塊的輸出為不確定值。為了保證在睡眠模式時(shí),下一級(jí)的輸入不會(huì)懸空,插入隔離單元,提供一個(gè)"1”或”0”的輸出,使下一級(jí)的輸入為確定的邏輯值,如下所示:
ISO為睡眠控制信號(hào),用于控制隔離單元的運(yùn)作。電路在正常工作模式時(shí),ISO=0,ISO_ IN=IN。電路在睡眠模式時(shí),ISO=1時(shí),如果使用下面左圖的單元作為隔離單元,輸出邏輯為“1";如使用下面右圖的單元作為隔離單元,則輸出邏輯為“0":
②工藝庫(kù)中的電源門(mén)控單元
進(jìn)行電源門(mén)控設(shè)計(jì),需要用綜合庫(kù)的支持。綜合庫(kù)中的電源門(mén)控單元的庫(kù)模型如下所示:
下面是庫(kù)模型的部分解釋?zhuān)?/p>
·單元級(jí)屬性(Cell level attribute)
power_gating_cell:"type","type”不可以是“none”或空字符,它鑒別所描述的保持寄存器的類(lèi)型。本例中保持寄存器的類(lèi)型為PG_1。
·電源門(mén)控寄存器的功能描述
它是保持寄存器在活躍模式的功能。
·引腳級(jí)的屬性(Pin level attribute)
power_pin_1~ power_pin_5列出了現(xiàn)有的電源門(mén)控信號(hào)的名字。例如,power_pin_1可以用于定義為睡眠(sleep)信號(hào),power_pin_2可以用于定義叫醒(wake)信號(hào)。power_pin_[1-5]信號(hào)的默認(rèn)值是寄存器處于非工作(disable)狀況的值,可以是“0”或“1"。例如,如果當(dāng)power_pin_1的邏輯值為“1”時(shí),電路進(jìn)入睡眠模式,那么,其非工作(disable)狀況的值應(yīng)該是邏輯“0”。
③電源門(mén)控設(shè)計(jì)流程
了解了電源門(mén)控的原理和綜合庫(kù)的電源門(mén)控單元,下面我們就來(lái)介紹電源門(mén)控的設(shè)計(jì)流程。使用電源門(mén)控的設(shè)計(jì)流程和相應(yīng)的腳本如下所示:
下面進(jìn)行解釋一下部分命令:
·腳本中使用set_power_gating_style命令來(lái)映射保持寄存器。例如對(duì)于下面的代碼
······
always@ (posedge clk) begin:sub_block_1
g=d;
end
······
set_power_gating -style -type PG_1 -hdl_block sub_block_1命令可以把代碼中的寄存器映射為保持寄存器。選項(xiàng)“-type PG_1”指定使用庫(kù)中類(lèi)型為PG_1的保持寄存器。選項(xiàng)“-hdl_block sub_block_1”指定把RTL代碼中進(jìn)程(process)名為“sub_block_1"中的所有寄存器用類(lèi)型為PCG_ 1的保持寄存器代替。
· 腳本中使用hookup_power_gating_ports命令來(lái)自動(dòng)插入power_pin[1-5]端口和層次模塊的引腳。同類(lèi)功耗引腳的端口或引腳會(huì)被連接在一起。例如屬性同為“power_pin_1”的引腳將被連接在一起,其默認(rèn)名為“power_pin_1"。下圖為執(zhí)行hookup_power_gating_ports命令后設(shè)計(jì)中插入端口和層次模塊的引腳。我們可以使用選項(xiàng)“-default_port_naming_style”和“-port_naming_styles”來(lái)改變端口和/或?qū)哟文K引腳的命名:
下面的腳本用set_power_gating_signal命令指定把電源門(mén)控引腳與現(xiàn)有的端口或?qū)哟我_連接起來(lái),如下所示:
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命令報(bào)告設(shè)計(jì)中的電源門(mén)控單元,如下所示:
電源門(mén)控就到這里了,低功耗設(shè)計(jì)入門(mén)也快接近尾聲了...
評(píng)論