<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基于FPGA的H.264幀內預測模塊設計

基于FPGA的H.264幀內預測模塊設計

作者: 時(shí)間:2017-06-05 來(lái)源:網(wǎng)絡(luò ) 收藏

H.264/AVC是由國際電信聯(lián)盟(ITU)和國際標準化組織(ISO)共同提出的最新一代數字視頻壓縮標準,它吸取了以往壓縮技術(shù)的精華,又引進(jìn)了其他壓縮技術(shù)無(wú)法比擬的許多新技術(shù),因此,H.264在通信領(lǐng)域得到了廣泛應用。H.264/AVC壓縮效率很高,但算法的復雜度和運算量同時(shí)也大大增加,為了滿(mǎn)足視頻解碼實(shí)時(shí)性的要求,尋求更有效的解碼技術(shù)成為重要的研究課題。

幀內預測是視頻編解碼中重要的一部分,其主要功能是降低圖像的空間冗余。本文根據H.264/AVC 幀內預測的特點(diǎn)并結合對其算法的分析,提出了一種幀內預測硬件電路結構,有效地減少了硬件電路面積,提高了解碼的性能。

1 算法介紹

H.264中,對于I和SI宏塊類(lèi)型采用幀內預測來(lái)解碼。幀內預測模塊的輸入是當前宏塊相鄰左邊塊和上邊塊環(huán)路濾波前的像素值及參考預測模式,輸出是當前宏塊的預測值。預測值與反變換反量化得到的殘差值重構,得到宏塊的像素值。完成后,當前宏塊的部分像素值和預測模式要進(jìn)行存儲,為后面宏塊解碼提供參考值。

H.264中亮度預測分兩類(lèi),一類(lèi)是針對圖像中含有大量細節的部分采用4×4塊的預測模式(有9種預測模式);另一類(lèi)是對圖像中比較平緩的區域采用16×16塊的預測模式(有4種預測模式)。色度預測是8×8塊的預測模式,有4種預測模式,這4種預測模式與亮度16×16的預測模式相似,也有豎直、水平、DC和平面模式。所有的預測模式都是根據左邊塊和上邊塊的參考值,計算當前宏塊的預測值。

2 硬件實(shí)現

根據幀內預測算法,硬件結構劃分為predmode模塊、plane模塊、prediction模塊、reconstruct模塊、left_pixels模塊、predmode_ram、prediction_ram、sample和prediction_output模塊。如圖1所示,其中left_pixels、prediction_ram、predmode _ram、sample和prediction_output模塊都是存儲單元,分別存儲的是當前宏塊左邊塊的參考值、當前宏塊上邊塊參考值、當前宏塊上邊塊的參考預測模式、提取的參考像素值和當前宏塊預測值輸出;predmode模塊預測計算出當前塊的預測模式;plane模塊是對plane預測模式的預處理;prediction模塊是幀內預測的核心計算單元,4個(gè)PE單元并行運算,一個(gè)時(shí)鐘周期解碼出一個(gè)4×4的一列4個(gè)預測值;reconstruct模塊的功能是實(shí)現重構。


2.1 predmode模塊設計

本文引用地址:http://dyxdggzs.com/article/201706/349133.htm

Intra_16×16和Intra_Chroma的預測模式可通過(guò)語(yǔ)法元素解析直接獲得,所以本模塊的主要任務(wù)是解析Intra_4×4的預測模式。

本模式預測器的輸入是當前4×4亮度塊的luma_4×4BlkIdx(塊索引)、解析的語(yǔ)法元素和當前宏塊的信息。輸出是當前宏塊的16個(gè)子塊的預測模式mb_predmode。predmode_ram中存儲的是當前宏塊上邊一行4×4塊的預測模式,如圖2陰影部分所示。左邊塊的預測模式存儲在predmode模塊內。對于高清圖像(分辨率為1 920×1 080)來(lái)說(shuō),predmode_ram需要的存儲空間為1 080 bit。

如圖3所示,E是當前塊,A是左邊塊,B是上邊塊,D是左上邊塊,C是右上邊塊。predmode模塊的結構如圖4所示,圖中predmode_B模塊的作用是獲得當前宏塊E的上邊塊B的預測模式,預測當前宏塊E的子塊0、1、4、5,需要從predmode_ram中讀取上邊塊的參考預測模式,其他子塊的上邊塊參考預測模式是當前塊已解碼子塊的預測模式。predmode_A模塊的作用是獲得當前宏塊E的左邊塊A的預測模式,預測當前塊E的子塊0、2、8、10時(shí),左邊塊預測模式從reg_A里讀取。當宏塊E的16個(gè)子塊預測完成時(shí),把5、7、13、15子塊的預測模式存儲到reg_A中,為下個(gè)宏塊模式預測提供左邊塊參考值。


2.2 prediction模塊設計

