文獻(xiàn)標(biāo)識(shí)碼: A
DOI:10.16157/j.issn.0258-7998.2017.05.008
中文引用格式: 黃友文,董洋. 一種HEVC標(biāo)準(zhǔn)中IDCT變換的FPGA實(shí)現(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無(wú)法滿足高分辨率視頻和圖像的問(wèn)題,,視頻編碼聯(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),,這樣就防止了采用浮點(diǎn)數(shù)在有限數(shù)據(jù)精度下編碼器與解碼器之間的誤差,。
HEVC支持的IDCT包括4,、8、16,、32點(diǎn)4種不同尺寸[1],,因此,硬件結(jié)構(gòu)的靈活性顯得格外重要,。目前已有的設(shè)計(jì)對(duì)全部尺寸的IDCT變換支持不夠全面[2-3],,文獻(xiàn)[4]可以實(shí)現(xiàn)全部尺寸的IDCT變換,但是由于采用單一IDCT計(jì)算單元,,不能很好地對(duì)視頻信號(hào)進(jìn)行實(shí)時(shí)處理,。
本文在研究HEVC標(biāo)準(zhǔn)中的IDCT算法之后[9],設(shè)計(jì)了一種可以統(tǒng)一處理各種尺寸的電路結(jié)構(gòu),。通過(guò)對(duì)IDCT變換矩陣系數(shù)的分解[6],,復(fù)用小尺寸的變換單元來(lái)構(gòu)建更大的變換單元,采用傳統(tǒng)的移位加進(jìn)行常系數(shù)的乘法,,同時(shí)優(yōu)化了移位加中的操作冗余,。利用FPGA內(nèi)部的雙口RAM進(jìn)行矩陣轉(zhuǎn)置,減少硬件消耗[5],。為了使設(shè)計(jì)達(dá)到預(yù)期的工作頻率,,采用流水線技術(shù)對(duì)其關(guān)鍵路徑進(jìn)行優(yōu)化,同時(shí)設(shè)計(jì)并行數(shù)據(jù)調(diào)度機(jī)制,,減少硬件等待時(shí)間,,提高硬件使用率,使其滿足了實(shí)時(shí)處理30幀/秒,、采樣率為4:2:0的視頻信號(hào)的要求,。
1 設(shè)計(jì)總體架構(gòu)
整體設(shè)計(jì)結(jié)構(gòu)如圖1所示,完整的二維IDCT由兩個(gè)IDCT運(yùn)算單元和一個(gè)轉(zhuǎn)置單元組成,,為了使系統(tǒng)可以擁有更高的數(shù)據(jù)吞吐量,,采用了經(jīng)典的全并行結(jié)構(gòu)??紤]到在HEVC解碼器中IDCT模塊需要配合其他相應(yīng)的模塊進(jìn)行工作,,采用并行的方式輸入,圖1箭頭方向表示數(shù)據(jù)及控制信號(hào)的流動(dòng),,為了簡(jiǎn)明起見,,結(jié)構(gòu)圖中省略了時(shí)鐘與復(fù)位信號(hào)。IDCT_1D模塊對(duì)數(shù)據(jù)進(jìn)行一維IDCT運(yùn)算,,IDCT_2D模塊對(duì)數(shù)據(jù)進(jìn)行二維IDCT運(yùn)算,,Transpose模塊對(duì)內(nèi)部的數(shù)據(jù)進(jìn)行轉(zhuǎn)置操作,,采用這種單向數(shù)據(jù)流的硬件電路,,減少了控制邏輯的復(fù)雜度,,數(shù)據(jù)處理過(guò)程如下:首先把使能sel信號(hào)拉高,模塊開始工作,,然后輸入指示數(shù)據(jù)塊TU的尺寸大小信號(hào)blk與數(shù)據(jù)in0~in31,,先按列輸入到一維變換單元IDCT_1D,計(jì)算得到的中間結(jié)果,,經(jīng)過(guò)轉(zhuǎn)置單元Transpose轉(zhuǎn)置之后,,再在二維變換單元IDCT_2D中進(jìn)行運(yùn)算,輸出最終結(jié)果,,rdy信號(hào)表示得到有效計(jì)算數(shù)據(jù),。
2 IDCT模塊
相比H.264/AVC,HEVC支持的整數(shù)IDCT尺寸為4×4,,8×8,,16×16,32×32四種塊尺寸變換[1],,圖1中的IDCT_1D模塊與IDCT_2D模塊實(shí)現(xiàn)結(jié)構(gòu)類似,,不同之處在于兩個(gè)模塊輸入的數(shù)據(jù)位寬,參考HM16.0[7],,IDCT_1D輸入位寬為8 bit,,即預(yù)測(cè)圖像與原始圖像的殘差值數(shù)據(jù)位寬為8 bit,經(jīng)過(guò)Transpose模塊的輸出數(shù)據(jù)位寬為16 bit,,即IDCT_2D輸入數(shù)據(jù)位寬為16 bit,,為了節(jié)約硬件資源并保證數(shù)據(jù)的準(zhǔn)確性,在經(jīng)過(guò)IDCT_1D運(yùn)算之后,,參考標(biāo)準(zhǔn)HM模型,,數(shù)據(jù)需要進(jìn)行截位操作,使其位寬保持在16 bit,,這樣就統(tǒng)一了硬件結(jié)構(gòu)與轉(zhuǎn)置操作過(guò)程中所需要的存儲(chǔ)器消耗[6],。
圖2顯示了IDCT運(yùn)算單元的內(nèi)部細(xì)節(jié),該設(shè)計(jì)復(fù)用了硬件結(jié)構(gòu),,使得在進(jìn)行較大尺寸的IDCT運(yùn)算時(shí)可以使用較小的IDCT模塊,,IDCT32為最終的運(yùn)算單元,可以進(jìn)行尺寸為32×32的IDCT運(yùn)算,,其內(nèi)部的IDCT4,、IDCT8、IDCT16,,分別完成4×4,、8×8、16×16三種運(yùn)算,。
當(dāng)sel信號(hào)高電平有效的時(shí)候,,表示模塊開始工作,,blk配合輸入數(shù)據(jù)送入到IDCT模塊,其取值為00,、01,、10、11,,分別表示了當(dāng)前變換塊為4×4,、8×8、16×16,、32×32的情況,。ps_i模塊的作用在于調(diào)整輸入數(shù)據(jù)的順序,如在計(jì)算IDCT4的時(shí)候,,送入IDCT模塊的數(shù)據(jù)為x0,、x1、x2,、x3,,但是由于復(fù)用了硬件模塊,需要經(jīng)過(guò)ps_i模塊調(diào)序后變?yōu)閤0,、x8,、x16、x24送入內(nèi)部的IDCT4單元進(jìn)行計(jì)算,,在計(jì)算IDCT8的時(shí)候,,在圖2中可以看到,IDCT8模塊復(fù)用了IDCT4作為計(jì)算單元的一部分,,輸入數(shù)據(jù)為x0,、x8、x16,、x24,,輸出結(jié)果作為偶部分,MCM4為4位常系數(shù)乘法部分,,輸入數(shù)據(jù)為x4,、x12、x20,、x28,,輸出結(jié)果作為奇部分,奇偶部分結(jié)果進(jìn)行簡(jiǎn)單的加減操作即可得到最終的結(jié)果,,IDCT16和IDCT32運(yùn)算過(guò)程與之類似,。每次計(jì)算開始的時(shí)候啟動(dòng)IDCT32模塊,輸出的結(jié)果為32個(gè)數(shù)據(jù),因此需要ps_o模塊選擇有效數(shù)據(jù)輸出,。
3 Transpose模塊
進(jìn)行二維IDCT變換的時(shí)候需要在兩個(gè)IDCT變換單元之間使用轉(zhuǎn)置單元對(duì)中間結(jié)果進(jìn)行行列轉(zhuǎn)置操作,,本文的轉(zhuǎn)置操作過(guò)程如圖3所示,變換數(shù)據(jù)塊最大為32×32,,所以使用32個(gè)16 bit的雙口RAM作為必要的數(shù)據(jù)存儲(chǔ)單元,為了減少對(duì)RAM頻繁操作,,采用統(tǒng)一的地址寫入,,列變換得到的數(shù)據(jù)依次寫入不同RAM單元的相同地址,在地址達(dá)到指示變換塊上限時(shí),,經(jīng)過(guò)一個(gè)時(shí)鐘周期的延時(shí)后,,利用模塊內(nèi)部的有限狀態(tài)機(jī)FSM(Finite State Machine)按RAM0、RAM1,、…,、RAM31的順序讀取數(shù)據(jù),由于采用了雙口RAM,,定義的輸出端口位寬為512 bit,,每個(gè)周期最多可以讀取32個(gè)數(shù)據(jù),根據(jù)不同的變換塊指示標(biāo)志,,可以實(shí)現(xiàn)不同數(shù)據(jù)塊的轉(zhuǎn)置操作,。
3.1 RAM讀取順序
宏觀上的轉(zhuǎn)置單元Transpose包含32個(gè)RAM,如何合理地讀取RAM是本設(shè)計(jì)要解決的一個(gè)問(wèn)題,,為了實(shí)現(xiàn)對(duì)不同變換數(shù)據(jù)塊的靈活操作,,在寫入數(shù)據(jù)的時(shí)候,寫入地址單元采用統(tǒng)一地址寫入,,即同時(shí)寫入多個(gè)RAM的相同地址,,地址的寫滿通過(guò)數(shù)據(jù)塊尺寸指示標(biāo)志blk判斷,這樣就簡(jiǎn)化了多個(gè)地址的寫入控制邏輯,。在讀取RAM的時(shí)候,,使用FSM順序訪問(wèn)RAM0~RAM31,blk指示當(dāng)前需要讀取到的RAM編號(hào),,根據(jù)參考模型HM16.0[9],,定義每個(gè)數(shù)據(jù)位16 bit,每塊RAM有512 bit,,輸出端口也定義為512 bit,,每讀取16 bit即表示一個(gè)有效數(shù)據(jù),這樣就保證了單周期讀取數(shù)據(jù)塊的所有行數(shù)據(jù),。
3.2 并行處理的數(shù)據(jù)調(diào)度
在全并行的結(jié)構(gòu)中,,轉(zhuǎn)置模塊在處理不同尺寸的數(shù)據(jù)塊時(shí)很容易發(fā)生數(shù)據(jù)覆蓋現(xiàn)象,即下一個(gè)數(shù)據(jù)塊到來(lái)的時(shí)候,當(dāng)前數(shù)據(jù)塊較大時(shí)未能全部讀取出來(lái),,造成原來(lái)數(shù)據(jù)被下一個(gè)到來(lái)的數(shù)據(jù)覆蓋掉的現(xiàn)象,。為解決這一問(wèn)題,本文借鑒計(jì)算機(jī)指令中的流水線處理方式,,數(shù)據(jù)調(diào)度如圖4所示,,圖中方塊代表若干時(shí)鐘周期,Transpose處理周期中W表示寫入數(shù)據(jù),,R表示讀取數(shù)據(jù),,F(xiàn)表示數(shù)據(jù)轉(zhuǎn)置完畢,當(dāng)前數(shù)據(jù)塊在轉(zhuǎn)置完成之后,,Transpose模塊發(fā)出完成信號(hào)使能IDCT_2D模塊,,即圖4中的F處,同時(shí)該信號(hào)使能外部的數(shù)據(jù)輸入單元發(fā)送下一數(shù)據(jù)塊,,當(dāng)前數(shù)據(jù)進(jìn)行IDCT_2D運(yùn)算的時(shí)候,,下一數(shù)據(jù)塊進(jìn)行IDCT_1D運(yùn)算,這樣兩個(gè)IDCT模塊就不存在數(shù)據(jù)處理的空閑期,,硬件利用率大大提高,。
4 電路仿真與實(shí)驗(yàn)結(jié)果分析
電路結(jié)構(gòu)采用Verilog HDL設(shè)計(jì),在Altera Arria II GX EP2AGX190FF35C4芯片上綜合通過(guò),,使用Modelsim進(jìn)行仿真,,并與HM標(biāo)準(zhǔn)模型中的結(jié)果進(jìn)行比較,結(jié)果一致,,證明本文設(shè)計(jì)的正確性,。
在結(jié)構(gòu)上,DCT與IDCT并無(wú)本質(zhì)的區(qū)別,,因此本文也選取了DCT的相關(guān)文獻(xiàn)作為參考,,本文的資源占用率如表1所示。
由表1可以發(fā)現(xiàn),,本文設(shè)計(jì)的結(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)對(duì)不同變換塊的一維DCT運(yùn)算,且效率較高,,但是并未對(duì)二維DCT變換進(jìn)行很好地優(yōu)化,。本文在面積與速度之間做了平衡,在滿足實(shí)時(shí)處理的基礎(chǔ)上,盡可能地減少資源的消耗,。設(shè)計(jì)結(jié)果表明,,最大延時(shí)為41個(gè)時(shí)鐘周期,模塊固定的流水線延時(shí)為9個(gè)時(shí)鐘周期,。為了可以對(duì)采樣率為4:2:0,、分辨率為3 840×2 160、幀率為30幀/秒的視頻實(shí)時(shí)處理,,滿足設(shè)計(jì)要求的電路工作時(shí)鐘最小為104 MHz(3 840×2 160×30×1.5/3.6),。設(shè)計(jì)結(jié)果完全滿足4k視頻處理的要求。
5 結(jié)論
本文提出了一種整數(shù)IDCT變換的FPGA設(shè)計(jì),,針對(duì)IDCT變換矩陣的特點(diǎn),采用復(fù)用模塊的方法減少了硬件消耗,。利用FPGA內(nèi)嵌的RAM資源進(jìn)行轉(zhuǎn)置,,節(jié)約了其內(nèi)部的寄存器資源,在滿足處理要求的基礎(chǔ)上盡量減少硬件消耗,,充分利用結(jié)構(gòu)特點(diǎn),,設(shè)計(jì)并行數(shù)據(jù)調(diào)度,提高了硬件的使用率,,對(duì)工程應(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實(shí)現(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的多長(zhǎng)度DCT變換的VLSI設(shè)計(jì)[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)