《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 可編程邏輯 > 設(shè)計(jì)應(yīng)用 > AVS逆掃描反量化和反變換模塊的硬件設(shè)計(jì)
AVS逆掃描反量化和反變換模塊的硬件設(shè)計(jì)
來源:電子技術(shù)應(yīng)用2011年第8期
秦 盼,王祖強(qiáng),宋 健
(山東大學(xué) 信息科學(xué)與工程學(xué)院,山東 濟(jì)南250100)
摘要: 提出一種適用于AVS視頻解碼器逆掃描、反量化和反變換的硬件結(jié)構(gòu)優(yōu)化設(shè)計(jì)方案,該設(shè)計(jì)把逆掃描、反量化和反變換過程結(jié)合在一起進(jìn)行設(shè)計(jì),以宏塊為單位進(jìn)行操作且在塊與塊之間采用了流水線技術(shù),并通過采用乒乓技術(shù)和寄存器復(fù)用技術(shù)達(dá)到速度和面積的平衡和優(yōu)化。本設(shè)計(jì)在Quartus II 8.0上進(jìn)行了仿真,仿真結(jié)果與C中結(jié)果進(jìn)行了比對(duì),通過在基于Nios II的AVS視頻解碼系統(tǒng)測(cè)試平臺(tái)上進(jìn)行測(cè)試,證明了該模塊功能的正確性。
中圖分類號(hào): TN919.8
文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 0258-7998(2011)08-0052-04
Hardware design of reverse scan inverse quantization and inverse transform for AVS decoder
Qin Pan,Wang Zuqiang,Song Jian
School of Information Science and Engineering, Shandong University, Jinan 250100,China
Abstract: Optimized hardware architecture of reverse scan, inverse quantization and inverse transform for AVS decoder is proposed. The design is on macroblock level and block-pipelining is used. To achieve balance and optimization of speed and area, the technology of ping-pang and registers reuse are used. The design is verified in Quartus II 8.0 and the simulation results are compared with the results of C. By being tested on the Nios II-based testbench of AVS video decoder, the module is proved to work well.
Key words : AVS video decoding;reverse scan;inverse quantization;inverse transform;Nios II


    AVS標(biāo)準(zhǔn)是我國(guó)第一個(gè)擁有自主知識(shí)產(chǎn)權(quán)的數(shù)字音視頻編解碼標(biāo)準(zhǔn),其編碼效率比國(guó)際標(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)劣對(duì)AVS解碼器的性能有很大的影響,國(guó)內(nèi)外學(xué)者對(duì)這3個(gè)模塊進(jìn)行了研究。本文為了提高AVS解碼器的處理速度,綜合了國(guó)內(nèi)外學(xué)者的設(shè)計(jì)思想提出了一種逆掃描、反量化與反變換模塊結(jié)構(gòu),在消耗邏輯資源允許的情況下提高了處理速度,做到速度和面積的平衡。
    本文將逆掃描、反量化和反變換模塊結(jié)合在一起進(jìn)行設(shè)計(jì),在實(shí)現(xiàn)了塊內(nèi)部?jī)?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),本文提出了一種高效簡(jiǎ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)對(duì)、塊結(jié)束標(biāo)志及一些模式判別的信息。反量化模塊對(duì)Level數(shù)據(jù)進(jìn)行反量化,逆掃描與寄存器組選擇模塊采用依據(jù)輪流使用的規(guī)則產(chǎn)生寄存器組選擇信號(hào),同時(shí)對(duì)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í),通過對(duì)移位最初的寄存器賦零對(duì)寄存器2清零,從而用于下一個(gè)塊的變換系數(shù)的存儲(chǔ)。

1.1 逆掃描與寄存器組選擇模塊
    該模塊先對(duì)Run值進(jìn)行累加,并根據(jù)掃描方式查表,得到當(dāng)前Level值所對(duì)應(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ì)對(duì)寄存器清零,為下次使用做好準(zhǔn)備,所以對(duì)于變換系數(shù)為零的情況就不用單獨(dú)存儲(chǔ),從而提高了設(shè)計(jì)的處理速度。
1.2 反變換模塊
    反變換模塊是將當(dāng)前塊的變換系數(shù)矩陣轉(zhuǎn)換為殘差樣值矩陣的一個(gè)過程,為了節(jié)約硬件成本,此設(shè)計(jì)采用一維變換和轉(zhuǎn)置矩陣實(shí)現(xiàn)二維變換,參考文獻(xiàn)[2]中提出了一種快速有效的方法,本文對(duì)其方法進(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ù)的反變換,故至少要對(duì)一個(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語言對(duì)算法進(jìn)行了RTL級(jí)電路描述,并采用Altera公司的軟件Quartus II 8.0 對(duì)此算法進(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è)模塊,局部的測(cè)試很難判斷出該模塊是否可以應(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è)。

    本文對(duì)AVS逆掃描、反量化和反變換算法進(jìn)行了研究,并對(duì)目前其他學(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)行測(cè)試,證明該設(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.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。