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