prediction模塊是整個(gè)幀內預測的核心計算模塊。prediction模塊的功能是根據獲得的參考像素,在不同預測模式下采用不同的預測公式計算當前塊的預測值。幀內預測共有17種預測模式,通常若對每種預測模式都設計預測器,當求解一個(gè)預算值時(shí),其他16個(gè)模式處于空閑,這就造成了很大的資源浪費。通過(guò)分析各個(gè)模式所對應的運算法則,可以發(fā)現這些運算法則的共同特點(diǎn)是:(1)計算每個(gè)位置預測值最多需要4個(gè)參考樣本像素;(2)計算公式都可由加法和移位操作完成計算。根據各個(gè)預測模式的相似點(diǎn),把17種預測模式集合到一個(gè)運算單元中,可大大節約硬件資源。

圖5給出了PE的設計,該PE的特點(diǎn)是:(1)Horizontal或Vertical預測模式中在獲得參考值x0后,在bypass控制下不需要經(jīng)過(guò)運算單元直接獲得預測值;(2)DC模式,該模式的預測值是一個(gè)平均值。對于Intra_4×4_DC模式,用2個(gè)PE單元(PE0和PE1)在1個(gè)時(shí)鐘周期就可解得預測值。Intra_16x16_DC模式需要4個(gè)時(shí)鐘周期,假設左邊和上邊的參考像素值分別命名為L(cháng)0~L15和U0~U15,前3個(gè)時(shí)鐘周期,PE0的輸入分別為(L0,L1,L2,L3)、((L0+L1+L2+L3),U0,U1,U2)、((L0+L1+L2+L3+U0+U1+U2),U3,0,0),輸出存儲在PE_reg中作為下個(gè)時(shí)鐘周期的輸入,PE1、FE2、PE3的輸入類(lèi)同,最后一個(gè)時(shí)鐘周期把PE0、PE1、PE2、PE3作為PE0的輸入求出DC模式的預測值;(3)其他預測模式,如(A+2B+C+2)>>2和plane預處理單元的輸出都能經(jīng)過(guò)此運算單元完成預測值的計算。

為了提高解碼速度,滿(mǎn)足視頻解碼實(shí)時(shí)性的要求,采用4個(gè)運算單元PE0、PE1、PE2和PE3同時(shí)運行, 4個(gè)運算單元4個(gè)時(shí)鐘周期可以解碼出一個(gè)4×4塊,提高了解碼速度。

2.3 plane模塊設計

2.3.1 簡(jiǎn)化 plane預測模式

Intra_16×16_Plane模式和色度塊Intra_chroma_Plane模式是幀內預測中最復雜的預算模式,為了滿(mǎn)足系統實(shí)時(shí)處理的要求,可提前預算plane模式需要的一些參數。本文以Intra_16×16_Plane為例介紹如何簡(jiǎn)化plane模式,Intra_chroma_Plane方法類(lèi)同。

在plane模式運算中要用到乘法,為了節約硬件資源,采用移位來(lái)實(shí)現乘法,其中參數a、b、c的計算公式為:

上述公式,首先求得A后,pred(0,1)、pred(0,2)、pred(0,3)的值是在A(yíng)的基礎上加上c、2c、3c,然后再進(jìn)行移位和clip。pred(1,0)、pred(2,0)、pred(3,0)的值只是在A(yíng)的基礎上加上b、2b、3b,然后再進(jìn)行移位和clip。所以提前求得A、b、c,預算值是在A(yíng)的基礎上加上b或者c的倍數,本方法可大大優(yōu)化plane模式。

2.3.2 plane模式硬件設計

plane模式的關(guān)鍵是求得參數H和V,其硬件設計如圖6所示。以V為例介紹本電路。

舉例說(shuō)明本運算單元如何計算出參數H:

當a=a11、b=a12、c=a3、d=a3、sum=0、mux1=0、IS6=0、IS7=0、shift1=0、shift2=1時(shí),就可以求得A1+A3。a=a21、b=a22、c=a51、d=a52、sum=0、mux1=0、IS6=0、IS7=0、shift1=1、shift2=2時(shí),就可以求得A2+A5,并依照這個(gè)運算單元可求出A4+A6和A8+A7。

本電路4個(gè)時(shí)鐘周期就可以求得H或V,所以共需要8個(gè)時(shí)鐘周期求H和V。本方法與通常方法相比,只計算一次A、b、c的值,其他位置的預測值只需要在A(yíng)的基礎上加上b或者c的倍數,降低了復雜度。

3 實(shí)驗結果

本設計使用Verilog HDL完成硬件代碼的編寫(xiě),并用Altera公司的Quartus II 8.0進(jìn)行代碼的仿真和綜合。圖7為核心單元prediction模塊的仿真結果,PE0_out、PE1_out、PE2_out、PE3_out9為4個(gè)并行單元的輸出。采用Altera公司的Cyclone II進(jìn)行本設計驗證,本設計占用的邏輯資源數量較少,節約了硬件資源。

本文根據的特點(diǎn),提出了一種并行處理的硬件實(shí)現方法。該方法能夠提高幀內預測的處理速度,節約了硬件資源,滿(mǎn)足了高清視頻的解碼要求。



評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>