陳新偉,孟祥剛,高 騰,陳 瑤,梁 科,李國峰
(1.福建省信息處理與智能控制重點(diǎn)實(shí)驗(yàn)室,福建 福州350121;2.南開大學(xué) 電子信息與光學(xué)工程學(xué)院,天津 300350)
H.264中逆量化逆變換的高層次綜合實(shí)現(xiàn)*
陳新偉1,2,孟祥剛2,高 騰2,陳 瑤2,梁 科2,李國峰2
(1.福建省信息處理與智能控制重點(diǎn)實(shí)驗(yàn)室,福建 福州350121;2.南開大學(xué) 電子信息與光學(xué)工程學(xué)院,天津 300350)
逆變換與逆量化是H.264解碼器中的一個(gè)重要環(huán)節(jié),由于其算法復(fù)雜度較高,利用傳統(tǒng)的RTL方法設(shè)計(jì)其硬件電路需要消耗大量的設(shè)計(jì)時(shí)間并經(jīng)歷復(fù)雜的驗(yàn)證過程。提出了采用高層次綜合的方法進(jìn)行高效快速的逆變換逆量化硬件模塊設(shè)計(jì)。測試結(jié)果表明,該方法可以較快地得到針對(duì)FPGA平臺(tái)的逆變換逆量化硬件模塊,同時(shí)可對(duì)其設(shè)計(jì)空間進(jìn)行有效探索,得到滿足不同需求的硬件模塊。
H.264解碼器;逆量化;逆變換;高層次綜合;設(shè)計(jì)空間探索
H.264標(biāo)準(zhǔn)自公布以來,在視頻會(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ì)周期。因其在算法硬件模塊開發(fā)上的高效性,高層次綜合工具已被廣泛應(yīng)用于復(fù)雜硬件項(xiàng)目開發(fā)中。
本文的設(shè)計(jì)在 H.264標(biāo)準(zhǔn)基礎(chǔ)上,采用高層次綜合技術(shù),利用 C語言進(jìn)行算法描述,通過高層次綜合過程及其綜合優(yōu)化進(jìn)行硬件生成,完成符合設(shè)計(jì)需求的硬件模塊。
高層次綜合技術(shù)可以將高級(jí)編程語言(C/C++等)的算法描述綜合成RTL級(jí)代碼,完成算法級(jí)到寄存器傳輸級(jí)的轉(zhuǎn)換。高層次綜合工具可以完成各個(gè)任務(wù)的寄存器分配、任務(wù)調(diào)度與綁定、狀態(tài)機(jī)生成等功能?;赩ivado_HLS高層次綜合的開發(fā)流程如圖1所示。首先將設(shè)計(jì)完成的C/C++算法實(shí)現(xiàn)代碼在 Vivado_HLS中進(jìn)行編譯,檢查語法錯(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ù)通過Vivado或者ISE等RTL綜合工具完成傳統(tǒng) RTL設(shè)計(jì)流程[2]。
相對(duì)于C/C++編程語言標(biāo)準(zhǔn),Vivado_HLS高層次綜合工具支持其大部分語法,但高層次綜合工具的輸出針對(duì)于具體硬件電路的設(shè)計(jì)[3],因此,需要系統(tǒng)級(jí)支持的動(dòng)態(tài)內(nèi)存分配和二級(jí)指針等功能不能通過高層次綜合工具進(jìn)行綜合,算法設(shè)計(jì)中需要避免此類語法和底層函數(shù)的應(yīng)用。
圖1 基于Vivado_HLS高層次綜合硬件開發(fā)流程
變換與量化是根據(jù)圖像像素之間的相關(guān)性來對(duì)數(shù)據(jù)進(jìn)行壓縮,不同量化參數(shù)的設(shè)置可以改變圖像像素的動(dòng)態(tài)取值范圍。在H.264標(biāo)準(zhǔn)中對(duì)直流系數(shù)采用的是哈達(dá)瑪(Hardmard)變換,對(duì)殘差系數(shù)采用的是離散余弦變換(DCT),并且通過4×4分塊的DCT變換降低圖像的塊效應(yīng)[4]。量化部分采用的是標(biāo)量量化,采用移位方法進(jìn)行數(shù)據(jù)處理,從而避免除法與浮點(diǎn)數(shù)運(yùn)算。
變換與量化是兩個(gè)相互獨(dú)立的過程,但在 H.264中,將兩個(gè)過程合并在一起進(jìn)行。其優(yōu)勢在于將DCT中的乘法運(yùn)算提取出來合并到量化過程中,于是變換部分只進(jìn)行整數(shù)的加法與移位運(yùn)算,而乘法運(yùn)算都在量化部分實(shí)現(xiàn),從而減少運(yùn)算量。因此逆變換逆量化模塊實(shí)現(xiàn)變換與量化的逆過程。
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)。
圖2 H.264逆變換逆量化實(shí)現(xiàn)流程
對(duì)于AC系數(shù),逆量化方法如式(1)所示:
對(duì)于幀內(nèi)16×16的亮度子塊的DC系數(shù),逆量化方法如式(2)所示:
對(duì)于色度信號(hào)的DC系數(shù),量化方法如式(3):
其中,QP表示量化系數(shù),QP的取值直接影響視頻壓縮比,QP取值越大,視頻壓縮的壓縮比越大,但信噪比會(huì)相應(yīng)降低。
3.1 算法實(shí)現(xiàn)
逆變換逆量化環(huán)節(jié)在解碼器中所占的比重較大,同時(shí)該計(jì)算模塊在解碼過程中被頻繁調(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)過程中分別為其設(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ù)。
算法 1H.264逆量化逆變換的HLS設(shè)計(jì)
3.2 高層次綜合優(yōu)化
3.2.1 循環(huán)展開
對(duì)于C語言算法實(shí)現(xiàn)中的循環(huán)部分,默認(rèn)狀態(tài)下循環(huán)體內(nèi)的操作是順序執(zhí)行的。為達(dá)到性能要求,在設(shè)計(jì)中的循環(huán)部分插入循環(huán)展開綜合指示指令(UNROLL),高層次綜合工具在綜合過程中會(huì)將循環(huán)展開成并行的結(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)展開的基礎(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í)讀寫的數(shù)據(jù)個(gè)數(shù)有限,會(huì)造成運(yùn)算過程中的延時(shí)[6]。因此,在以上兩種優(yōu)化的基礎(chǔ)上,設(shè)計(jì)加入數(shù)組分割(ARRAY PARTATION)指令,從而指示高層次綜合工具將大型數(shù)組按輸入配置分割成多組小型數(shù)組,提升片上數(shù)據(jù)訪問速度,從而更好地配合數(shù)據(jù)計(jì)算的并行執(zhí)行。
以上優(yōu)化處理的選擇,遵循綜合后分析輸出結(jié)果,進(jìn)行最直接優(yōu)化的方法。循環(huán)展開目的在于增加循環(huán)內(nèi)數(shù)據(jù)處理的并行度;流水線優(yōu)化用以提升并行后數(shù)據(jù)處理的吞吐量;數(shù)組分割目的在于流水線增強(qiáng)后提升數(shù)據(jù)訪問能力。
本設(shè)計(jì)所使用的高層次綜合平臺(tái)采用 Xilinx Vivado_HLS 2014.4版本,目標(biāo)FPGA器件為Virtex-7系列的 xc7vx485tffg1761-2芯片,設(shè)置的時(shí)鐘約束條件為10 ns,算法實(shí)現(xiàn)采用C語言,目標(biāo)輸出語言為Verilog。
經(jīng)過不同優(yōu)化方案后硬件模塊的資源占用與模塊執(zhí)行的時(shí)鐘延時(shí)如圖3所示。
圖3 不同優(yōu)化方案下硬件模塊資源與時(shí)鐘延時(shí)綜合結(jié)果
無優(yōu)化時(shí),F(xiàn)PGA片上各種資源消耗量均為最低,但模塊數(shù)據(jù)處理的時(shí)鐘延時(shí)確最高。因代碼的主體以循環(huán)為主,為了在速度上得到較大的提升,最直接的方法就是將代碼中的循環(huán)展開,實(shí)現(xiàn)對(duì)數(shù)據(jù)的并行處理。而圖3中循環(huán)展開部分為對(duì)代碼中的不同部分進(jìn)行依次展開并得到綜合后的結(jié)果。
由于反掃描模塊在每個(gè)計(jì)算支路上都被采用,因此對(duì)反掃描進(jìn)行循環(huán)展開有效地降低了模塊的時(shí)鐘延時(shí)數(shù)量,而沒有消耗更多的硬件資源。其原因歸結(jié)為反掃描部分只采用數(shù)據(jù)映射,因此其循環(huán)展開不消耗過多硬件卻使得映射并發(fā)的執(zhí)行。而算法中除了反掃描部分所呈現(xiàn)的映射外,還存在多個(gè)循環(huán)結(jié)構(gòu)實(shí)現(xiàn)的數(shù)據(jù)映射,對(duì)其進(jìn)行同樣展開,結(jié)果與上文分析相同。
而對(duì)于 luma反量化和 chroma反量化部分,其計(jì)算單元主要以乘法為主,因此在進(jìn)行循環(huán)展開后,DSP單元的消耗量有所升高。但兩個(gè)循環(huán)的展開只分別降低了1.1%和0.4%的延時(shí)。這是由于這兩個(gè)部分分別是多個(gè)數(shù)據(jù)通路中某個(gè)通路的一個(gè)中間單元,因此這兩個(gè)模塊的循環(huán)展開只是降低了單個(gè)通路上的時(shí)鐘延遲,但對(duì)于頂層模塊的總體時(shí)鐘延遲沒有產(chǎn)生足夠影響。然而這不代表這兩個(gè)部分的循環(huán)展開優(yōu)化沒有作用,在后面的其他模塊展開后,這兩個(gè)模塊的優(yōu)化會(huì)配合其他的優(yōu)化而對(duì)數(shù)據(jù)通路的并行執(zhí)行起到明顯的作用。
在以上優(yōu)化的基礎(chǔ)上,對(duì)每個(gè)數(shù)據(jù)通路上都需要進(jìn)行的IDCT模塊進(jìn)行循環(huán)展開。C代碼描述算法中多個(gè)計(jì)算通路可以調(diào)用同一IDCT函數(shù),然而在高層次綜合過程中,會(huì)將多個(gè)函數(shù)調(diào)用綜合為多個(gè)重復(fù)的相同功能模塊。因此在對(duì)IDCT模塊做循環(huán)展開后,時(shí)鐘延時(shí)數(shù)量得到了明顯降低,而IDCT模塊的主體是加減法和移位,因此循環(huán)展開后資源的消耗并沒有明顯增高。由于整個(gè)反量化和反變換模塊中,主要的計(jì)算消耗在于反量化模塊中的矩陣乘法,因此對(duì)矩陣乘法做循環(huán)展開,DSP單元的使用量產(chǎn)生大幅的提升。
對(duì)Choma數(shù)據(jù)反量化模塊的循環(huán)展開,相對(duì)于Luma數(shù)據(jù)的反量化循環(huán)展開,資源消耗增加了57%,相對(duì)于Luma數(shù)據(jù)處理部分的增加更加明顯,其原因歸結(jié)為Chroma數(shù)據(jù)的位寬較寬。相對(duì)于Luma數(shù)據(jù)反量化單元的展開,時(shí)鐘延遲方面得到了明顯的降低,多條數(shù)據(jù)通路的循環(huán)展開,使得整體模塊的計(jì)算時(shí)鐘延遲得到了降低,這一結(jié)果與上文對(duì)Luma數(shù)據(jù)反量化單元的循環(huán)展開分析結(jié)果相吻合。
最后對(duì)代碼中剩余部分的循環(huán)體進(jìn)行相應(yīng)的展開操作,對(duì)應(yīng)圖中的全展開的數(shù)據(jù)結(jié)果,對(duì)整體時(shí)鐘延時(shí)的提升不明顯,硬件資源消耗略有升高。
循環(huán)的展開提高了數(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)制打開循環(huán)結(jié)構(gòu),因此DSP數(shù)量急劇上升。
本文采用高層次綜合硬件設(shè)計(jì)的方法,實(shí)現(xiàn)了H.264標(biāo)準(zhǔn)中反量化反變換部分的硬件部分設(shè)計(jì)。通過循環(huán)展開、流水線、數(shù)組分割優(yōu)化方案的加入,大大降低了計(jì)算所需的時(shí)間,對(duì)硬件模塊的設(shè)計(jì)空間進(jìn)行了探索。只對(duì)硬件模塊核心算法進(jìn)行C語言代碼實(shí)現(xiàn),從而得到RTL級(jí)硬件模塊輸出。極大地縮短了硬件設(shè)計(jì)的周期,提高了生產(chǎn)力。而且本文所呈現(xiàn)的設(shè)計(jì)思路不僅適用于本文所實(shí)現(xiàn)的反量化和反變換,同樣適用于其他各種硬件單元的設(shè)計(jì)。因此在未來的工作中,一方面將會(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)化。
[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集成開發(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.
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)
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.
H.264 decoder;inverse quantification;inverse transform;high level synthesis;design space exploration
TN432
A
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.
2016-07-11)
陳新偉(1983-),男,博士,主要研究方向:信號(hào)處理、智能控制。
福建省科技廳引導(dǎo)性項(xiàng)目(2015h0031)
孟祥剛(1993-),男,碩士,主要研究方向:數(shù)字集成電路設(shè)計(jì)、高層次綜合設(shè)計(jì)。