文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 0258-7998(2011)08-0052-04
AVS標(biāo)準(zhǔn)是我國第一個(gè)擁有自主知識(shí)產(chǎn)權(quán)的數(shù)字音視頻編解碼標(biāo)準(zhǔn),其編碼效率比國際標(biāo)準(zhǔn)MPEG-2高2~3倍,,與MPEG-4/H.264相當(dāng),,但算法復(fù)雜度及存儲(chǔ)要求比H.264明顯低,更便于硬件的實(shí)現(xiàn),。
逆掃描,、反量化與反變換模塊在AVS視頻解碼過程中占有很重要的位置,其算法與架構(gòu)實(shí)現(xiàn)優(yōu)劣對AVS解碼器的性能有很大的影響,,國內(nèi)外學(xué)者對這3個(gè)模塊進(jìn)行了研究,。本文為了提高AVS解碼器的處理速度,綜合了國內(nèi)外學(xué)者的設(shè)計(jì)思想提出了一種逆掃描,、反量化與反變換模塊結(jié)構(gòu),在消耗邏輯資源允許的情況下提高了處理速度,,做到速度和面積的平衡,。
本文將逆掃描、反量化和反變換模塊結(jié)合在一起進(jìn)行設(shè)計(jì),,在實(shí)現(xiàn)了塊內(nèi)部優(yōu)化的同時(shí)采用了乒乓緩存寄存器組來實(shí)現(xiàn)塊之間流水線,,提高了速度;采用寄存器組復(fù)用技術(shù)實(shí)現(xiàn)逆塊掃描中寄存器組與反變換中的轉(zhuǎn)置寄存器組的復(fù)用,,節(jié)省了寄存器資源,。
1 硬件結(jié)構(gòu)
根據(jù)AVS解碼標(biāo)準(zhǔn),本文提出了一種高效簡潔的逆掃描,、反量化與反變換系統(tǒng)結(jié)構(gòu),,該結(jié)構(gòu)主要由四部分組成。反量化模塊完成量化系數(shù)向變換系數(shù)的轉(zhuǎn)變,;逆掃描與寄存器組選擇模塊根據(jù)逆掃描表完成變換系數(shù)的存儲(chǔ),;寄存器組用來存儲(chǔ)變換系數(shù)及反變換中的轉(zhuǎn)置數(shù)據(jù);反變換模塊將變換系數(shù)轉(zhuǎn)換成殘差樣值,,為后續(xù)的重構(gòu)做好準(zhǔn)備,。硬件結(jié)構(gòu)及數(shù)據(jù)流程如圖1所示。
其中輸入為VLD模塊解析出的(run,level)對,、塊結(jié)束標(biāo)志及一些模式判別的信息,。反量化模塊對Level數(shù)據(jù)進(jìn)行反量化,逆掃描與寄存器組選擇模塊采用依據(jù)輪流使用的規(guī)則產(chǎn)生寄存器組選擇信號(hào),,同時(shí)對Run進(jìn)行累加,,并根據(jù)累加結(jié)果查表得到需要存儲(chǔ)的寄存器,等所有量化后的Level值存儲(chǔ)完畢后,由It_start信號(hào)連續(xù)讀取8次寄存器進(jìn)入反變換模塊,,反變換模塊采用內(nèi)部流水線結(jié)構(gòu)經(jīng)過22個(gè)時(shí)鐘周期處理完一個(gè)塊,。反變換模塊中的轉(zhuǎn)置寄存器復(fù)用了前端的寄存器組。
本設(shè)計(jì)通過乒乓結(jié)構(gòu)實(shí)現(xiàn)了塊與塊之間的流水,。圖2是本設(shè)計(jì)的總體時(shí)序安排,,圖中考慮到變換編碼后一個(gè)塊內(nèi)的有效系數(shù)一般小于25。其中以一個(gè)塊數(shù)據(jù)輸入反量化模塊作為起始時(shí)刻,,當(dāng)反變化模塊讀取一個(gè)寄存器組并將其作為轉(zhuǎn)置寄存器使用時(shí),,另一個(gè)寄存器組用于存儲(chǔ)下一個(gè)塊的反量化結(jié)果。如圖2,,寄存器組1用來存儲(chǔ)當(dāng)前塊反量化后的變換系數(shù)值,,而寄存器2被用于上一個(gè)塊的反變換中。另外,,讀取轉(zhuǎn)置后的數(shù)據(jù)時(shí),,通過對移位最初的寄存器賦零對寄存器2清零,從而用于下一個(gè)塊的變換系數(shù)的存儲(chǔ),。
1.1 逆掃描與寄存器組選擇模塊
該模塊先對Run值進(jìn)行累加,,并根據(jù)掃描方式查表,得到當(dāng)前Level值所對應(yīng)的寄存器號(hào),,控制將反量化后的變換系數(shù)存入相應(yīng)寄存器中,,重復(fù)以上工作直到讀到塊結(jié)束標(biāo)志。當(dāng)前塊不為零的所有變換系數(shù)均根據(jù)逆掃描表存儲(chǔ)在相應(yīng)的位置,,因?yàn)槊看螐募拇嫫髦凶x取轉(zhuǎn)置數(shù)據(jù)時(shí)都會(huì)對寄存器清零,,為下次使用做好準(zhǔn)備,所以對于變換系數(shù)為零的情況就不用單獨(dú)存儲(chǔ),,從而提高了設(shè)計(jì)的處理速度,。
1.2 反變換模塊
反變換模塊是將當(dāng)前塊的變換系數(shù)矩陣轉(zhuǎn)換為殘差樣值矩陣的一個(gè)過程,為了節(jié)約硬件成本,,此設(shè)計(jì)采用一維變換和轉(zhuǎn)置矩陣實(shí)現(xiàn)二維變換,,參考文獻(xiàn)[2]中提出了一種快速有效的方法,本文對其方法進(jìn)行了優(yōu)化,,節(jié)約了不必要的硬件資源和時(shí)鐘,。
下面主要介紹一維變換過程。
設(shè)AVS的一維反變換的輸入輸出變量分別為:
X=[X0,,X1,,X2,X3,,X4,,X5,,X6,X7]T
Y=[Y0,,Y1,,Y2,Y3,,Y4,,Y5,Y6,,Y7]T
根據(jù)Y=T8×X,,把8個(gè)輸出元素展開成以下組合,其中T8為8×8的反變換矩陣,。
M0=8X0+8X4,;M1=8X0-8X4
M2=4X1+4X5;M3=9X1-10X5
M4=6X1+2X5,;M5=2X1+9X5
M6=10X2+4X6,;M7=4X2-10X6
M8=9X3+2X7;M9=2X3+6X7
M10=10X3-9X7,;M11=4X3+4X7
其中所有的乘法均可化為移位操作,,再定義8個(gè)中間變量N0~N7:
N0=M0+M6;N1=M2+M8+M4
N2=M1+M7,;N3=M3-M9
N4=M1-M7;N5=M4-M10
N6=M0-M6,;N7=M5-M11-M9
重新整理后得到的輸出:
Y0=N0+N1,;Y1=N2+N3;Y2=N4+N5,;Y3=N6+N7
Y4=N6-N7,;Y5=N4-N5;Y6=N2-N3,;Y7=N0-N1
由以上算法可以看出,,一維反變換模塊只需要移位和加法操作,既方便硬件實(shí)現(xiàn)還節(jié)省了硬件資源,。經(jīng)計(jì)算此一維反變化模塊共需要40個(gè)加法器,。
反變換模塊的時(shí)序見圖2,第1時(shí)鐘周期進(jìn)行并行讀取數(shù)據(jù),,2個(gè)時(shí)鐘周期進(jìn)行一維反變換,,第4個(gè)時(shí)鐘周期開始向轉(zhuǎn)置矩陣中存入一維反變換后的數(shù)據(jù),第12周期開始讀取轉(zhuǎn)置矩陣中的數(shù)據(jù),,第15個(gè)時(shí)鐘周期開始輸出數(shù)據(jù),,第22個(gè)時(shí)鐘周期結(jié)果輸出完畢。
1.3 寄存器組復(fù)用
在逆塊掃描順序中,一些后續(xù)的系數(shù)可能需要在一開始時(shí)就準(zhǔn)備好,,而一些在前面次序的系數(shù)則可能在后續(xù)的時(shí)間使用,,所以只有一個(gè)塊的所有數(shù)據(jù)都存儲(chǔ)完成后,才能進(jìn)行后續(xù)的反變換,,故至少要對一個(gè)塊的變換系數(shù)進(jìn)行存儲(chǔ),。為了提高處理速度,后續(xù)的反變換模塊中將采用并行流水線輸入,,因此存儲(chǔ)模塊此時(shí)不能采用有時(shí)序限制的RAM,,本文采用了寄存器組實(shí)現(xiàn)。同時(shí)為了消除塊數(shù)據(jù)的準(zhǔn)備延時(shí),,還采用了乒乓結(jié)構(gòu),,即在設(shè)計(jì)中用了兩個(gè)寄存器組,這樣就可在處理當(dāng)前一個(gè)塊系數(shù)的同時(shí),,用另一個(gè)寄存器組來存儲(chǔ)下一個(gè)塊反量化后的數(shù)據(jù),。
在反變換中也需要用到轉(zhuǎn)置存儲(chǔ)。為了節(jié)省資源,,本設(shè)計(jì)采用了寄存器復(fù)用技術(shù),,即反變換中用到的轉(zhuǎn)置矩陣與逆掃描后用于存儲(chǔ)變換系數(shù)的矩陣復(fù)用,具體復(fù)用方法如圖3所示,。
以上為一個(gè)寄存器組,,包含64個(gè)13 bit的寄存器。最后一列為反變換模塊輸入,,即當(dāng)一個(gè)塊變換系數(shù)根據(jù)逆掃描順序存儲(chǔ)完后,,連續(xù)8個(gè)時(shí)鐘周期讀取寄存器組最后一列,在每個(gè)時(shí)鐘周期向反變換模塊并行輸入8個(gè)13 bit的數(shù)據(jù),。第一列為轉(zhuǎn)置數(shù)據(jù)輸入端,。考慮到反變換流水線及復(fù)用的問題,,在連續(xù)2個(gè)時(shí)鐘周期讀取寄存器組最后一列輸入到反變換模塊后,,轉(zhuǎn)置數(shù)據(jù)開始從第一列輸入,這樣可以滿足反變換內(nèi)部的流水線問題,,也可以達(dá)到寄存器復(fù)用的目的,。第一行為轉(zhuǎn)置數(shù)據(jù)的輸出,最后一行在轉(zhuǎn)置數(shù)據(jù)輸出時(shí)賦值為零,,這樣可以使轉(zhuǎn)置輸出和寄存器賦零同時(shí)進(jìn)行,,從而可以減少不必要的時(shí)鐘周期和資源。
2 仿真結(jié)果及分析
根據(jù)上述思想,,采用Verilog HDL語言對算法進(jìn)行了RTL級電路描述,,并采用Altera公司的軟件Quartus II 8.0 對此算法進(jìn)行了實(shí)現(xiàn)和仿真驗(yàn)證,,并將仿真結(jié)果與rm52j軟件的輸出結(jié)果進(jìn)行了比較。Quartus II仿真結(jié)果如圖4所示,,波形圖給出了一個(gè)塊的反量化和反變換輸出結(jié)果,。rm52j的輸出結(jié)果如圖5所示,比較可見輸出結(jié)果相同,。
本設(shè)計(jì)采用的是自頂向下和自下而上的混合設(shè)計(jì)方法,,逆掃描、反量化和反變換過程是AVS系統(tǒng)中的一個(gè)模塊,,局部的測試很難判斷出該模塊是否可以應(yīng)用到整個(gè)解碼系統(tǒng)中去,,所以此模塊亦在自己搭建的基于SoPC的AVS驗(yàn)證平臺(tái)上進(jìn)行了驗(yàn)證。加入此模塊前,,軟件處理一幀碼流時(shí)間與用此硬件模塊代替軟件模塊后的解碼時(shí)間如圖6所示,,通過計(jì)算可知解碼速度提高約15%。
變換編碼后一個(gè)塊內(nèi)的有效系數(shù)一般小于25,,所以逆掃描,、反量化的時(shí)鐘一般小于25個(gè)時(shí)鐘周期,而反變換的時(shí)鐘周期為22個(gè),,所以處理一個(gè)塊的時(shí)鐘周期大約為25個(gè),,大大提高了速度。由于寄存器的復(fù)用及設(shè)計(jì)的優(yōu)化,,節(jié)省了硬件資源,,本設(shè)計(jì)采用的FPGA為EP2C35F672C6,資源使用情況如圖7所示,,可見使用的總的LE為3 059個(gè),。
本文對AVS逆掃描、反量化和反變換算法進(jìn)行了研究,,并對目前其他學(xué)者在這方面取得的成果進(jìn)行分析驗(yàn)證,實(shí)際考慮了AVS解碼器整體設(shè)計(jì)的可行性,,提出了一種速度更快,、資源占用更少的方法。本設(shè)計(jì)為了解決RAM讀寫時(shí)序限制的影響,,采用了兩組寄存器陣列代替RAM實(shí)現(xiàn)乒乓操作,,同時(shí)為了減少硬件資源,采用寄存器組復(fù)用技術(shù),,即反變換中的轉(zhuǎn)置矩陣與逆掃描后存儲(chǔ)寄存器組復(fù)用,。最后給出了波形仿真結(jié)果,并與rm52j的輸出結(jié)果比較,,驗(yàn)證了結(jié)果的正確性,。通過在基于Nios II的SoPC系統(tǒng)上進(jìn)行測試,,證明該設(shè)計(jì)能夠正確快速實(shí)現(xiàn)逆掃描、反量化及反變換功能,。
參考文獻(xiàn)
[1] GB/T 20090.2006.信息技術(shù) 先進(jìn)音視頻編碼2部分:視頻[S].2006.
[2] 張璐,,劉佩林.基于FPGA的AVS反變換的設(shè)計(jì)與實(shí)現(xiàn)[J]. 電視技術(shù),2006(7):20-23.
[3] 毛訊.高速視頻解碼器設(shè)計(jì)研究[D].杭州:浙江大學(xué),,2001.
[4] 趙策,,劉佩.AVS游程解碼、反掃描,、反量化和反變換優(yōu)化設(shè)計(jì)[J].信息技術(shù),,2007(2):54-57.
[5] 黃友文,陳詠恩.AVS反掃描,、反量化和反變換模塊的一種優(yōu)化設(shè)計(jì)[J].計(jì)算機(jī)工程與應(yīng)用,,2008,44(19):93.
[6] H.264及AVS視頻解碼器中 IQ/IDCT的設(shè)計(jì)與實(shí)現(xiàn)[J].電子技術(shù)應(yīng)用,,2006,,32(7):39-42.