??? 摘? 要: H.264是目前國(guó)際上最新、最有前途的視頻壓縮標(biāo)準(zhǔn),,基于上下文的自適應(yīng)二進(jìn)制算術(shù)編碼是H.264中一種高效的熵編碼,,但算法比較復(fù)雜,執(zhí)行速度不高,。本文提出一種基于流水線的自適應(yīng)二進(jìn)制算術(shù)編碼器的FPGA結(jié)構(gòu),。在實(shí)現(xiàn)過(guò)程中,對(duì)原有的軟件流程進(jìn)行了部分改進(jìn)以滿足硬件實(shí)現(xiàn)要求,,采用流水線及并行處理技術(shù)設(shè)計(jì)整個(gè)電路,。?
??? 關(guān)鍵詞: 算術(shù)編碼;FPGA,;流水線,;H.264
?
??? 隨著HDTV與視頻會(huì)議的興起,H.264視頻編解碼技術(shù)由于其具有更高的壓縮比,、更好的圖像質(zhì)量和良好的網(wǎng)絡(luò)適應(yīng)性而備受關(guān)注,。基于上下文的自適應(yīng)二進(jìn)制算術(shù)編碼是H.264標(biāo)準(zhǔn)中的關(guān)鍵技術(shù)之一[1],,它充分考慮了視頻流的相關(guān)性,,能適應(yīng)信號(hào)統(tǒng)計(jì)特性的變化,容易達(dá)到漸進(jìn)性能,,是一種高效的熵編碼方法,。其不足是復(fù)雜度大[2],這使得單純用軟件編碼難以達(dá)到很高的性能,,特別是對(duì)于實(shí)時(shí)應(yīng)用,,由于高清晰度視頻不能實(shí)現(xiàn)實(shí)時(shí)編碼,就需要硬件加速或者設(shè)計(jì)專門(mén)的硬件編碼電路,。?
??? 隨著現(xiàn)場(chǎng)可編程陣列FPGA的容量,、功能以及可靠性的不斷提高,采用FPGA設(shè)計(jì)自適應(yīng)算術(shù)編碼器成為一個(gè)新的途徑,。本文充分利用FPGA高速,、實(shí)時(shí)的特點(diǎn),,對(duì)原編碼器算法進(jìn)行優(yōu)化,采用并行運(yùn)算及流水線設(shè)計(jì),,最終在FPGA上以較優(yōu)的速度和資源實(shí)現(xiàn)了硬件編碼,。?
1 自適應(yīng)二進(jìn)制算術(shù)編碼的原理?
??? 自適應(yīng)二進(jìn)制算術(shù)編碼的編碼過(guò)程分為概率估計(jì)、二進(jìn)制算術(shù)編碼以及區(qū)間分割與重整三部分,,如圖1,。?
?
?
??? 系統(tǒng)以待編碼比特(Bin)以及上下文編號(hào)(CtxIdx)為輸入,其概率模型包括低概率符號(hào)(LPS)和高概率符號(hào)(MPS)的概率狀態(tài)(StateIdx),。概率估計(jì)模塊分為概率狀態(tài)的初始化和重置與概率模型的更新兩部分,。概率狀態(tài)的初始化和重置是指在H.264的基本編碼單元——片開(kāi)始時(shí),某些預(yù)定義的概率狀態(tài)通過(guò)特定的概率模型進(jìn)行初始化,。概率模型的更新是指:除一個(gè)外,,所有概率模性均是自適應(yīng)模型,在每個(gè)符號(hào)被編碼后會(huì)自動(dòng)更新概率模型,。LPS量化后的概率值以σ為編號(hào),進(jìn)行如圖2所示的刷新,。刷新的具體過(guò)程見(jiàn)參考文獻(xiàn)[3],。H.264標(biāo)準(zhǔn)中采取概率狀態(tài)轉(zhuǎn)移表的方式實(shí)現(xiàn)概率狀態(tài)更新。?
?
?
??? 二進(jìn)制算術(shù)編碼部分采用表格的方式避免了乘法運(yùn)算,。算術(shù)編碼器內(nèi)在狀態(tài)被描繪為兩個(gè)量:當(dāng)前間隔范圍R和當(dāng)前編碼基礎(chǔ)L ,。對(duì)于Bin的主要編碼流程如圖3所示,包括R通過(guò)給定的概率估計(jì)細(xì)分,,概率模型的更新以及重整,,具體流程解釋見(jiàn)參考文獻(xiàn)[3]。?
?
?
??? 區(qū)間分割與重整部分主要是對(duì)編碼器存儲(chǔ)精度的控制,。在CABAC編碼器中存儲(chǔ)精度要求在8~9位,,即如果新的區(qū)間范圍R不在合法范圍[28,29]之內(nèi),,則需要進(jìn)行重整化操作,。每個(gè)周期重整化都要被執(zhí)行,輸出一位或多位數(shù)據(jù),。?
2 自適應(yīng)算術(shù)編碼器的改進(jìn)?
??? H.264標(biāo)準(zhǔn)中的CABAC編碼流程是串行的,,適合軟件實(shí)現(xiàn),但執(zhí)行速度很慢且效率低下,。而硬件實(shí)現(xiàn)的最大優(yōu)勢(shì)在于其并行性,,可以大大提高執(zhí)行效率。因此,,為了設(shè)計(jì)出高速的編碼器電路,,在不改變算法實(shí)質(zhì)的前提下,,將標(biāo)準(zhǔn)中的編碼流程進(jìn)行相應(yīng)的改進(jìn),以利于硬件實(shí)現(xiàn),。本文主要提出以下改進(jìn)措施:?
??? (1)對(duì)概率狀態(tài)轉(zhuǎn)移表的改進(jìn),。H.264中對(duì)于概率狀態(tài)的轉(zhuǎn)移通過(guò)概率模型索引pStateIdx進(jìn)行表征。在進(jìn)行概率狀態(tài)轉(zhuǎn)移時(shí),,首先判斷當(dāng)前Bin是否為MPS,,然后再對(duì)該Bin查概率狀態(tài)表進(jìn)行狀態(tài)轉(zhuǎn)移,見(jiàn)表1,。對(duì)概率狀態(tài)表的硬件實(shí)現(xiàn)通常是采用RAM或寄存器堆搭建而成,。經(jīng)過(guò)深入分析,發(fā)現(xiàn)表中transIdxMPS的值正好是索引pStateIdx值(除62和63以外)加1所得,,故對(duì)于(pStateIdx,,transIdxMPS)表的實(shí)現(xiàn),不再采取RAM方式,,而是以選擇器和加法器的方式實(shí)現(xiàn),,改進(jìn)后流程如圖4。經(jīng)過(guò)硬件驗(yàn)證,,發(fā)現(xiàn)優(yōu)化后的面積為原來(lái)面積的90%,,且不改變關(guān)鍵路徑。?
?
?
?
??? (2)對(duì)于LPS對(duì)應(yīng)的碼字區(qū)間寬度R的查找表的改進(jìn)[4],。如前所述,,在CABAC中算術(shù)編碼采用基于表格的查找法,故區(qū)間寬度R的值對(duì)應(yīng)于64×4的RangeLPS表,。在設(shè)計(jì)中,,采用64×4的ROM來(lái)存放數(shù)值。但是依照H.264標(biāo)準(zhǔn)設(shè)計(jì),,ROM的入口地址不僅取決于6 bit的概率狀態(tài)索引值σ,,還取決于區(qū)間寬度參數(shù)ρ的值,這種數(shù)據(jù)依存關(guān)系無(wú)疑增加了運(yùn)算量,。且輸出是串行,,不利于流水線設(shè)計(jì),這樣就將降低了系統(tǒng)的時(shí)鐘頻率,。故采用一種并行設(shè)計(jì)方案,,以σ為輸入地址查表,結(jié)果得到4個(gè)不同的輸出,,將它們鎖存后,,利用多路選擇器以R[7:6]作為控制端選出所需的值。兩種不同的實(shí)現(xiàn)方式見(jiàn)圖5,。?
?
?
??? (3)對(duì)區(qū)間重整模塊的改進(jìn),。在重整過(guò)程中,,必須滿足R在[28,29]范圍內(nèi),每次遞歸運(yùn)算后,,R可能會(huì)變得更小,,所以要保持上述要求,就需要對(duì)寄存器進(jìn)行由低位向高位的移位,,同時(shí)空出來(lái)的低位補(bǔ)零,,直到第一個(gè)非零位在寄存器允許的取值范圍移到最高位。當(dāng)然L也要通過(guò)移位與R保持一致的精度,。用軟件完成概率區(qū)間重整需要多次循環(huán),,直接串行實(shí)現(xiàn)還將占用數(shù)量不等的時(shí)鐘周期。經(jīng)過(guò)仔細(xì)研究發(fā)現(xiàn),,重整化的循環(huán)次數(shù)count等于R二進(jìn)制化值前導(dǎo)零的數(shù)目,。故R值的更新很簡(jiǎn)單,只要R左移count位即可,,在硬件設(shè)計(jì)中直接采取移位寄存器即可完成,。對(duì)于L值的更新較復(fù)雜,如果L值移出的count位全為1,,則重整化后的L值即為原L值移位count位后的值,;否則將移位后L值的最高位置0??傊捎梅蛛xR與L重整的優(yōu)化方法,,使其不必在編碼時(shí)相互等待,,從而加快二元判決編碼的速度,改善編碼性能,。?
3 自適應(yīng)二進(jìn)制算術(shù)編碼器的FPGA實(shí)現(xiàn)?
??? 根據(jù)上節(jié)的改進(jìn)編碼流程,,將整個(gè)編碼器設(shè)計(jì)為三個(gè)主要模塊:概率估計(jì)模塊、二進(jìn)制算術(shù)編碼模塊,、區(qū)間分割與重整模塊,,如圖6所示。電路實(shí)現(xiàn)主要分為6級(jí)流水線,。在第1級(jí)流水線中,,輸入數(shù)據(jù)進(jìn)入上下文模型,讀取相應(yīng)數(shù)據(jù)供后級(jí)調(diào)用,。第2級(jí)流水線包含兩個(gè)模塊:概率估計(jì)模塊和二進(jìn)制算術(shù)編碼模塊,。在軟件實(shí)現(xiàn)中,這兩個(gè)模塊是串行的,,但在硬件設(shè)計(jì)中,,本文抽取兩個(gè)模塊的輸入端,,同時(shí)給它們數(shù)據(jù),使其達(dá)到并行計(jì)算,,提高了編碼速度,。在第3級(jí)流水線中,進(jìn)行的是概率區(qū)間R的重整與上下文模型的更新,。這也是兩個(gè)并行運(yùn)算,,同時(shí)由于L重整要用到R重整的相關(guān)參數(shù),因此放在下一個(gè)流水線,。第4級(jí)流水線完成L的重整,。第5級(jí)流水線實(shí)現(xiàn)數(shù)據(jù)的最后輸出。?
?
?
??? 在電路設(shè)計(jì)中,,為實(shí)現(xiàn)流水線及并行計(jì)算,,一些關(guān)鍵的模塊不可忽略。如采用加法器與選擇器完成狀態(tài)轉(zhuǎn)移表,,節(jié)約面積,;采用移位寄存器完成區(qū)間重整,減少運(yùn)算復(fù)雜度,,縮短關(guān)鍵路徑,;采用幾個(gè)模塊并行執(zhí)行,提高時(shí)鐘頻率等,。?
4 電路仿真及性能分析?
??? 本文的算法經(jīng)過(guò)VC++仿真驗(yàn)證,,可對(duì)H.264標(biāo)準(zhǔn)中的主要視頻碼流進(jìn)行編碼,其結(jié)果與H.264標(biāo)準(zhǔn)程序JM8.6相同,。電路結(jié)構(gòu)采用Verilog語(yǔ)言進(jìn)行RTL級(jí)描述,,并用modelsim6.0軟件仿真通過(guò)。仿真波形如圖7所示,。?
?
?
圖7? 仿真波形
?
??? 由圖7可以看出,,數(shù)據(jù)輸出周期數(shù)不確定。這是因?yàn)?,在輸出模塊對(duì)數(shù)據(jù)進(jìn)行整理時(shí),,其產(chǎn)生的有用數(shù)據(jù)位數(shù)不確定,而只有達(dá)到32位時(shí)才進(jìn)行輸出,,故輸出數(shù)據(jù)的周期性也不確定,。?
??? 電路在spartan3 FPGA上進(jìn)行綜合、布局布線,,使用Synplify工具進(jìn)行綜合,,最高時(shí)鐘頻率為90.4 MHz。將綜合好的edif電路網(wǎng)表文件輸入到后端由FPGA廠商Xilinx提供的Foundation軟件進(jìn)行布局布線,,生成二進(jìn)制流文件,,邏輯單元為769,,占總資源的22%。?
??? 使用本文設(shè)計(jì)的電路對(duì)H.264標(biāo)準(zhǔn)中一些標(biāo)準(zhǔn)視頻序列進(jìn)行測(cè)試,,序列質(zhì)量為QP=28,,并與H.264標(biāo)準(zhǔn)程序JM8.6、文獻(xiàn)[5]中H.264的MQ編碼器以及文獻(xiàn)[6]中JPEG2000的MQ編碼器的編碼時(shí)間作比較,,得出如表2所示的結(jié)果,。?
?
?
??? 綜上,本文設(shè)計(jì)的算術(shù)編碼器在速度上較軟件實(shí)現(xiàn)及其他硬件電路實(shí)現(xiàn)有較大提升,,資源占用率也較少,,不僅能完成H.264標(biāo)準(zhǔn)中基本檔次的編碼,還有望應(yīng)用于更大尺寸,、更高質(zhì)量的實(shí)時(shí)視頻壓縮編碼,。?
??? 本文在對(duì)H.264標(biāo)準(zhǔn)中自適應(yīng)二進(jìn)制算術(shù)編碼器研究和分析的基礎(chǔ)上,提出其FPGA電路結(jié)構(gòu),,采用流水線方式實(shí)現(xiàn)了電路,。本結(jié)構(gòu)經(jīng)spartan3 FPGA實(shí)現(xiàn),吞吐量為每周期1 bit,,最大時(shí)鐘頻率為90.4 MHz,,能夠適應(yīng)H.264中l(wèi)evel3及以上檔次實(shí)時(shí)視頻編碼的要求。?
參考文獻(xiàn)?
[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的高速M(fèi)Q編碼器的VLSI實(shí)現(xiàn).固體電子學(xué)研究與進(jìn)展,2002,,23(4).