《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 可編程邏輯 > 設(shè)計(jì)應(yīng)用 > 基于FPGA的高清AVS熵編碼硬件設(shè)計(jì)
基于FPGA的高清AVS熵編碼硬件設(shè)計(jì)
來(lái)源:電子技術(shù)應(yīng)用2014年第2期
張貞雷,王祖強(qiáng),蔣 霞,李文軍
(山東大學(xué) 信息科學(xué)與工程學(xué)院,山東 濟(jì)南250100)
摘要: 為實(shí)現(xiàn)高清AVS熵編碼硬件設(shè)計(jì),通過(guò)對(duì)算法模塊進(jìn)行分析,將碼表切換、碼字計(jì)算和指數(shù)哥倫布編碼設(shè)計(jì)成流水線并行處理單元。利用并行zig-zag掃描,加快了處理速度。同時(shí)采用組合邏輯實(shí)現(xiàn)碼表查找,設(shè)計(jì)碼長(zhǎng)確定器,節(jié)省了硬件資源。
關(guān)鍵詞: FPGA AVS 熵編碼 高清 流水線
中圖分類(lèi)號(hào): TN919.8
文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 0258-7998(2014)02-0042-04
FPGA-based hardware design of HD entropy coding in AVS
Zhang Zhenlei,Wang Zuqiang,Jiang Xia,Li Wenjun
School of Information Science and Engineering, Shandong University, Ji′nan 250100,China
Abstract: To implement hardware design of HD AVS entropy coding, through analysis of the algorithm module, code table switching, computing of codeword and exponential-Golomb encoding are designed to pipeline processing unit. Parallel zig-zag scan is taken to accelerate the speed of processing. At the same time, combinational logic which implements code table switching and code length determiner is taken to save the hareware resources.
Key words : AVS;entropy encoding;HD;pipeline;code length determiner

    音視頻編碼標(biāo)準(zhǔn)AVS(Audio Video coding Standard)是我國(guó)具備自主知產(chǎn)權(quán)的第二代信源編碼標(biāo)準(zhǔn)[1]。AVS標(biāo)準(zhǔn)在獲得高編碼效率的同時(shí)降低了實(shí)現(xiàn)的復(fù)雜度[2]。AVS預(yù)測(cè)殘差系數(shù)首先經(jīng)過(guò)整數(shù)DCT變換和量化,量化器輸出是一個(gè)包含少數(shù)非零系數(shù)和大量零系數(shù)的矩陣,在熵編碼之前必須進(jìn)行重排序,并對(duì)零系數(shù)進(jìn)行有效的表示[3],因此要進(jìn)行zig-zag掃描和游程編碼。之后的輸出是一個(gè)數(shù)組,用(run,level)表示,其中run表示非零系數(shù)之前的零的個(gè)數(shù),level 表示非零系數(shù)的值。run、level之間存在很強(qiáng)的相關(guān)性,因此run、level共用一個(gè)可變長(zhǎng)碼字進(jìn)行編碼,這種編碼方式叫做二維可變長(zhǎng)編碼[4]。
    由于AVS熵編碼運(yùn)算復(fù)雜,費(fèi)時(shí)較長(zhǎng),本文采取流水線設(shè)計(jì)方式,利用并行zig-zag掃描加快了編碼速度,并設(shè)計(jì)了碼長(zhǎng)確定器,節(jié)省了硬件資源,完成高清AVS熵編碼硬件設(shè)計(jì)。
1 熵編碼硬件設(shè)計(jì)
    AVS熵編碼硬件設(shè)計(jì)包括量化數(shù)據(jù)輸入、zig-zag掃描、游程編碼、碼表切換、組合邏輯查找、指數(shù)哥倫布編碼和碼流輸出7個(gè)模塊,電路框圖如圖1所示。

1.1 并行zig-zag掃描
    首先將量化系數(shù)輸入到Ram0中,一個(gè)時(shí)鐘輸入8個(gè),因此對(duì)于一個(gè)8×8的矩陣,只需要8個(gè)時(shí)鐘就可以完成輸入。然后按圖2所示存入相應(yīng)的Ram0地址,圖中的數(shù)字代表AVS標(biāo)準(zhǔn)中規(guī)定的zig-zag掃描的順序。
    與傳統(tǒng)的MPEG/H.26L的VLC不同,在AVS中,采用zig-zag掃描的系數(shù)處理順序,這種掃描順序更易遵循level信息的變化[5]。本文采用并行zig-zag掃描,如圖3所示。一個(gè)時(shí)鐘周期內(nèi)讀出4個(gè)量化系數(shù)Out0、Out1、Out2、Out3,并且Ram0中的數(shù)據(jù)按圖3括號(hào)里的數(shù)字所代表的方向順序移動(dòng)一次。例如表中的4(0)、5(1)分別表示在時(shí)鐘沿到來(lái)時(shí)4號(hào)地址的數(shù)據(jù)移動(dòng)到0號(hào)地址,5號(hào)地址的數(shù)據(jù)移動(dòng)到1號(hào)地址。對(duì)于8×8塊,最多需要16個(gè)時(shí)鐘就可以完成掃描。與以往文獻(xiàn)[6]相比,本設(shè)計(jì)將掃描時(shí)間減少了一半,加快了處理速度。
