FPGA的邏輯架構(gòu)主要包括平臺(tái)部分和HEVC編碼器IP部分,其中FPGA平臺(tái)主要包括PCIE DMA以及DDR總線相關(guān)邏輯,這部分邏輯主要實(shí)現(xiàn)和host CPU的數(shù)據(jù)通信以及和FPGA板卡上的DDR通信。如圖7所示,F(xiàn)PGA架構(gòu)上實(shí)例化了4個(gè)HEVC core(具體幾個(gè)是和FPGA資源有關(guān)),每一個(gè)HEVC core完成HEVC編碼算法的完整處理,這里4核心并行工作,也就是同一時(shí)刻,4個(gè)編碼任務(wù)可以并行工作,同時(shí)輸出4條HEVC碼流。
圖7. FPGA內(nèi)部邏輯架構(gòu)
FPGA內(nèi)部邏輯主要包括:
HEVC CORE 0-3:H265編碼器IP,實(shí)現(xiàn)HEVC的編碼算法;
PCIE/DMA:實(shí)現(xiàn)和host CPU進(jìn)行通信;
REGISTER RW/INT:寄存器讀寫以及中斷處理;
HEVC RW ARBITER:總線讀寫仲裁模塊;
AXI INTERCONNECT/DDRC/DDRY: 總線控制訪問DDR邏輯;
FPGA圖像編碼流程
FPGA HEVC core內(nèi)部算法處理流程如圖8所示:分為當(dāng)前圖像載入,intra預(yù)測(cè)初選,intra預(yù)測(cè)精選,CABAC編碼,碼流輸出。
圖8. HEVC core內(nèi)部算法處理流程
那么如何設(shè)計(jì)HEVC core實(shí)現(xiàn)算法功能呢?這里,編碼器模塊流水線設(shè)計(jì)成四級(jí)流水,如圖9所示,四級(jí)流水CURLD/PINTRA/SEL/CABAC處理性能設(shè)計(jì)接近,并行起來后,平均處理每個(gè)LCU需要8400個(gè)周期,如果按照1080p圖片一共510個(gè)LCU計(jì)算,單核理論上編碼可以達(dá)到編46 幀/s (FPGA電路實(shí)現(xiàn)頻率200M),這樣4核并行能達(dá)到184幀/s。
具體來說,CURLD完成當(dāng)前圖像的載入邏輯,PINTRA完成intra預(yù)測(cè)初選35種模式的遍歷,得到最優(yōu)的預(yù)測(cè)模式,這級(jí)流水算法上做了優(yōu)化,預(yù)測(cè)參考像素沒有像傳統(tǒng)方式選擇重構(gòu)像素,而是選擇當(dāng)前像素做參考像素,這樣優(yōu)化,使得intra預(yù)測(cè)初選可以單獨(dú)劃分為一級(jí)流水,和intra預(yù)測(cè)精選分開,使得編碼器整體處理性能增加一倍。SEL完成幀內(nèi)預(yù)測(cè)模式精選以及RDO模式選擇,預(yù)測(cè)塊大小支持32/16/8,由于涉及到變換量化等運(yùn)算量大的邏輯,這一級(jí)流水是整個(gè)編碼器的資源消耗大戶,設(shè)計(jì)上在算法上以及邏輯資源消耗上做了權(quán)衡;CABAC模塊完成頭信息的碼流生成以及每個(gè)LCU的語法元素和殘差的編碼,并完成碼流的打包輸出,這一級(jí)流水的主要問題在于CABAC的性能是否足夠快,從而應(yīng)對(duì)QP比較小編碼更多bin的處理及時(shí)。
圖9. 運(yùn)算模塊流水線
性能和收益
用FPGA完成JPEG格式圖片轉(zhuǎn)成HEVC格式圖片,圖片分辨率大小為1920x1080,F(xiàn)PGA處理延時(shí)相比CPU降低7倍,F(xiàn)PGA處理性能是CPU機(jī)器的10倍,F(xiàn)PGA機(jī)型單位性能成本是CPU機(jī)型的1/3(參見圖10)。
圖10.圖片轉(zhuǎn)碼FPGA和CPU對(duì)比
總之,圖片算法的FPGA實(shí)現(xiàn),如果不考慮FPGA資源、硬件實(shí)現(xiàn)架構(gòu)和處理性能,CPU圖像壓縮算法可以完全在FPGA進(jìn)行“復(fù)制”實(shí)現(xiàn),F(xiàn)PGA算法壓縮性能可以完全等同CPU。但是現(xiàn)實(shí)沒那么理想,F(xiàn)PGA算法實(shí)現(xiàn)要統(tǒng)一考慮FPGA性能,資源,算法實(shí)現(xiàn)復(fù)雜度等要素,只有聯(lián)合設(shè)計(jì)才能設(shè)計(jì)出最優(yōu)秀的方案,為了發(fā)揮FPGA硬件實(shí)現(xiàn)的速度優(yōu)勢(shì),算法進(jìn)行優(yōu)化是必須要做的,綜合考慮各方面,我們?cè)趯?shí)際應(yīng)用中,往往FPGA的算法實(shí)現(xiàn)要做一些“讓步”。另外,某種型號(hào)的FPGA一旦被選定,它的運(yùn)算以及布線資源往往有個(gè)理論值,算法的實(shí)現(xiàn)同時(shí)要考慮FPGA資源的利用情況,如何能在相同的FPGA資源上實(shí)現(xiàn)最好的壓縮算法成為設(shè)計(jì)的難點(diǎn)。我們用FPGA進(jìn)行算法實(shí)現(xiàn)的目標(biāo)-----實(shí)現(xiàn)算法性能盡量接近CPU,圖片處理吞吐量,以及處理延遲讓CPU望其項(xiàng)背。
參考文獻(xiàn):
[1]. KPCB:瑪麗·米克爾“互聯(lián)網(wǎng)女皇”-2016年互聯(lián)網(wǎng)趨勢(shì)報(bào)告
[2]. G. J. Sullivan, J. R. Ohm, W. J. Han and T. Wiegand, "Overview of the High Efficiency Video Coding (HEVC) Standard," in IEEE Transactions on Circuits and Systems for Video Technology, vol. 22, no. 12, pp. 1649-1668, Dec. 2012.
[3].G. Pastuszak and A. Abramowski, "Algorithm and Architecture Design of the H.265/HEVC Intra Encoder," in IEEE Transactions on Circuits and Systems for Video Technology, vol. 26, no. 1, pp. 210-222, Jan. 2016.
[4].D. Zhou, J. Zhou, W. Fei and S. Goto, "Ultra-High-Throughput VLSI Architecture of H.265/HEVC CABAC Encoder for UHDTV Applications," in IEEE Transactions on Circuits and Systems for Video Technology, vol. 25, no. 3, pp. 497-507, March 2015.
評(píng)論