文獻(xiàn)標(biāo)識(shí)碼: A
DOI:10.16157/j.issn.0258-7998.2016.11.005
中文引用格式: 陳新偉,孟祥剛,,高騰,,等. H.264中逆量化逆變換的高層次綜合實(shí)現(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.
0 引言
H.264標(biāo)準(zhǔn)自公布以來(lái),,在視頻會(huì)議、數(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ù)雜度為代價(jià),,尤其是變換與量化部分,其RTL代碼設(shè)計(jì)與在FPGA平臺(tái)上的實(shí)現(xiàn)也變得更為復(fù)雜,。高層次綜合技術(shù)相對(duì)于傳統(tǒng)的RTL級(jí)設(shè)計(jì)能有效地降低硬件的設(shè)計(jì)復(fù)雜度,,縮短設(shè)計(jì)周期。因其在算法硬件模塊開(kāi)發(fā)上的高效性,,高層次綜合工具已被廣泛應(yīng)用于復(fù)雜硬件項(xiàng)目開(kāi)發(fā)中,。
本文的設(shè)計(jì)在H.264標(biāo)準(zhǔn)基礎(chǔ)上,采用高層次綜合技術(shù),,利用 C語(yǔ)言進(jìn)行算法描述,,通過(guò)高層次綜合過(guò)程及其綜合優(yōu)化進(jìn)行硬件生成,完成符合設(shè)計(jì)需求的硬件模塊,。
1 高層次綜合技術(shù)
高層次綜合技術(shù)可以將高級(jí)編程語(yǔ)言(C/C++等)的算法描述綜合成RTL級(jí)代碼,,完成算法級(jí)到寄存器傳輸級(jí)的轉(zhuǎn)換。高層次綜合工具可以完成各個(gè)任務(wù)的寄存器分配,、任務(wù)調(diào)度與綁定,、狀態(tài)機(jī)生成等功能?;赩ivado_HLS高層次綜合的開(kāi)發(fā)流程如圖1所示,。首先將設(shè)計(jì)完成的C/C++算法實(shí)現(xiàn)代碼在Vivado_HLS中進(jìn)行編譯,檢查語(yǔ)法錯(cuò)誤并驗(yàn)證代碼的功能是否正確,;之后,,在增加相應(yīng)優(yōu)化設(shè)置的基礎(chǔ)上進(jìn)行綜合;綜合完成后進(jìn)行RTL協(xié)同仿真,,驗(yàn)證硬件功能正確性及時(shí)序需求,;如果不能滿足設(shè)計(jì)需求,則可重新更改優(yōu)化條件進(jìn)行綜合,。得到正確的RTL代碼后可將其封裝成IP核或直接導(dǎo)出RTL代碼繼續(xù)通過(guò)Vivado或者ISE等RTL綜合工具完成傳統(tǒng)RTL設(shè)計(jì)流程[2],。
相對(duì)于C/C++編程語(yǔ)言標(biāo)準(zhǔn),Vivado_HLS高層次綜合工具支持其大部分語(yǔ)法,,但高層次綜合工具的輸出針對(duì)于具體硬件電路的設(shè)計(jì)[3],,因此,,需要系統(tǒng)級(jí)支持的動(dòng)態(tài)內(nèi)存分配和二級(jí)指針等功能不能通過(guò)高層次綜合工具進(jìn)行綜合,算法設(shè)計(jì)中需要避免此類語(yǔ)法和底層函數(shù)的應(yīng)用,。
變換與量化是根據(jù)圖像像素之間的相關(guān)性來(lái)對(duì)數(shù)據(jù)進(jìn)行壓縮,,不同量化參數(shù)的設(shè)置可以改變圖像像素的動(dòng)態(tài)取值范圍。在H.264標(biāo)準(zhǔn)中對(duì)直流系數(shù)采用的是哈達(dá)瑪(Hardmard)變換,,對(duì)殘差系數(shù)采用的是離散余弦變換(DCT),,并且通過(guò)4×4分塊的DCT變換降低圖像的塊效應(yīng)[4]。量化部分采用的是標(biāo)量量化,,采用移位方法進(jìn)行數(shù)據(jù)處理,,從而避免除法與浮點(diǎn)數(shù)運(yùn)算。
變換與量化是兩個(gè)相互獨(dú)立的過(guò)程,,但在H.264中,,將兩個(gè)過(guò)程合并在一起進(jìn)行。其優(yōu)勢(shì)在于將DCT中的乘法運(yùn)算提取出來(lái)合并到量化過(guò)程中,,于是變換部分只進(jìn)行整數(shù)的加法與移位運(yùn)算,,而乘法運(yùn)算都在量化部分實(shí)現(xiàn),從而減少運(yùn)算量,。因此逆變換逆量化模塊實(shí)現(xiàn)變換與量化的逆過(guò)程,。
H.264解碼器中的逆變換逆量化實(shí)現(xiàn)流程如圖2所示,對(duì)于含有直流(DC)分量的數(shù)據(jù),,先對(duì)其中的DC系數(shù)進(jìn)行逆哈達(dá)瑪變換,,然后對(duì)DC系數(shù)與交流(AC)系數(shù)進(jìn)行逆量化,然后對(duì)DC與AC系數(shù)進(jìn)行重組,,對(duì)重組后的數(shù)據(jù)進(jìn)行逆變換(IDCT),。
對(duì)于AC系數(shù),逆量化方法如式(1)所示:
對(duì)于幀內(nèi)16×16的亮度子塊的DC系數(shù),,逆量化方法如式(2)所示:
其中,,QP表示量化系數(shù),QP的取值直接影響視頻壓縮比,,QP取值越大,,視頻壓縮的壓縮比越大,但信噪比會(huì)相應(yīng)降低,。
3 基于高層次綜合的設(shè)計(jì)
3.1 算法實(shí)現(xiàn)
逆變換逆量化環(huán)節(jié)在解碼器中所占的比重較大,,同時(shí)該計(jì)算模塊在解碼過(guò)程中被頻繁調(diào)用,而逆量化部分大量的乘法運(yùn)算需要消耗大量的硬件資源,。本設(shè)計(jì)的目標(biāo)是在資源消耗量控制在一定限度的前提下提供盡可能高的數(shù)據(jù)吞吐量,。
為了提高數(shù)據(jù)處理速度,達(dá)到硬件實(shí)現(xiàn)中對(duì)亮度信號(hào)(Luma)與色度信號(hào)(Chroma)的逆量化逆變換的并行執(zhí)行,。算法實(shí)現(xiàn)過(guò)程中分別為其設(shè)計(jì)單獨(dú)的C函數(shù)并采用獨(dú)立接口,。輸入數(shù)據(jù)包括幀內(nèi)16×16亮度塊,、幀內(nèi)4×4亮度塊以及2×2色度塊,,根據(jù)輸入的數(shù)據(jù)類型選擇相應(yīng)的逆量化方法,。
對(duì)于算法中的逆變換部分,將二維數(shù)組的變換轉(zhuǎn)換成兩次一維變換:先對(duì)數(shù)據(jù)進(jìn)行一次行變換,,對(duì)行變換后的數(shù)據(jù)進(jìn)行列變換,。H.264逆量化逆變換算法實(shí)現(xiàn)偽代碼如算法1所示。對(duì)其中含有DC分量的數(shù)據(jù),,先進(jìn)行逆哈達(dá)瑪變換,,然后再分別對(duì)DC、AC系數(shù)進(jìn)行逆量化,;對(duì)于不含DC系數(shù)的數(shù)據(jù)則直接進(jìn)行逆量化,。最后對(duì)量化后的數(shù)據(jù)進(jìn)行IDCT變換,輸出相應(yīng)的數(shù)據(jù),。
算法 1 H.264逆量化逆變換的HLS設(shè)計(jì)
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)展開(kāi)
對(duì)于C語(yǔ)言算法實(shí)現(xiàn)中的循環(huán)部分,,默認(rèn)狀態(tài)下循環(huán)體內(nèi)的操作是順序執(zhí)行的。為達(dá)到性能要求,,在設(shè)計(jì)中的循環(huán)部分插入循環(huán)展開(kāi)綜合指示指令(UNROLL),,高層次綜合工具在綜合過(guò)程中會(huì)將循環(huán)展開(kāi)成并行的結(jié)構(gòu),在以資源消耗升高為代價(jià)的前提下使得單位時(shí)間內(nèi)執(zhí)行的操作數(shù)得到提升[5],。
3.2.2 流水線優(yōu)化
流水線優(yōu)化主要針對(duì)一系列順序執(zhí)行的任務(wù),,將其綜合成多級(jí)流水線結(jié)構(gòu),從而提高數(shù)據(jù)吞吐量,。對(duì)于本文的算法實(shí)現(xiàn),,為了實(shí)現(xiàn)資源的充分利用并降低整體的計(jì)算延遲,在循環(huán)展開(kāi)的基礎(chǔ)上,,對(duì)相應(yīng)模塊的頂層或合適的位置加入了流水線(PIPLINE)優(yōu)化指令,。
3.2.3 數(shù)組分割
設(shè)計(jì)中存在大量的數(shù)組運(yùn)算,默認(rèn)情況下這些數(shù)組在綜合中會(huì)使用成ROM或BRAM資源,,由于ROM或BRAM一次能同時(shí)讀寫(xiě)的數(shù)據(jù)個(gè)數(shù)有限,,會(huì)造成運(yùn)算過(guò)程中的延時(shí)[6]。因此,,在以上兩種優(yōu)化的基礎(chǔ)上,,設(shè)計(jì)加入數(shù)組分割(ARRAY PARTATION)指令,從而指示高層次綜合工具將大型數(shù)組按輸入配置分割成多組小型數(shù)組,,提升片上數(shù)據(jù)訪問(wèn)速度,,從而更好地配合數(shù)據(jù)計(jì)算的并行執(zhí)行。
以上優(yōu)化處理的選擇,,遵循綜合后分析輸出結(jié)果,,進(jìn)行最直接優(yōu)化的方法,。循環(huán)展開(kāi)目的在于增加循環(huán)內(nèi)數(shù)據(jù)處理的并行度;流水線優(yōu)化用以提升并行后數(shù)據(jù)處理的吞吐量,;數(shù)組分割目的在于流水線增強(qiáng)后提升數(shù)據(jù)訪問(wèn)能力,。
4 實(shí)驗(yàn)結(jié)果與分析
本設(shè)計(jì)所使用的高層次綜合平臺(tái)采用Xilinx Vivado_HLS 2014.4版本,目標(biāo)FPGA器件為Virtex-7系列的xc7vx485tffg1761-2芯片,,設(shè)置的時(shí)鐘約束條件為10 ns,,算法實(shí)現(xiàn)采用C語(yǔ)言,目標(biāo)輸出語(yǔ)言為Verilog,。
經(jīng)過(guò)不同優(yōu)化方案后硬件模塊的資源占用與模塊執(zhí)行的時(shí)鐘延時(shí)如圖3所示,。
無(wú)優(yōu)化時(shí),F(xiàn)PGA片上各種資源消耗量均為最低,,但模塊數(shù)據(jù)處理的時(shí)鐘延時(shí)確最高,。因代碼的主體以循環(huán)為主,為了在速度上得到較大的提升,,最直接的方法就是將代碼中的循環(huán)展開(kāi),,實(shí)現(xiàn)對(duì)數(shù)據(jù)的并行處理。而圖3中循環(huán)展開(kāi)部分為對(duì)代碼中的不同部分進(jìn)行依次展開(kāi)并得到綜合后的結(jié)果,。
由于反掃描模塊在每個(gè)計(jì)算支路上都被采用,,因此對(duì)反掃描進(jìn)行循環(huán)展開(kāi)有效地降低了模塊的時(shí)鐘延時(shí)數(shù)量,而沒(méi)有消耗更多的硬件資源,。其原因歸結(jié)為反掃描部分只采用數(shù)據(jù)映射,,因此其循環(huán)展開(kāi)不消耗過(guò)多硬件卻使得映射并發(fā)的執(zhí)行。而算法中除了反掃描部分所呈現(xiàn)的映射外,,還存在多個(gè)循環(huán)結(jié)構(gòu)實(shí)現(xiàn)的數(shù)據(jù)映射,,對(duì)其進(jìn)行同樣展開(kāi),結(jié)果與上文分析相同,。
而對(duì)于luma反量化和chroma反量化部分,,其計(jì)算單元主要以乘法為主,因此在進(jìn)行循環(huán)展開(kāi)后,,DSP單元的消耗量有所升高,。但兩個(gè)循環(huán)的展開(kāi)只分別降低了1.1%和0.4%的延時(shí)。這是由于這兩個(gè)部分分別是多個(gè)數(shù)據(jù)通路中某個(gè)通路的一個(gè)中間單元,,因此這兩個(gè)模塊的循環(huán)展開(kāi)只是降低了單個(gè)通路上的時(shí)鐘延遲,,但對(duì)于頂層模塊的總體時(shí)鐘延遲沒(méi)有產(chǎn)生足夠影響。然而這不代表這兩個(gè)部分的循環(huán)展開(kāi)優(yōu)化沒(méi)有作用,,在后面的其他模塊展開(kāi)后,,這兩個(gè)模塊的優(yōu)化會(huì)配合其他的優(yōu)化而對(duì)數(shù)據(jù)通路的并行執(zhí)行起到明顯的作用。
在以上優(yōu)化的基礎(chǔ)上,對(duì)每個(gè)數(shù)據(jù)通路上都需要進(jìn)行的IDCT模塊進(jìn)行循環(huán)展開(kāi),。C代碼描述算法中多個(gè)計(jì)算通路可以調(diào)用同一IDCT函數(shù),,然而在高層次綜合過(guò)程中,會(huì)將多個(gè)函數(shù)調(diào)用綜合為多個(gè)重復(fù)的相同功能模塊,。因此在對(duì)IDCT模塊做循環(huán)展開(kāi)后,,時(shí)鐘延時(shí)數(shù)量得到了明顯降低,而IDCT模塊的主體是加減法和移位,,因此循環(huán)展開(kāi)后資源的消耗并沒(méi)有明顯增高,。由于整個(gè)反量化和反變換模塊中,主要的計(jì)算消耗在于反量化模塊中的矩陣乘法,,因此對(duì)矩陣乘法做循環(huán)展開(kāi),DSP單元的使用量產(chǎn)生大幅的提升,。
對(duì)Choma數(shù)據(jù)反量化模塊的循環(huán)展開(kāi),,相對(duì)于Luma數(shù)據(jù)的反量化循環(huán)展開(kāi),資源消耗增加了57%,,相對(duì)于Luma數(shù)據(jù)處理部分的增加更加明顯,,其原因歸結(jié)為Chroma數(shù)據(jù)的位寬較寬。相對(duì)于Luma數(shù)據(jù)反量化單元的展開(kāi),,時(shí)鐘延遲方面得到了明顯的降低,,多條數(shù)據(jù)通路的循環(huán)展開(kāi),使得整體模塊的計(jì)算時(shí)鐘延遲得到了降低,,這一結(jié)果與上文對(duì)Luma數(shù)據(jù)反量化單元的循環(huán)展開(kāi)分析結(jié)果相吻合,。
最后對(duì)代碼中剩余部分的循環(huán)體進(jìn)行相應(yīng)的展開(kāi)操作,對(duì)應(yīng)圖中的全展開(kāi)的數(shù)據(jù)結(jié)果,,對(duì)整體時(shí)鐘延時(shí)的提升不明顯,,硬件資源消耗略有升高。
循環(huán)的展開(kāi)提高了數(shù)據(jù)處理的并行性,,但是在硬件設(shè)計(jì)中數(shù)據(jù)路徑上的并行并不能使硬件處理性能得到最大提升,,因此對(duì)設(shè)計(jì)中多處位置插入了流水線的優(yōu)化,從圖中時(shí)鐘延時(shí)曲線可以看出,,流水線的加入使得時(shí)鐘延遲得到成倍的縮減,,F(xiàn)F和LUT的總量變化不大而DSP計(jì)算單元成倍增加——這是因?yàn)榉戳炕糠值挠?jì)算主體是乘法為主,而流水線的加入會(huì)強(qiáng)制打開(kāi)循環(huán)結(jié)構(gòu),,因此DSP數(shù)量急劇上升,。
4 結(jié)論
本文采用高層次綜合硬件設(shè)計(jì)的方法,實(shí)現(xiàn)了H.264標(biāo)準(zhǔn)中反量化反變換部分的硬件部分設(shè)計(jì),。通過(guò)循環(huán)展開(kāi),、流水線、數(shù)組分割優(yōu)化方案的加入,大大降低了計(jì)算所需的時(shí)間,,對(duì)硬件模塊的設(shè)計(jì)空間進(jìn)行了探索,。只對(duì)硬件模塊核心算法進(jìn)行C語(yǔ)言代碼實(shí)現(xiàn),從而得到RTL級(jí)硬件模塊輸出,。極大地縮短了硬件設(shè)計(jì)的周期,,提高了生產(chǎn)力。而且本文所呈現(xiàn)的設(shè)計(jì)思路不僅適用于本文所實(shí)現(xiàn)的反量化和反變換,,同樣適用于其他各種硬件單元的設(shè)計(jì),。因此在未來(lái)的工作中,一方面將會(huì)繼續(xù)完成H.264中其他硬件單元的設(shè)計(jì),,實(shí)現(xiàn)整體H.264標(biāo)準(zhǔn)的硬件實(shí)現(xiàn),;另一方面,還會(huì)致力于各種復(fù)雜算法的高層次綜合實(shí)現(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ì)[J].微電子學(xué)與計(jì)算機(jī),,2015,32(6):1-4.
[3] 何賓.Xilinx_FPGA權(quán)威設(shè)計(jì)指南-Vivado 2014集成開(kāi)發(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高級(jí)綜合編譯優(yōu)化算法[J].計(jì)算機(jī)應(yīng)用研究,,2013,,30(11):3349-3352.