1.2 游程編碼
    本設(shè)計(jì)中的并行zig-zag掃描有可能在一個(gè)時(shí)鐘內(nèi)讀出4組(run,level),因此在存儲(chǔ)游程編碼輸出時(shí)利用了4個(gè)深度為16的Ram,結(jié)構(gòu)框圖如圖4所示。

    圖4中的“掃描結(jié)果判斷邏輯”的實(shí)現(xiàn)方法:對(duì)掃描結(jié)果Out0~Out3進(jìn)行非零判斷。為方便描述,規(guī)定若掃描結(jié)果不為0,則用1表示,否則用0表示,因此Out0~Out3的結(jié)果可以描述為0000~1111。定義變量num,用來(lái)表示兩個(gè)level之間的0的個(gè)數(shù),初始化為0。掃描結(jié)果的存儲(chǔ)順序是先存Ram1~Ram4的0號(hào)地址,再存Ram1~Ram4的1號(hào)地址,依次存儲(chǔ)。例如,若掃描結(jié)果為0100,則令run0=num+1,level0=Out1,存儲(chǔ)(run0,level0),并令num=2。若掃描結(jié)果為1011,令run0=num, level0=Out0;run1=1,level1=Out2;run2=0,level2=Out3,依次存儲(chǔ)(run0,level0)、(run1,level1)、(run2,level2),并令num=0。
1.3 流水線設(shè)計(jì)
    流水線技術(shù)的本質(zhì)是把一個(gè)很大的總運(yùn)算單元?jiǎng)澐殖啥鄠€(gè)獨(dú)立的子運(yùn)算單元,某一個(gè)時(shí)間段內(nèi)各個(gè)子單元可以并行工作,從而提高數(shù)據(jù)處理速度。
    本設(shè)計(jì)中將碼表切換、組合邏輯查找和指數(shù)哥倫布編碼設(shè)計(jì)成流水線結(jié)構(gòu),同時(shí)這種硬件結(jié)構(gòu)也節(jié)省了大量存儲(chǔ)中間結(jié)果所需要的空間。流水線結(jié)構(gòu)如圖5所示,圖中的1~5表示第1~5組(run,level)。
1.4 碼表切換模塊設(shè)計(jì)
    本模塊的功能是得到當(dāng)前(run,level)組對(duì)應(yīng)的碼表號(hào)。實(shí)現(xiàn)過(guò)程為:若前一組level的絕對(duì)值大于跳轉(zhuǎn)門(mén)限,則根據(jù)AVS標(biāo)準(zhǔn)中的碼表跳轉(zhuǎn)規(guī)則進(jìn)行碼表切換,得到當(dāng)前(run,level)組的碼表號(hào)tablenum,并更新跳轉(zhuǎn)門(mén)限;否則,碼表號(hào)tablenum不變,即當(dāng)前組的碼表號(hào)是由上一組level的絕對(duì)值決定的。該硬件結(jié)構(gòu)如圖6所示。1.5 組合邏輯查找

    編碼時(shí)從最后一組(run,level)開(kāi)始,為節(jié)約存儲(chǔ)器資源,本文采取組合邏輯映射查表的方法,避免了訪問(wèn)存儲(chǔ)器帶來(lái)的延遲[7]。該方法由run、level和碼表號(hào)tablenum組成查表索引,輸入到組合邏輯中,得到對(duì)應(yīng)的碼字codenum。由于AVS熵編碼正常編碼部分對(duì)應(yīng)的碼字是0~59(共60個(gè)),很多查表索引對(duì)應(yīng)相同的碼字codenum,因此把相同的索引路徑合并,從而有效減少映射路徑,提高索引效率。例如由于表VLC0_Intra中(run,level)為(3,1)時(shí)所對(duì)應(yīng)的碼字和表VLC1_Intra中(run,level)為(2,1)時(shí)所對(duì)應(yīng)的碼字都是6,因此可將這兩條索引路徑合并,由同一條索引路徑映射出碼字。
