《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計應(yīng)用 > H.264中逆量化逆變換的高層次綜合實現(xiàn)
H.264中逆量化逆變換的高層次綜合實現(xiàn)
2016年電子技術(shù)應(yīng)用第11期
陳新偉1,2,孟祥剛2,高 騰2,陳 瑤2,梁 科2,李國峰2
1.福建省信息處理與智能控制重點實驗室,福建 福州350121;2.南開大學(xué) 電子信息與光學(xué)工程學(xué)院,天津300350
摘要: 逆變換與逆量化是H.264解碼器中的一個重要環(huán)節(jié),由于其算法復(fù)雜度較高,利用傳統(tǒng)的RTL方法設(shè)計其硬件電路需要消耗大量的設(shè)計時間并經(jīng)歷復(fù)雜的驗證過程。提出了采用高層次綜合的方法進(jìn)行高效快速的逆變換逆量化硬件模塊設(shè)計。測試結(jié)果表明,該方法可以較快地得到針對FPGA平臺的逆變換逆量化硬件模塊,同時可對其設(shè)計空間進(jìn)行有效探索,得到滿足不同需求的硬件模塊。
中圖分類號: TN432
文獻(xiàn)標(biāo)識碼: A
DOI:10.16157/j.issn.0258-7998.2016.11.005
中文引用格式: 陳新偉,孟祥剛,高騰,等. H.264中逆量化逆變換的高層次綜合實現(xiàn)[J].電子技術(shù)應(yīng)用,2016,42(11):25-28.
英文引用格式: Chen Xinwei,Meng Xianggang,Gao Teng,et al. High level synthesis implementation of inverse quantification and inverse transformation in H.264[J].Application of Electronic Technique,2016,42(11):25-28.
High level synthesis implementation of inverse quantification and inverse transformation in H.264
Chen Xinwei1,2,Meng Xianggang2,Gao Teng2,Chen Yao2,Liang Ke2,Li Guofeng2
1.Fujian Provincial Key Laboratory of Information Processing and Intelligent Control,F(xiàn)uzhou 350121,China; 2.College of Information Technology and Optical Engineering,Nankai University,Tianjin 300350,China
Abstract: Inverse transformation and inverse quantization is an important process in H.264 decoder, the complexity of the algorithm leads to a long design time and complex verification procedure when designing in conventional way with RTL language. High level synthesis in involved in this paper to illustrate efficient inverse transformation and inverse quantization hardware design. The results show that the design method in this paper could achieve the hardware block for the targeted FPGA platform efficiently and explore the design space of the hardware with different high level synthesis settings at the same time to fulfil the different requirements for different designs.
Key words : H.264 decoder;inverse quantification;inverse transform;high level synthesis;design space exploration

0 引言

    H.264標(biāo)準(zhǔn)自公布以來,在視頻會議、數(shù)字電視、視頻監(jiān)控等領(lǐng)域中得到廣泛的使用。新一代視頻壓縮編碼標(biāo)準(zhǔn)H.264/AVC在以往標(biāo)準(zhǔn)的基礎(chǔ)上做了很大的改進(jìn),從而具有了很高的壓縮性能和網(wǎng)絡(luò)自適應(yīng)能力[1]。然而高壓縮性能是以較高的算法復(fù)雜度為代價,尤其是變換與量化部分,其RTL代碼設(shè)計與在FPGA平臺上的實現(xiàn)也變得更為復(fù)雜。高層次綜合技術(shù)相對于傳統(tǒng)的RTL級設(shè)計能有效地降低硬件的設(shè)計復(fù)雜度,縮短設(shè)計周期。因其在算法硬件模塊開發(fā)上的高效性,高層次綜合工具已被廣泛應(yīng)用于復(fù)雜硬件項目開發(fā)中。

    本文的設(shè)計在H.264標(biāo)準(zhǔn)基礎(chǔ)上,采用高層次綜合技術(shù),利用 C語言進(jìn)行算法描述,通過高層次綜合過程及其綜合優(yōu)化進(jìn)行硬件生成,完成符合設(shè)計需求的硬件模塊。

