工程師青青 發表於 2018-07-17 10:42:00
針對幀內預測的快速算法,由於DSP 架構軟體順序執行的局限性難以滿足實時性要求,而FPGA 以其高速的計算速度和強大的並行處理能力成為H.264 和AVS 編解碼的理想平臺。本文在FPGA 平臺上採用資源共享、高並行和多流水線結構實現了亮度幀內預測算法。該方法在分析AVS 幀內亮度5 種預測模式的基礎上,將像素預測與模式判決在一個模塊中完成,並且利用各模式預測的相似性,實現運算單元共享和多種模式並行執行,兼顧了處理速度和實現代價。仿真及綜合結果表明該設計能夠完全滿足標清(704×576,30f/s) 數字視頻的實時處理要求。
AVS(Audio Video Coding Standard) 標準, 是《信息技術—先進音視頻編碼》系列標準的簡稱, 是由我國自主提出的數字音視頻編解碼技術標準, 這個標準達到了當前國際先進水平。AVS 具有以下優點:(1) 性能高, 編碼效率是MPEG2的2 倍以上, 與H.264 的編碼效率處於同一水平;(2) 複雜度低, 算法複雜度比H.264 明顯低, 軟硬體實現成本都低於H.264;(3) 我國掌握主要智慧財產權, 專利授權模式簡單, 費用低。AVS 視頻標準制定的目標是: 適應數位電視廣播、數字存儲媒體、網際網路流媒體、多媒體通信等應用中對運動圖像壓縮技術的需要,這就對編碼的實時性提出了很高的要求。
幀內預測是AVS 編解碼中很重要的部分,其原理是利用圖像內部相鄰像素間的相關性來降低編碼碼率,也就是通過減少空間冗餘度來達到壓縮的目的。視頻編碼器幀內預測部分的硬體架構設計方案一般分為兩種。第一種是基於可重構硬體電路的設計。這種電路結構設計思想是根據幀內預測各模式算法上的相似性,設計出能夠處理所有預測模式的可重構的運算單元。該運算單元可根據預測模式的不同對輸入的數據選擇相應的數據通路,從而達到資源的最優化利用。由於該電路結構是逐個處理各個模式的預測,因此其缺點是處理速度慢。第二種設計方案是將具有相同預測值求解算法的預測模式共用同一個預測器,以優化資源利用,文獻 採用了這種設計方案。本文參考第二種設計方案,提出了一種基於資源共享以及並行流水[7] 的幀內預測編碼器硬體架構。
AVS 的幀內預測分為亮度(1uma) 和色度(chroma) 預測兩種,都是以8x8 的塊為單位進行預測的。其中,亮度預測包括33 個參考像素點,有5 種預測模式(如圖1 所示),Vertical預測模式、Horizontal 預測模式、DC 預測模式、Down_Left 預測模式和Down_Right 預測模式。圖1 標示了AVS 幀內預測模式的預測方向,標號的對應關係為:Vertical 模式( 模式值為0)、Horizontal 模式( 模式值為1)、DC 模式( 模式值為2)、Down_Left 模式( 模式值為3)、Down_Right( 模式值為4)。
色度預測包括17 個參考像素點,有4 種預測模式,分別為:DC 模式( 模式值為0)、Horizontal 模式( 模式值為1)、Vertical模式( 模式值為2) 和Plane 模式( 模式值為3)。其中,DC模式、Horizontal 模式、Vertical 模式與亮度預測算法相同。
AVS 的幀內預測模塊子塊級主要包括像素值預測和模式判決兩部分,實現的功能主要是在給出當前塊的左邊像素,左上像素以及上邊像素的情況下按照各種模式預測的方法得到當前塊的預測像素值。
AVS 編碼標準採用了計算預測塊和原始塊之間的SAD 來尋找最合適的預測模式的方法。編碼器將所有的預測模式遍歷一遍,算出所有模式對應的SAD 值,取其中擁有最小SAD的模式作為最終選擇的模式。
2.1 幀內預測模塊硬體設計方案
設計中,Blockjudge 子模塊的功能是由系統計數的BlockNum 變量判斷當前塊在一幀圖像中的位置,從而決定當前塊的相鄰塊邊緣像素的可用性。由圖2 可知,在給定輸入數據的情況下,多種模式並行掛起,由於預測是按一個時鐘預測一個像素進行的,在預測完一個像素就進計算一次絕對誤差計算,然後預測完下一個就將誤差累加,最終預測完成,SAD 的計算也完成。模式判決模塊完成的是在SAD 計算完後比較得出各模式下的SAD 最小值,按其對應的預測模式即最佳預測模式選擇輸出對應的預測數據。可見整個過程是多個模式並行,並且共享公共運算單元,單個模式多級流水,從而提高資源利用率。
2.2 亮度預測模塊的VHDL 實現
幀內亮度預測模塊的VHDL 實現主要涉及到四部分:讀寫數據單元, 運算單元,數據比較單元,輸出單元。這四個部分分別對應於狀態機(亮度幀內預測模塊狀態機如圖3 所示)的streceive、 stcalculate、stcompare 和sttrans 狀態。狀態之間的轉換通過狀態計數器完成,預測輸出數據用於與當前塊數據做殘差供DCT 使用,最佳模式輸出供熵編碼寫碼流。
系統的起始狀態是stidle 狀態,當使能en 置1 時轉到streceive 狀態;streceive 狀態將接收的數據(總共接收97 個數據,前64 個是8x8 塊的原始數據,後33 個是參考數據)分別暫存到RAM00 和RAM11 中,RAM00 中存儲的當前塊數據用於與各種模式預測值進行SAD 運算,RAM11 中的數據用於得出預測數據,同時在該狀態存儲預測模式V 和H 需要的參考數據;當使能en 置0 時進入stcalculate 狀態,在stcalculate 狀態將33 個參考數據中相鄰的三個數據按(a+2b+c+2)》》2 低通濾波, 得到31 個預測數據。並且存儲DDR 模式,DDL 模式,DC_LEFT 模式和DC_TOP 模式需要的預測數據。在stm4 狀態讀取DC_LEFT 和DC_TOP 的預測數據d 和e,同時進行運算(d+e)》》1 得到f, 將f 進行限幅運算clip(f), 從而得到DC 模式的預測值並將其存儲;同時完成的有V,H,DDL,DDR的模式預測。預測過程按單像素進行,即串行輸入串行輸出,SAD 的計算通過SAD《=SAD+ABS(a-b) 累加完成。各種模式下2 個時鐘完成一個像素值的存儲和絕對差值的計算;系統在stcompare 狀態通過冒泡排序法得到SAD 最小值minSAD,其對應的模式即為最佳預測模式;sttrans 狀態完成最佳預測模式以及對應的預測值輸出。
各種模式實現過程中的公共單元:
主要運算單元:
l《=(a+b+b+c+2)》》2;
SAD《=SAD+ABS(a-b);
讀寫數據單元:
V,DC_TOP 是將8 個值按列賦值得到64 個數據;H,DC_LEFT 是將8 個值按行賦值得到64 個數據;DDL,DDR 是將15個值按照循環移位的方式給行賦值得到64 個數據,都是通過循環嵌套計數器來完成。
色度預測的狀態圖與亮度類似,只是輸入的參考數據是17個。Plane 模式預測實現比較複雜,在給出輸入數據的情況下有一個預處理的過程,運算量較大,預處理過程中得到的中間結果需要判斷正負號,而且涉及到左移四位右移五位的運算,因此數據位寬需要擴展至16 位,最終的符號位才不會被移走,負數在運算的過程中以補碼的形式存在,所以若符號位為1 則在右移後高位補1,反之則補0。
本文設計是以8×8 塊為單元,採用VHDL 硬體描述語言實現了幀內像素值預測以及模式判決模塊。設計中所採用的硬體處理平臺是Xilinx 公司的VidexII 系列FPGA xc2vp20,整個設計在ISE 10.1 環境下進行。
3.1 功能仿真結果
仿真過程中我們將預測輸出內容存儲到Pre_RAM 中,在每個子塊預測結束時列印至文本文件,同時將相同的視頻碼流加入到我們採用的軟體模型並列印與我們仿真相應的部分內容, 將兩者進行比較。至模塊完成時,已成功完成一個完整視頻碼流的數據對比,結果完全相同。
3.2 時序仿真結果
與功能仿真一樣, 我們將Pre_RAM 中存儲的內容在每個塊預測結束時列印至文本文件, 同時將相同的視頻碼流加入到我們採用的軟體模型並列印與我們仿真相應的部分內容,將兩者進行比較,結果也完全相同。由於篇幅限制圖4 僅給出了與圖5 對應的同一亮度塊在軟體模型中的內存數據,8x8亮度塊預測的仿真結果如圖5 所示,圖中顯示的當前狀態是stm4,stcompare 和sttrans,其中sum_v, sum_h, sum_dc,sum_dc_left, sum_dc_top, sum_ddl, sum_ddr 分別表示各
對應模式下的SAD 值,log 表示最佳預測模式,dataout 表示最佳預測值,對比可知二者結果一致。
3.3 綜合
資源利用情況如圖6 所示,整個預測過程佔用了328 個時鐘周期。而系統時鐘頻率在100MHZ 的情況下要達到實時時鐘周期需要控制在526 之內,顯然仿真結果表明該硬體結構完全滿足標清AVS 視頻實時編碼要求。
本文將AVS 幀內亮度預測模塊的像素值預測和模式判決結合到一個模塊中在FPGA 平臺硬體實現。採用資源共享的設計思想,同時將各種模式並行執行和流水處理,兼顧了時鐘和資源利用率。仿真結果表明,當工作在155.927MHz 時鐘時,可以實時處理704x576、4:2:0、30 幀/s 的視頻圖像。擁有中國自己的自主智慧財產權的數字音視頻編解碼標準(AVS),在技術和性能上處於國際先進水平。本論文的研究內容對於AVS標清視頻編碼晶片的設計有著實際的參考價值。
打開APP閱讀更多精彩內容聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容圖片侵權或者其他問題,請聯繫本站作侵刪。 侵權投訴