專利名稱:基于cabac的并行歸一化編碼實(shí)現(xiàn)電路及編碼方法
技術(shù)領(lǐng)域:
本發(fā)明涉及視頻編碼領(lǐng)域,尤其涉及一種基于CABAC的并行歸一化編碼實(shí)現(xiàn)電路 及編碼方法。
背景技術(shù):
基于上下文的自適應(yīng)二進(jìn)制算術(shù)編碼(Context-based AdaptiveBinary Arithmetic Coding, CABAC)是H. 264/AVC的主要類所采用的編碼算法。實(shí)驗(yàn)證明,與基 于上下文的可變長(zhǎng)編碼算法(Context-Adaptive Variable-Length Codinig, CAVLC)比 較,在相同的碼流下,CABAC將圖像質(zhì)量提高0. 3-0. 6dB。 CABAC編碼算法的不足在于吞吐 率低,難以滿足高清應(yīng)用的需求。CABAC結(jié)構(gòu)框圖如圖l所示,首先對(duì)不具備二元特性的 語義元素進(jìn)行二元化處理;然后,對(duì)二元化處理的輸出比特流中的每一比特進(jìn)行自適應(yīng)二 進(jìn)制算術(shù)編碼,對(duì)于那些具備二元特性的語義元素則直接進(jìn)行自適應(yīng)二進(jìn)制算術(shù)編碼。根 據(jù)被編碼比特的概率分布特點(diǎn),對(duì)具有均勻概率分布的比特采用旁路模式編碼;相反,對(duì)于 具有基于上下文概率分布特點(diǎn)的比特采用標(biāo)準(zhǔn)模式編碼。對(duì)于采用標(biāo)準(zhǔn)模式編碼的比特, 首先在上下文模型引擎獲得其概率索引值(pStateldx[5:0])和大概率符號(hào)值(valMPS)。 pStateldx[5:0]和valMPS以及當(dāng)前被編碼比特的值(binVal)輸入到標(biāo)準(zhǔn)模式編碼引 擎。標(biāo)準(zhǔn)模式編碼引擎根據(jù)pStateldx[5:0]、 valMPS和binVal更新編碼區(qū)間(R[8:0]) 和編碼下限(L[9:0]),然后通過對(duì)更新后的編碼區(qū)間和編碼下限進(jìn)行歸一化操作,產(chǎn)生 輸出到原始字節(jié)序列載荷(RBSP)的碼流。標(biāo)準(zhǔn)模式編碼的處理流程參見參考文獻(xiàn)l(T. Wiegand, G. Sullivan, and A丄uthra, "Draft itu_t recommendation andfinal draft international standard of joint video specification(ITUT rec. H. 264-ISO/IEC 14496-10 AVC),"May 2003. JVT_G050rl)中圖9-7所示。 H. 264/AVC所提供的標(biāo)準(zhǔn)中(參見參考文獻(xiàn)1),標(biāo)準(zhǔn)模式編碼中歸一化操作以及 輸出碼流的產(chǎn)生流程如圖2所示(其中,函數(shù)Put0neBit(b)是將1比特的b及跟隨比特計(jì) 數(shù)變量(bits—follow)所記錄的bits—follow個(gè)比特的(1-b)寫入RBSP中)。圖2所示的 處理流程會(huì)引起如下處理瓶頸 1)在圖2所示的流程中,對(duì)編碼區(qū)間R和編碼下限L的歸一化操作和輸出比特的 產(chǎn)生處于同一個(gè)循環(huán)體內(nèi)。如果R,表示歸一化前編碼區(qū)間的值,那么需要8-Llog2(凡)」次
循環(huán)完成此次歸一化操作以及輸出碼流的產(chǎn)生,其中"L」"為向下取整操作。在電路實(shí)現(xiàn) 中,如果假設(shè)圖2中PutBit(b)函數(shù)可以在一個(gè)周期內(nèi)完成(后面我們看到這個(gè)假設(shè)是樂
觀的),則需要8-Llog2(凡)」個(gè)周期完成當(dāng)前被編碼比特的歸一化及輸出碼流的操作。由于
后續(xù)比特的編碼依賴于當(dāng)前比特的歸一化結(jié)果,所以,如果當(dāng)前被編碼比特采用多周期歸
一化處理,后續(xù)比特的編碼將被停滯,從而降低整個(gè)CABAC流水線的效率。 2)由于在輸出碼流產(chǎn)生過程中要解決進(jìn)位傳播問題,H. 264/AVC協(xié)議中引入如圖
2所示的bits—follow變量。如果bits—follow不等于0,PutBit(b)執(zhí)行單元需要多個(gè)周期操作,這種情況會(huì)進(jìn)一步降低CABAC編碼引擎的效率。 進(jìn)一步,當(dāng)碼流中小概率符號(hào)的比重增加時(shí),上述兩種情況所引入的負(fù)面效應(yīng)也 隨之增加。
發(fā)明內(nèi)容
( — )要解決的技術(shù)問題 針對(duì)現(xiàn)有技術(shù)中存在的缺陷和不足,本發(fā)明的目的是提供一種用于H. 264/AVC視 頻編碼協(xié)議的基于CABAC的并行歸一化編碼實(shí)現(xiàn)電路及編碼方法,其解決了原歸一化處理 和輸出碼流產(chǎn)生過程中由比特間相關(guān)性所引發(fā)的計(jì)算瓶頸,能夠避免現(xiàn)有算法的循環(huán)操 作,以及多周期歸一化操作所引發(fā)的CABAC流水線停滯問題。
( 二 )技術(shù)方案 為達(dá)到上述目的,本發(fā)明提供了一種基于CABAC的并行歸一化編碼實(shí)現(xiàn)電路,包 括第一級(jí)流水線,用于完成歸一化操作,以及第二級(jí)流水線,用于產(chǎn)生輸出碼流,二者間以 先入先出隊(duì)列FIFO連接,所述第一級(jí)流水線包括 標(biāo)準(zhǔn)模式L和R更新引擎,用于完成標(biāo)準(zhǔn)編碼模式下歸一化操作之前編碼下限 L[9:0]和編碼區(qū)間R[8:0]的更新,此引擎的輸入為binVal, valMPS, pStateldx[5:0], R[8:0],L[9:0],輸出為中間結(jié)果R班ps[8:0]和L班ps[9:0]; 標(biāo)準(zhǔn)模式歸一化引擎,用于完成標(biāo)準(zhǔn)編碼模式下對(duì)編碼區(qū)間和編碼下限的歸一化 操作,其輸入為R,s[8:0]和Lgps[9:0],輸出為P [3:0] , 5M/U>S [8:0]和[,s[9:0];
標(biāo)準(zhǔn)模式跟隨比特更新引擎,用于完成標(biāo)準(zhǔn)編碼模式下對(duì)跟隨比特計(jì)數(shù)變量 bits—follow的更新并且生成寫入段間FIFO的變量13 [2:0],此引擎的輸入信號(hào)為L(zhǎng)M/ lps[9:0]、 P [3:0]、 mode以及bits_follow[7:0],輸出信號(hào)為bits_follow[7:0]的更新值 btfreg[7:0]以及寫入段間FIFO的P [2:0]; 旁路模式L更新引擎,用于計(jì)算旁路編碼模式下編碼下限的更新值,此引擎的輸 入為binVal, R[8:0], L[9:0],輸出為L(zhǎng)byp[10:0]; 旁路模式歸一化引擎,用于完成旁路模式下對(duì)編碼下限的歸一化操作,輸入為 Lbyp[10:0],輸出為[byp[9:0]; 旁路模式跟隨比特更新引擎,用于完成旁路模式下對(duì)變量bits—follow的更 新,輸入信號(hào)為L(zhǎng)byp[10:9]和bits—follow[7:0],輸出信號(hào)為bits_follOW的更新值 btfbyp[7:0]; 其中,bitS_follOW[7:0]寄存器用于存儲(chǔ)當(dāng)前變量bits—follow值;編碼區(qū)間寄 存器R[8:0]用于存儲(chǔ)當(dāng)前編碼區(qū)間變量R值;編碼下限寄存器L[9:0]用于存儲(chǔ)當(dāng)前編碼 下限變量L值;pStateldx[5:0]為當(dāng)前被編碼比特的概率索引值,由前級(jí)上下文模型引擎 產(chǎn)生;valMPS為大概率符號(hào)值,由前級(jí)上下文模型引擎產(chǎn)生;binVal為當(dāng)前被編碼比特的 值;標(biāo)準(zhǔn)編碼模式中,IWPS[8:0]和Lm^[9:0]分別為歸一化操作前的編碼區(qū)間和編碼下 限,豆i/m [8:0]和[M/U>s [9:0]分別為歸一化操作后的編碼區(qū)間和編碼下限,中間變量n為RM/ m[8:0]中前導(dǎo)O的個(gè)數(shù),變量P等于9-n;旁路編碼模式中,Lbyp[10:0]為歸一化操作前的 編碼下限,[byp[9:0]為歸一化操作后的編碼下限; 所述標(biāo)準(zhǔn)編碼模式和旁路編碼模式兩種編碼模式由輸入信號(hào)mode控制,當(dāng)工作于標(biāo)準(zhǔn)編碼模式時(shí),標(biāo)準(zhǔn)模式歸一化引擎的輸出豆班Ps[8:0]和[^ps[9:0]用于更新 編碼區(qū)間寄存器R[8:0]和編碼下限寄存器L[9:0],標(biāo)準(zhǔn)模式跟隨比特更新引擎的輸出 btf卿[7:0]用于更新寄存器bits_follOW[7:0],若RM/LPS [8:0]的值小于256,寄存器bits_ follow[7:0]的輸出、標(biāo)準(zhǔn)模式L和R更新引擎的輸出L班pj9:3]以及標(biāo)準(zhǔn)模式跟隨比特 更新引擎的輸出P [2:0]分別寫入FIFO尾部項(xiàng)的btf [7:0]、 1ow[6:0]以及beta[2:0]字 段中;當(dāng)工作于旁路編碼模式時(shí),旁路模式歸一化引擎的輸出[byp[9:0]用于更新編碼下限 寄存器L[9:0],編碼區(qū)間寄存器R[8:0]的值維持不變,旁路模式跟隨比特更新引擎的輸 出btfbyp[7:0]被選擇用于更新寄存器bits—follow[7:0],寄存器bits—follow[7:0]的輸 出寫入FIFO尾部項(xiàng)的btf [7:0]字段,Uyp[lO]寫入FIFO尾部項(xiàng)的low[6]字段,將0寫入 FIF0尾部項(xiàng)的beta[2:0]字段。 其中,所述FIF0的深度為5段,每項(xiàng)為18比特位寬,由btf[7:0]、 1ow[6:0]以及 beta [2:0]字段組成。 其中,所述第二級(jí)流水線為可在每周期產(chǎn)生多位輸出比特的輸出碼流產(chǎn)生引擎, 所述輸出碼流產(chǎn)生引擎包括前導(dǎo)比特輸出引擎和后綴比特輸出引擎,所述前導(dǎo)比特輸出 引擎和后綴比特輸出引擎分別連接同一選擇器,前導(dǎo)比特輸出引擎的輸入信號(hào)1ow[6]連 接到FIFO輸出項(xiàng)1ow[6];前導(dǎo)比特輸出引擎的輸入信號(hào)btf[7:0]連接到FIFO輸出項(xiàng) btf[7:0];后綴比特輸出引擎的輸入信號(hào)1ow[5:0]連接到FIFO輸出項(xiàng)的1ow[5:0];后綴 比特輸出引擎的輸入信號(hào)beta[2:0]連接到FIFO輸出項(xiàng)的beta[2:0]。
本發(fā)明還提供了一種利用上述電路實(shí)現(xiàn)的基于CABAC的并行歸一化編碼方法。
其中,標(biāo)準(zhǔn)編碼模式下,定義Y為L(zhǎng)MAPS[8:9-n]中最后一個(gè)為0的比特所在位,且 當(dāng)Lm/lps [8:9-n]不存在為0的比特時(shí),y等于0,根據(jù)變量Rm/lps [8:0], Lm/lPS [9:0] , n和y , 通過移位操作和邏輯操作得到5M/U>S [8:0]和[M/U>s [9:0]。 其中,標(biāo)準(zhǔn)編碼模式下,btfreg[7:0]為歸 一 化操作后變量bits_follOW[7:0] 的值,根據(jù)當(dāng)前變量bits—follow[7:0]的值,n和Y ,通過算數(shù)運(yùn)算和邏輯操作得到 btfreg[7:0]。 其中,旁路編碼模式下,根據(jù)當(dāng)前變量Lbyp[10:0]的值,通過邏輯操作得到 [byp[9:0]。 其中,旁路編碼模式下,btfbyp[7:0]為歸 一 化操作后變量bits_follOW[7:0] 的值,根據(jù)變量bits—follow[7:0]和Lbyp[10:9]的值,通過算數(shù)運(yùn)算和邏輯操作得到 btfbyp[7:0]。(三)有益效果 與現(xiàn)有技術(shù)相比,本發(fā)明能夠產(chǎn)生如下有益效果在軟件實(shí)現(xiàn)中,當(dāng)前比特的歸一 化處理不需循環(huán)操作,從而提高了歸一化處理速度;在電路實(shí)現(xiàn)中,任何比特的歸一化均為 單周期處理,避免了原多周期歸一化操作所引入的流水線停滯;將歸一化處理與產(chǎn)生RBSP 碼流操作分解為兩級(jí)流水線,兩級(jí)流水線間以5級(jí)先入先出(FIFO)寄存器連接,此結(jié)構(gòu)可 有效避免流水線停滯。因此,該設(shè)計(jì)避免了原有算法的多周期歸一化操作所引發(fā)的CABAC 流水線停滯問題。而且,所提出的電路實(shí)現(xiàn)的吞吐率恒定,其吞吐率與所處理比特流中小概 率符號(hào)發(fā)生概率無關(guān)。
圖1為H. 264/AVC中現(xiàn)有CABAC系統(tǒng)框圖; 圖2為H. 264/AVC中標(biāo)準(zhǔn)模式歸一化操作以及輸出碼流的產(chǎn)生流程框圖; 圖3為本發(fā)明實(shí)施例的電路整體架構(gòu)框圖; 圖4為本發(fā)明實(shí)施例的標(biāo)準(zhǔn)模式L和R更新引擎的電路圖; 圖5為本發(fā)明實(shí)施例的標(biāo)準(zhǔn)模式歸一化引擎的電路圖; 圖6為本發(fā)明實(shí)施例的標(biāo)準(zhǔn)模式跟隨比特更新引擎中生成變量btf^[7:0]的電 路圖; 圖7為本發(fā)明實(shí)施例的標(biāo)準(zhǔn)模式跟隨比特更新引擎中生成13 [2:0]的電路圖;
圖8為本發(fā)明實(shí)施例的RBSP比特生成引擎中數(shù)據(jù)通路的電路圖。
具體實(shí)施例方式
下面結(jié)合附圖和實(shí)施例,對(duì)本發(fā)明的具體實(shí)施方式
作進(jìn)一步詳細(xì)描述。以下實(shí)施 例用于說明本發(fā)明,但不用來限制本發(fā)明的范圍。 依據(jù)本發(fā)明實(shí)施例的電路整體架構(gòu)框圖如圖3所示。首先說明一些變量的定義
輸入信號(hào) pStateldx[5:0]:當(dāng)前被編碼比特的概率索引值,由前級(jí)上下文模型引擎產(chǎn)生;
valMPS :大概率符號(hào)值,由前級(jí)上下文模型引擎產(chǎn)生;
binVal :當(dāng)前被編碼比特的值; mode :0表明當(dāng)前工作于標(biāo)準(zhǔn)編碼模式,1表明當(dāng)前工作于旁路編碼模式。
輸出信號(hào) toRBPS[7:0]:以字節(jié)為單位,寫入RBSP的碼流;
RBPS_we :向RBSP寫出使能信號(hào)。 定義歸一化操作前的編碼區(qū)間和編碼下限分別為Rm/^[8:0]和LM/U>S[9:0];定義 歸一化操作后的編碼區(qū)間和編碼下限分別為豆m/^[8:0]和[m^[9:0];定義[8:0]中 前導(dǎo)0的個(gè)數(shù)為n ;定義L,s[8:9-n]中最后一個(gè)為0的比特所在位為y (當(dāng)L,s[8:9-n] (即L班ps[9:0]中第8至第9-n位)不存在為0的比特時(shí),y等于0);定義btfMg[7:0]為 歸一化操作后變量bits—follow的值;定義歸一化操作前編碼下限為L(zhǎng)byp[10:0];定義歸一 化操作后編碼下限為[byp[9:0];定義btfbyp[7:0]為歸一化操作后變量bits—follow的值。
如圖3所示的電路結(jié)構(gòu)由兩級(jí)流水線構(gòu)成。第一級(jí)流水線包括如下功能部件
bits_follow[7:0]寄存器存儲(chǔ)當(dāng)前變量bits_follow值;
編碼區(qū)間寄存器R[8:0]:存儲(chǔ)當(dāng)前編碼區(qū)間變量R值; 編碼下限寄存器L[9:0]:存儲(chǔ)當(dāng)前編碼下限變量L值;L[9:0]表示編碼下限為10 比特信號(hào),最高為編號(hào)為9,最低位編號(hào)為O,本發(fā)明中,其它具有相同形式的變量采用上述 表示方法定義。 標(biāo)準(zhǔn)模式L和R更新引擎完成標(biāo)準(zhǔn)編碼模式下(參考文獻(xiàn)l中圖9-7所示) 歸一化操作之前的邏輯功能,此引擎的輸入為binVal, valMPS, pStateldx[5:0] , R[8:0], L[9:0],輸出為中間結(jié)果Rm/lps [8:0]和Lm/lPS [9:0]; 標(biāo)準(zhǔn)模式歸一化引擎完成標(biāo)準(zhǔn)編碼模式下對(duì)編碼區(qū)間和編碼下限的歸一化操作,此引擎的輸入為RM/LPs[8:0]和LM/Lps[9:0],輸出為P [3:0] , 5m/lps[8:0]和[,s[9:0];
標(biāo)準(zhǔn)模式跟隨比特更新引擎完成標(biāo)準(zhǔn)編碼模式下對(duì)變量bits_follOW的更新并 且生成寫入段間FIFO的變量13 [2:0],此引擎的輸入信號(hào)為L(zhǎng)班ps[9:0]、 P [3:0]、 mode以 及bits_fOllOW[7:0],輸出信號(hào)為bits_follOW的更新值btf卿[7:0],以及寫入段間FIFO 的P [2:0]; 旁路模式L更新引擎完成旁路編碼模式下編碼下限更新值的計(jì)算工作,此引擎 的輸入為binVal, R[8:0] , L[9:0],輸出為L(zhǎng)byp[10:0]; 旁路模式歸一化引擎完成旁路模式下對(duì)編碼下限的歸一化操作,輸入為 Lbyp[10:0],輸出為[byp[9:0];以及 旁路模式跟隨比特更新引擎完成旁路模式下對(duì)變量bits—follow的更新,輸入 信號(hào)為L(zhǎng)byp[10:9]和bits_follOW[7:0],輸出信號(hào)為bits—follow的更新值btfbyp[7:0]。
上述第一級(jí)流水線有兩種工作模式標(biāo)準(zhǔn)編碼模式和旁路編碼模式,其工作模式 的選擇由輸入信號(hào)mode控制。 當(dāng)?shù)谝患?jí)流水線工作于標(biāo)準(zhǔn)編碼模式時(shí),標(biāo)準(zhǔn)模式L和R更新引擎、標(biāo)準(zhǔn)模式歸 一化引擎、以及標(biāo)準(zhǔn)模式跟隨比特更新引擎處于工作狀態(tài)。標(biāo)準(zhǔn)模式歸一化引擎的輸出豆 / m[8:0]和[m他[9:0]被用于更新編碼區(qū)間寄存器R[8:0]和編碼下限寄存器L[9:0]。標(biāo) 準(zhǔn)模式跟隨比特更新引擎的輸出btf^[7:0]被用于更新寄存器bits—follow[7:0]。如果 IWPS [8:0]的值小于256,寄存器bits_follOW[7:0]的輸出、標(biāo)準(zhǔn)模式L和R更新引擎的 瑜出Lm/^[9:3]以及標(biāo)準(zhǔn)模式跟隨比特更新引擎的輸出13 [2:0]分別寫入FIFO尾部項(xiàng)的 btf[7:0]、 1ow[6:0]以及beta[2:0]字段中。 當(dāng)?shù)谝患?jí)流水線工作于旁路編碼模式時(shí),旁路模式L更新引擎、旁路模式歸一 化引擎、以及旁路模式跟隨比特更新引擎處于工作狀態(tài)。旁路模式歸一化引擎的輸出 [byp[9:0]被選擇,用于更新編碼下限寄存器L[9:0]。注意,當(dāng)處于旁路編碼模式時(shí),編碼 區(qū)間寄存器R[8:0]的值維持不變。旁路模式跟隨比特更新引擎的輸出btfbyp[7:0]被選 擇,用于更新寄存器bits—follow[7:0]。寄存器bits—follow[7:0]的輸出寫入FIFO尾 部項(xiàng)的btf[7:0]字段,Uyp[lO]寫入FIFO尾部項(xiàng)的1ow[6]字段,將0寫入FIFO尾部項(xiàng)的 beta[2:0]字段。 其中,第一級(jí)與第二級(jí)流水線之間以FIFO連接。FIF0的深度可以大于或等于5 段,優(yōu)選為5段,F(xiàn)IFO中每項(xiàng)存儲(chǔ)區(qū)的位寬為18比特,每項(xiàng)由字段btf[7:0]、 1ow[6:0]以 及beta [2:0]組成。 第二級(jí)流水線包括RBSP比特生成引擎。RBSP比特生成引擎中包括一個(gè)8比特 的緩沖寄存器buf[7:0],前導(dǎo)比特輸出引擎和后綴比特輸出引擎。如果FIFO非空,RBSP 比特生成引擎從FIF0讀取頭指針?biāo)赶虻拇鎯?chǔ)項(xiàng),根據(jù)此項(xiàng)中btf[7:0]、 1ow[6:0]以及 beta[2:0]字段生成輸出碼流。RBSP比特生成引擎的輸出端口為1.以字節(jié)為單位寫入 RBSP的碼流數(shù)據(jù)輸出端口 toRBPS[7:0] ;2.輸出使能信號(hào)RBPS_we。 RBSP比特生成引擎的 比特輸出過程分為兩個(gè)階段,第一階段為前導(dǎo)比特輸出,第二階段為后綴比特輸出。下面對(duì) 這兩個(gè)階段的輸出比特產(chǎn)生過程進(jìn)行具體的說明。 前導(dǎo)比特輸出假設(shè)前導(dǎo)比特輸出操作之前,緩沖寄存器中殘存未輸出的比特?cái)?shù) 為m(表示為buf [m-l: 0]),前導(dǎo)比特輸出將占用/ = 「(&/ + m +1)/8"]個(gè)時(shí)鐘周期完成操作,
8其中「]為向上取整運(yùn)算。前導(dǎo)比特輸出操作分為兩種情況 1)如果btf+m+l的值小于8,將比特串{buf [m_l :0] , low[6] , {btf { ! low[6]}}} 寫回8比特的緩沖寄存器buf[7:0]的低btf+m+l位,S卩buf[btf+m:0]。(符號(hào)"H"為按 位拼接操作,{bft{! low[6]}}表示連續(xù)btf個(gè)值為! low[6]的比特拼接的比特串,! low[6]表示對(duì)比特變量low[6]進(jìn)行取反操作);
2)當(dāng)i > l,分三步輸出前導(dǎo)比特 a)在第1時(shí)鐘周期,輸出{buf[m-l:0], low[6], {(8言1) { ! low[6]}}}到RBSP 碼流中,如果i等于l,此時(shí)就可以結(jié)束前導(dǎo)比特輸出操作,否則 b)如果i大于2,從第2到第i-l時(shí)鐘周期,每周期向RBSP碼流中寫入{8 { !
low[6]}}; c)設(shè)變量k等于btf+m+l-8X (i-l),在第i時(shí)鐘周期,將{k{ ! 1ow[6]H寫入 buf[k-l:O]。 當(dāng)beta[2:0] > 0時(shí),后綴比特輸出引擎將1ow[5:6-beta]輸出。設(shè)后綴比特輸 出前緩沖寄存器buf [7:0]中殘存尚未輸出的比特?cái)?shù)為k,分兩種情況討論
a)如果k+beta〈8,將{buf [k_l:0] , low[5,6-beta]}寫回緩沖寄存器buf [7:0] 的低k+beta位; b)否則,即k+beta^8,此時(shí)k一定大于2,首先在第一周期將{buf[k_l:0], low[5:k-2]}寫入RBSP碼流,如果k+beta等于8,此時(shí)結(jié)束后綴比特輸出操作,否則;在第 二周期,將1ow[k-3:6-beta]寫入緩沖寄存器buf [7:0]的低k+beta-8位。
下面分別說明本發(fā)明實(shí)施例的電路整體架構(gòu)框圖中各組成部分的實(shí)現(xiàn)結(jié)構(gòu)。
標(biāo)準(zhǔn)模式L和R更新引擎電路設(shè)計(jì)如圖4所示。其中編碼范圍查找表的組合邏輯 是根據(jù)當(dāng)前編碼區(qū)間的R[7:6]和pStateldx[5:0]實(shí)現(xiàn)查表邏輯,其真值表如文獻(xiàn)1中表 9-33所示。 標(biāo)準(zhǔn)模式歸一化引擎電路設(shè)計(jì)如圖5所示。其中,符號(hào)M))n代表將變量M右 移n位操作,高位補(bǔ)零。符號(hào)1^^<<11代表將變量1^^[8:0]左移n位操作,低位補(bǔ)零。 符號(hào)Lm/^ << n代表將變量LMAPS[9:0]左移n位操作,低位補(bǔ)零。前導(dǎo)0計(jì)數(shù)是檢測(cè)其輸 入信號(hào)中前導(dǎo)0的個(gè)數(shù),采用參考文獻(xiàn)2(Synopsys Inc. ,"Design Ware BuildingBlock IP Documentation 0verview,,, October 2009)中的電路設(shè)計(jì)。 標(biāo)準(zhǔn)模式跟隨比特更新引擎中生成btf^[7:0]的電路結(jié)構(gòu)如圖6所示。其中,符 號(hào)Lm^[8:0] >> p代表將L^ps[8:0]右移p位操作,高位補(bǔ)零。位旋轉(zhuǎn)引擎的功能是 將其第i比特的輸入信號(hào)連接到第8-i比特的輸出信號(hào)。前導(dǎo)1計(jì)數(shù)是檢測(cè)其輸入信號(hào)中 前導(dǎo)1的個(gè)數(shù),采用參考文獻(xiàn)2中的電路設(shè)計(jì)。表達(dá)式S #9-p O:l表示如下邏輯關(guān) 系當(dāng)S不等于9-p時(shí)輸出為0,否則輸出為1。 標(biāo)準(zhǔn)模式跟隨比特更新引擎中生成13 [2:0]的電路結(jié)構(gòu)如圖7所示。其中,輸入 信號(hào)S為圖6中前導(dǎo)1計(jì)數(shù)模塊的輸出。當(dāng)工作在旁路編碼模式時(shí),13 [2:0]恒等于O。
旁路模式L更新引擎完成如下邏輯功能如果輸入變量binVal等于0,Lbyp[10:0] 等于L[9:0]左移一位;否則,即binVal等于l,Lbyp[10:0]等于L[9:0]左移一位后與R[8:0] 之和。 旁路模式歸一化引擎完成如下功能[一[8:0]等于L一[8:0];當(dāng)L一[10](即Lbyp[10:0]中的最高位第10位)和L一[9]都為1時(shí),[一[9]為1,否則[一[9]為0。
旁路模式跟隨比特更新引擎完成如下功能當(dāng)Lbyp[10:9]為01時(shí),btfbyp[7:0]等 于bits—follow[7:0]加l ;否則,btfbyp[7:0]等于0。 第二級(jí)流水線RBSP比特生成引擎的數(shù)據(jù)通路電路如圖8所示。此數(shù)據(jù)通路主要 由8比特的緩沖存儲(chǔ)器buf[7:0]、前導(dǎo)比特輸出引擎和后綴比特輸出引擎組成。前導(dǎo)比特 輸出引擎的輸入信號(hào)1ow[6]連接到FIFO輸出項(xiàng)的1ow[6];前導(dǎo)比特輸出引擎的輸入信號(hào) btf[7:0]連接到FIFO輸出項(xiàng)btf [7:0];后綴比特輸出引擎的輸入信號(hào)1ow[5:0]連接到 FIFO輸出項(xiàng)的1ow[5:0];后綴比特輸出引擎的輸入信號(hào)beta[2:0]連接到FIFO輸出項(xiàng)的 beta[2:0]。 上述電路在實(shí)現(xiàn)基于CABAC的并行歸一化編碼方法時(shí),按照以下方式實(shí)現(xiàn)
對(duì)于第一級(jí)流水線 1)標(biāo)準(zhǔn)編碼模式中,根據(jù)變量R,s [8:0], L,s [9:0] , n禾P Y ,通過移位操作和邏 輯操作得到豆M/m [8:0]和[MAPS [9:0],此算法在軟件實(shí)現(xiàn)中不需要循環(huán),在電路實(shí)現(xiàn)中以組 合邏輯單周期完成。 2)標(biāo)準(zhǔn)編碼模式中,所提出的算法根據(jù)當(dāng)前變量bits_follOW的值,n和Y ,通過 算數(shù)運(yùn)算和邏輯操作得到btf^[7:0]。此算法在軟件實(shí)現(xiàn)中不需要循環(huán),在電路實(shí)現(xiàn)中以 組合邏輯單周期完成所需功能。 3)旁路編碼模式中,歸一化操作只涉及對(duì)編碼下限和變量bits_follOW的操作。 所提出的算法根據(jù)當(dāng)前變量Lbyp[10:0]的值,通過邏輯操作得到[byp[9:0],在軟件實(shí)現(xiàn)中不 需要循環(huán),在電路實(shí)現(xiàn)中以組合邏輯單周期完成所需功能。 4)旁路編碼模式中,定義btfbyp[7:0]為歸一化操作后變量bits—follow的值。 所提出的算法根據(jù)變量bits—follow[7:0]和L一[10:9]的值,通過算數(shù)和邏輯運(yùn)算得到 btfbyp[7:0],所需的操作在軟件實(shí)現(xiàn)中不需要循環(huán),在電路實(shí)現(xiàn)中以組合邏輯單周期完成 所需功能。 5)在電路實(shí)現(xiàn)中,提高了 RBSP碼流產(chǎn)生引擎的吞吐率,并且將歸一化引擎與輸出
碼流產(chǎn)生引擎分解為兩級(jí)流水線操作,兩級(jí)流水線間以深度為5的FIFO連接。 6)如果當(dāng)前的歸一化操作需要產(chǎn)生輸出碼流并且FIFO非滿,歸一化引擎向FIFO
的尾指針?biāo)赶虻拇鎯?chǔ)項(xiàng)寫入low[6:0], beta[2:0]以及btf[7:0]。如果當(dāng)前FIFO非
空,輸出碼流產(chǎn)生引擎每次從FIFO頭指針?biāo)赶虻拇鎯?chǔ)項(xiàng)取出1ow[6:0], beta[2:0]以及
btf[7:0],通過對(duì)這些信息的解析生成輸出碼流。 而第二級(jí)流水線的輸出碼流產(chǎn)生引擎可在每周期產(chǎn)生多位輸出比特,每次以字節(jié)
為單位寫出到RBSP。因?yàn)檩敵龃a流的吞吐率大于CABAC歸一化操作(第一級(jí)流水線的操
作),所以即使對(duì)當(dāng)前FIFO項(xiàng)的處理需要多周期操作,只要FIFO的深度足夠,就不會(huì)停滯前
級(jí)歸一化引擎流水線。根據(jù)實(shí)驗(yàn),F(xiàn)IFO的深度置為5段即可滿足要求。 具體來說,標(biāo)準(zhǔn)編碼模式中,所提出的歸一化算法和輸出碼流算法如下 (1)豆班ps[8:0]等于左移R班ps[8:0]n位; (2)[班ps[9:0]通過以下操作獲得 定義臨時(shí)變量Z[9:0] , Z[9:0]等于左移L班pj9:0]n位后的低10位;
[班ps[8:0]等于Z[8:0];
100094] 如果在LMAPS[9:9-n+l]中沒有0,[班ps[9]等于Z[9];否則,[M/U>s[9]等于0. 0095] (3)為方便標(biāo)記,定義P等于9-n。輸出碼流的產(chǎn)生和變量bitS_follOW[7:0]的 更新分兩種情況
0096] 如果L,s[9]等于1,首先將^^^寫入RBSP ;
0097] 如果y等于0,將L班ps[8: P+l]寫入RBSP ;否則,將L班ps [8: y+l]寫入RBSP ; 0098] 變量btfr印[7:0]等于max(O, Y-P )。 0099] 否則,
0100] 如果y等于O, btfreg[7:0]等于bits—follow+(9-p),此情況下,不需要向RBSP 寫入任何數(shù)據(jù); 0101] 否則,
0102] 首先將GUJ^2寫入RBSP;
0103] 然后將LM/LPS[8: Y +1]寫入RBSP ; 0104] 得到變量btf^[7:0]等于Y-P 。
0105] 旁路編碼模式中,定義歸一化操作前的編碼下限為L(zhǎng)byp[10:0];定義歸一化操作后 的編碼下限為[byp[9:0];定義btfbyp[7:0]為歸一化操作后bits—follow[7:0]的值。所提 出的歸一化算法和輸出碼流算法如下
0106] (1)如果Lbyp[lO]等于l,[byp[9:0] = Lbyp[9:0];否則,[一[9] = 0且[一[8:0]= Lbyp[8:0];
0107] (2)如果1^[10:9]等于01,btfbyp[7:0]等于bits_follOW+l ;否則btfbyp[7:0]等 于0; 0108]
0109] 0110]
(3)輸出碼流分3種情況
如果Lbyp[10]等于1,將^^5寫入RBSP ;
否則,如果Lbyp[10:9]等于00,將0^^寫入RBSP ;
否則,不需要向RBSP寫入任何數(shù)據(jù)。 0112] 由以上實(shí)施例可以看出,本發(fā)明的方案在軟件實(shí)現(xiàn)中,當(dāng)前比特的歸一化處理不 需循環(huán)操作,從而提高了歸一化處理速度;在電路實(shí)現(xiàn)中,任何比特的歸一化均為單周期處 理,避免了原多周期歸一化操作所引入的流水線停滯;將歸一化處理與產(chǎn)生RBSP碼流操作 分解為兩級(jí)流水線,兩級(jí)流水線間以5級(jí)先入先出(FIFO)寄存器連接,此結(jié)構(gòu)可有效避免 流水線停滯。因此,該設(shè)計(jì)避免了原有算法的多周期歸一化操作所引發(fā)的CABAC流水線停 滯問題。而且,本發(fā)明所提出的電路實(shí)現(xiàn)的吞吐率恒定,其吞吐率與所處理比特流中小概率 符號(hào)發(fā)生概率無關(guān)。 以上所述僅是本發(fā)明的實(shí)施方式,應(yīng)當(dāng)指出,對(duì)于本技術(shù)領(lǐng)域的普通技術(shù)人員來 說,在不脫離本發(fā)明技術(shù)原理的前提下,還可以做出若干改進(jìn)和變型,這些改進(jìn)和變型也應(yīng) 視為本發(fā)明的保護(hù)范圍。
1權(quán)利要求
一種基于CABAC的并行歸一化編碼實(shí)現(xiàn)電路,其特征在于,包括第一級(jí)流水線,用于完成歸一化操作,以及第二級(jí)流水線,用于產(chǎn)生輸出碼流,二者間以先入先出隊(duì)列FIFO連接,所述第一級(jí)流水線包括標(biāo)準(zhǔn)模式L和R更新引擎,用于完成標(biāo)準(zhǔn)編碼模式下歸一化操作之前編碼下限L[9:0]和編碼區(qū)間R[8:0]的更新,此引擎的輸入為binVal,valMPS,pStateIdx[5:0],R[8:0],L[9:0],輸出為中間結(jié)果RM/LPS[8:0]和LM/LPS[9:0];標(biāo)準(zhǔn)模式歸一化引擎,用于完成標(biāo)準(zhǔn)編碼模式下對(duì)編碼區(qū)間和編碼下限的歸一化操作,其輸入為RM/LPS[8:0]和LM/LPS[9:0],輸出為ρ[3:0],RM/LPS[8:0]和LM/LPS[9:0];標(biāo)準(zhǔn)模式跟隨比特更新引擎,用于完成標(biāo)準(zhǔn)編碼模式下對(duì)跟隨比特計(jì)數(shù)變量bits_follow的更新并且生成寫入段間FIFO的變量β[2:0],此引擎的輸入信號(hào)為L(zhǎng)M/LPS[9:0]、ρ[3:0]、mode以及bits_follow[7:0],輸出信號(hào)為bits_follow[7:0]的更新值btfreg[7:0]以及寫入段間FIFO的β[2:0];旁路模式L更新引擎,用于計(jì)算旁路編碼模式下編碼下限的更新值,此引擎的輸入為binVal,R[8:0],L[9:0],輸出為L(zhǎng)byp[10:0];旁路模式歸一化引擎,用于完成旁路模式下對(duì)編碼下限的歸一化操作,輸入為L(zhǎng)byp[10:0],輸出為L(zhǎng)byp[9:0];旁路模式跟隨比特更新引擎,用于完成旁路模式下對(duì)變量bits_follow的更新,輸入信號(hào)為L(zhǎng)byp[10:9]和bits_follow[7:0],輸出信號(hào)為bits_follow的更新值btfbyp[7:0];其中,bits_follow[7:0]寄存器用于存儲(chǔ)當(dāng)前變量bits_follow值;編碼區(qū)間寄存器R[8:0]用于存儲(chǔ)當(dāng)前編碼區(qū)間變量R值;編碼下限寄存器L[9:0]用于存儲(chǔ)當(dāng)前編碼下限變量L值;pStateIdx[5:0]為當(dāng)前被編碼比特的概率索引值,由前級(jí)上下文模型引擎產(chǎn)生;valMPS為大概率符號(hào)值,由前級(jí)上下文模型引擎產(chǎn)生;binVal為當(dāng)前被編碼比特的值;標(biāo)準(zhǔn)編碼模式中,RM/LPS[8:0]和LM/LPS[9:0]分別為歸一化操作前的編碼區(qū)間和編碼下限,RM/LPS[8:0]和LM/LPS[9:0]分別為歸一化操作后的編碼區(qū)間和編碼下限,中間變量n為RM/LPS[8:0]中前導(dǎo)0的個(gè)數(shù),變量ρ等于9-n;旁路編碼模式中,Lbyp[10:0]為歸一化操作前的編碼下限,Lbyp[9:0]為歸一化操作后的編碼下限;所述標(biāo)準(zhǔn)編碼模式和旁路編碼模式兩種編碼模式由輸入信號(hào)mode控制,當(dāng)工作于標(biāo)準(zhǔn)編碼模式時(shí),標(biāo)準(zhǔn)模式歸一化引擎的輸出RM/LPS[8:0]和LM/LPS[9:0]用于更新編碼區(qū)間寄存器R[8:0]和編碼下限寄存器L[9:0],標(biāo)準(zhǔn)模式跟隨比特更新引擎的輸出btfreg[7:0]用于更新寄存器bits_follow[7:0],若RM/LPS[8:0]的值小于256,寄存器bits_follow[7:0]的輸出、標(biāo)準(zhǔn)模式L和R更新引擎的輸出LM/LPS[9:3]以及標(biāo)準(zhǔn)模式跟隨比特更新引擎的輸出β[2:0]分別寫入FIFO尾部項(xiàng)的btf[7:0]、low[6:0]以及beta[2:0]字段中;當(dāng)工作于旁路編碼模式時(shí),旁路模式歸一化引擎的輸出Lbyp[9:0]用于更新編碼下限寄存器L[9:0],編碼區(qū)間寄存器R[8:0]的值維持不變,旁路模式跟隨比特更新引擎的輸出btfbyp[7:0]被選擇用于更新寄存器bits_follow[7:0],寄存器bits_follow[7:0]的輸出寫入FIFO尾部項(xiàng)的btf[7:0]字段,Lbyp[10]寫入FIFO尾部項(xiàng)的low[6]字段,將0寫入FIFO尾部項(xiàng)的beta[2:0]字段。
2. 如權(quán)利要求1所述的基于CABAC的并行歸一化編碼實(shí)現(xiàn)電路,其特征在于,所述 FIFO的深度為5段,每項(xiàng)為18比特位寬,由btf[7:0]、low[6:0]以及beta [2:0]字段組成。
3. 如權(quán)利要求1所述的基于CABAC的并行歸一化編碼實(shí)現(xiàn)電路,其特征在于,所述第 二級(jí)流水線為可在每周期產(chǎn)生多位輸出比特的輸出碼流產(chǎn)生引擎,所述輸出碼流產(chǎn)生引擎 包括前導(dǎo)比特輸出引擎和后綴比特輸出引擎,所述前導(dǎo)比特輸出引擎和后綴比特輸出引擎 分別連接同一選擇器,前導(dǎo)比特輸出引擎的輸入信號(hào)low[6]連接到FIFO輸出項(xiàng)low[6]; 前導(dǎo)比特輸出引擎的輸入信號(hào)btf[7:0]連接到FIFO輸出項(xiàng)btf [7:0];后綴比特輸出引 擎的輸入信號(hào)low[5:0]連接到FIF0輸出項(xiàng)的low[5:0];后綴比特輸出引擎的輸入信號(hào) beta[2:0]連接到FIFO輸出項(xiàng)的beta[2:0]。
4. 一種利用權(quán)利要求1 3之任一項(xiàng)所述的電路實(shí)現(xiàn)的基于CABAC的并行歸一化編碼 方法。
5. 如權(quán)利要求4所述的基于CABAC的并行歸一化編碼方法,其特征在于,標(biāo)準(zhǔn)編碼模 式下,定義Y為L(zhǎng),s[8:9-n]中最后一個(gè)為0的比特所在位,且當(dāng)L,s [8:9_n]不存在為 0的比特時(shí),y等于0,根據(jù)變量RM/U>S [8:0], L^ps [9:0] , n和y ,通過移位操作和邏輯操作 得到豆,s[8:0]和[,s[9:0]。
6. 如權(quán)利要求4所述的基于CABAC的并行歸一化編碼方法,其特征在于,標(biāo)準(zhǔn)編碼 模式下,btfreg[7:0]為歸一化操作后變量bits—follow[7:0]的值,根據(jù)當(dāng)前變量bits_ follow[7:0]的值,n和Y ,通過算數(shù)運(yùn)算和邏輯操作得到btfreg[7:0]。
7. 如權(quán)利要求4所述的基于CABAC的并行歸一化編碼方法,其特征在于,旁路編碼模式 下,根據(jù)當(dāng)前變量Lbyp[10:0]的值,通過邏輯操作得到[byp[9:0]。
8. 如權(quán)利要求4所述的基于CABAC的并行歸一化編碼方法,其特征在于,旁路編碼模式 下,btfbyp [7:0]為歸一化操作后變量bits_follOW[7:0]的值,根據(jù)變量bits_follOW[7:0] 和LbYD[10:9]的值,通過算數(shù)運(yùn)算和邏輯操作得到btfbYD[7:0]。
全文摘要
本發(fā)明公開了一種基于CABAC的并行歸一化編碼實(shí)現(xiàn)電路及編碼方法。該電路包括第一級(jí)流水線,用于完成歸一化操作,以及第二級(jí)流水線,用于產(chǎn)生輸出碼流,二者間以先入先出隊(duì)列FIFO連接,F(xiàn)IFO的深度為5段。這樣,當(dāng)輸出碼流產(chǎn)生引擎需要多周期操作時(shí),不會(huì)阻塞前級(jí)歸一化引擎的操作。本發(fā)明的方案避免了原有算法的多周期歸一化操作所引發(fā)的CABAC流水線停滯問題。
文檔編號(hào)H03M7/40GK101771879SQ201010103340
公開日2010年7月7日 申請(qǐng)日期2010年1月28日 優(yōu)先權(quán)日2010年1月28日
發(fā)明者劉振宇, 汪東升 申請(qǐng)人:清華大學(xué)