1 高層次綜合技術(shù)

    高層次綜合技術(shù)可以將高級編程語言(C/C++等)的算法描述綜合成RTL級代碼,完成算法級到寄存器傳輸級的轉(zhuǎn)換。高層次綜合工具可以完成各個任務(wù)的寄存器分配、任務(wù)調(diào)度與綁定、狀態(tài)機生成等功能?;赩ivado_HLS高層次綜合的開發(fā)流程如圖1所示。首先將設(shè)計完成的C/C++算法實現(xiàn)代碼在Vivado_HLS中進(jìn)行編譯,檢查語法錯誤并驗證代碼的功能是否正確;之后,在增加相應(yīng)優(yōu)化設(shè)置的基礎(chǔ)上進(jìn)行綜合;綜合完成后進(jìn)行RTL協(xié)同仿真,驗證硬件功能正確性及時序需求;如果不能滿足設(shè)計需求,則可重新更改優(yōu)化條件進(jìn)行綜合。得到正確的RTL代碼后可將其封裝成IP核或直接導(dǎo)出RTL代碼繼續(xù)通過Vivado或者ISE等RTL綜合工具完成傳統(tǒng)RTL設(shè)計流程[2]

wdz3-t1.gif

    相對于C/C++編程語言標(biāo)準(zhǔn),Vivado_HLS高層次綜合工具支持其大部分語法,但高層次綜合工具的輸出針對于具體硬件電路的設(shè)計[3],因此,需要系統(tǒng)級支持的動態(tài)內(nèi)存分配和二級指針等功能不能通過高層次綜合工具進(jìn)行綜合,算法設(shè)計中需要避免此類語法和底層函數(shù)的應(yīng)用。               

2 H.264逆量化逆變換算法概述

    變換與量化是根據(jù)圖像像素之間的相關(guān)性來對數(shù)據(jù)進(jìn)行壓縮,不同量化參數(shù)的設(shè)置可以改變圖像像素的動態(tài)取值范圍。在H.264標(biāo)準(zhǔn)中對直流系數(shù)采用的是哈達(dá)瑪(Hardmard)變換,對殘差系數(shù)采用的是離散余弦變換(DCT),并且通過4×4分塊的DCT變換降低圖像的塊效應(yīng)[4]。量化部分采用的是標(biāo)量量化,采用移位方法進(jìn)行數(shù)據(jù)處理,從而避免除法與浮點數(shù)運算。

    變換與量化是兩個相互獨立的過程,但在H.264中,將兩個過程合并在一起進(jìn)行。其優(yōu)勢在于將DCT中的乘法運算提取出來合并到量化過程中,于是變換部分只進(jìn)行整數(shù)的加法與移位運算,而乘法運算都在量化部分實現(xiàn),從而減少運算量。因此逆變換逆量化模塊實現(xiàn)變換與量化的逆過程。

    H.264解碼器中的逆變換逆量化實現(xiàn)流程如圖2所示,對于含有直流(DC)分量的數(shù)據(jù),先對其中的DC系數(shù)進(jìn)行逆哈達(dá)瑪變換,然后對DC系數(shù)與交流(AC)系數(shù)進(jìn)行逆量化,然后對DC與AC系數(shù)進(jìn)行重組,對重組后的數(shù)據(jù)進(jìn)行逆變換(IDCT)。

wdz3-t2.gif

    對于AC系數(shù),逆量化方法如式(1)所示:

    wdz3-gs1.gif

    對于幀內(nèi)16×16的亮度子塊的DC系數(shù),逆量化方法如式(2)所示:  

     wdz3-gs2-3.gif

    其中,QP表示量化系數(shù),QP的取值直接影響視頻壓縮比,QP取值越大,視頻壓縮的壓縮比越大,但信噪比會相應(yīng)降低。

3 基于高層次綜合的設(shè)計

