文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 0258-7998(2014)03-0041-04
中文引用格式:楊洪敏,王祖強(qiáng),徐輝.AVS編碼器中變換量化和掃描的FPGA設(shè)計(jì)[J].電子技術(shù)應(yīng)用,2014,40(03):41-44.
AVS(Audio Video coding Standard)標(biāo)準(zhǔn)是由我國(guó)獨(dú)立制定的具有自主知識(shí)產(chǎn)權(quán)的視頻編碼標(biāo)準(zhǔn)[1],,采用了與H.264類似的技術(shù)框架[2],,但其編碼效率比國(guó)際標(biāo)準(zhǔn)MPEG-2高2~3倍,與H.264相當(dāng),,但存儲(chǔ)要求和算法復(fù)雜度比H.264低,,更便于硬件實(shí)現(xiàn)[3]。
變換,、量化和掃描在AVS視頻編碼過(guò)程中占有很重要的地位,,它是AVS編碼中數(shù)據(jù)處理的中間部分,即將殘差數(shù)據(jù)經(jīng)過(guò)變換,、量化和掃描后傳到熵編碼部分,,所以算法的優(yōu)劣和實(shí)現(xiàn)架構(gòu)對(duì)AVS視頻編碼器的性能有很大的影響,。本文為了提高AVS視頻編碼器的處理速度,結(jié)合了國(guó)內(nèi)外學(xué)者的設(shè)計(jì)思想提出了一種變換,、量化與掃描模塊結(jié)構(gòu),,在消耗邏輯資源允許的情況下提高了處理速度,達(dá)到了速度和面積的平衡,。
本文以實(shí)現(xiàn)1 080i,、30 f/s格式視頻實(shí)時(shí)高清編碼為目標(biāo),結(jié)合AVS標(biāo)準(zhǔn)中變換,、量化和掃描的特點(diǎn),,設(shè)計(jì)了一種高速并行流水線結(jié)構(gòu)。通過(guò)對(duì)整數(shù)變換模塊內(nèi)部結(jié)構(gòu)的優(yōu)化和一維整數(shù)變換模塊的復(fù)用,,節(jié)省了硬件資源。量化和一維變換模塊內(nèi)部均采用3級(jí)流水線處理,。掃描模塊采用從首尾兩端同時(shí)開始掃描的方法,,完成一個(gè)8×8塊的掃描僅需要33個(gè)時(shí)鐘周期,節(jié)約了掃描的時(shí)間,。
1 整數(shù)變換和掃描算法分析
1.1 整數(shù)變換
早期的視頻編碼標(biāo)準(zhǔn)往往采用浮點(diǎn)DCT來(lái)去除視頻圖像的空間冗余,,而浮點(diǎn)變換不適合在數(shù)字硬件環(huán)境中實(shí)現(xiàn)。在實(shí)際中,,常采用整數(shù)近似的DCT代替浮點(diǎn)DCT來(lái)編碼視頻圖像,,不僅可以保持浮點(diǎn)變換的編碼性能,而且能夠大大減少計(jì)算復(fù)雜度,。但是整數(shù)DCT近似有可能出現(xiàn)編解碼器采用不同的DCT和IDCT的情況,,這種情況會(huì)導(dǎo)致解碼圖像的誤差漂移[1]。為了避免這個(gè)問(wèn)題,,AVS采用8×8的二維整數(shù)變換,,變換公式如下[1]:
Y=T8 X T8T(1)
其中,X為殘差系數(shù)矩陣,,T8為8×8變換矩陣,,有:
可見,變換矩陣T8具有奇數(shù)行奇對(duì)稱和偶數(shù)行偶對(duì)稱的特性,,這為后文整數(shù)變換模塊的優(yōu)化提供了條件,。
1.2 掃描
1976年,Tescher在他的自適應(yīng)變換編碼方案中首次提出DCT系數(shù)的高效組織方式——Zig-Zag掃描,。此掃描方式成為DCT系數(shù)高效熵編碼前所常用的預(yù)處理技術(shù),,并一直沿用至今。通常把掃描中遇到的非零系數(shù)記為level,,一個(gè)非零系數(shù)前的連續(xù)零系數(shù)游程記為run[1],。掃描后的系數(shù)被組織成(run,,level)對(duì)。傳統(tǒng)的Zig-Zag掃描從低頻系數(shù)開始逐個(gè)掃描,,掃描一次需要64個(gè)時(shí)鐘周期,,如圖1所示。
2 硬件結(jié)構(gòu)
系統(tǒng)工作頻率為100 MHz時(shí),,實(shí)現(xiàn)AVS高清1 920×1 088,、30 f/s格式視頻的實(shí)時(shí)編碼,一個(gè)宏塊的處理時(shí)間為4 085 ns,,即不超過(guò)408個(gè)時(shí)鐘周期,,否則就不滿足高清編碼的要求。
本文提出了一種高效簡(jiǎn)潔的變換,、量化和掃描系統(tǒng)結(jié)構(gòu),,硬件結(jié)構(gòu)及數(shù)據(jù)流如圖2所示??刂颇K依據(jù)緩存寄存器組的狀態(tài)產(chǎn)生輸入殘差數(shù)據(jù)命令,,每個(gè)周期讀入一列殘差數(shù)據(jù)。殘差數(shù)據(jù)經(jīng)過(guò)變換后送入量化模塊進(jìn)行量化,。量化數(shù)據(jù)保存到緩存寄存器組,,由掃描模塊控制并進(jìn)行掃描,掃描模塊輸出(run,,level)對(duì),。變換和量化模塊內(nèi)部都采用流水線結(jié)構(gòu)。
2.1 變換模塊
變換模塊是將當(dāng)前塊的殘差系數(shù)矩陣轉(zhuǎn)換為變換系數(shù)矩陣的一個(gè)過(guò)程,,其結(jié)構(gòu)框圖如圖3所示,。此設(shè)計(jì)采用一維變換和轉(zhuǎn)置矩陣實(shí)現(xiàn)二維變換,與參考文獻(xiàn)[4]中的設(shè)計(jì)相比節(jié)約了硬件資源,。參考文獻(xiàn)[5]中轉(zhuǎn)置操作由RAM實(shí)現(xiàn),,本文中轉(zhuǎn)置操作由8×8的寄存器組實(shí)現(xiàn),避免了訪問(wèn)RAM造成的延時(shí),,便于后續(xù)的并行流水線處理,。參考文獻(xiàn)[6]中整數(shù)變換采用了蝶形算法,其缺點(diǎn)是需要對(duì)變換后的結(jié)果進(jìn)行重排序,。參考文獻(xiàn)[7]提出了一種快速有效的變換方法,,但是資源消耗大。本文對(duì)整數(shù)變換的方法進(jìn)行了優(yōu)化,,節(jié)約了不必要的硬件資源和時(shí)鐘,。
下面主要介紹一維整數(shù)變換過(guò)程。
設(shè)AVS的一維整數(shù)變換的輸入、輸出變量分別為:
X=[X0,,X1,,X2,X3,,X4,,X5,X6,,X7](3)
Y=[Y0,,Y1,Y2,,Y3,,Y4,Y5,,Y6,,Y7](4)
根據(jù)Y=T8×X,把8個(gè)輸出元素展開成以下組合,,其中T8為8×8的變換矩陣:
R0=X0+X7,;R1=X1+X6;R2=X2+X5,;R3=X3+X4;
R4=X0-X7,;R5=X1-X6,;R6=X2-X5;R7=X3-X4,。
再定義12個(gè)中間變量M0~M11:
M0=R0+R3,;M1=R1+R2;M2=R0-R3,;
M3=R1-R2,;M4=4R4+4R6;M5=9R5+2R7,;
M6=9R4-10R6,;M7=2R5+6R7;M8=6R4+2R6,;
M9=9R7-10R5,;M10=2R4+9R6;M11=4R5+4R7,。
其中所有的乘法均可化為移位操作,,重新整理后得到輸出:
Y0=8M0+8M1;Y1=M4+M5+M8;Y2=10M2+4M3,;
Y3=M6-M7,;Y4=8M0-8M1;Y5=M8+M9,;
Y6=4M2-10M3,;Y7=M10-M11-M7。
由以上算法可以看出,,一維變換模塊只需要移位和加法操作,,既方便硬件實(shí)現(xiàn),還節(jié)省了硬件資源,。經(jīng)計(jì)算,,此一維變化模塊共需要40個(gè)加法器,比參考文獻(xiàn)[7]中的一維變換節(jié)省了加法器和移位器,。
設(shè)計(jì)中對(duì)變換采用流水線的處理方法[7],,先進(jìn)行列變換,然后進(jìn)行行變換,,單步變換為3級(jí)流水線結(jié)構(gòu),。變換模塊中,第1時(shí)鐘周期進(jìn)行并行讀取數(shù)據(jù),,第2,、3個(gè)時(shí)鐘周期進(jìn)行一維反變換,第4個(gè)時(shí)鐘周期開始向轉(zhuǎn)置矩陣中存入一維反變換后的數(shù)據(jù),,第12個(gè)時(shí)鐘周期開始讀取轉(zhuǎn)置矩陣中的數(shù)據(jù),,第14個(gè)時(shí)鐘周期開始輸出數(shù)據(jù),第21個(gè)時(shí)鐘周期結(jié)果輸出完畢,。
2.2 量化
量化模塊采用并行流水線進(jìn)行設(shè)計(jì),,每個(gè)周期處理一行數(shù)據(jù)。該模塊采用了3級(jí)流水線,,第一級(jí)流水線通過(guò)查表得到伸縮參數(shù)scalm和量化參數(shù)qp_tab,;第二級(jí)流水線計(jì)算Y=(transcoeffscalm+218)>>19,其中,,transcoeff為變換系數(shù),;第三級(jí)流水線計(jì)算quantcoeff=(Yqp_tab+214)>>15,其中,,quantcoeff為量化系數(shù),。該模塊的結(jié)構(gòu)框圖如圖4所示。
2.3 掃描
經(jīng)過(guò)整數(shù)變換和量化后,,需要對(duì)變換后的系數(shù)進(jìn)行Zig-Zag掃描,。傳統(tǒng)掃描是將64個(gè)系數(shù)從首端開始逐個(gè)進(jìn)行掃描,,因此傳統(tǒng)掃描方法會(huì)占用大量的時(shí)鐘周期,降低了編碼的速度,,不利于高清實(shí)時(shí)編碼,。
本文改進(jìn)了傳統(tǒng)的Zig-Zag掃描方法,對(duì)變換后的系數(shù)從首尾兩端同時(shí)開始掃描,,節(jié)約了掃描的時(shí)間,。其實(shí)現(xiàn)方法示意圖如圖5所示。首先,,在量化后的系數(shù)矩陣的中間插入一個(gè)非零常數(shù),,然后從該系數(shù)矩陣的首尾兩端同時(shí)開始掃描,一共掃描33個(gè)周期,。掃描路徑1統(tǒng)計(jì)非零系數(shù)前零的個(gè)數(shù)run0和非零系數(shù)值level0,,掃描路徑2統(tǒng)計(jì)非零系數(shù)后零的個(gè)數(shù)run1和非零系數(shù)的值level1,并逐個(gè)輸(run0,,level0)和(run1,,level1)。最后,,將第33個(gè)掃描周期輸出的run0和run1相加,,并將結(jié)果賦給run1,即得到插入常數(shù)后面的第一個(gè)非零系數(shù)前零的個(gè)數(shù),,而插入常數(shù)后面的第一個(gè)非零系數(shù)的值為第33個(gè)掃描周期輸出的level1,。至此掃描完成。
改進(jìn)的掃描方法完成掃描過(guò)程只需要33個(gè)時(shí)鐘周期,,比傳統(tǒng)的掃描方法節(jié)省31個(gè)時(shí)鐘周期,。掃描模塊的結(jié)構(gòu)框圖如圖6所示。與傳統(tǒng)的掃描方法相比,,只增加了一個(gè)選擇器和加法器,卻節(jié)約了將近一半的掃描時(shí)間,。
3 仿真綜合結(jié)果及分析
根據(jù)上述思想,,采用Verilog HDL語(yǔ)言完成硬件的編寫,選用Altera公司的軟件Quartus II 11.0和ModelSim 6.6d進(jìn)行了實(shí)現(xiàn)和仿真,。部分仿真結(jié)果如圖7所示,。從仿真圖中可以看出,本設(shè)計(jì)中第1~21個(gè)周期完成一個(gè)塊的變換,,第17~24個(gè)周期完成量化,,第25~26個(gè)周期進(jìn)行掃描數(shù)據(jù)的準(zhǔn)備,第27~59個(gè)周期完成數(shù)據(jù)的掃描并輸出掃描的結(jié)果,,整個(gè)掃描過(guò)程只用了33個(gè)周期,,各個(gè)模塊輸出結(jié)果正確,達(dá)到了預(yù)期的設(shè)計(jì)要求。本設(shè)計(jì)完成一個(gè)塊的變換,、量化和掃描需要59個(gè)時(shí)鐘周期,,因此,處理一個(gè)宏塊的時(shí)間為236個(gè)時(shí)鐘,,滿足編碼要求,。
本設(shè)計(jì)采用的FPGA為Altera公司的EP2C35F672C6。綜合占用的資源如圖8所示,。由圖8可見,,使用LE的總數(shù)為4 157個(gè)。綜合布局布線后的結(jié)果表明,,該結(jié)構(gòu)的最高頻率為120 MHz,,滿足設(shè)計(jì)的要求。
參考文獻(xiàn)
[1] 高文,,趙德斌,,馬思偉.數(shù)字視頻編碼技術(shù)原理[M].北京:科學(xué)出版社,2010.
[2] 李文軍,,王祖強(qiáng),,徐輝,等.基于FPGA的AVS幀內(nèi)預(yù)測(cè)電路設(shè)計(jì)[J].電子技術(shù)應(yīng)用,,2013,,39(8):50-53.
[3] AVS工作組.信息技術(shù)先進(jìn)音視頻編碼:視頻[M].北京:中國(guó)標(biāo)準(zhǔn)出版社,2006.
[4] 劉海鷹,,張兆楊,,沈禮權(quán).基于FPGA的H.264變換量化的高性能的硬件實(shí)現(xiàn)[J].中國(guó)圖象圖形學(xué)報(bào),2006,,11(11):1636-1639.
[5] 黃學(xué)超,,張衛(wèi)寧.AVS編碼變換量化和掃描硬件設(shè)計(jì)與實(shí)現(xiàn)[J].電氣電子教學(xué)學(xué)報(bào),2011,,33(2):34-37.
[6] 白玉婷.AVS編碼器關(guān)鍵模塊的硬件設(shè)計(jì)[D].太原:太原理工大學(xué),,2012.
[7] Wang Leirui,Zhang Zhaoyang,,Teng Guowei,,et al.Hardwareimplementation of transform and quantization for AVS encoder[C].ICALP 2008,2008:843-847.