文獻(xiàn)標(biāo)識碼: A
文章編號: 0258-7998(2012)09-0039-03
AVS作為新一代音視頻編碼標(biāo)準(zhǔn)[1],2006年正式被批準(zhǔn)為國家標(biāo)準(zhǔn)。AVS視頻編碼標(biāo)準(zhǔn)兼顧了性能與實現(xiàn)復(fù)雜度之間的矛盾,代表了國際先進(jìn)水平。目前AVS解碼器和解碼芯片已經(jīng)有了比較成熟的發(fā)展,但AVS編碼器仍處于研究階段,市場還未產(chǎn)業(yè)化。FPGA平臺擁有豐富的寄存器資源和邏輯資源,其并行執(zhí)行的硬件實現(xiàn)方式可以滿足大量的高速電子線路設(shè)計需求,能實現(xiàn)復(fù)雜的數(shù)字視頻信號處理,是硬件實現(xiàn)的最佳選擇之一。
本文對AVS編碼I幀算法進(jìn)行深入研究,根據(jù)FPGA硬件特點[2],實現(xiàn)了AVS的全I(xiàn)幀實時編碼。以宏塊為單元,考慮到占用資源和運行速度兩方面的限制,采用適當(dāng)?shù)膹?fù)用技術(shù)和流水線技術(shù)對系統(tǒng)進(jìn)行了優(yōu)化,保證了流水線的高效運行以及硬件資源的最優(yōu)利用。
1 系統(tǒng)設(shè)計
本設(shè)計基于FPGA平臺完成CIF分辨率圖像的實時采集、AVS全I(xiàn)幀壓縮編碼和網(wǎng)絡(luò)傳輸,主要由視頻采集系統(tǒng)、數(shù)據(jù)調(diào)度系統(tǒng)、I幀編碼系統(tǒng)和以太網(wǎng)傳輸系統(tǒng)構(gòu)成,其實現(xiàn)框圖如圖1所示。
視頻采集系統(tǒng)主要完成將復(fù)合視頻解碼成YUV(4:2:0)數(shù)字視頻,為AVS 全I(xiàn)幀編碼準(zhǔn)備好視頻數(shù)據(jù)。
數(shù)據(jù)調(diào)度系統(tǒng)主要完成向I幀編碼系統(tǒng)提供原始數(shù)據(jù),同時將編碼后的碼流傳輸?shù)揭蕴W(wǎng)傳輸系統(tǒng)。視頻數(shù)據(jù)吞吐量大、帶寬高,涉及到低速存儲器(如DDR)和高速存儲器(如FPGA內(nèi)部RAM)之間大量的數(shù)據(jù)交換,成功的數(shù)據(jù)調(diào)度策略是實現(xiàn)實時編碼的關(guān)鍵技術(shù)之一。
I幀編碼系統(tǒng)主要完成AVS視頻I幀實時編碼,整個系統(tǒng)使用硬件描述語言獨立設(shè)計完成。
以太網(wǎng)傳輸系統(tǒng)主要完成對AVS碼流的打包,并將其傳輸?shù)絇C機。本系統(tǒng)包含實驗室設(shè)計的以太網(wǎng)控制器IP核和網(wǎng)絡(luò)傳輸協(xié)議IP核。
PC機上的AVS播放器采用DirectShow架構(gòu),基于本實驗室完成的AVS解碼器設(shè)計了AVS實時播放器,用來驗證AVS編碼系統(tǒng)的實時編碼能力。
2 數(shù)據(jù)采集與數(shù)據(jù)交換
前端視頻采集模塊采用TVP5150PBS視頻解碼器將輸入的PAL視頻信號轉(zhuǎn)換成數(shù)字YUV(4:2:0)信號,輸出格式為ITU-R BT.656。
系統(tǒng)上電后,F(xiàn)PGA通過IIC總線對TVP5150解碼器進(jìn)行初始化配置;接通復(fù)合視頻信號后,TVP5150即可正確輸出8 bit數(shù)字YUV視頻信號至FPGA。由于接收的視頻信號為ITU565格式,視頻信息僅由8 bit視頻信號組成,沒有獨立的行、場同步信息,所以,F(xiàn)PGA需要從接收的8 bit視頻信號中提取行場同步信號,并將相鄰8 bit數(shù)據(jù)(亮度、色差信號)轉(zhuǎn)換成16 bit視頻信號。
轉(zhuǎn)換后的16 bit視頻信號經(jīng)DDR SDRAM控制器寫入到外部DDR SDRAM存儲器中,系統(tǒng)采用的DDR SDRAM存儲器容量為16 M×16 bit,利用迸發(fā)模式,將接收的一行視頻信號存儲到DDR SDRM的一行,則一幀視頻信號可存儲在DDR SDRAM的一個Bank空間。
3 I幀編碼系統(tǒng)整體設(shè)計
根據(jù)AVS I幀編碼算法的特點,將I幀編碼系統(tǒng)的整體設(shè)計[3]分為幀內(nèi)預(yù)測模塊、變換量化模塊和熵編碼模塊,再加上殘差、重構(gòu)和寫CBP等一些外圍電路,即可實現(xiàn)AVS全I(xiàn)幀的編碼。整體設(shè)計框圖如圖2所示。
幀內(nèi)預(yù)測模塊主要完成從鄰近宏塊的重構(gòu)數(shù)據(jù)中獲取用于當(dāng)前宏塊預(yù)測的參考數(shù)據(jù),并完成對8×8塊的預(yù)測,得到預(yù)測數(shù)據(jù)和預(yù)測模式。
變換量化模塊主要完成DCT變換、量化、反量化和反DCT變換。輸出的量化數(shù)據(jù)經(jīng)過Z掃描后進(jìn)行熵編碼,輸出編碼碼流;反DCT變換后的數(shù)據(jù)與預(yù)測數(shù)據(jù)相加,得到子宏塊的重構(gòu)數(shù)據(jù),重構(gòu)數(shù)據(jù)反饋給幀內(nèi)預(yù)測模塊進(jìn)行下一個子宏塊的預(yù)測。
熵編碼模塊主要完成Z掃描和變長編碼。對掃描后的數(shù)據(jù)進(jìn)行全零判斷,得到該宏塊的CBP值。變長編碼后的碼流前面加上寫入的CBP信息,組成一個宏塊的編碼碼流,編碼碼流8 bit對齊放到RAM中。
4 I幀編碼模塊設(shè)計
對AVS全I(xiàn)幀編碼設(shè)計時,需充分考慮FPGA硬件平臺的特點,整個系統(tǒng)使用硬件描述語言獨立設(shè)計完成。
4.1 幀內(nèi)預(yù)測模塊
幀內(nèi)預(yù)測模塊[4]以宏塊為單元,主要包括參考樣本獲取和預(yù)測兩部分。首先在預(yù)測前要從鄰近宏塊中獲取進(jìn)行16×16宏塊預(yù)測時所需要的上面25個數(shù)據(jù)和前一個宏塊重構(gòu)的最右列16個數(shù)據(jù)。子宏塊的預(yù)測數(shù)據(jù)經(jīng)變換量化模塊后,從重構(gòu)數(shù)據(jù)中提取下一個子宏塊預(yù)測所需的邊界數(shù)據(jù)。輸出的預(yù)測數(shù)據(jù)與子宏塊編碼前原始數(shù)據(jù)相減,得到的殘差數(shù)據(jù)給變換量化模塊。輸出最佳預(yù)測模式給寫CBP模塊。
算法采用多種預(yù)測模式并行執(zhí)行,一個時鐘預(yù)測一個像素,并對預(yù)測完的一個像素計算一次絕對值差,每次時鐘都會將SAD累加,64個時鐘就能將預(yù)測和計算SAD同時完成。所有可用預(yù)測模式并行完成后,進(jìn)行模式判決模塊,比較所有模式下SAD的最小值,選出最佳預(yù)測模式并輸出對應(yīng)的預(yù)測數(shù)據(jù)。本算法共享公共運算單元和多級流水線操作,資源利用率高,并且兼顧了處理速度和實現(xiàn)代價。
用ModelSim進(jìn)行仿真的結(jié)果如圖3所示,信號sum_v、sum_h、sum_dc、sum_dc_left、sum_dc_top、sum_ddl、sum_ddr和sum_p是各種模式下計算的代價值SAD,通過比較大小,得出最佳的預(yù)測模式(logout)和預(yù)測數(shù)據(jù)(dataout_intra)。
4.2 變換量化模塊
該模塊主要包括DCT變換、量化、反量化和反DCT變換[5]4個部分。DCT變換采用蝶形算法,每次處理8×8的一行數(shù)據(jù),節(jié)省了大量的運算時間,且大量的乘法用移位和加法代替。量化中涉及查表運算,表格存放在ROM中,通過地址即可得到所需數(shù)據(jù)。殘差數(shù)據(jù)經(jīng)DCT變換、量化后,量化系數(shù)傳給熵編碼模塊;同時將量化后的數(shù)據(jù)再進(jìn)行反量化和反DCT變換,得到8×8子宏塊的重構(gòu)數(shù)據(jù),重構(gòu)的數(shù)據(jù)反饋給幀內(nèi)預(yù)測模塊,進(jìn)行下一個8×8子宏塊的預(yù)測。
由于亮度和色度算法相同,因此該模塊可以共享,減少了資源的利用。變換量化模塊涉及大量的運算,是最耗時的模塊,為了提高處理速度,算法使用了適當(dāng)?shù)牟⑿胁僮?,將量化與反量化、反DCT變換并行執(zhí)行;同時把數(shù)據(jù)位數(shù)擴(kuò)展,可同時對8×8矩陣的一行數(shù)據(jù)賦值,從而節(jié)省了讀取數(shù)據(jù)占用的時間,并且提高了數(shù)據(jù)的利用率。
用ModelSim進(jìn)行仿真的結(jié)果如圖4所示,設(shè)定qp為36的情況下,n0_o的輸出為量化數(shù)據(jù)。
在進(jìn)行熵編碼模塊的設(shè)計時,算法采用一種較少存儲空間來存儲碼表的方法,并將碼表查詢、碼表優(yōu)化和指數(shù)哥倫布編碼合并為一個流水線單元并行處理,節(jié)省了存儲中間結(jié)果所需的大量存儲空間;將熵編碼各任務(wù)并行執(zhí)行,加快了處理速度。
用ModelSim進(jìn)行仿真的結(jié)果如圖6所示,狀態(tài)機在4、5、6循環(huán)判斷,并在6狀態(tài)時輸出子宏塊編碼碼流(dataout)。
5 仿真與驗證
本設(shè)計使用VHDL硬件描述語言進(jìn)行設(shè)計實現(xiàn),采用Xilinx ISE進(jìn)行綜合驗證、ModelSim 6.2b進(jìn)行仿真,器件選用Xilinx公司的xc4vsx25-10ff668,最高工作頻率達(dá)到110 MHz,綜合后的資源利用情況如圖7所示。
本文完成了AVS全I(xiàn)幀編碼器在FPGA平臺上的設(shè)計與實現(xiàn)。經(jīng)仿真與驗證,能達(dá)到CIF分辨率下視頻圖像的實時編碼。與同類設(shè)計相比,本設(shè)計采用適當(dāng)?shù)膹?fù)用技術(shù)和流水線技術(shù)對系統(tǒng)進(jìn)行了優(yōu)化,保證了流水線的高效運行以及硬件資源的最優(yōu)利用,且系統(tǒng)具有開發(fā)
成本低、性能和靈活性高、更新方便等特點。
參考文獻(xiàn)
[1] 畢厚杰.視頻壓縮編碼標(biāo)準(zhǔn):H_264/AVC[M].北京:人民郵電出版社,2005.
[2] 王道憲.CPLD/FPGA可編程邏輯器件應(yīng)用與開發(fā)[M].北京:國防工業(yè)出版社,2004.
[3] 胡倩,張珂,虞露.AVS視頻解碼器的一種結(jié)構(gòu)設(shè)計與硬件實現(xiàn)[J].浙江大學(xué)學(xué)報(工學(xué)版),2006,40(12):2139-2143.
[4] Liu Min,Wei Zhiqiang.A fast mode decision algorithm for intra prediction in AVS-M video coding[C].Proceedings of the 2007 International Conference on Wavelet Analysis and Pattern Recognition, ICWAPR 07,2008:326-331.
[5] 黃友文,陳詠恩.AVS反掃描、反量化和反變換模塊的一種優(yōu)化設(shè)計[J].計算機工程與應(yīng)用,2008,44(19):93-95.
[6] 劉群鑫.AVS中可變長解碼器的硬件設(shè)計[J].現(xiàn)代電子技術(shù),2007,30(23):185-187,194.