???? 摘 要: 在深入研究H.264幀間預(yù)測(cè)" title="幀間預(yù)測(cè)">幀間預(yù)測(cè)技術(shù)的基礎(chǔ)上,采用三級(jí)流水線(xiàn)實(shí)現(xiàn)幀間預(yù)測(cè)解碼的VLSI設(shè)計(jì),并詳細(xì)介紹了基于宏塊" title="宏塊">宏塊分割的變塊自適應(yīng)循環(huán)控制單元,針對(duì)存儲(chǔ)器的讀寫(xiě)問(wèn)題提出了一種交織存取方式,針對(duì)分像素插值" title="插值">插值提出了一種基于H.264標(biāo)準(zhǔn)的插值運(yùn)算電路。通過(guò)仿真及在H.264解碼器中的實(shí)際應(yīng)用和測(cè)試,證明該設(shè)計(jì)工作穩(wěn)定,能夠滿(mǎn)足H.264標(biāo)準(zhǔn)基本框架下4CIF格式圖片30fps(幀/秒)實(shí)時(shí)解碼的要求。
???? 關(guān)鍵詞: 幀間預(yù)測(cè)? VLSI設(shè)計(jì)? 變塊大小自適應(yīng)? 交織存取? 插值運(yùn)算
?
??? H.264[1]是聯(lián)合視頻工作組JVT(Joint Video Team)開(kāi)發(fā)的最新一代視頻壓縮標(biāo)準(zhǔn)。與標(biāo)準(zhǔn)MPEG-2、MPEG-4和H.263相比,其總體結(jié)構(gòu)為基于增強(qiáng)的運(yùn)動(dòng)估計(jì)" title="運(yùn)動(dòng)估計(jì)">運(yùn)動(dòng)估計(jì)與補(bǔ)償加變換編碼的混合(hybrid)編碼模式,包含了許多新特征:如VCL層和NAL層分離、幀內(nèi)預(yù)測(cè)、高精度運(yùn)動(dòng)估計(jì)、可變塊大小運(yùn)動(dòng)補(bǔ)償、多參考幀運(yùn)動(dòng)補(bǔ)償預(yù)測(cè)、低復(fù)雜度16bit的整數(shù)變換和量化、去塊效應(yīng)濾波器和高效的熵編碼等。這些新特征使得H.264/AVC能夠顯著提高編碼效率且具有網(wǎng)絡(luò)友好性,可有效用于各種網(wǎng)絡(luò)和應(yīng)用環(huán)境[2]。
??? 作為視頻壓縮的關(guān)鍵技術(shù)之一,具有運(yùn)動(dòng)估計(jì)與補(bǔ)償?shù)膸g預(yù)測(cè)技術(shù)主要是利用連續(xù)圖像之間的相關(guān)性,采取運(yùn)動(dòng)估計(jì)與補(bǔ)償?shù)姆椒▉?lái)消除時(shí)間上的冗余。H.264解碼代碼的復(fù)雜度分析結(jié)果顯示,計(jì)算量最大的部分是幀間預(yù)測(cè)模塊、幀內(nèi)預(yù)測(cè)模塊和去塊效應(yīng)濾波模塊。但這些部分的控制方式相對(duì)簡(jiǎn)單,適合用硬件來(lái)實(shí)現(xiàn)。本文在深入研究H.264幀間預(yù)測(cè)技術(shù)的基礎(chǔ)上,盡量降低硬件資源損耗,采用三級(jí)流水線(xiàn)實(shí)現(xiàn)幀間預(yù)測(cè)解碼的VLSI設(shè)計(jì)。
1 幀間預(yù)測(cè)技術(shù)研究
??? H.264幀間預(yù)測(cè)是利用已編碼視頻幀或場(chǎng)和基于塊的運(yùn)動(dòng)補(bǔ)償預(yù)測(cè)模式。與以往標(biāo)準(zhǔn)幀間預(yù)測(cè)不同的是,H.264增加了許多新功能[3],主要包括四個(gè)方面:
??? (1)可變塊大小運(yùn)動(dòng)補(bǔ)償:每個(gè)宏塊(16×16像素)的亮度,可以按4種方式進(jìn)行分割:1個(gè)16×16,或2個(gè)16×8,或2個(gè)8×16,或4個(gè)8×8,其運(yùn)動(dòng)補(bǔ)償也相應(yīng)有4種。而8×8模式的每個(gè)子宏塊可以繼續(xù)分割:1個(gè)8×8,或2個(gè)4×8,或2個(gè)8×4,或4個(gè)4×4。這種分割下的運(yùn)動(dòng)補(bǔ)償,稱(chēng)為樹(shù)狀結(jié)構(gòu)運(yùn)動(dòng)補(bǔ)償。這些分割和子宏塊大大提高了各個(gè)宏塊的關(guān)聯(lián)性。一般來(lái)說(shuō),小塊可以提高預(yù)測(cè)的效果。
??? 宏塊的色度成分(Cr和Cb)則為相應(yīng)亮度的一半(水平和垂直各一半)。色度塊采用和亮度塊相同的分割模式,只是尺寸減半(水平和垂直方向都減半)。例如8×16的亮度塊其相應(yīng)的色度塊尺寸為4×8。
??? (2)高精度的運(yùn)動(dòng)補(bǔ)償:幀間編碼宏塊的每個(gè)分割或子宏塊都是對(duì)參考圖像的某一相同尺寸區(qū)域進(jìn)行預(yù)測(cè)得到的。兩者之間的差異(MV),對(duì)亮度成分采用1/4像素精度,色度1/8像素精度。亞像素位置的亮度和色度像素并不存在于參考圖像中,需要利用臨近已編碼點(diǎn)進(jìn)行內(nèi)插" title="內(nèi)插">內(nèi)插得到。
??? MV可由臨近已編碼分割的MV預(yù)測(cè)獲得。預(yù)測(cè)矢量MVp基于已計(jì)算的MV和MVD(預(yù)測(cè)與當(dāng)前的差異),并被編碼和傳輸。MVp取決于運(yùn)動(dòng)補(bǔ)償?shù)某叽绾团R近MV的有無(wú)。
??? (3)多參考幀運(yùn)動(dòng)補(bǔ)償:H.264支持多參考幀預(yù)測(cè)(multiple reference frames),即可以有多于1個(gè)、最多5個(gè)在當(dāng)前幀之前解碼的幀作為參考幀產(chǎn)生對(duì)當(dāng)前幀的預(yù)測(cè)。這適用于視頻序列中含有周期性運(yùn)動(dòng)的情況。較之只使用1個(gè)參考幀,使用5個(gè)參考幀可以節(jié)省碼率5~10%。采用這一技術(shù),可以改善運(yùn)動(dòng)估計(jì)的性能,提高H.264解碼器的錯(cuò)誤恢復(fù)能力,但同時(shí)也增加了緩存的容量以及編解碼器的復(fù)雜性。不過(guò),H.264的提出是基于半導(dǎo)體技術(shù)的飛速發(fā)展,因此這兩個(gè)負(fù)擔(dān)在不久的將來(lái)會(huì)變得微不足道。
??? (4)去塊效應(yīng)濾波:基于塊的視頻編碼在圖像中存在塊效應(yīng),主要來(lái)源于幀內(nèi)和幀間預(yù)測(cè)和殘余編碼。去塊效應(yīng)濾波器(Deblocking Filter)的作用是消除經(jīng)反量化和反變換后重建圖像中由于預(yù)測(cè)誤差產(chǎn)生的塊效應(yīng),即塊邊緣處的像素值跳變,從而改善圖像的主觀質(zhì)量,減少預(yù)測(cè)誤差。在去塊效應(yīng)濾波時(shí),應(yīng)該根據(jù)圖像內(nèi)容判斷是圖像的真實(shí)邊界還是方塊效應(yīng)所形成的邊界(假邊界)。對(duì)真實(shí)邊界不進(jìn)行濾波處理,而對(duì)假邊界則根據(jù)周?chē)鷪D像塊的性質(zhì)和編碼方法采用不同強(qiáng)度的濾波。
2 幀間預(yù)測(cè)解碼硬件實(shí)現(xiàn)
??? 在本次H.264解碼設(shè)計(jì)中,解碼架構(gòu)采用DSP+FPGA協(xié)同處理,DSP主要負(fù)責(zé)完成slice_data前所有處理過(guò)程,包括序列參數(shù)集、圖像參數(shù)集及片頭的句法元素的解析以及碼流的處理,并存儲(chǔ)片層及宏塊層要解析的碼流,承擔(dān)整個(gè)解碼器的協(xié)調(diào)和控制。而FPGA負(fù)責(zé)完成片層及宏塊層各句法元素的解析,以及后續(xù)的解碼重建,如幀間預(yù)測(cè)、幀內(nèi)預(yù)測(cè)、反量化/變化、CAVLC解碼及去塊濾波等,充分利用了DSP和FPGA的優(yōu)勢(shì)[4]。
??? 本文設(shè)計(jì)的幀間預(yù)測(cè)解碼整體框圖如圖1所示,主要包括MV分量及參考索引獲取計(jì)算、參考圖像矩陣選擇處理、分像素內(nèi)插和加權(quán)預(yù)測(cè)處理三級(jí)流水線(xiàn)模塊。
?
?
??? 宏塊流水線(xiàn)技術(shù)在硬件實(shí)現(xiàn)視頻編解碼過(guò)程中起到相當(dāng)重要的作用。圖1中, 當(dāng)?shù)谝粋€(gè)宏塊完成MV分量及參考索引獲取計(jì)算轉(zhuǎn)而進(jìn)入第二級(jí)執(zhí)行參考圖像矩陣選擇處理時(shí), 第二個(gè)宏塊便進(jìn)入第一級(jí)執(zhí)行MV分量及參考索引獲取計(jì)算的環(huán)節(jié)中,大幅度提高了各個(gè)模塊的利用率。這樣做,雖然增加了一定的電路規(guī)模,但是大大提高了運(yùn)行效率[5]。
??? 圖1中方框圖表示處理模塊,圓角框圖表示存儲(chǔ)器單元,其中縱條狀的是DDR SDRAM(用于存儲(chǔ)參考幀圖像)和SDRAM(用于存儲(chǔ)MV解析結(jié)果,B幀解碼時(shí)需要參考),其余橫條紋表示內(nèi)部使用或者與H.264其他解碼模塊接口的SRAM。黑色箭頭與H.264其他解碼模塊接口的存儲(chǔ)器或者模塊連接。
??? 幀間預(yù)測(cè)的整體實(shí)現(xiàn)過(guò)程為:在每幅圖像解碼開(kāi)始后,DSP內(nèi)完成參考圖像的管理,包括當(dāng)前圖像的POC值計(jì)算、上一幅解碼圖像的標(biāo)記、當(dāng)前圖像標(biāo)記命令的存儲(chǔ)以及參考幀的初始化和重排,將重排好的參考幀列表信息寫(xiě)入列表信息存儲(chǔ)器中。在片層(SLICE)解碼開(kāi)始后,將每幅參考圖像的加權(quán)系數(shù)寫(xiě)入加權(quán)信息存儲(chǔ)器中。宏塊級(jí)解碼開(kāi)始后,采用流水線(xiàn)技術(shù)完成各個(gè)宏塊的幀間預(yù)測(cè)解碼處理。下面詳細(xì)描述各個(gè)模塊。
2.1 MV分量及參考索引獲取計(jì)算
??? H.264/AVC使用兩種熵編碼方法,CAVLC(上下文自適應(yīng)的可變長(zhǎng)編碼)和CABAC(上下文自適應(yīng)二進(jìn)制算術(shù)編碼),兩種都是基于上下文的熵編碼技術(shù)。本單元采用乒乓機(jī)制接收CAVLC/CABAC解碼得到的幀間預(yù)測(cè)殘差信息,包括宏塊編碼方式(mb_type)、宏塊分割(mbPartIdx,subMbPartIdx)、參考幀標(biāo)識(shí)(predFlagLX)、參考幀索引號(hào)(ref_idx_lX)以及運(yùn)動(dòng)矢量差(mvd_lX)等等。然后,根據(jù)當(dāng)前宏塊在幀中的位置和小塊在宏塊中的偏移地址計(jì)算得到當(dāng)前小塊的左上和右上小塊在幀存中的地址,從參考?jí)K信息存儲(chǔ)器中讀出參考小塊的參考索引和運(yùn)動(dòng)矢量,并結(jié)合殘差信息以及參考幀列表信息計(jì)算得到當(dāng)前小塊的絕對(duì)運(yùn)動(dòng)矢量,解析完成后將結(jié)果寫(xiě)入當(dāng)前宏塊參考信息存儲(chǔ)器。同時(shí)將結(jié)果寫(xiě)入SDRAM,供B幀參考使用。
本模塊循環(huán)控制由變塊自適應(yīng)循環(huán)控制單元完成,對(duì)一個(gè)宏塊中的各個(gè)小塊按照宏塊分割進(jìn)行變塊自適應(yīng),在完成一個(gè)小塊后進(jìn)行判斷,啟動(dòng)下一個(gè)小塊運(yùn)動(dòng)矢量信息的預(yù)測(cè)。小塊之間的跳轉(zhuǎn)狀態(tài)以及宏塊分割如圖2所示。其中,下方是宏塊的各種分割,上方是各種狀態(tài)跳轉(zhuǎn),指示線(xiàn)上標(biāo)注的是分割寬高變量partWidth和partHeight。假設(shè)一個(gè)宏塊分割為兩個(gè)8×16,則小塊狀態(tài)跳轉(zhuǎn)順序?yàn)椋?_0->0_2->END。
????????????????????????????? ???
?
??? 第二、三級(jí)變塊自適應(yīng)循環(huán)控制單元與之類(lèi)似,不再贅述。
2.2 參考圖像矩陣選擇處理
??? 本單元通過(guò)循環(huán)控制得到當(dāng)前小塊運(yùn)動(dòng)矢量信息,根據(jù)當(dāng)前小塊的位置信息和運(yùn)動(dòng)矢量等,計(jì)算當(dāng)前小塊對(duì)應(yīng)的參考矩陣塊在二維圖像中的坐標(biāo),結(jié)合參考幀序列號(hào)等,計(jì)算得到參考矩陣塊在參考幀存儲(chǔ)器DDR SDRAM中的絕對(duì)讀地址,從DDR SDRAM中讀出參考數(shù)據(jù)。然后,根據(jù)數(shù)據(jù)的邊界信息,從讀取參考數(shù)據(jù)中抽取有效數(shù)據(jù),進(jìn)行進(jìn)一步的組織和運(yùn)算,并寫(xiě)入?yún)⒖枷袼鼐仃嚧鎯?chǔ)器。
??? 參考矩陣選擇處理不涉及復(fù)雜的計(jì)算過(guò)程,但對(duì)數(shù)據(jù)操作比較多,涉及到的存儲(chǔ)器操作比較復(fù)雜。存儲(chǔ)器的讀寫(xiě)在H.264的硬件設(shè)計(jì)中是一大瓶頸,因此主要關(guān)注點(diǎn)在于存儲(chǔ)器的高效讀寫(xiě)和利用。為了滿(mǎn)足實(shí)時(shí)解碼的要求,DDR SDRAM位寬為32bit,參考幀數(shù)據(jù)按照交織的方式存入DDR SDRAM中,具體亮度交織存取方式如圖3所示,其中MBx_y為第y行第x列的宏塊。
?
??? 這樣,在DDR SDRAM中,每個(gè)BANK內(nèi)每個(gè)PAGE可以存儲(chǔ)4個(gè)宏塊亮度(或者8個(gè)宏塊亮度,色度按照CrCbCrCb方式存儲(chǔ),便于讀寫(xiě)和后端操作)。在這種存儲(chǔ)方式下,讀數(shù)據(jù)的起始地址,每行讀取幾個(gè)數(shù)據(jù),讀幾行數(shù)據(jù)等信息均由小塊位置解析模塊給出。具體的DDR中數(shù)據(jù)的讀地址由專(zhuān)門(mén)的DDR控制器產(chǎn)生,并根據(jù)要求將讀取的數(shù)據(jù)拼接成所需格式,供后端讀取和進(jìn)行進(jìn)一步的拼接和填充。
2.3 分像素內(nèi)插和加權(quán)預(yù)測(cè)處理模塊
??? 本單元通過(guò)循環(huán)控制得到當(dāng)前小塊運(yùn)動(dòng)矢量信息,計(jì)算得到色度矢量。然后,按照要求從參考像素矩陣存儲(chǔ)器(Luma_mem,Chroma_mem)中讀出參考數(shù)據(jù),分別對(duì)亮度和色度完成插值和加權(quán)預(yù)測(cè),將結(jié)果存入預(yù)測(cè)像素結(jié)果存儲(chǔ)器。
為了保證插值的運(yùn)算效率,滿(mǎn)足高清序列實(shí)時(shí)解碼需要,本文設(shè)計(jì)了一個(gè)基于H.264標(biāo)準(zhǔn)的亮度插值運(yùn)算電路。由于H.264中宏塊采用樹(shù)形分割,最小分割尺寸為4×4,所以在該結(jié)構(gòu)中,每個(gè)宏塊被拆分成16個(gè)4×4的亮度塊,順序被處理。
亮度插值運(yùn)算單元數(shù)據(jù)通路如圖4所示,插值運(yùn)算單元每次參考9×9的輸入數(shù)據(jù)和運(yùn)動(dòng)矢量信息完成分像素插值。首先,根據(jù)運(yùn)動(dòng)矢量進(jìn)行判斷,如果運(yùn)動(dòng)矢量的垂直和水平分量為整數(shù),則表明插值預(yù)測(cè)像素已經(jīng)實(shí)際存在,可以直接由輸入數(shù)據(jù)得到。如果其中一個(gè)或者兩個(gè)為分?jǐn)?shù),則要通過(guò)參考幀中相應(yīng)像素內(nèi)插得到。
?
??? 如圖4所示,輸入亮度數(shù)據(jù)根據(jù)多路信號(hào)選擇器分配給不同的6-tap濾波器,在運(yùn)算單元內(nèi)部設(shè)置了幾組延時(shí)寄存器組,用來(lái)緩沖需要輸入到濾波器的參考像素值。在需要的半像素和整像素全部得到和對(duì)齊后,根據(jù)運(yùn)動(dòng)矢量選擇對(duì)應(yīng)位置的半像素和整像素,進(jìn)行加法和移位運(yùn)算,得到1/4像素精度的預(yù)測(cè)亮度像素值。圖5給出了1/4亮度像素內(nèi)插部分信號(hào)時(shí)序。
?
3 分析及實(shí)現(xiàn)結(jié)果
??? 本文采用基于三級(jí)流水線(xiàn)結(jié)構(gòu)的幀間預(yù)測(cè)解碼VLSI實(shí)現(xiàn)結(jié)構(gòu),用Verilog-HDL語(yǔ)言進(jìn)行寄存器級(jí)描述,并且在Modelsim6.0環(huán)境下進(jìn)行功能仿真。仿真結(jié)果與標(biāo)準(zhǔn)算法軟件計(jì)算結(jié)果相比較以保證其正確性,證明本文的設(shè)計(jì)是正確的。設(shè)計(jì)實(shí)現(xiàn)采用ALTERA公司的QUARTUSⅡ5.0開(kāi)發(fā)軟件,目標(biāo)器件為StratixⅡEP2S60F1020C5,硬件仿真和驗(yàn)證表明該設(shè)計(jì)可以在60MHz頻率下穩(wěn)定工作。
??? 統(tǒng)計(jì)顯示,本文設(shè)計(jì)的三級(jí)流水結(jié)構(gòu)中,除第二級(jí)參考圖像矩陣選擇處理與宏塊分割、運(yùn)動(dòng)矢量以及DDR SDRAM讀寫(xiě)相關(guān)無(wú)法具體確定外,第一級(jí)MV分量及參考索引獲取計(jì)算、第三級(jí)分像素內(nèi)插和加權(quán)預(yù)測(cè)處理均可以在900周期內(nèi)完成。
??? 通過(guò)仿真及在H.264解碼器中的實(shí)際應(yīng)用和測(cè)試,證明該設(shè)計(jì)工作穩(wěn)定,能夠滿(mǎn)足H.264標(biāo)準(zhǔn)基本框架下QCIF格式圖片30fps(幀/秒)實(shí)時(shí)解碼的要求。
參考文獻(xiàn)
[1] ITU-T Rec.H.264.Advance video coding for?generic audiovisual services[S].March,2005.
[2] WIEGAND T,SULLIVAN G J,BJONTEGAARD?G,et al.Overview of the H.264/AVC video coding standard[J].IEEE Trans.on circuits and systems for video technology,2003,13(7):560-576.
[3] 畢厚杰.新一代視頻壓縮編碼標(biāo)準(zhǔn)-H.264/AVC[M].北京:人民郵電出版社,2005.
[4] 高玉娥.H.264解碼器的系統(tǒng)設(shè)計(jì)及CAVLC的硬件實(shí)現(xiàn)[J].電視技術(shù),2006(12):23-28.
[5] 吳子輝.H.264編解碼器方案綜述[J].電視技術(shù),2005,(12):12-14.
[6] H.264 reference software,JM9.6[CP].http://iphome.hhi.de/suehring/tml/download/old_jm/jm96.zip,July,2005.