3.1 算法實現(xiàn)

    逆變換逆量化環(huán)節(jié)在解碼器中所占的比重較大,同時該計算模塊在解碼過程中被頻繁調(diào)用,而逆量化部分大量的乘法運算需要消耗大量的硬件資源。本設(shè)計的目標(biāo)是在資源消耗量控制在一定限度的前提下提供盡可能高的數(shù)據(jù)吞吐量。

    為了提高數(shù)據(jù)處理速度,達(dá)到硬件實現(xiàn)中對亮度信號(Luma)與色度信號(Chroma)的逆量化逆變換的并行執(zhí)行。算法實現(xiàn)過程中分別為其設(shè)計單獨的C函數(shù)并采用獨立接口。輸入數(shù)據(jù)包括幀內(nèi)16×16亮度塊、幀內(nèi)4×4亮度塊以及2×2色度塊,根據(jù)輸入的數(shù)據(jù)類型選擇相應(yīng)的逆量化方法。

    對于算法中的逆變換部分,將二維數(shù)組的變換轉(zhuǎn)換成兩次一維變換:先對數(shù)據(jù)進(jìn)行一次行變換,對行變換后的數(shù)據(jù)進(jìn)行列變換。H.264逆量化逆變換算法實現(xiàn)偽代碼如算法1所示。對其中含有DC分量的數(shù)據(jù),先進(jìn)行逆哈達(dá)瑪變換,然后再分別對DC、AC系數(shù)進(jìn)行逆量化;對于不含DC系數(shù)的數(shù)據(jù)則直接進(jìn)行逆量化。最后對量化后的數(shù)據(jù)進(jìn)行IDCT變換,輸出相應(yīng)的數(shù)據(jù)。

    算法 1  H.264逆量化逆變換的HLS設(shè)計

    1:procedure IQIT

    2:      inverse_scan(data_in)

    3:      if(luma_intra_16X16)

    4:         i_hardmard4x4(luma_DC)

    5:         i_quantification (luma_DC’, luma_AC)

    6:    else if(chroma)

    7:         i_hardmard2x2(chroma_DC)

    8:         i_quantification(chroma_DC’, chroma_AC)

    9:    else

    10:        i_quantification (luma_AC)

    11:   IDCT4x4(i_quantified_data)

    12:end procedure IQIT

3.2 高層次綜合優(yōu)化

3.2.1 循環(huán)展開

    對于C語言算法實現(xiàn)中的循環(huán)部分,默認(rèn)狀態(tài)下循環(huán)體內(nèi)的操作是順序執(zhí)行的。為達(dá)到性能要求,在設(shè)計中的循環(huán)部分插入循環(huán)展開綜合指示指令(UNROLL),高層次綜合工具在綜合過程中會將循環(huán)展開成并行的結(jié)構(gòu),在以資源消耗升高為代價的前提下使得單位時間內(nèi)執(zhí)行的操作數(shù)得到提升[5]。

3.2.2 流水線優(yōu)化

    流水線優(yōu)化主要針對一系列順序執(zhí)行的任務(wù),將其綜合成多級流水線結(jié)構(gòu),從而提高數(shù)據(jù)吞吐量。對于本文的算法實現(xiàn),為了實現(xiàn)資源的充分利用并降低整體的計算延遲,在循環(huán)展開的基礎(chǔ)上,對相應(yīng)模塊的頂層或合適的位置加入了流水線(PIPLINE)優(yōu)化指令。

