文獻(xiàn)標(biāo)識碼: A
DOI:10.16157/j.issn.0258-7998.2017.05.008
中文引用格式: 黃友文,董洋. 一種HEVC標(biāo)準(zhǔn)中IDCT變換的FPGA實現(xiàn)[J].電子技術(shù)應(yīng)用,2017,43(5):38-40.
英文引用格式: Huang Youwen,Dong Yang. An IDCT transform implementation on FPGA in HEVC[J].Application of Electronic Technique,2017,43(5):38-40.
0 引言
為解決當(dāng)前主流視頻編碼標(biāo)準(zhǔn)H.264/AVC無法滿足高分辨率視頻和圖像的問題,視頻編碼聯(lián)合開發(fā)組(Joint Collaborative Team on Video Coding)于2013年1月正式發(fā)布了新一代高效視頻編碼標(biāo)準(zhǔn)HEVC(High Efficiency Video Coding),HEVC的目標(biāo)是在H.264/AVC的基礎(chǔ)上,在相同碼率條件下,提高50%的壓縮率[1]。HEVC標(biāo)準(zhǔn)中采用的是整數(shù)逆離散余弦變換(Inverse Discrete Cosine Transform),這樣就防止了采用浮點數(shù)在有限數(shù)據(jù)精度下編碼器與解碼器之間的誤差。
HEVC支持的IDCT包括4、8、16、32點4種不同尺寸[1],因此,硬件結(jié)構(gòu)的靈活性顯得格外重要。目前已有的設(shè)計對全部尺寸的IDCT變換支持不夠全面[2-3],文獻(xiàn)[4]可以實現(xiàn)全部尺寸的IDCT變換,但是由于采用單一IDCT計算單元,不能很好地對視頻信號進(jìn)行實時處理。
本文在研究HEVC標(biāo)準(zhǔn)中的IDCT算法之后[9],設(shè)計了一種可以統(tǒng)一處理各種尺寸的電路結(jié)構(gòu)。通過對IDCT變換矩陣系數(shù)的分解[6],復(fù)用小尺寸的變換單元來構(gòu)建更大的變換單元,采用傳統(tǒng)的移位加進(jìn)行常系數(shù)的乘法,同時優(yōu)化了移位加中的操作冗余。利用FPGA內(nèi)部的雙口RAM進(jìn)行矩陣轉(zhuǎn)置,減少硬件消耗[5]。為了使設(shè)計達(dá)到預(yù)期的工作頻率,采用流水線技術(shù)對其關(guān)鍵路徑進(jìn)行優(yōu)化,同時設(shè)計并行數(shù)據(jù)調(diào)度機(jī)制,減少硬件等待時間,提高硬件使用率,使其滿足了實時處理30幀/秒、采樣率為4:2:0的視頻信號的要求。
1 設(shè)計總體架構(gòu)
整體設(shè)計結(jié)構(gòu)如圖1所示,完整的二維IDCT由兩個IDCT運算單元和一個轉(zhuǎn)置單元組成,為了使系統(tǒng)可以擁有更高的數(shù)據(jù)吞吐量,采用了經(jīng)典的全并行結(jié)構(gòu)??紤]到在HEVC解碼器中IDCT模塊需要配合其他相應(yīng)的模塊進(jìn)行工作,采用并行的方式輸入,圖1箭頭方向表示數(shù)據(jù)及控制信號的流動,為了簡明起見,結(jié)構(gòu)圖中省略了時鐘與復(fù)位信號。IDCT_1D模塊對數(shù)據(jù)進(jìn)行一維IDCT運算,IDCT_2D模塊對數(shù)據(jù)進(jìn)行二維IDCT運算,Transpose模塊對內(nèi)部的數(shù)據(jù)進(jìn)行轉(zhuǎn)置操作,采用這種單向數(shù)據(jù)流的硬件電路,減少了控制邏輯的復(fù)雜度,數(shù)據(jù)處理過程如下:首先把使能sel信號拉高,模塊開始工作,然后輸入指示數(shù)據(jù)塊TU的尺寸大小信號blk與數(shù)據(jù)in0~in31,先按列輸入到一維變換單元IDCT_1D,計算得到的中間結(jié)果,經(jīng)過轉(zhuǎn)置單元Transpose轉(zhuǎn)置之后,再在二維變換單元IDCT_2D中進(jìn)行運算,輸出最終結(jié)果,rdy信號表示得到有效計算數(shù)據(jù)。
2 IDCT模塊
相比H.264/AVC,HEVC支持的整數(shù)IDCT尺寸為4×4,8×8,16×16,32×32四種塊尺寸變換[1],圖1中的IDCT_1D模塊與IDCT_2D模塊實現(xiàn)結(jié)構(gòu)類似,不同之處在于兩個模塊輸入的數(shù)據(jù)位寬,參考HM16.0[7],IDCT_1D輸入位寬為8 bit,即預(yù)測圖像與原始圖像的殘差值數(shù)據(jù)位寬為8 bit,經(jīng)過Transpose模塊的輸出數(shù)據(jù)位寬為16 bit,即IDCT_2D輸入數(shù)據(jù)位寬為16 bit,為了節(jié)約硬件資源并保證數(shù)據(jù)的準(zhǔn)確性,在經(jīng)過IDCT_1D運算之后,參考標(biāo)準(zhǔn)HM模型,數(shù)據(jù)需要進(jìn)行截位操作,使其位寬保持在16 bit,這樣就統(tǒng)一了硬件結(jié)構(gòu)與轉(zhuǎn)置操作過程中所需要的存儲器消耗[6]。
圖2顯示了IDCT運算單元的內(nèi)部細(xì)節(jié),該設(shè)計復(fù)用了硬件結(jié)構(gòu),使得在進(jìn)行較大尺寸的IDCT運算時可以使用較小的IDCT模塊,IDCT32為最終的運算單元,可以進(jìn)行尺寸為32×32的IDCT運算,其內(nèi)部的IDCT4、IDCT8、IDCT16,分別完成4×4、8×8、16×16三種運算。
當(dāng)sel信號高電平有效的時候,表示模塊開始工作,blk配合輸入數(shù)據(jù)送入到IDCT模塊,其取值為00、01、10、11,分別表示了當(dāng)前變換塊為4×4、8×8、16×16、32×32的情況。ps_i模塊的作用在于調(diào)整輸入數(shù)據(jù)的順序,如在計算IDCT4的時候,送入IDCT模塊的數(shù)據(jù)為x0、x1、x2、x3,但是由于復(fù)用了硬件模塊,需要經(jīng)過ps_i模塊調(diào)序后變?yōu)閤0、x8、x16、x24送入內(nèi)部的IDCT4單元進(jìn)行計算,在計算IDCT8的時候,在圖2中可以看到,IDCT8模塊復(fù)用了IDCT4作為計算單元的一部分,輸入數(shù)據(jù)為x0、x8、x16、x24,輸出結(jié)果作為偶部分,MCM4為4位常系數(shù)乘法部分,輸入數(shù)據(jù)為x4、x12、x20、x28,輸出結(jié)果作為奇部分,奇偶部分結(jié)果進(jìn)行簡單的加減操作即可得到最終的結(jié)果,IDCT16和IDCT32運算過程與之類似。每次計算開始的時候啟動IDCT32模塊,輸出的結(jié)果為32個數(shù)據(jù),因此需要ps_o模塊選擇有效數(shù)據(jù)輸出。
3 Transpose模塊
進(jìn)行二維IDCT變換的時候需要在兩個IDCT變換單元之間使用轉(zhuǎn)置單元對中間結(jié)果進(jìn)行行列轉(zhuǎn)置操作,本文的轉(zhuǎn)置操作過程如圖3所示,變換數(shù)據(jù)塊最大為32×32,所以使用32個16 bit的雙口RAM作為必要的數(shù)據(jù)存儲單元,為了減少對RAM頻繁操作,采用統(tǒng)一的地址寫入,列變換得到的數(shù)據(jù)依次寫入不同RAM單元的相同地址,在地址達(dá)到指示變換塊上限時,經(jīng)過一個時鐘周期的延時后,利用模塊內(nèi)部的有限狀態(tài)機(jī)FSM(Finite State Machine)按RAM0、RAM1、…、RAM31的順序讀取數(shù)據(jù),由于采用了雙口RAM,定義的輸出端口位寬為512 bit,每個周期最多可以讀取32個數(shù)據(jù),根據(jù)不同的變換塊指示標(biāo)志,可以實現(xiàn)不同數(shù)據(jù)塊的轉(zhuǎn)置操作。
3.1 RAM讀取順序
宏觀上的轉(zhuǎn)置單元Transpose包含32個RAM,如何合理地讀取RAM是本設(shè)計要解決的一個問題,為了實現(xiàn)對不同變換數(shù)據(jù)塊的靈活操作,在寫入數(shù)據(jù)的時候,寫入地址單元采用統(tǒng)一地址寫入,即同時寫入多個RAM的相同地址,地址的寫滿通過數(shù)據(jù)塊尺寸指示標(biāo)志blk判斷,這樣就簡化了多個地址的寫入控制邏輯。在讀取RAM的時候,使用FSM順序訪問RAM0~RAM31,blk指示當(dāng)前需要讀取到的RAM編號,根據(jù)參考模型HM16.0[9],定義每個數(shù)據(jù)位16 bit,每塊RAM有512 bit,輸出端口也定義為512 bit,每讀取16 bit即表示一個有效數(shù)據(jù),這樣就保證了單周期讀取數(shù)據(jù)塊的所有行數(shù)據(jù)。
3.2 并行處理的數(shù)據(jù)調(diào)度
在全并行的結(jié)構(gòu)中,轉(zhuǎn)置模塊在處理不同尺寸的數(shù)據(jù)塊時很容易發(fā)生數(shù)據(jù)覆蓋現(xiàn)象,即下一個數(shù)據(jù)塊到來的時候,當(dāng)前數(shù)據(jù)塊較大時未能全部讀取出來,造成原來數(shù)據(jù)被下一個到來的數(shù)據(jù)覆蓋掉的現(xiàn)象。為解決這一問題,本文借鑒計算機(jī)指令中的流水線處理方式,數(shù)據(jù)調(diào)度如圖4所示,圖中方塊代表若干時鐘周期,Transpose處理周期中W表示寫入數(shù)據(jù),R表示讀取數(shù)據(jù),F(xiàn)表示數(shù)據(jù)轉(zhuǎn)置完畢,當(dāng)前數(shù)據(jù)塊在轉(zhuǎn)置完成之后,Transpose模塊發(fā)出完成信號使能IDCT_2D模塊,即圖4中的F處,同時該信號使能外部的數(shù)據(jù)輸入單元發(fā)送下一數(shù)據(jù)塊,當(dāng)前數(shù)據(jù)進(jìn)行IDCT_2D運算的時候,下一數(shù)據(jù)塊進(jìn)行IDCT_1D運算,這樣兩個IDCT模塊就不存在數(shù)據(jù)處理的空閑期,硬件利用率大大提高。
4 電路仿真與實驗結(jié)果分析
電路結(jié)構(gòu)采用Verilog HDL設(shè)計,在Altera Arria II GX EP2AGX190FF35C4芯片上綜合通過,使用Modelsim進(jìn)行仿真,并與HM標(biāo)準(zhǔn)模型中的結(jié)果進(jìn)行比較,結(jié)果一致,證明本文設(shè)計的正確性。
在結(jié)構(gòu)上,DCT與IDCT并無本質(zhì)的區(qū)別,因此本文也選取了DCT的相關(guān)文獻(xiàn)作為參考,本文的資源占用率如表1所示。
由表1可以發(fā)現(xiàn),本文設(shè)計的結(jié)構(gòu)可以處理HEVC中多種變換塊尺寸,并且擁有較高的吞吐率。文獻(xiàn)[2]擁有較大的數(shù)據(jù)吞吐量,但是不能很好地處理HEVC中所有的變換塊,文獻(xiàn)[4]、文獻(xiàn)[7]采用面積優(yōu)先的方式,單周期處理量較小,文獻(xiàn)[8]能夠?qū)崿F(xiàn)對不同變換塊的一維DCT運算,且效率較高,但是并未對二維DCT變換進(jìn)行很好地優(yōu)化。本文在面積與速度之間做了平衡,在滿足實時處理的基礎(chǔ)上,盡可能地減少資源的消耗。設(shè)計結(jié)果表明,最大延時為41個時鐘周期,模塊固定的流水線延時為9個時鐘周期。為了可以對采樣率為4:2:0、分辨率為3 840×2 160、幀率為30幀/秒的視頻實時處理,滿足設(shè)計要求的電路工作時鐘最小為104 MHz(3 840×2 160×30×1.5/3.6)。設(shè)計結(jié)果完全滿足4k視頻處理的要求。
5 結(jié)論
本文提出了一種整數(shù)IDCT變換的FPGA設(shè)計,針對IDCT變換矩陣的特點,采用復(fù)用模塊的方法減少了硬件消耗。利用FPGA內(nèi)嵌的RAM資源進(jìn)行轉(zhuǎn)置,節(jié)約了其內(nèi)部的寄存器資源,在滿足處理要求的基礎(chǔ)上盡量減少硬件消耗,充分利用結(jié)構(gòu)特點,設(shè)計并行數(shù)據(jù)調(diào)度,提高了硬件的使用率,對工程應(yīng)用具有一定的指導(dǎo)意義。
參考文獻(xiàn)
[1] SULLIVAN G J,OHM J R,HAN W J,et al.Overview of the high efficiency video coding(HEVC) standard [J].IEEE Transactions on Circuits and Systems for Video Technology,2012,22(12):1649-1668.
[2] PARK J S,NAM W J,HAN S M,et al.2-D large inverse transform (16×16,32×32) for HEVC(high efficiency video coding)[J].Journal of Semiconductor Technology and Science(JSTS),2012,12(2):203-211.
[3] CONCEICAO R,SOUZA J C,JESKE R,et al.Hardware design for the 32×32 IDCT of the HEVC video coding standard[M].Symposium on Integrated Circuits and Systems Design. Curitiba;IEEE Press.2013:1-6.
[4] SHEN S,SHEN W W,SHEN Y,et al.A unified 4/8/16/32-point integer IDCT architecture for multiple video coding standards[M].IEEE International Conference on Multimedia and Expo.2012:788-793.
[5] 許亞軍,韓雪松,韓應(yīng)征.AVS二維DCT變換的FPGA實現(xiàn)[J].電視技術(shù),2013,37(11):18-21.
[6] SZE V,BUDAGAVI M,J S G.High efficiency video coding(HEVC)-algorithms and architectures[M].Springer:2014.
[7] TIKEKAR M,HUANG C T,SZE V,et al.Energy and area-efficient harware implementation of HEVC inverse transform and dequantization[M].International Conference on Image Processing(ICIP).IEEE Press.2014:2100-2104.
[8] 楊啟洲,劉一清.基于HEVC的多長度DCT變換的VLSI設(shè)計[J].微電子學(xué),2015,45(1):100-103.
[9] Joint collaborative team on video coding(JCT-VC).HEVC Test Model HM-16.0[EB/OL].https://hevc.hhi.fraunhofer.de/trac/hevc/browser/tags/HM-16.0.
作者信息:
黃友文,董 洋
(江西理工大學(xué) 信息工程學(xué)院,江西 贛州341000)