筆者經(jīng)歷過(guò)一個(gè)項(xiàng)目,,整個(gè)系統(tǒng)的功耗達(dá)到了100w,,而單片FPGA的功耗估計(jì)得到為20w左右,,有點(diǎn)過(guò)高了,,功耗過(guò)高則會(huì)造成發(fā)熱量增大,,溫度高最常見(jiàn)的問(wèn)題就是系統(tǒng)重啟,,另外對(duì)FPGA內(nèi)部的時(shí)序也不利,,導(dǎo)致可靠性下降,。其它硬件電路的功耗是固定的,只有FPGA的功耗有優(yōu)化的余地,,因此硬件團(tuán)隊(duì)則極力要求筆者所在的FPGA團(tuán)隊(duì)盡量多做些低功耗設(shè)計(jì),。筆者項(xiàng)目經(jīng)歷尚淺,還是第一次正視功耗這碼事兒,,由于項(xiàng)目時(shí)間比較緊,,而且xilinx方面也比較重視這個(gè)項(xiàng)目,因此當(dāng)時(shí)有xilinx的工程師過(guò)來(lái)對(duì)我們做了些培訓(xùn),,并且專(zhuān)門(mén)請(qǐng)了美國(guó)總部的專(zhuān)家過(guò)來(lái)與我們協(xié)同進(jìn)行設(shè)計(jì)功耗估計(jì),,還是比較給力的。
以下是筆者在這比較短的時(shí)間內(nèi)學(xué)習(xí)到的一些關(guān)于功耗估計(jì)和如何進(jìn)行低功耗設(shè)計(jì)的知識(shí):
功耗分析
整個(gè)FPGA設(shè)計(jì)的總功耗由三部分功耗組成:1. 芯片靜態(tài)功耗,;2. 設(shè)計(jì)靜態(tài)功耗,;3. 設(shè)計(jì)動(dòng)態(tài)功耗。
l芯片靜態(tài)功耗:FPGA在上電后還未配置時(shí),,主要由晶體管的泄露電流所消耗的功耗
l設(shè)計(jì)靜態(tài)功耗:當(dāng)FPGA配置完成后,,當(dāng)設(shè)計(jì)還未啟動(dòng)時(shí),需要維持I/O的靜態(tài)電流,,時(shí)鐘管理和其它部分電路的靜態(tài)功耗
l設(shè)計(jì)動(dòng)態(tài)功耗:FPGA內(nèi)設(shè)計(jì)正常啟動(dòng)后,,設(shè)計(jì)的功耗;這部分功耗的多少主要取決于芯片所用電平,,以及FPGA內(nèi)部邏輯和布線資源的占用
顯而易見(jiàn),,前兩部分的功耗取決于FPGA芯片及硬件設(shè)計(jì)本身,很難有較大的改善??梢詢?yōu)化是第3部分功耗:設(shè)計(jì)動(dòng)態(tài)功耗,,而且這部分功耗占總功耗的90%左右,因此所以降低設(shè)計(jì)動(dòng)態(tài)功耗是降低整個(gè)系統(tǒng)功耗的關(guān)鍵因素,。上面也提到過(guò)功耗較大會(huì)使FPGA發(fā)熱量升高,,那有沒(méi)有一個(gè)定量的分析呢?答案當(dāng)然是有,,如下式:
Tjmax > θJA * PD + TA
其中Tjmax表示FPGA芯片的最高結(jié)溫(maximum juncTIon temperature),;θJA表示FPGA與周?chē)髿猸h(huán)境的結(jié)區(qū)熱阻抗(JuncTIon to ambient thermal resistance),單位是°C/W,;PD表示FPGA總功耗(power dissipaTIon),,單位是W;TA表示周?chē)h(huán)境溫度,。
以XC7K410T-2FFG900I系列芯片為例,,θJA = 8.2°C/W,在TA = 55°C的環(huán)境中,,想要結(jié)溫Tjmax不超過(guò)100°C的情況下,,可以推算FPGA的總功耗:PD < (Tjmax – TA)/θJA=(100 - 55)/8.2=5.488W,之前估算的20W與之相差太遠(yuǎn),,因此優(yōu)化是必不可少的:
1.降低θJA:熱阻抗取決于芯片與環(huán)境的熱傳導(dǎo)效率,,可通過(guò)加散熱片或者風(fēng)扇減小熱阻抗
功耗估計(jì)
在講解低功耗設(shè)計(jì)之前,介紹一下xilinx的功耗估計(jì)工具XPE(Xilinx Power EsTImator),,XPE主要是在項(xiàng)目初期,,處于系統(tǒng)設(shè)計(jì),RTL代碼并未完善階段功耗估計(jì)時(shí)使用,。大家可以在xilinx官網(wǎng)上下載到:http://www.xilinx.com/power,,它是一個(gè)基于EXCEL的工具,如圖2所示,,功能做的十分豐富,,感嘆EXCEL也未免太強(qiáng)大了吧。
在設(shè)計(jì)完成綜合實(shí)現(xiàn)后,,則可以使用vivado自帶的功耗分析工具進(jìn)行精確計(jì)算功耗,。打開(kāi)綜合實(shí)現(xiàn)后的設(shè)計(jì),點(diǎn)擊report power即可得到功耗分析的結(jié)果,,如圖3,,4所示。
低功耗設(shè)計(jì)
關(guān)于FPGA低功耗設(shè)計(jì),,可從兩方面著手:1. 算法優(yōu)化,;2. FPGA資源使用效率優(yōu)化,。
1.算法優(yōu)化
算法優(yōu)化可分為兩個(gè)層次說(shuō)明:實(shí)現(xiàn)結(jié)構(gòu)和實(shí)現(xiàn)方法
首先肯定需要設(shè)計(jì)一種最優(yōu)化的算法實(shí)現(xiàn)結(jié)構(gòu),設(shè)計(jì)一種最優(yōu)化的結(jié)構(gòu),,使資源占用達(dá)到最少,,當(dāng)然功耗也能降到最低,但是還需要保證性能,,是FPGA設(shè)計(jì)在面積和速度上都能兼顧,。比如在選擇采用流水線結(jié)構(gòu)還是狀態(tài)機(jī)結(jié)構(gòu)時(shí),流水線結(jié)構(gòu)同一時(shí)間所有的狀態(tài)都在持續(xù)工作,,而狀態(tài)機(jī)結(jié)構(gòu)只有一個(gè)狀態(tài)是使能的,,顯而易見(jiàn)流水線結(jié)構(gòu)的功耗更多,但其數(shù)據(jù)吞吐率和系統(tǒng)性能更優(yōu),,因此需要合理選其一,,使系統(tǒng)能在面積和速度之間得到平衡;
另一個(gè)層面是具體的實(shí)現(xiàn)方法,,設(shè)計(jì)中所有吸收功耗的信號(hào)當(dāng)中,,時(shí)鐘是罪魁禍?zhǔn)?。雖然時(shí)鐘可能運(yùn)行在,?100?MHz,但從該時(shí)鐘派生出的信號(hào)卻通常運(yùn)行在主時(shí)鐘頻率的較小分量(通常為,?12%~15%),。此外,時(shí)鐘的扇出一般也比較高,。這兩個(gè)因素顯示,,為了降低功耗,應(yīng)當(dāng)認(rèn)真研究時(shí)鐘,。,?首先,如果設(shè)計(jì)的某個(gè)部分可以處于非活動(dòng)狀態(tài),,則可以考慮禁止時(shí)鐘樹(shù)翻轉(zhuǎn),,而不是使用時(shí)鐘使能。時(shí)鐘使能將阻止寄存器不必要的翻轉(zhuǎn),,但時(shí)鐘樹(shù)仍然會(huì)翻轉(zhuǎn),,消耗功率。其次,,隔離時(shí)鐘以使用最少數(shù)量的信號(hào)區(qū),。不使用的時(shí)鐘樹(shù)信號(hào)區(qū)不會(huì)翻轉(zhuǎn),從而減輕該時(shí)鐘網(wǎng)絡(luò)的負(fù)載,。
2.資源使用效率優(yōu)化
資源使用效率優(yōu)化是介紹一些在使用FPGA內(nèi)部的一些資源如BRAM,,DSP48E1時(shí),,可以優(yōu)化功耗的方法。FPGA動(dòng)態(tài)功耗主要體現(xiàn)為存儲(chǔ)器,、內(nèi)部邏輯,、時(shí)鐘、I/O消耗的功耗,。
其中存儲(chǔ)器是功耗大戶,,如xilinx FPGA中的存儲(chǔ)器單元Block RAM,因此在這邊主要介紹對(duì)BRAM的一些功耗優(yōu)化方法,。
如圖5中實(shí)例,,雖然BRAM只使用了7%,但是其功耗0.601W占了總設(shè)計(jì)的42%,,因此優(yōu)化BRAM的功耗能有效地減小FPGA的動(dòng)態(tài)功耗,。
下面介紹一下優(yōu)化BRAM功耗的方法:
(1) 使用“NO CHANGE”模式:在BRAM配置成True Dual Port時(shí),,需要選擇端口的操作模式:“Write First”,,“Read First” or “NO CHANGE”,避免讀操作和寫(xiě)操作產(chǎn)生沖突,,如圖6所示,;其中“NO CHANGE”表示BRAM不添加額外的邏輯防止讀寫(xiě)沖突,因此能減少功耗,,但是設(shè)計(jì)者需要保證程序運(yùn)行時(shí)不會(huì)發(fā)生讀寫(xiě)沖突,。
圖5中的功耗是設(shè)置成“Write First”時(shí)的,圖7中是設(shè)置成“NO CHANGE”后的功耗,,BRAM的功耗從0.614W降到了0.599W,,因?yàn)橹皇褂昧?%的BRAM,如果設(shè)計(jì)中使用了大量的BRAM,,效果能更加明顯,。
(2)控制“EN”信號(hào):BRAM的端口中有clock enable信號(hào),,如圖8所示,,在端口設(shè)置中可以將其使能,模塊例化時(shí)將其與讀/寫(xiě)信號(hào)連接在一起,,如此優(yōu)化可以使BRAM在沒(méi)有讀/寫(xiě)操作時(shí)停止工作,,節(jié)省不必要的功耗。
如圖9所示為控制“EN”信號(hào)優(yōu)化后的功耗情況,,BRAM功耗降到了0.589W
?。?)拼深度:當(dāng)設(shè)計(jì)中使用了大量的存儲(chǔ)器時(shí),需要多塊BRAM拼接而成,,如需要深度32K,,寬度32-bit,,32K32Bit的存儲(chǔ)量,但是單塊BRAM如何配置是個(gè)問(wèn)題,?7 series FPGA中是36Kb 的BRAM,,其中一般使用32Kb容量,因此可以配置成32K1-bit或者1K*32-bit,,多塊BRAM拼接時(shí),,前者是“拼寬度”(見(jiàn)圖10),后者是“拼深度”(見(jiàn)圖11),。兩種結(jié)構(gòu)在工作時(shí),,“拼寬度”結(jié)構(gòu)所有的BRAM需要同時(shí)進(jìn)行讀寫(xiě)操作;而“拼深度”結(jié)構(gòu)只需要其中一塊BRAM進(jìn)行讀寫(xiě),,因此在需要低功耗的情況下采用“拼深度”結(jié)構(gòu),,
注:“拼深度”結(jié)構(gòu)需要額外的數(shù)據(jù)選擇邏輯,增加了邏輯層數(shù),,為了降低功耗即犧牲了面積又犧牲了性能,。
更多信息可以來(lái)這里獲取==>>電子技術(shù)應(yīng)用-AET<<