黃圣勛,王法翔,鐘昌標(biāo)
(福州大學(xué) 物理與信息工程學(xué)院 福建省集成電路設(shè)計(jì)中心,福建 福州350002)
AVS是我國自主研發(fā)的數(shù)字音視頻編解碼標(biāo)準(zhǔn),并于2006年獲批成為國家標(biāo)準(zhǔn)實(shí)施,2012年11月起被強(qiáng)制執(zhí)行,所有在中國大陸上市的地面數(shù)字電視接收機(jī)(包括機(jī)頂盒、一體機(jī))需內(nèi)置AVS解碼功能,否則將無法銷售。作為我國具有自主知識產(chǎn)權(quán)的第二代信源編解碼標(biāo)準(zhǔn),其發(fā)展對我國的數(shù)字音視頻業(yè)務(wù)具有極其重要的意義。
與H.264相比,AVS視頻標(biāo)準(zhǔn)解碼復(fù)雜度只相當(dāng)于H.264的30%,編碼復(fù)雜度相當(dāng)于H.264的70%。其核心技術(shù)主要包括:特殊的幀間預(yù)測運(yùn)動(dòng)補(bǔ)償、1/4精度像素插值、幀內(nèi)預(yù)測、去塊效應(yīng)濾波、二維熵編碼和8×8整數(shù)變換等[1]。由此可見,作為AVS編碼器的重要組成部分,研究幀內(nèi)預(yù)測的硬件設(shè)計(jì)與實(shí)現(xiàn)意義重大。
在現(xiàn)有的幀內(nèi)預(yù)測硬件實(shí)現(xiàn)方案中,由于基于可重構(gòu)硬件電路只能逐個(gè)計(jì)算各預(yù)測模式的預(yù)測值,處理速度較慢,難以滿足高清實(shí)時(shí)編碼的需求,因此在高清視頻編碼器幀內(nèi)預(yù)測部分的硬件設(shè)計(jì)中,通常采用將具有相同預(yù)測值求解算法的預(yù)測模式共用一個(gè)預(yù)測器的設(shè)計(jì)方案,文獻(xiàn)[2-3]都采用這樣的設(shè)計(jì)。文獻(xiàn)[2]提出了一種基于并行流水的幀內(nèi)預(yù)測硬件架構(gòu),實(shí)現(xiàn)6種預(yù)測模式的并行處理,取得了很好效果,但其并沒有充分利用6種預(yù)測模式算法上的相似性進(jìn)行運(yùn)算單元的進(jìn)一步共享,資源利用率不夠。而文獻(xiàn)[3]雖然相對于文獻(xiàn)[2]進(jìn)一步實(shí)現(xiàn)了運(yùn)算單元的資源復(fù)用,但參考數(shù)據(jù)輸入控制機(jī)制復(fù)雜,資源消耗大,并且一個(gè)時(shí)鐘只能預(yù)測各模式的一個(gè)像素點(diǎn),難以滿足高清實(shí)時(shí)編碼的要求。
本文在采用并行流水處理結(jié)構(gòu)的基礎(chǔ)上,將亮度和色度多種預(yù)測模式共用一個(gè)預(yù)測單元。同時(shí)根據(jù)各模式算法的相似性,結(jié)合移位寄存器操作設(shè)計(jì)了一種新的預(yù)測值計(jì)算架構(gòu),簡化了參考數(shù)據(jù)輸入控制機(jī)制,進(jìn)一步提高了預(yù)測值計(jì)算單元的硬件復(fù)用,減少資源消耗。
AVS幀內(nèi)預(yù)測算法采用了代表空間域紋理方向的多種預(yù)測模式,利用當(dāng)前塊相鄰的左邊和上邊塊重建數(shù)據(jù)作為參考樣本,實(shí)現(xiàn)對當(dāng)前塊數(shù)據(jù)的預(yù)測,有效地去除了相鄰塊的相關(guān)性,很大程度上提高了幀內(nèi)預(yù)測效率[4]。
AVS視頻編解碼標(biāo)準(zhǔn)中,幀內(nèi)預(yù)測分為亮度預(yù)測和色度預(yù)測,亮度預(yù)測有5種預(yù)測模式(如圖1所示):Vertical模式(模式值0),Horizontal模式(模式值1),DC模式(模式值2),Down_Left模式(模式值3),Down_Right模式(模式值4);色度預(yù)測模式有4種預(yù)測模式:DC模式(模式值0),Horizontal模式(模式值1),Vertical模式(模式值2),Plane模式(模式值3)。其中亮度和色度預(yù)測有3種預(yù)測模式的算法是相同的,因此在幀內(nèi)預(yù)測中共有6種不同的預(yù)測模式。
圖1 8×8亮度塊幀內(nèi)預(yù)測模式
由圖1可知,幀內(nèi)預(yù)測各模式的預(yù)測方向不同,需要選取的周邊塊參考數(shù)據(jù)也不同,因此在預(yù)測值計(jì)算之前需要提前判斷當(dāng)前塊的左邊塊和上邊塊是否存在,根據(jù)周邊塊可用性確定預(yù)測塊可用預(yù)測模式及參考數(shù)據(jù)。幀內(nèi)預(yù)測結(jié)束后,需要計(jì)算預(yù)測塊和原始塊之間的殘差數(shù)據(jù)用于代價(jià)計(jì)算。模式判決模塊通過比較,選取代價(jià)值最小的模式作為最終的預(yù)測模式,并將相應(yīng)模式的殘差和預(yù)測數(shù)據(jù)輸出,經(jīng)過重建后作為后邊塊的參考數(shù)據(jù)。
在實(shí)際應(yīng)用中一般有三種代價(jià)值計(jì)算方式,分別為SSD,SATD和SAD[5]。其 中采用SSD的率失真優(yōu)化(RDO)模式選擇算法性能最佳,但運(yùn)算復(fù)雜度高,不利于硬件實(shí)現(xiàn)。SAD運(yùn)算復(fù)雜度低,硬件消耗小,但性能一般,而SATD性能較好,介于SSD和SAD之間,同時(shí)硬件復(fù)雜度不大,資源消耗適中,因此在本設(shè)計(jì)中采用SATD作為模式代價(jià)值計(jì)算算法。
AVS編碼器幀內(nèi)預(yù)測主要分為預(yù)測值計(jì)算和模式判別兩部分,而運(yùn)算中所需的參考像素值和圖像原始數(shù)據(jù)則存儲在相應(yīng)的RAM中,圖2給出了幀內(nèi)預(yù)測模塊硬件結(jié)構(gòu)框圖。由圖可知,計(jì)算預(yù)測值之前需要先判定當(dāng)前塊周邊塊的可用性(包括左下、左邊、左上、上邊和右上邊快),根據(jù)判定結(jié)果確定可用預(yù)測模式及其對應(yīng)的參考樣本數(shù)據(jù)。預(yù)測單元從RAM中取得參考像素值C0~C17和R0~R17后進(jìn)行預(yù)測值計(jì)算,其中亮度和色度共用一個(gè)計(jì)算單元,同時(shí)每種預(yù)測模式對應(yīng)一個(gè)預(yù)測器,實(shí)現(xiàn)各模式的并行計(jì)算。預(yù)測值計(jì)算結(jié)束后將預(yù)測結(jié)果mpr_data輸出,進(jìn)行殘差計(jì)算以及SATD計(jì)算,從而判定最優(yōu)預(yù)測模式best_mode作為最終預(yù)測模式,并將相應(yīng)的殘差數(shù)據(jù)送入變換量化、反變換反量化單元進(jìn)行處理,然后與存儲在預(yù)測結(jié)果RAM中的預(yù)測值進(jìn)行數(shù)據(jù)重建,用于后邊塊的預(yù)測。
圖2 幀內(nèi)預(yù)測硬件結(jié)構(gòu)框圖
需要說明的是,色度預(yù)測的代價(jià)計(jì)算需要綜合考慮2個(gè)色度塊中相應(yīng)代價(jià)之和作為該模式代價(jià)值,因此在第1個(gè)色度塊預(yù)測結(jié)束后需要將相應(yīng)的代價(jià)值及預(yù)測數(shù)據(jù)進(jìn)行緩存,直到2個(gè)色度塊都完成預(yù)測后才能得到最終的色度預(yù)測模式。
通過分析幀內(nèi)預(yù)測算法可知,AVS雖然具有多種幀內(nèi)預(yù)測模式,但除了色度Plane模式外,各模式預(yù)測值計(jì)算框架都是類似的,每種模式都是以(a+2×b+c+2)>>2的3抽頭濾波結(jié)構(gòu)為核心[6]。在本文的設(shè)計(jì)中也采用該3抽頭濾波結(jié)構(gòu)作為幀內(nèi)預(yù)測運(yùn)算的最小單元,應(yīng)用于DC模式、Down_Right模式和Down_Left模式中。圖3中給出了針對此最小單元設(shè)計(jì)的硬件電路。對于Vertical模式和Horizontal模式,由于其預(yù)測值可由參考樣本直接獲得,因此只需要進(jìn)行數(shù)據(jù)賦值。
為滿足高清實(shí)時(shí)編碼要求,提高幀內(nèi)預(yù)測的速度,本設(shè)計(jì)采用6路并行流水的硬件架構(gòu),預(yù)測一個(gè)8×8塊只需要8個(gè)時(shí)鐘周期。由于采用多種模式并行預(yù)測,如果每種預(yù)測模式都分別采用專用預(yù)測電路,同時(shí)考慮到DC模式和Down_Left模式預(yù)測一個(gè)像素需要2個(gè)最小運(yùn)算單元,因此總共需要40個(gè)最小運(yùn)算單元。另外,由于幀內(nèi)預(yù)測可能用到的參考數(shù)據(jù)最多有35個(gè),則輸入控制單元需要從35個(gè)參考樣本值中選取120個(gè)數(shù)據(jù)作為40個(gè)最小單元的預(yù)測輸入,控制邏輯復(fù)雜,硬件資源消耗大。
對此本文通過分析幀內(nèi)預(yù)測算法,結(jié)合流水線技術(shù)實(shí)現(xiàn)各模式相同運(yùn)算單元的資源共享,將所需最小預(yù)測單元縮減至19個(gè),同時(shí)采用移位寄存器操作簡化參考樣本輸入控制機(jī)制,減少資源消耗,具體硬件電路結(jié)構(gòu)如圖3所示,該電路能夠滿足除Plane模式以外所有預(yù)測模式的預(yù)測值計(jì)算。
圖3 預(yù)測值計(jì)算單元硬件結(jié)構(gòu)
由圖3可知,該電路將最小單元的輸入初始化為r0~r9和c0~c9,同時(shí)通過對輸入?yún)⒖紨?shù)據(jù)的移位操作,實(shí)現(xiàn)輸出結(jié)果outr0~outr9和outc0~outc9的移位,從而達(dá)到1個(gè)時(shí)鐘周期預(yù)測8×8塊、1行8個(gè)數(shù)據(jù)的目的。
預(yù)測開始后,各預(yù)測模式在控制單元的控制下進(jìn)行預(yù)測值的并行計(jì)算。Vertical和Horizontal模式在周邊塊判別為可用后,預(yù)測值分別由輸入?yún)⒖枷袼刂祌1~r8和c1~c8直接得到,因此并不需要通過圖3電路的運(yùn)算。對于DC模式,電路在第一個(gè)時(shí)鐘到來時(shí)將outr1~outr8的值寄存,如果左邊和上邊塊都可用,則將寄存器reg0~reg7的值分別與outc1求均值后輸出,作為當(dāng)前塊第1行預(yù)測數(shù)據(jù)。接著通過c0~c16的移位操作實(shí)現(xiàn)outc2~outc8值的移位,并分別與寄存器reg0~reg7的值作均值運(yùn)算后得到后續(xù)7行預(yù)測數(shù)據(jù);如果僅有上邊塊可用,則輸出寄存器reg0~reg7的值作為每一行的預(yù)測結(jié)果;如果僅有左邊塊可用,則輸出outc1的值作為一行預(yù)測值,否則直接輸出常數(shù)128作為預(yù)測值,在8個(gè)時(shí)鐘內(nèi)完成一個(gè)塊預(yù)測。對于Down_Left模式,將outr2~outr9和outc2~outc9分別兩兩順序求均值作為一行預(yù)測結(jié)果,通過r0~r16以及c0~c16移位操作在8個(gè)時(shí)鐘周期內(nèi)實(shí)現(xiàn)一個(gè)塊8行數(shù)據(jù)預(yù)測。對于Down_Right模式,電路在第一個(gè)時(shí)鐘到來時(shí)將outr0-outr7的值寄存為s0~s7作為第1行預(yù)測結(jié)果,然后將outc1和s0~s7進(jìn)行順序移位操作并輸出s0~s7的值作為后續(xù)7行的預(yù)測值。
色度Plane模式為幀內(nèi)預(yù)測中最為復(fù)雜,所需時(shí)鐘數(shù)最多的預(yù)測模式,需要通過獨(dú)立的硬件模塊進(jìn)行運(yùn)算。圖4所示為Plane模式的硬件電路,其中A0=ia+(-3)×ib+(-4)×ic+16,在輸入?yún)⒖紨?shù)據(jù)確定的前提下,ia,ib以及ic的值在當(dāng)前宏塊的計(jì)算中都是固定的,因此A0的值也是固定的。根據(jù)Plane模式算法,當(dāng)該預(yù)測模式被掛起時(shí),A0以及A0與ib各乘積項(xiàng)之和分別構(gòu)成預(yù)測塊第1行的8個(gè)預(yù)測數(shù)據(jù)。在第1行預(yù)測結(jié)束后將預(yù)測值進(jìn)行寄存,并在其后每個(gè)時(shí)鐘周期中將寄存器中的值與ic進(jìn)行累加,經(jīng)過限幅運(yùn)算后輸出,作為Plane模式后續(xù)7行的預(yù)測數(shù)據(jù)。電路中A0,ic,ib及其各乘積項(xiàng)均采用移位和加法實(shí)現(xiàn),完成一個(gè)8×8塊的預(yù)測需要12個(gè)時(shí)鐘周期。
圖4 色度Plane模式預(yù)測電路
本設(shè)計(jì)采用verilog HDL硬件語言實(shí)現(xiàn),并通過Modelsim SE 6.2b對設(shè)計(jì)進(jìn)行仿真,結(jié)果與參考C代碼rm52j生成的測試向量進(jìn)行對比,對比結(jié)果表明該設(shè)計(jì)符合AVS編碼器中幀內(nèi)預(yù)測模塊功能要求。采用Xinlinx公司Virtex4系列FPGA進(jìn)行綜合,綜合結(jié)果表明頻率達(dá)到140.1 MHz。本文通過合理的流水線設(shè)計(jì),只需406個(gè)時(shí)鐘就能夠完成一個(gè)宏塊的預(yù)測,完全符合1 920×1 080,4∶2∶0,30 f/s(幀/秒)視頻格式編碼器工作在140.1 MHz頻率下所要求的576個(gè)最大時(shí)鐘數(shù),并留有30%的時(shí)鐘裕度。
由于采用多路并行流水設(shè)計(jì)以及更為復(fù)雜的SATD算法作為代價(jià)值計(jì)算方式,因此該電路結(jié)構(gòu)硬件資源消耗相對較大。表1給出了本設(shè)計(jì)和其他相關(guān)文獻(xiàn)的設(shè)計(jì)參數(shù),通過對比可知,本設(shè)計(jì)在工作頻率和預(yù)測所需時(shí)鐘數(shù)上具有一定優(yōu)勢,相對于文獻(xiàn)[2]在增加少量面積的基礎(chǔ)上將頻率提高了21%,所需時(shí)鐘數(shù)減少了25%,不失為一個(gè)可取的硬件實(shí)現(xiàn)方案。
表1 本文與其他文獻(xiàn)參數(shù)對比
本文在分析AVS編碼器中幀內(nèi)預(yù)測算法的基礎(chǔ)上,采用并行流水結(jié)構(gòu)實(shí)現(xiàn)多路預(yù)測數(shù)據(jù)的并行計(jì)算,同時(shí)通過移位寄存器操作,簡化了參考數(shù)據(jù)選擇機(jī)制,很大程度上減少了預(yù)測所需最小運(yùn)算單元的數(shù)量,提高了資源利用率。仿真綜合結(jié)果表明,本設(shè)計(jì)完全能夠滿足1 920×1 080,4∶2∶0,30 f/s高清視頻圖像實(shí)時(shí)編碼要求。
[1]GB/T 20090.2—2006,信息技術(shù)先進(jìn)音視頻編碼第2部分[S].2006.
[2]付華豐,李鳳亭.并行結(jié)構(gòu)的AVS幀內(nèi)預(yù)測編碼器[J].計(jì)算機(jī)工程與設(shè)計(jì),2009,30(5):1140-1143.
[3]向紅莉,張剛.基于FPGA的AVS編碼器幀內(nèi)預(yù)測實(shí)現(xiàn)[J].軟件,2012,33(2):105-107.
[4]ZHANG Nan,YIN Baocai,KONG Dehui,et al.Sptial prediction based intra-coding.[C]//Proc.2004 IEEE International Conference on Multimedia and Expo(ICME'2004).Taibei,China:IEEE Press,2004:97-100.
[5]尹文蕾.基于率失真優(yōu)化的模式選擇快速算法研究[D].武漢:華中科技大學(xué),2008.
[6]黃有文,陳詠恩.AVS解碼器幀內(nèi)預(yù)測模塊硬件優(yōu)化設(shè)計(jì)[J].小型微型計(jì)算機(jī)系統(tǒng),2010,31(1):183-185.
[7]ZHANG Ke,YU Lu.An area-efficient VLSI architecture of a Reed-Solomon decoder/encoder for digital VCRs[J].IEEE Trans.Consumer Electronics,1997,43(4):1019-1027.
[8]KIBUM S,SEONGMO P,HANJIN C.An efficient hardware architecture of intra prediction and TQ/IQIT module for H.264 encoder[J].ETRI Journal,2005,27(5):511-524.