文獻(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類(lèi)似的技術(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í)開(kāi)始掃描的方法,,完成一個(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變換矩陣,有:
可見(jiàn),,變換矩陣T8具有奇數(shù)行奇對(duì)稱(chēng)和偶數(shù)行偶對(duì)稱(chēng)的特性,,這為后文整數(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ù)開(kāi)始逐個(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所示,。控制模塊依據(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è)輸出元素展開(kāi)成以下組合,,其中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í)鐘周期開(kāi)始向轉(zhuǎn)置矩陣中存入一維反變換后的數(shù)據(jù),,第12個(gè)時(shí)鐘周期開(kāi)始讀取轉(zhuǎn)置矩陣中的數(shù)據(jù),第14個(gè)時(shí)鐘周期開(kāi)始輸出數(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ù)從首端開(kāi)始逐個(gè)進(jìn)行掃描,,因此傳統(tǒng)掃描方法會(huì)占用大量的時(shí)鐘周期,,降低了編碼的速度,不利于高清實(shí)時(shí)編碼,。
本文改進(jìn)了傳統(tǒng)的Zig-Zag掃描方法,,對(duì)變換后的系數(shù)從首尾兩端同時(shí)開(kāi)始掃描,節(jié)約了掃描的時(shí)間,。其實(shí)現(xiàn)方法示意圖如圖5所示,。首先,在量化后的系數(shù)矩陣的中間插入一個(gè)非零常數(shù),,然后從該系數(shù)矩陣的首尾兩端同時(shí)開(kāi)始掃描,,一共掃描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ǔ)言完成硬件的編寫(xiě),,選用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可見(jiàn),,使用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.