1.6 指數(shù)哥倫布編碼
    在AVS標(biāo)準(zhǔn)中宏塊層以上的語(yǔ)法元素采用定長(zhǎng)碼或0階指數(shù)哥倫布碼編碼[8]。殘差系數(shù)采用基于上下文的二維變長(zhǎng)編碼,即對(duì)通過(guò)組合邏輯查找得到的碼字codenum進(jìn)行0、1、2或3階指數(shù)哥倫布編碼,逃逸編碼則采用0或1階指數(shù)哥倫布編碼,在AVS標(biāo)準(zhǔn)中已經(jīng)規(guī)定了每張碼表對(duì)應(yīng)的指數(shù)哥倫布編碼的階數(shù)。圖7為產(chǎn)生階數(shù)K的硬件電路,其中flag為標(biāo)志位,若該碼字為正常編碼,則flag為0;若為逃逸編碼,則flag為1。

1.7 碼長(zhǎng)確定器和碼字輸出
    由于指數(shù)哥倫布編碼屬于變長(zhǎng)編碼,因此在編碼時(shí)指數(shù)哥倫布碼長(zhǎng)度的確定是影響整個(gè)編碼器效率的關(guān)鍵問(wèn)題[9]。若要準(zhǔn)確地輸出,就必須確定出碼字的具體位數(shù),以往文獻(xiàn)[10]中是另外開(kāi)辟存儲(chǔ)空間來(lái)存儲(chǔ)每一個(gè)碼字的位數(shù)。本設(shè)計(jì)使用了碼長(zhǎng)確定器結(jié)構(gòu),直接從讀出的碼字進(jìn)行位數(shù)的判斷,從而節(jié)省了存儲(chǔ)空間。
    由于碼字的后綴部分不超過(guò)16 bit,因此該結(jié)構(gòu)將高16位輸入分為兩組進(jìn)行檢測(cè)。“或門(mén)”將高8位輸入進(jìn)行“或”運(yùn)算,用來(lái)檢測(cè)碼字高8位中是否含有1。在MUX中,如果“或門(mén)”的輸出為1,則選擇Code[15:8]作為輸入;否則,選取Code[7:0]。編碼器從輸入的最高位開(kāi)始逐位檢查是否為1,若為1則輸出編碼值。如果最高位為1,則輸出111;如果次高位為1,則輸出110,依次類(lèi)推,R[2:0]依次減1輸出。如果“或門(mén)”的輸出為1,則選擇器對(duì)R[2:0]進(jìn)行加8操作,否則R[2:0]的值不變。選擇器的輸出M就是首1的具體位置。根據(jù)式(3)就可以得到碼字的長(zhǎng)度Length。碼長(zhǎng)確定器的硬件結(jié)構(gòu)如圖8所示。
    在碼字輸出時(shí),熵編碼將各種信息以二進(jìn)制的形式逐個(gè)比特寫(xiě)入碼流,最終以字節(jié)為單位進(jìn)行封裝,這樣會(huì)增加運(yùn)算時(shí)間,使得編碼效率極低[10]。本設(shè)計(jì)中采用雙字節(jié)為單位寫(xiě)入碼流,極大地加快了熵編碼速度。實(shí)現(xiàn)方法:將完成編碼的碼字Code存儲(chǔ)到寬度為16的Ram中,設(shè)置一個(gè)32 bit的碼流緩沖器,變量pos表示碼流緩沖器中有效碼字的位置,初始值為31,在有效碼字?jǐn)?shù)大于或者等于16(即pos<16)時(shí),碼流緩沖器左移輸出16 bit數(shù)據(jù)Codestream,然后pos加16。變量Length表示輸入到緩沖器中碼字的位數(shù)。輸出模塊的硬件結(jié)構(gòu)如圖9所示。

 

 

2 驗(yàn)證、實(shí)現(xiàn)結(jié)果及仿真分析
2.1 驗(yàn)證

    驗(yàn)證思路是將AVS參考軟件產(chǎn)生的測(cè)試向量作為激勵(lì),輸入到熵編碼模塊,然后將其結(jié)果與軟件編碼的結(jié)果進(jìn)行比對(duì),從而驗(yàn)證熵編碼模塊設(shè)計(jì)的正確性。本設(shè)計(jì)中參考軟件產(chǎn)生的測(cè)試向量為2,0,2, 0,1,0,11,5,2,
