文獻(xiàn)標(biāo)識碼: 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無法滿足高分辨率視頻和圖像的問題,,視頻編碼聯(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è)計對全部尺寸的IDCT變換支持不夠全面[2-3],,文獻(xiàn)[4]可以實(shí)現(xiàn)全部尺寸的IDCT變換,但是由于采用單一IDCT計算單元,,不能很好地對視頻信號進(jìn)行實(shí)時處理,。
本文在研究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ī)制,,減少硬件等待時間,,提高硬件使用率,,使其滿足了實(shí)時處理30幀/秒、采樣率為4:2:0的視頻信號的要求,。
1 設(shè)計總體架構(gòu)
整體設(shè)計結(jié)構(gòu)如圖1所示,,完整的二維IDCT由兩個IDCT運(yùn)算單元和一個轉(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運(yùn)算,IDCT_2D模塊對數(shù)據(jù)進(jìn)行二維IDCT運(yùn)算,,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)行運(yù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模塊實(shí)現(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運(yùn)算之后,參考標(biāo)準(zhǔn)HM模型,,數(shù)據(jù)需要進(jìn)行截位操作,,使其位寬保持在16 bit,這樣就統(tǒng)一了硬件結(jié)構(gòu)與轉(zhuǎn)置操作過程中所需要的存儲器消耗[6],。
圖2顯示了IDCT運(yùn)算單元的內(nèi)部細(xì)節(jié),,該設(shè)計復(fù)用了硬件結(jié)構(gòu),使得在進(jìn)行較大尺寸的IDCT運(yùn)算時可以使用較小的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信號高電平有效的時候,,表示模塊開始工作,,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運(yùn)算過程與之類似。每次計算開始的時候啟動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)志,可以實(shí)現(xiàn)不同數(shù)據(jù)塊的轉(zhuǎn)置操作,。
3.1 RAM讀取順序
宏觀上的轉(zhuǎn)置單元Transpose包含32個RAM,如何合理地讀取RAM是本設(shè)計要解決的一個問題,,為了實(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運(yùn)算的時候,,下一數(shù)據(jù)塊進(jìn)行IDCT_1D運(yùn)算,,這樣兩個IDCT模塊就不存在數(shù)據(jù)處理的空閑期,硬件利用率大大提高,。
4 電路仿真與實(shí)驗(yàn)結(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運(yùn)算,,且效率較高,,但是并未對二維DCT變換進(jìn)行很好地優(yōu)化,。本文在面積與速度之間做了平衡,在滿足實(shí)時處理的基礎(chǔ)上,,盡可能地減少資源的消耗。設(shè)計結(jié)果表明,,最大延時為41個時鐘周期,模塊固定的流水線延時為9個時鐘周期,。為了可以對采樣率為4:2:0、分辨率為3 840×2 160,、幀率為30幀/秒的視頻實(shí)時處理,滿足設(shè)計要求的電路工作時鐘最小為104 MHz(3 840×2 160×30×1.5/3.6),。設(shè)計結(jié)果完全滿足4k視頻處理的要求,。
5 結(jié)論
本文提出了一種整數(shù)IDCT變換的FPGA設(shè)計,,針對IDCT變換矩陣的特點(diǎn),采用復(fù)用模塊的方法減少了硬件消耗,。利用FPGA內(nèi)嵌的RAM資源進(jìn)行轉(zhuǎn)置,節(jié)約了其內(nèi)部的寄存器資源,,在滿足處理要求的基礎(chǔ)上盡量減少硬件消耗,,充分利用結(jié)構(gòu)特點(diǎn),設(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實(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的多長度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)