3.2.3 數(shù)組分割

    設(shè)計中存在大量的數(shù)組運算,默認(rèn)情況下這些數(shù)組在綜合中會使用成ROM或BRAM資源,由于ROM或BRAM一次能同時讀寫的數(shù)據(jù)個數(shù)有限,會造成運算過程中的延時[6]。因此,在以上兩種優(yōu)化的基礎(chǔ)上,設(shè)計加入數(shù)組分割(ARRAY  PARTATION)指令,從而指示高層次綜合工具將大型數(shù)組按輸入配置分割成多組小型數(shù)組,提升片上數(shù)據(jù)訪問速度,從而更好地配合數(shù)據(jù)計算的并行執(zhí)行。

    以上優(yōu)化處理的選擇,遵循綜合后分析輸出結(jié)果,進(jìn)行最直接優(yōu)化的方法。循環(huán)展開目的在于增加循環(huán)內(nèi)數(shù)據(jù)處理的并行度;流水線優(yōu)化用以提升并行后數(shù)據(jù)處理的吞吐量;數(shù)組分割目的在于流水線增強后提升數(shù)據(jù)訪問能力。

4 實驗結(jié)果與分析

    本設(shè)計所使用的高層次綜合平臺采用Xilinx Vivado_HLS 2014.4版本,目標(biāo)FPGA器件為Virtex-7系列的xc7vx485tffg1761-2芯片,設(shè)置的時鐘約束條件為10 ns,算法實現(xiàn)采用C語言,目標(biāo)輸出語言為Verilog。

    經(jīng)過不同優(yōu)化方案后硬件模塊的資源占用與模塊執(zhí)行的時鐘延時如圖3所示。

wdz3-t3.gif

    無優(yōu)化時,F(xiàn)PGA片上各種資源消耗量均為最低,但模塊數(shù)據(jù)處理的時鐘延時確最高。因代碼的主體以循環(huán)為主,為了在速度上得到較大的提升,最直接的方法就是將代碼中的循環(huán)展開,實現(xiàn)對數(shù)據(jù)的并行處理。而圖3中循環(huán)展開部分為對代碼中的不同部分進(jìn)行依次展開并得到綜合后的結(jié)果。

    由于反掃描模塊在每個計算支路上都被采用,因此對反掃描進(jìn)行循環(huán)展開有效地降低了模塊的時鐘延時數(shù)量,而沒有消耗更多的硬件資源。其原因歸結(jié)為反掃描部分只采用數(shù)據(jù)映射,因此其循環(huán)展開不消耗過多硬件卻使得映射并發(fā)的執(zhí)行。而算法中除了反掃描部分所呈現(xiàn)的映射外,還存在多個循環(huán)結(jié)構(gòu)實現(xiàn)的數(shù)據(jù)映射,對其進(jìn)行同樣展開,結(jié)果與上文分析相同。

    而對于luma反量化和chroma反量化部分,其計算單元主要以乘法為主,因此在進(jìn)行循環(huán)展開后,DSP單元的消耗量有所升高。但兩個循環(huán)的展開只分別降低了1.1%和0.4%的延時。這是由于這兩個部分分別是多個數(shù)據(jù)通路中某個通路的一個中間單元,因此這兩個模塊的循環(huán)展開只是降低了單個通路上的時鐘延遲,但對于頂層模塊的總體時鐘延遲沒有產(chǎn)生足夠影響。然而這不代表這兩個部分的循環(huán)展開優(yōu)化沒有作用,在后面的其他模塊展開后,這兩個模塊的優(yōu)化會配合其他的優(yōu)化而對數(shù)據(jù)通路的并行執(zhí)行起到明顯的作用。

    在以上優(yōu)化的基礎(chǔ)上,對每個數(shù)據(jù)通路上都需要進(jìn)行的IDCT模塊進(jìn)行循環(huán)展開。C代碼描述算法中多個計算通路可以調(diào)用同一IDCT函數(shù),然而在高層次綜合過程中,會將多個函數(shù)調(diào)用綜合為多個重復(fù)的相同功能模塊。因此在對IDCT模塊做循環(huán)展開后,時鐘延時數(shù)量得到了明顯降低,而IDCT模塊的主體是加減法和移位,因此循環(huán)展開后資源的消耗并沒有明顯增高。由于整個反量化和反變換模塊中,主要的計算消耗在于反量化模塊中的矩陣乘法,因此對矩陣乘法做循環(huán)展開,DSP單元的使用量產(chǎn)生大幅的提升。

    對Choma數(shù)據(jù)反量化模塊的循環(huán)展開,相對于Luma數(shù)據(jù)的反量化循環(huán)展開,資源消耗增加了57%,相對于Luma數(shù)據(jù)處理部分的增加更加明顯,其原因歸結(jié)為Chroma數(shù)據(jù)的位寬較寬。相對于Luma數(shù)據(jù)反量化單元的展開,時鐘延遲方面得到了明顯的降低,多條數(shù)據(jù)通路的循環(huán)展開,使得整體模塊的計算時鐘延遲得到了降低,這一結(jié)果與上文對Luma數(shù)據(jù)反量化單元的循環(huán)展開分析結(jié)果相吻合。

    最后對代碼中剩余部分的循環(huán)體進(jìn)行相應(yīng)的展開操作,對應(yīng)圖中的全展開的數(shù)據(jù)結(jié)果,對整體時鐘延時的提升不明顯,硬件資源消耗略有升高。

    循環(huán)的展開提高了數(shù)據(jù)處理的并行性,但是在硬件設(shè)計中數(shù)據(jù)路徑上的并行并不能使硬件處理性能得到最大提升,因此對設(shè)計中多處位置插入了流水線的優(yōu)化,從圖中時鐘延時曲線可以看出,流水線的加入使得時鐘延遲得到成倍的縮減,F(xiàn)F和LUT的總量變化不大而DSP計算單元成倍增加——這是因為反量化部分的計算主體是乘法為主,而流水線的加入會強制打開循環(huán)結(jié)構(gòu),因此DSP數(shù)量急劇上升。