7,0,1,0,0,2,8,4,0,2,0,0,1,1,0,1,0&hellip;&hellip;0共64個(gè)數(shù)據(jù)。熵編碼模塊的仿真輸出結(jié)果如圖10所示。

    通過(guò)觀察熵編碼的仿真輸出結(jié)果與AVS參考軟件的輸出結(jié)果是一致的,從而驗(yàn)證了本設(shè)計(jì)的功能。
2.2 硬件實(shí)現(xiàn)結(jié)果
    硬件模塊采用Verilog HDL硬件描述語(yǔ)言,實(shí)現(xiàn)了AVS熵編碼模塊的硬件設(shè)計(jì),使用Quartus II 8.0進(jìn)行綜合與仿真,目標(biāo)器件是Cyclone II系列的EP2C35F672C8。結(jié)果表明約消耗38K邏輯門(mén),工作頻率約為120 MHz。在所有量化系數(shù)有50%不為零的情況下(實(shí)際中不為零的量化系數(shù)所占比例遠(yuǎn)低于50%),完成一個(gè)8&times;8塊的數(shù)據(jù)編碼所需的時(shí)鐘周期為48,即所需時(shí)間為4&times;10-7 s。對(duì)于高清編碼(1 080p,30 f/s,視頻格式4:2:2),要求完成一個(gè)8&times;8塊所需時(shí)間為5&times;10-7 s,因此完全滿足高清編碼的要求。
2.3 仿真分析
    本設(shè)計(jì)的整體仿真結(jié)果如圖11所示。

    從圖11中可以看出,本設(shè)計(jì)一個(gè)時(shí)鐘內(nèi)讀出4個(gè)量化數(shù)據(jù)Out0~Out3,并且根據(jù)Out0~Out3中非零個(gè)數(shù)完成游程編碼,完成了本文中的并行zig-zag掃描的設(shè)計(jì)目標(biāo);碼表切換、組合邏輯查找和指數(shù)哥倫布編碼按照本文設(shè)計(jì)的流水線結(jié)構(gòu)進(jìn)行。此外,碼長(zhǎng)確定器的輸出Length正確,完成了本文中碼長(zhǎng)確定器的設(shè)計(jì)目標(biāo),可直接從讀出的碼字進(jìn)行位數(shù)的判斷。
    本文采用組合邏輯進(jìn)行碼表查找,設(shè)計(jì)了碼長(zhǎng)確定器,節(jié)省了硬件資源;采用流水線設(shè)計(jì)和并行zig-zag掃描,加快了熵編碼的處理速度,編碼性能達(dá)到了高清視頻編碼的要求,對(duì)AVS高清視頻編碼芯片設(shè)計(jì)具有一定的參考意義。
參考文獻(xiàn)
[1] AVS工作組.信息技術(shù)先進(jìn)音視頻編碼:視頻[M].北京:中國(guó)標(biāo)準(zhǔn)出版社,2006.
[2] 李文軍,王祖強(qiáng),徐輝.基于FPGA的AVS幀內(nèi)預(yù)測(cè)電路設(shè)計(jì)[J].電子技術(shù)應(yīng)用,2013,39(8):50-53.
[3] 劉寧.基于DSP的DCT變換和量化技術(shù)研究[D].浙江:浙江大學(xué),2007.
[4] Wang Qiang,Zhao Debin,Gao Wen.Context-based 2D-VLC entropy coder in AVS video coding standard[J].Journal of Computer Science and Technology,2006,21(3):315-322.
[5] Xu Long,Deng Lei,Ji Xingyang,et al.Hardware architecture for AVS entropy encoder[C].Consumer Electronics (ICCE),2008.
[6] 劉錦陽(yáng).基于FPGA的AVS實(shí)時(shí)高清視頻編碼器的研究與實(shí)現(xiàn)[D].上海:上海大學(xué),2009.
[7] 黃玄,陳杰,李霞,等.AVS高清視頻變長(zhǎng)解碼器算法與電路實(shí)現(xiàn)[J].微電子學(xué)與計(jì)算機(jī),2009,26(1):76-80.
[8] 周小龍,王祖強(qiáng),魏先政.AVS及H.264雙??勺冮L(zhǎng)解碼器設(shè)計(jì)[J].計(jì)算機(jī)工程,2012,38(12):222-224.
[9] 王小東.AVS視頻編碼器的熵編碼與插值部分的FPGA設(shè)計(jì)與實(shí)現(xiàn)[D].濟(jì)南:山東大學(xué),2011.
[10] 白玉婷,張剛.AVS熵編碼的FPGA實(shí)現(xiàn)[J].軟件,2012,33(2):102-104.

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