《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 可編程邏輯 > 設(shè)計(jì)應(yīng)用 > AVS編碼器中變換量化和掃描的FPGA設(shè)計(jì)
AVS編碼器中變換量化和掃描的FPGA設(shè)計(jì)
2014年電子技術(shù)應(yīng)用第3期
楊洪敏,王祖強(qiáng),徐 輝
(山東大學(xué) 信息科學(xué)與工程學(xué)院,山東 濟(jì)南250100)
摘要: 提出了一種適用于AVS高清視頻編碼的變換、量化和掃描的優(yōu)化設(shè)計(jì)方案。通過(guò)對(duì)整數(shù)DCT變換算法的優(yōu)化和對(duì)傳統(tǒng)Zig-Zag掃描方法的改進(jìn),節(jié)約了硬件資源和編碼時(shí)間。根據(jù)各模塊的運(yùn)算關(guān)系合理地安排流水線結(jié)構(gòu),采用并行流水處理和復(fù)用技術(shù),實(shí)現(xiàn)了高清視頻編碼變換、量化和掃描模塊的設(shè)計(jì)。在FPGA上進(jìn)行驗(yàn)證的結(jié)果表明,該設(shè)計(jì)滿足高清視頻實(shí)時(shí)編碼要求。
中圖分類號(hào): TN919.8
文獻(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.
The design and implementation of transform quantization and scan for AVS encoder on FPGA
Yang Hongmin,Wang Zuqiang,Xu Hui
School of Information Science and Engineering, Shandong University, Jinan 250100,China
Abstract: Optimized hardware architecture of transform, quantization and scan for AVS HD video encoding is proposed. Hardware resources are saved by optimizing the algorithm of integer DCT transform module.The improvement of the traditional Zig-Zag scan algorithm saves the time of scanning. According to the arithmetic relationship of each module, pipeline structure is reasonably arranged and parallel pipeline process is used to achieve the design of transform, quantization and scan module in HD video encoding. The validated results on FPGA show that the design meets the requirement of real-time encoding of HD video sequence.
Key words : AVS HD video encoding;transform;quantization;Zig-Zag scan;FPGA

  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è)問題,AVS采用8×8的二維整數(shù)變換,變換公式如下[1]:

  Y=T8 X T8T(1)

  其中,X為殘差系數(shù)矩陣,T8為8×8變換矩陣,有:

  J0YIIDXJ{(Y)LPB}Y5F_~~8.png

  可見,變換矩陣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所示。

Image 001.jpg

  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í)鐘周期,否則就不滿足高清編碼的要求。

Image 002.jpg

  本文提出了一種高效簡(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 變換模塊


Image 003.jpg

  變換模塊是將當(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),避免了訪問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所示。

Image 004.jpg

  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í)編碼。

Image 005.jpg

  本文改進(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。至此掃描完成。

Image 006.jpg

  改進(jìn)的掃描方法完成掃描過(guò)程只需要33個(gè)時(shí)鐘周期,比傳統(tǒng)的掃描方法節(jié)省31個(gè)時(shí)鐘周期。掃描模塊的結(jié)構(gòu)框圖如圖6所示。與傳統(tǒng)的掃描方法相比,只增加了一個(gè)選擇器和加法器,卻節(jié)約了將近一半的掃描時(shí)間。

3 仿真綜合結(jié)果及分析


Image 007.jpg

  根據(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í)鐘,滿足編碼要求。

Image 008.jpg

  本設(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.


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