4 結(jié)論

    本文采用高層次綜合硬件設(shè)計的方法,實現(xiàn)了H.264標(biāo)準(zhǔn)中反量化反變換部分的硬件部分設(shè)計。通過循環(huán)展開、流水線、數(shù)組分割優(yōu)化方案的加入,大大降低了計算所需的時間,對硬件模塊的設(shè)計空間進(jìn)行了探索。只對硬件模塊核心算法進(jìn)行C語言代碼實現(xiàn),從而得到RTL級硬件模塊輸出。極大地縮短了硬件設(shè)計的周期,提高了生產(chǎn)力。而且本文所呈現(xiàn)的設(shè)計思路不僅適用于本文所實現(xiàn)的反量化和反變換,同樣適用于其他各種硬件單元的設(shè)計。因此在未來的工作中,一方面將會繼續(xù)完成H.264中其他硬件單元的設(shè)計,實現(xiàn)整體H.264標(biāo)準(zhǔn)的硬件實現(xiàn);另一方面,還會致力于各種復(fù)雜算法的高層次綜合實現(xiàn)與優(yōu)化。

參考文獻(xiàn)

[1] FLEMING K,LIN C C,DAVE N,et al.H.264 decoder:A case study in multiple design points[C].MEMOCODE.IEEE,2008:165-174.

[2] 樊宗智,周煦林,劉彬.基于高層次綜合的JPEG編碼器設(shè)計[J].微電子學(xué)與計算機,2015,32(6):1-4.

[3] 何賓.Xilinx_FPGA權(quán)威設(shè)計指南-Vivado 2014集成開發(fā)環(huán)境[M].北京:電子工業(yè)出版社,2015,2:348-403.

[4] WANG T C,HUANG Y W,F(xiàn)ANG H C,et al.Parallel 4x4 2d transform and inverse transform architecture for mpeg-4 avc/h.264[C].ISCAS,vol.2.IEEE,2003:II-800.

[5] Zhong Guanwen,Vanchinathan Venkataramani,Yun Liang,et al.Design space exploration of multiple loops on FPGAs using high level synthesis[C].2014 32nd IIEEE International Conference on Computer Design,Seoul,South Korea,2104:456-463.

[6] 張茉莉,楊海鋼,崔秀海,等.基于數(shù)組分塊的FPGA高級綜合編譯優(yōu)化算法[J].計算機應(yīng)用研究,2013,30(11):3349-3352.

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