通過(guò)功耗驅(qū)動(dòng)的新型后端流程可降低 Virtex-4、Virtex-5 和 Spartan-3 設(shè)計(jì)中的功耗。
自從 Xilinx 推出 FPGA 二十多年來(lái),研發(fā)工作大大提高了 FPGA 的速度和面積效率,縮小了 FPGA 與 ASIC 之間的差距,使 FPGA 成為實(shí)現(xiàn)數(shù)字電路的優(yōu)選平臺(tái)。今天,功耗日益成為 FPGA 供應(yīng)商及其客戶關(guān)注的問(wèn)題。
降低 FPGA 功耗是縮減封裝和散熱成本、提高器件可靠性以及打開(kāi)移動(dòng)電子設(shè)備等新興市場(chǎng)之門(mén)的關(guān)鍵。
Xilinx 在提供低功耗 FPGA 解決方案方面一馬當(dāng)先。本文說(shuō)明如何應(yīng)用計(jì)算機(jī)輔助設(shè)計(jì) (CAD) 技術(shù),如 Xilinx® ISE™ 9.2i 軟件中采納的技術(shù),來(lái)有效降低功耗。
CMOS 電路中的功耗由靜態(tài)(漏電)功耗和動(dòng)態(tài)功耗兩部分組成。動(dòng)態(tài)功耗是由電路信號(hào)上的躍遷所致,符合以下公式:
其中,Ci 表示信號(hào) i 的電容;fi 稱為“開(kāi)關(guān)活動(dòng)率”,表示信號(hào) i 上的躍遷速率;V 是電源電壓。
靜態(tài)功耗是電路在靜止、空閑狀態(tài)下的功耗。靜態(tài)功耗是由截止晶體管中的漏電流引起,主要是亞閾值漏電流和柵極氧化層漏電流。截止 MOS 晶體管屬不完全絕緣體,允許其漏極與源極之間有亞閥值漏電流。柵極氧化層漏電流是由通過(guò)晶體管柵極流向其管體、漏極和源極的隧道電流所致。
工藝尺寸縮?。ㄈ缃诓杉{ 65 納米工藝的趨勢(shì))意味著更低的電源電壓和更小的晶體管尺寸,致使導(dǎo)線長(zhǎng)度縮短、電容量減小以及總體動(dòng)態(tài)功耗降低。較小的工藝幾何尺寸還意味著較短的晶體管溝道和較薄的柵極氧化層,致使靜態(tài)功耗隨著工藝尺寸縮小而增加。
FPGA 中的功耗
對(duì)于實(shí)現(xiàn)給定的邏輯電路而言,F(xiàn)PGA 的可編程性和靈活性使其功耗效率比定制 ASIC 要低。FPGA 的配置電路和配置存儲(chǔ)器占用硅片面積,致使導(dǎo)線延長(zhǎng)和互連電容增加。在 FPGA 中,預(yù)制金屬導(dǎo)線段上附加的可編程布線開(kāi)關(guān)產(chǎn)生互連,從而加重了信號(hào)產(chǎn)生的電容性負(fù)載。
FPGA 中的動(dòng)態(tài)功耗大部分消耗在可編程布線架構(gòu)中。同理,靜態(tài)功耗與晶體管總寬度成正比。FPGA 的晶體管有相當(dāng)一部分是互連架構(gòu),這是造成漏電流的主要因素。因此,互連架構(gòu)應(yīng)該是 FPGA 功耗優(yōu)化的主要攻關(guān)目標(biāo)。
當(dāng)然,可以通過(guò)工藝技術(shù)、硬件架構(gòu)或電路級(jí)修改來(lái)解決功耗問(wèn)題。例如,Virtex™-5 FPGA 含有“對(duì)角線”互連資源,允許用較少的布線導(dǎo)體構(gòu)成連接,從而減少互連電容。在晶體管級(jí),Virtex-4 和 Virtex-5 兩種 FPGA 都是采用三柵極氧化層工藝技術(shù)來(lái)抑制漏電流。根據(jù)其速度、功耗和可靠性要求,可以為每個(gè)晶體管使用三倍氧化層厚度。與在標(biāo)準(zhǔn) FPGA 架構(gòu)中實(shí)現(xiàn)同樣功能相比,DSP 和處理器等硬 IP 模塊的數(shù)量激增和推廣使用也可以降低功耗。
也有可能,不必耗費(fèi)巨資更改硬件,就可以降低功耗。您可以通過(guò)功耗驅(qū)動(dòng)的新型 CAD 算法和設(shè)計(jì)流程(如 ISE 9.2i 軟件中采納的算法和設(shè)計(jì)流程)來(lái)解決功耗問(wèn)題。
ISE 9.2i 設(shè)計(jì)工具中的功耗優(yōu)化
ISE 9.2i 軟件在布局布線中體現(xiàn)了功耗優(yōu)化,并且通過(guò)一種后期布線技術(shù)來(lái)降低邏輯塊的內(nèi)部功耗。
布局
Xilinx 布局器中的核心算法采用了解析(數(shù)學(xué))技術(shù)。這種算法以有重疊的初始設(shè)計(jì)布局開(kāi)始,然后使用強(qiáng)行抽象法從高度擁擠區(qū)去除邏輯塊,最終形成可行的無(wú)重疊布局。一旦完成解析布局,便在已布局的設(shè)計(jì)上運(yùn)行交換式局部?jī)?yōu)化,以進(jìn)一步細(xì)化布局。本布局器中使用的傳統(tǒng)成本函數(shù)按以下公式考慮導(dǎo)線長(zhǎng)度和時(shí)間:
其中,W 和 T 分別是導(dǎo)線長(zhǎng)度成本和時(shí)間成本,a 和 b 是標(biāo)量加權(quán)系數(shù)。a 和 b 的值可以根據(jù)時(shí)間對(duì)導(dǎo)線長(zhǎng)度的相對(duì)優(yōu)先級(jí)設(shè)定。布局器的成本核算方案如圖 1 所示。
因?yàn)檫M(jìn)行布局時(shí)還沒(méi)有實(shí)際線路,所以導(dǎo)線長(zhǎng)度成本是依據(jù)導(dǎo)線長(zhǎng)度估算。同理,時(shí)間成本是依據(jù)用戶提供的限制條件和連接延遲的估算值。為了優(yōu)化功耗,我們用為成本函數(shù)增加功耗成分的方法擴(kuò)展了解析布局和局部?jī)?yōu)化,如圖 1 右側(cè)所示。修改后的成本函數(shù)如下:
其中,Pdynamic 是估算的動(dòng)態(tài)功耗(如前述定義),c 是標(biāo)量加權(quán)系數(shù)??梢詮姆抡嬷刑崛⌒盘?hào)開(kāi)關(guān)活動(dòng)率數(shù)據(jù),然后將其提供給工具。反之,如果不提供任何開(kāi)關(guān)活動(dòng)率數(shù)據(jù),則工具根據(jù)邏輯功能為初始輸入和后續(xù)輸出假定一個(gè)默認(rèn)的開(kāi)關(guān)活動(dòng)率,并且將活動(dòng)率推廣到其余信號(hào)。要獲得最佳結(jié)果,需要有用戶提供的開(kāi)關(guān)活動(dòng)率數(shù)據(jù)。
本文討論的布局和布線優(yōu)化旨在降低互連架構(gòu)中的功耗。
在布局過(guò)程中,信號(hào)的電容是未知的,因此必須估算。根據(jù)布局過(guò)程中已有的信號(hào)參數(shù),我們建立了一個(gè)電容估算經(jīng)驗(yàn)?zāi)P停?/p>
其中,f 表示普通數(shù)學(xué)函數(shù);Ci 是信號(hào) i 的電容;FOi 是信號(hào) i 的扇出數(shù);XSi 和 YSi 分別是布局中信號(hào) i 的 X 跨度和 Y 跨度。這些參數(shù)獨(dú)立于架構(gòu),并且在布局過(guò)程中已經(jīng)具備。
為建立此模型,我們提取了從 Xilinx 的客戶那里收集的一組設(shè)計(jì)中每個(gè)信號(hào)的電容、扇出數(shù)、X 跨度和 Y 跨度。
然后,我們用最小平方回歸分析法將電容整理成模型參數(shù)的一個(gè)二次函數(shù)。就各種設(shè)計(jì)平均而言,該解析公式的誤差為 30%。
布線
一旦將邏輯塊分配到 FPGA 上的物理位置,我們就必須為各塊之間的連接進(jìn)行布線。布線器采用一種協(xié)商擁塞布線算法,該算法在初始迭代中允許信號(hào)間短路。在后續(xù)迭代中,對(duì)短路的產(chǎn)生逐漸加大處罰,直到僅剩一個(gè)信號(hào)使用布線導(dǎo)體。對(duì)時(shí)間關(guān)鍵型連接布線的方式,應(yīng)盡量縮短其延遲,這涉及到計(jì)算密集型 RC 延時(shí)計(jì)算。不過(guò),大多數(shù)連接并非時(shí)間關(guān)鍵型。
在功耗監(jiān)控型布線器中,我們選擇優(yōu)化這類(lèi)非關(guān)鍵型連接的電容。為達(dá)到這一目的,我們針對(duì)非時(shí)間關(guān)鍵型連接修改了布線器的成本函數(shù),以便考慮電容,這與上述根據(jù)其他因素(如估算的延遲或不足)的方法截然相反。為了解這種算法,請(qǐng)看圖 2 中的布線圖。
該布線圖中的每個(gè)節(jié)點(diǎn)表示一個(gè)布線導(dǎo)體或邏輯塊引腳,每條邊線表示一個(gè)可編程布線開(kāi)關(guān)。布線器必須在源引腳和目標(biāo)引腳之間選擇一條路徑。圖中各節(jié)點(diǎn)內(nèi)部所示為該節(jié)點(diǎn)的原始成本和電容成本。若要盡量降低原始成本,源引腳和目標(biāo)引腳之間的布線就應(yīng)采納藍(lán)色路徑。然而,在功耗監(jiān)控型流程中,布線器會(huì)使用綠色路徑,因?yàn)檫@條路徑的總體電容較低。
功耗監(jiān)控型布局與布線的結(jié)果
我們使用傳統(tǒng)布局布線流程和上述功耗型流程兩種方法對(duì)一組工業(yè)設(shè)計(jì)進(jìn)行了布局布線。這些設(shè)計(jì)的初始輸入附加一個(gè)基于線性反饋移位寄存器 (LFSR-based) 的偽隨機(jī)矢量生成器,從而增加了內(nèi)置的自動(dòng)輸入矢量生成功能。這樣,我們無(wú)需大量使用外部波形就能完成動(dòng)態(tài)功耗的板級(jí)測(cè)量。
我們把這些工業(yè)設(shè)計(jì)映射到了 Spartan-3、Virtex-4 和 Virtex-5 器件中。結(jié)果顯示,動(dòng)態(tài)功耗降低率對(duì)于 Spartan-3 FPGA 達(dá) 14%,對(duì)于 Virtex-4 FPGA 達(dá) 11%,對(duì)于 Virtex-5 FPGA 達(dá) 12%。就所有設(shè)計(jì)平均而言,動(dòng)態(tài)功耗降低率對(duì)于 Spartan-3 FPGA 為 12%,對(duì)于 Virtex-4 FPGA 為 5%,對(duì)于 Virtex-5 FPGA 為 7%。就所有系列平均而言,速度性能下降在 3% 和 4% 之間,我們認(rèn)為這樣小的性能損失在注重功耗的設(shè)計(jì)中是可以接受的??紤]到這些僅僅是軟件修改的初始結(jié)果,我們認(rèn)為所取得的功耗效益是令人振奮的。
降低邏輯塊內(nèi)部功耗
本文討論的布局和布線優(yōu)化旨在降低互連架構(gòu)中的功耗。我們還設(shè)計(jì)了一種降低邏輯塊內(nèi)部功耗的方法,尤其是在未使用全部查找表 (LUT) 時(shí),降低 LUT 中的功耗(圖 3)。K 輸入 LUT 是一種小存儲(chǔ)器,用區(qū)區(qū)幾 K 輸入即可實(shí)現(xiàn)任意邏輯功能。圖 3 所示為用一個(gè)假設(shè)的三輸入 LUT(具有輸入 A1、A2 和 A3)實(shí)現(xiàn)二輸入邏輯“與”功能的過(guò)程。多路復(fù)用器樹(shù)左側(cè)的 LUT SRAM 所示內(nèi)容為邏輯“與”的真值表。
請(qǐng)注意,圖 3 中的輸入 A3 未使用。通常,未使用的輸入作為“無(wú)關(guān)項(xiàng)”處理,假設(shè)為 0 或 1。所以,為了在圖 3 所示的情況下說(shuō)明這一點(diǎn),Xilinx 軟件在 LUT SRAM 存儲(chǔ)器內(nèi)容的上下兩半部分中“重復(fù)”了該邏輯功能??蛻粼O(shè)計(jì)中經(jīng)常出現(xiàn)未使用的 LUT 輸入,特別是 Virtex-5 設(shè)計(jì),其中的 LUT 有六個(gè)輸入。
在 Virtex-5 硬件中,把未使用的 LUT 提升為邏輯 1;這一特性是我們優(yōu)化的根本。如果把 A3 提升為邏輯 1,那么對(duì)樹(shù)中最深層二輸入多路復(fù)用器的下半部輸入就永遠(yuǎn)不會(huì)被選中。不過(guò),因?yàn)檫壿嫻δ茉?LUT 存儲(chǔ)器內(nèi)容的上下兩半部分重復(fù),所以內(nèi)部多路復(fù)用器節(jié)點(diǎn) n1 和 n2 會(huì)根據(jù)信號(hào)輸入 A1 和 A2 的變化發(fā)生翻轉(zhuǎn)。這種翻轉(zhuǎn)白白耗費(fèi)動(dòng)態(tài)功率,因?yàn)?n1 和 n2 上的躍遷永遠(yuǎn)不會(huì)傳輸?shù)?LUT 的輸出端。
這種優(yōu)化需要在后期布線階段檢測(cè)未使用的 LUT 輸入,并且將 LUT 存儲(chǔ)器內(nèi)容設(shè)置為邏輯 0,從而在不破壞邏輯功能的情況下排除不必要的內(nèi)部翻轉(zhuǎn)?;氐綀D 3 的例子,LUT 存儲(chǔ)器內(nèi)容的下半部分將設(shè)置為邏輯 0。內(nèi)部節(jié)點(diǎn) n1 和 n2 上不會(huì)發(fā)生翻轉(zhuǎn),因此不會(huì)由于對(duì) n1 和 n2 充放電而消耗動(dòng)態(tài)功耗。
為了評(píng)價(jià)在工業(yè)設(shè)計(jì)上進(jìn)行的這一優(yōu)化,我們進(jìn)行了板級(jí)功耗測(cè)量,發(fā)現(xiàn)動(dòng)態(tài)功耗節(jié)省了若干個(gè)百分點(diǎn)。這些結(jié)果說(shuō)明大有前途,因?yàn)榭梢栽诓季€后進(jìn)行優(yōu)化,不會(huì)造成面積或性能損失,從這種意義上講,這種優(yōu)化是“免費(fèi)”的。
結(jié)論
在用設(shè)計(jì)工具進(jìn)一步降低功耗方面,存在著多種發(fā)展趨勢(shì)。在前端 HDL 綜合中,F(xiàn)PGA 可以借鑒 ASIC 領(lǐng)域中成熟的優(yōu)化方法,如時(shí)鐘門(mén)控法和運(yùn)算元隔離法。也可以使用針對(duì) FPGA 的功耗優(yōu)化方法,例如,將邏輯映射到可用的 Block RAM(可以用作大型 ROM)中,以此取代使用 LUT 和普通架構(gòu)的方法。
將功耗監(jiān)控型邏輯綜合和活動(dòng)率驅(qū)動(dòng)的工藝映射到 LUT 的方法在文獻(xiàn)中已有充分報(bào)道,這些方法將使 Xilinx FPGA 大大降低功耗。在布局方面,電容估算精度的提高會(huì)更大幅度地降低功耗。
我們感覺(jué)特別有潛力的兩個(gè)方面是偽信號(hào)優(yōu)化和漏電流優(yōu)化。偽信號(hào)是由電路中路徑延遲不均衡所致在信號(hào)上發(fā)生的偽躍遷。這種躍遷是不必要的,但在動(dòng)態(tài)功耗中卻占據(jù)著重要位置。抑制偽信號(hào)的 CAD 技術(shù)包括均衡路徑延遲或者沿偽信號(hào)最多的路徑插入寄存器。數(shù)字 CMOS 電路中的漏電路在很大程度上取決于電路使用的輸入狀態(tài)。因此,在 CAD 中減少漏電流的一種方法是自動(dòng)修改電路,使其信號(hào)值在漏電流狀態(tài)下保持較長(zhǎng)時(shí)間。
結(jié)果顯示,在通過(guò) ISE 設(shè)計(jì)工具降低功耗方面已經(jīng)取得長(zhǎng)足的進(jìn)步。在用軟件進(jìn)一步降低功耗方面,我們認(rèn)為前景一片光明。注重功耗的解決方案由功耗監(jiān)控型 CAD 算法和功耗優(yōu)化器件(如 Virtex-5 FPGA)組成,這一成功故事本身就頗為耐人尋味。低功耗軟硬件的不斷進(jìn)步將為 Xilinx FPGA 打開(kāi)進(jìn)入新興功耗敏感型市場(chǎng)的大門(mén)。