《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 可編程邏輯 > 設(shè)計(jì)應(yīng)用 > 基于FPGA的高清AVS熵編碼硬件設(shè)計(jì)
基于FPGA的高清AVS熵編碼硬件設(shè)計(jì)
來源:電子技術(shù)應(yīng)用2014年第2期
張貞雷,王祖強(qiáng),,蔣 霞,,李文軍
(山東大學(xué) 信息科學(xué)與工程學(xué)院,山東 濟(jì)南250100)
摘要: 為實(shí)現(xiàn)高清AVS熵編碼硬件設(shè)計(jì),,通過對算法模塊進(jìn)行分析,,將碼表切換、碼字計(jì)算和指數(shù)哥倫布編碼設(shè)計(jì)成流水線并行處理單元,。利用并行zig-zag掃描,,加快了處理速度。同時采用組合邏輯實(shí)現(xiàn)碼表查找,,設(shè)計(jì)碼長確定器,,節(jié)省了硬件資源。
關(guān)鍵詞: FPGA AVS 熵編碼 高清 流水線
中圖分類號: TN919.8
文獻(xiàn)標(biāo)識碼: A
文章編號: 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)是我國具備自主知產(chǎn)權(quán)的第二代信源編碼標(biāo)準(zhǔn)[1]。AVS標(biāo)準(zhǔn)在獲得高編碼效率的同時降低了實(shí)現(xiàn)的復(fù)雜度[2],。AVS預(yù)測殘差系數(shù)首先經(jīng)過整數(shù)DCT變換和量化,,量化器輸出是一個包含少數(shù)非零系數(shù)和大量零系數(shù)的矩陣,在熵編碼之前必須進(jìn)行重排序,,并對零系數(shù)進(jìn)行有效的表示[3],,因此要進(jìn)行zig-zag掃描和游程編碼。之后的輸出是一個數(shù)組,,用(run,,level)表示,其中run表示非零系數(shù)之前的零的個數(shù),,level 表示非零系數(shù)的值,。run、level之間存在很強(qiáng)的相關(guān)性,,因此run,、level共用一個可變長碼字進(jìn)行編碼,,這種編碼方式叫做二維可變長編碼[4]。
    由于AVS熵編碼運(yùn)算復(fù)雜,,費(fèi)時較長,,本文采取流水線設(shè)計(jì)方式,利用并行zig-zag掃描加快了編碼速度,,并設(shè)計(jì)了碼長確定器,,節(jié)省了硬件資源,完成高清AVS熵編碼硬件設(shè)計(jì),。
1 熵編碼硬件設(shè)計(jì)
    AVS熵編碼硬件設(shè)計(jì)包括量化數(shù)據(jù)輸入,、zig-zag掃描、游程編碼,、碼表切換,、組合邏輯查找、指數(shù)哥倫布編碼和碼流輸出7個模塊,,電路框圖如圖1所示,。

1.1 并行zig-zag掃描
    首先將量化系數(shù)輸入到Ram0中,一個時鐘輸入8個,,因此對于一個8×8的矩陣,,只需要8個時鐘就可以完成輸入。然后按圖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所示。一個時鐘周期內(nèi)讀出4個量化系數(shù)Out0,、Out1,、Out2、Out3,,并且Ram0中的數(shù)據(jù)按圖3括號里的數(shù)字所代表的方向順序移動一次,。例如表中的4(0)、5(1)分別表示在時鐘沿到來時4號地址的數(shù)據(jù)移動到0號地址,,5號地址的數(shù)據(jù)移動到1號地址,。對于8×8塊,最多需要16個時鐘就可以完成掃描,。與以往文獻(xiàn)[6]相比,,本設(shè)計(jì)將掃描時間減少了一半,,加快了處理速度。
1.2 游程編碼
    本設(shè)計(jì)中的并行zig-zag掃描有可能在一個時鐘內(nèi)讀出4組(run,,level),,因此在存儲游程編碼輸出時利用了4個深度為16的Ram,結(jié)構(gòu)框圖如圖4所示,。

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

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

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

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

    從圖11中可以看出,,本設(shè)計(jì)一個時鐘內(nèi)讀出4個量化數(shù)據(jù)Out0~Out3,,并且根據(jù)Out0~Out3中非零個數(shù)完成游程編碼,完成了本文中的并行zig-zag掃描的設(shè)計(jì)目標(biāo),;碼表切換,、組合邏輯查找和指數(shù)哥倫布編碼按照本文設(shè)計(jì)的流水線結(jié)構(gòu)進(jìn)行。此外,,碼長確定器的輸出Length正確,,完成了本文中碼長確定器的設(shè)計(jì)目標(biāo),可直接從讀出的碼字進(jìn)行位數(shù)的判斷,。
    本文采用組合邏輯進(jìn)行碼表查找,,設(shè)計(jì)了碼長確定器,節(jié)省了硬件資源,;采用流水線設(shè)計(jì)和并行zig-zag掃描,,加快了熵編碼的處理速度,編碼性能達(dá)到了高清視頻編碼的要求,,對AVS高清視頻編碼芯片設(shè)計(jì)具有一定的參考意義,。
參考文獻(xiàn)
[1] AVS工作組.信息技術(shù)先進(jìn)音視頻編碼:視頻[M].北京:中國標(biāo)準(zhǔn)出版社,2006.
[2] 李文軍,,王祖強(qiáng),,徐輝.基于FPGA的AVS幀內(nèi)預(yù)測電路設(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] 劉錦陽.基于FPGA的AVS實(shí)時高清視頻編碼器的研究與實(shí)現(xiàn)[D].上海:上海大學(xué),,2009.
[7] 黃玄,陳杰,,李霞,,等.AVS高清視頻變長解碼器算法與電路實(shí)現(xiàn)[J].微電子學(xué)與計(jì)算機(jī),,2009,26(1):76-80.
[8] 周小龍,,王祖強(qiáng),,魏先政.AVS及H.264雙模可變長解碼器設(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)載,。