??? 摘? 要: H.264是目前國際上最新,、最有前途的視頻壓縮標準,基于上下文的自適應二進制算術編碼是H.264中一種高效的熵編碼,但算法比較復雜,,執(zhí)行速度不高。本文提出一種基于流水線的自適應二進制算術編碼器的FPGA結構,。在實現(xiàn)過程中,,對原有的軟件流程進行了部分改進以滿足硬件實現(xiàn)要求,采用流水線及并行處理技術設計整個電路,。?
??? 關鍵詞: 算術編碼,;FPGA;流水線,;H.264
?
??? 隨著HDTV與視頻會議的興起,,H.264視頻編解碼技術由于其具有更高的壓縮比、更好的圖像質(zhì)量和良好的網(wǎng)絡適應性而備受關注,?;谏舷挛牡淖赃m應二進制算術編碼是H.264標準中的關鍵技術之一[1],它充分考慮了視頻流的相關性,,能適應信號統(tǒng)計特性的變化,,容易達到漸進性能,是一種高效的熵編碼方法,。其不足是復雜度大[2],,這使得單純用軟件編碼難以達到很高的性能,特別是對于實時應用,,由于高清晰度視頻不能實現(xiàn)實時編碼,,就需要硬件加速或者設計專門的硬件編碼電路。?
??? 隨著現(xiàn)場可編程陣列FPGA的容量,、功能以及可靠性的不斷提高,,采用FPGA設計自適應算術編碼器成為一個新的途徑。本文充分利用FPGA高速,、實時的特點,,對原編碼器算法進行優(yōu)化,采用并行運算及流水線設計,,最終在FPGA上以較優(yōu)的速度和資源實現(xiàn)了硬件編碼,。?
1 自適應二進制算術編碼的原理?
??? 自適應二進制算術編碼的編碼過程分為概率估計,、二進制算術編碼以及區(qū)間分割與重整三部分,如圖1,。?
?
?
??? 系統(tǒng)以待編碼比特(Bin)以及上下文編號(CtxIdx)為輸入,,其概率模型包括低概率符號(LPS)和高概率符號(MPS)的概率狀態(tài)(StateIdx)。概率估計模塊分為概率狀態(tài)的初始化和重置與概率模型的更新兩部分,。概率狀態(tài)的初始化和重置是指在H.264的基本編碼單元——片開始時,,某些預定義的概率狀態(tài)通過特定的概率模型進行初始化。概率模型的更新是指:除一個外,,所有概率模性均是自適應模型,,在每個符號被編碼后會自動更新概率模型。LPS量化后的概率值以σ為編號,,進行如圖2所示的刷新,。刷新的具體過程見參考文獻[3]。H.264標準中采取概率狀態(tài)轉移表的方式實現(xiàn)概率狀態(tài)更新,。?
?
?
??? 二進制算術編碼部分采用表格的方式避免了乘法運算,。算術編碼器內(nèi)在狀態(tài)被描繪為兩個量:當前間隔范圍R和當前編碼基礎L 。對于Bin的主要編碼流程如圖3所示,,包括R通過給定的概率估計細分,,概率模型的更新以及重整,具體流程解釋見參考文獻[3],。?
?
?
??? 區(qū)間分割與重整部分主要是對編碼器存儲精度的控制,。在CABAC編碼器中存儲精度要求在8~9位,即如果新的區(qū)間范圍R不在合法范圍[28,,29]之內(nèi),,則需要進行重整化操作,。每個周期重整化都要被執(zhí)行,,輸出一位或多位數(shù)據(jù)。?
2 自適應算術編碼器的改進?
??? H.264標準中的CABAC編碼流程是串行的,,適合軟件實現(xiàn),,但執(zhí)行速度很慢且效率低下。而硬件實現(xiàn)的最大優(yōu)勢在于其并行性,,可以大大提高執(zhí)行效率,。因此,為了設計出高速的編碼器電路,,在不改變算法實質(zhì)的前提下,,將標準中的編碼流程進行相應的改進,以利于硬件實現(xiàn),。本文主要提出以下改進措施:?
??? (1)對概率狀態(tài)轉移表的改進,。H.264中對于概率狀態(tài)的轉移通過概率模型索引pStateIdx進行表征,。在進行概率狀態(tài)轉移時,首先判斷當前Bin是否為MPS,,然后再對該Bin查概率狀態(tài)表進行狀態(tài)轉移,,見表1。對概率狀態(tài)表的硬件實現(xiàn)通常是采用RAM或寄存器堆搭建而成,。經(jīng)過深入分析,,發(fā)現(xiàn)表中transIdxMPS的值正好是索引pStateIdx值(除62和63以外)加1所得,故對于(pStateIdx,,transIdxMPS)表的實現(xiàn),,不再采取RAM方式,而是以選擇器和加法器的方式實現(xiàn),,改進后流程如圖4,。經(jīng)過硬件驗證,發(fā)現(xiàn)優(yōu)化后的面積為原來面積的90%,,且不改變關鍵路徑,。?
?
?
?
??? (2)對于LPS對應的碼字區(qū)間寬度R的查找表的改進[4]。如前所述,,在CABAC中算術編碼采用基于表格的查找法,,故區(qū)間寬度R的值對應于64×4的RangeLPS表。在設計中,,采用64×4的ROM來存放數(shù)值,。但是依照H.264標準設計,ROM的入口地址不僅取決于6 bit的概率狀態(tài)索引值σ,,還取決于區(qū)間寬度參數(shù)ρ的值,,這種數(shù)據(jù)依存關系無疑增加了運算量。且輸出是串行,,不利于流水線設計,,這樣就將降低了系統(tǒng)的時鐘頻率。故采用一種并行設計方案,,以σ為輸入地址查表,,結果得到4個不同的輸出,將它們鎖存后,,利用多路選擇器以R[7:6]作為控制端選出所需的值,。兩種不同的實現(xiàn)方式見圖5。?
?
?
??? (3)對區(qū)間重整模塊的改進,。在重整過程中,,必須滿足R在[28,29]范圍內(nèi),每次遞歸運算后,,R可能會變得更小,,所以要保持上述要求,,就需要對寄存器進行由低位向高位的移位,同時空出來的低位補零,,直到第一個非零位在寄存器允許的取值范圍移到最高位,。當然L也要通過移位與R保持一致的精度。用軟件完成概率區(qū)間重整需要多次循環(huán),,直接串行實現(xiàn)還將占用數(shù)量不等的時鐘周期,。經(jīng)過仔細研究發(fā)現(xiàn),重整化的循環(huán)次數(shù)count等于R二進制化值前導零的數(shù)目,。故R值的更新很簡單,,只要R左移count位即可,在硬件設計中直接采取移位寄存器即可完成,。對于L值的更新較復雜,,如果L值移出的count位全為1,則重整化后的L值即為原L值移位count位后的值,;否則將移位后L值的最高位置0,。總之,,采用分離R與L重整的優(yōu)化方法,,使其不必在編碼時相互等待,從而加快二元判決編碼的速度,,改善編碼性能,。?
3 自適應二進制算術編碼器的FPGA實現(xiàn)?
??? 根據(jù)上節(jié)的改進編碼流程,將整個編碼器設計為三個主要模塊:概率估計模塊,、二進制算術編碼模塊,、區(qū)間分割與重整模塊,如圖6所示,。電路實現(xiàn)主要分為6級流水線,。在第1級流水線中,輸入數(shù)據(jù)進入上下文模型,,讀取相應數(shù)據(jù)供后級調(diào)用,。第2級流水線包含兩個模塊:概率估計模塊和二進制算術編碼模塊,。在軟件實現(xiàn)中,,這兩個模塊是串行的,但在硬件設計中,,本文抽取兩個模塊的輸入端,,同時給它們數(shù)據(jù),使其達到并行計算,,提高了編碼速度,。在第3級流水線中,,進行的是概率區(qū)間R的重整與上下文模型的更新。這也是兩個并行運算,,同時由于L重整要用到R重整的相關參數(shù),,因此放在下一個流水線。第4級流水線完成L的重整,。第5級流水線實現(xiàn)數(shù)據(jù)的最后輸出,。?
?
?
??? 在電路設計中,為實現(xiàn)流水線及并行計算,,一些關鍵的模塊不可忽略,。如采用加法器與選擇器完成狀態(tài)轉移表,節(jié)約面積,;采用移位寄存器完成區(qū)間重整,,減少運算復雜度,縮短關鍵路徑,;采用幾個模塊并行執(zhí)行,,提高時鐘頻率等。?
4 電路仿真及性能分析?
??? 本文的算法經(jīng)過VC++仿真驗證,,可對H.264標準中的主要視頻碼流進行編碼,,其結果與H.264標準程序JM8.6相同。電路結構采用Verilog語言進行RTL級描述,,并用modelsim6.0軟件仿真通過,。仿真波形如圖7所示。?
?
?
圖7? 仿真波形
?
??? 由圖7可以看出,,數(shù)據(jù)輸出周期數(shù)不確定,。這是因為,在輸出模塊對數(shù)據(jù)進行整理時,,其產(chǎn)生的有用數(shù)據(jù)位數(shù)不確定,,而只有達到32位時才進行輸出,故輸出數(shù)據(jù)的周期性也不確定,。?
??? 電路在spartan3 FPGA上進行綜合,、布局布線,使用Synplify工具進行綜合,,最高時鐘頻率為90.4 MHz,。將綜合好的edif電路網(wǎng)表文件輸入到后端由FPGA廠商Xilinx提供的Foundation軟件進行布局布線,生成二進制流文件,,邏輯單元為769,,占總資源的22%。?
??? 使用本文設計的電路對H.264標準中一些標準視頻序列進行測試,序列質(zhì)量為QP=28,,并與H.264標準程序JM8.6,、文獻[5]中H.264的MQ編碼器以及文獻[6]中JPEG2000的MQ編碼器的編碼時間作比較,得出如表2所示的結果,。?
?
?
??? 綜上,,本文設計的算術編碼器在速度上較軟件實現(xiàn)及其他硬件電路實現(xiàn)有較大提升,資源占用率也較少,,不僅能完成H.264標準中基本檔次的編碼,,還有望應用于更大尺寸、更高質(zhì)量的實時視頻壓縮編碼,。?
??? 本文在對H.264標準中自適應二進制算術編碼器研究和分析的基礎上,,提出其FPGA電路結構,采用流水線方式實現(xiàn)了電路,。本結構經(jīng)spartan3 FPGA實現(xiàn),,吞吐量為每周期1 bit,最大時鐘頻率為90.4 MHz,,能夠適應H.264中l(wèi)evel3及以上檔次實時視頻編碼的要求,。?
參考文獻?
[1] OSORIO O,BRUGUERA J.Arithmetic coding architecture?for H.264/AVC CABAC compression system.in Proc.Euromicro Symposium on Digital System Design,,2004:62-69.?
[2] MARPE D,,SCHWARZ H,WIEGAND T.Context-based?adaptive binary arithmetic coding in the H.264/avc video?compression standard[J].IEEE Circuits and Systems for?Video Tech,,2003,,13(7):620-635.?
[3] Joint video team(JVT) of ISO/IEC MPEG and ITU-T?VCEG draft ITU-T recommendation and final draft international standard of joint video specification[S].Pattaya,Thailand:Final Committee Draft,,Document JVT-G050,,7th?Meeting,2003:7-14.?
[4] BOSSEN F.CABAC cleanup and complexity reduction.in?Joint Video Team of ISO/IEC JTC1/SC29/WG11 & ITU-T?SG16/Q.6 Doc.JVTE086,,Geneva,,Switzerland,2002(10).?
[5] V H Ha,,W -S.Shim,,J.-W.Kim.Real-time MPEG-4?AVC/H.264 CABAC entropy coder,in Proc.Int.Conf.Comsumer Electron.(ICCE),,2005:255-256.?
[6] 華林,,朱珂,張倩苓,,等一種適用于JPEG2000的高速MQ編碼器的VLSI實現(xiàn).固體電子學研究與進展,,2002,,23(4).