《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > H.264中逆量化逆變換的高層次綜合實現
H.264中逆量化逆變換的高層次綜合實現
2016年電子技術應用第11期
陳新偉1,2,孟祥剛2,高 騰2,陳 瑤2,梁 科2,李國峰2
1.福建省信息處理與智能控制重點實驗室,福建 福州350121;2.南開大學 電子信息與光學工程學院,天津300350
摘要: 逆變換與逆量化是H.264解碼器中的一個重要環節,由于其算法復雜度較高,利用傳統的RTL方法設計其硬件電路需要消耗大量的設計時間并經歷復雜的驗證過程。提出了采用高層次綜合的方法進行高效快速的逆變換逆量化硬件模塊設計。測試結果表明,該方法可以較快地得到針對FPGA平臺的逆變換逆量化硬件模塊,同時可對其設計空間進行有效探索,得到滿足不同需求的硬件模塊。
中圖分類號: TN432
文獻標識碼: A
DOI:10.16157/j.issn.0258-7998.2016.11.005
中文引用格式: 陳新偉,孟祥剛,高騰,等. H.264中逆量化逆變換的高層次綜合實現[J].電子技術應用,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,Fuzhou 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標準自公布以來,在視頻會議、數字電視、視頻監控等領域中得到廣泛的使用。新一代視頻壓縮編碼標準H.264/AVC在以往標準的基礎上做了很大的改進,從而具有了很高的壓縮性能和網絡自適應能力[1]。然而高壓縮性能是以較高的算法復雜度為代價,尤其是變換與量化部分,其RTL代碼設計與在FPGA平臺上的實現也變得更為復雜。高層次綜合技術相對于傳統的RTL級設計能有效地降低硬件的設計復雜度,縮短設計周期。因其在算法硬件模塊開發上的高效性,高層次綜合工具已被廣泛應用于復雜硬件項目開發中。

    本文的設計在H.264標準基礎上,采用高層次綜合技術,利用 C語言進行算法描述,通過高層次綜合過程及其綜合優化進行硬件生成,完成符合設計需求的硬件模塊。

1 高層次綜合技術

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

wdz3-t1.gif

    相對于C/C++編程語言標準,Vivado_HLS高層次綜合工具支持其大部分語法,但高層次綜合工具的輸出針對于具體硬件電路的設計[3],因此,需要系統級支持的動態內存分配和二級指針等功能不能通過高層次綜合工具進行綜合,算法設計中需要避免此類語法和底層函數的應用。               

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

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

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

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

wdz3-t2.gif

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

    wdz3-gs1.gif

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

     wdz3-gs2-3.gif

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

3 基于高層次綜合的設計

3.1 算法實現

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

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

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

    算法 1  H.264逆量化逆變換的HLS設計

    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 高層次綜合優化

3.2.1 循環展開

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

3.2.2 流水線優化

    流水線優化主要針對一系列順序執行的任務,將其綜合成多級流水線結構,從而提高數據吞吐量。對于本文的算法實現,為了實現資源的充分利用并降低整體的計算延遲,在循環展開的基礎上,對相應模塊的頂層或合適的位置加入了流水線(PIPLINE)優化指令。

3.2.3 數組分割

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

    以上優化處理的選擇,遵循綜合后分析輸出結果,進行最直接優化的方法。循環展開目的在于增加循環內數據處理的并行度;流水線優化用以提升并行后數據處理的吞吐量;數組分割目的在于流水線增強后提升數據訪問能力。

4 實驗結果與分析

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

    經過不同優化方案后硬件模塊的資源占用與模塊執行的時鐘延時如圖3所示。

wdz3-t3.gif

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

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

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

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

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

    最后對代碼中剩余部分的循環體進行相應的展開操作,對應圖中的全展開的數據結果,對整體時鐘延時的提升不明顯,硬件資源消耗略有升高。

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

4 結論

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

參考文獻

[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編碼器設計[J].微電子學與計算機,2015,32(6):1-4.

[3] 何賓.Xilinx_FPGA權威設計指南-Vivado 2014集成開發環境[M].北京:電子工業出版社,2015,2:348-403.

[4] WANG T C,HUANG Y W,FANG 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] 張茉莉,楊海鋼,崔秀海,等.基于數組分塊的FPGA高級綜合編譯優化算法[J].計算機應用研究,2013,30(11):3349-3352.

此內容為AET網站原創,未經授權禁止轉載。
主站蜘蛛池模板: 日日摸夜夜添夜夜添成人 | 国产午夜一级鲁丝片 | yjizz视频国产网站在线播放 | 成年人午夜影院 | 在线中文字幕一区 | 国产乱码精品一区二区三区网页版 | 久久99热成人精品国产 | 免费人成在线观看网站品爱网 | 性欧美高清精品video | 九九99九九精彩 | 欧美黑人巨大xxxx猛交 | 韩国伦理片免费观看 | 日产欧美亚洲 | 亚洲欧美日韩精品一区 | 91精品国产一区二区三区左线 | 免费看a毛片 | 欧美亚洲综合视频 | 猛h辣h高h文湿重口 美日毛片 | 午夜国产理论 | 欧美人成在线观看 | 国产高清在线精品免费不卡 | 男女午夜视频在线观看 | 亚洲大胆美女人体一二三区 | 亚洲小视频在线 | 狠狠色丁香九九婷婷综合五月 | 91久久精品国产91性色tv | 91精品国产品国语在线不卡 | 男女无遮挡毛片免费视频 | 国产精品欧美久久久久天天影视 | 亚洲天堂免费观看 | 久青草视频免费视频播放线路1 | 九九久久国产精品免费热6 九九久久亚洲综合久久久 九九伦理 | 性欧美xxx在线观看 性欧美疯狂猛交69hd | 免费韩国理伦片在线观看 | 日韩特级 | 人人干人人干 | 亚洲精品456播放 | 天天操夜夜操狠狠操 | 国产超级乱淫视频播放 | 亚洲第一色图 | 狠狠操夜夜 |