专利名称:基于cabac的并行归一化编码实现电路及编码方法
技术领域:
本发明涉及视频编码领域,尤其涉及一种基于CABAC的并行归一化编码实现电路 及编码方法。
背景技术:
基于上下文的自适应二进制算术编码(Context-based AdaptiveBinary Arithmetic Coding, CABAC)是H. 264/AVC的主要类所采用的编码算法。实验证明,与基 于上下文的可变长编码算法(Context-Adaptive Variable-Length Codinig, CAVLC)比 较,在相同的码流下,CABAC将图像质量提高0. 3-0. 6dB。 CABAC编码算法的不足在于吞吐 率低,难以满足高清应用的需求。CABAC结构框图如图l所示,首先对不具备二元特性的 语义元素进行二元化处理;然后,对二元化处理的输出比特流中的每一比特进行自适应二 进制算术编码,对于那些具备二元特性的语义元素则直接进行自适应二进制算术编码。根 据被编码比特的概率分布特点,对具有均匀概率分布的比特采用旁路模式编码;相反,对于 具有基于上下文概率分布特点的比特采用标准模式编码。对于采用标准模式编码的比特, 首先在上下文模型引擎获得其概率索引值(pStateldx[5:0])和大概率符号值(valMPS)。 pStateldx[5:0]和valMPS以及当前被编码比特的值(binVal)输入到标准模式编码引 擎。标准模式编码引擎根据pStateldx[5:0]、 valMPS和binVal更新编码区间(R[8:0]) 和编码下限(L[9:0]),然后通过对更新后的编码区间和编码下限进行归一化操作,产生 输出到原始字节序列载荷(RBSP)的码流。标准模式编码的处理流程参见参考文献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所提供的标准中(参见参考文献1),标准模式编码中归一化操作以及 输出码流的产生流程如图2所示(其中,函数Put0neBit(b)是将1比特的b及跟随比特计 数变量(bits—follow)所记录的bits—follow个比特的(1-b)写入RBSP中)。图2所示的 处理流程会引起如下处理瓶颈 1)在图2所示的流程中,对编码区间R和编码下限L的归一化操作和输出比特的 产生处于同一个循环体内。如果R,表示归一化前编码区间的值,那么需要8-Llog2(凡)」次
循环完成此次归一化操作以及输出码流的产生,其中"L」"为向下取整操作。在电路实现 中,如果假设图2中PutBit(b)函数可以在一个周期内完成(后面我们看到这个假设是乐
观的),则需要8-Llog2(凡)」个周期完成当前被编码比特的归一化及输出码流的操作。由于
后续比特的编码依赖于当前比特的归一化结果,所以,如果当前被编码比特采用多周期归
一化处理,后续比特的编码将被停滞,从而降低整个CABAC流水线的效率。 2)由于在输出码流产生过程中要解决进位传播问题,H. 264/AVC协议中引入如图
2所示的bits—follow变量。如果bits—follow不等于0,PutBit(b)执行单元需要多个周期操作,这种情况会进一步降低CABAC编码引擎的效率。 进一步,当码流中小概率符号的比重增加时,上述两种情况所引入的负面效应也 随之增加。
发明内容
( — )要解决的技术问题 针对现有技术中存在的缺陷和不足,本发明的目的是提供一种用于H. 264/AVC视 频编码协议的基于CABAC的并行归一化编码实现电路及编码方法,其解决了原归一化处理 和输出码流产生过程中由比特间相关性所引发的计算瓶颈,能够避免现有算法的循环操 作,以及多周期归一化操作所引发的CABAC流水线停滞问题。
( 二 )技术方案 为达到上述目的,本发明提供了一种基于CABAC的并行归一化编码实现电路,包 括第一级流水线,用于完成归一化操作,以及第二级流水线,用于产生输出码流,二者间以 先入先出队列FIFO连接,所述第一级流水线包括 标准模式L和R更新引擎,用于完成标准编码模式下归一化操作之前编码下限 L[9:0]和编码区间R[8:0]的更新,此引擎的输入为binVal, valMPS, pStateldx[5:0], R[8:0],L[9:0],输出为中间结果R班ps[8:0]和L班ps[9:0]; 标准模式归一化引擎,用于完成标准编码模式下对编码区间和编码下限的归一化 操作,其输入为R,s[8:0]和Lgps[9:0],输出为P [3:0] , 5M/U>S [8:0]和[,s[9:0];
标准模式跟随比特更新引擎,用于完成标准编码模式下对跟随比特计数变量 bits—follow的更新并且生成写入段间FIFO的变量13 [2:0],此引擎的输入信号为LM/ lps[9:0]、 P [3:0]、 mode以及bits_follow[7:0],输出信号为bits_follow[7:0]的更新值 btfreg[7:0]以及写入段间FIFO的P [2:0]; 旁路模式L更新引擎,用于计算旁路编码模式下编码下限的更新值,此引擎的输 入为binVal, R[8:0], L[9:0],输出为Lbyp[10:0]; 旁路模式归一化引擎,用于完成旁路模式下对编码下限的归一化操作,输入为 Lbyp[10:0],输出为[byp[9:0]; 旁路模式跟随比特更新引擎,用于完成旁路模式下对变量bits—follow的更 新,输入信号为Lbyp[10:9]和bits—follow[7:0],输出信号为bits_follOW的更新值 btfbyp[7:0]; 其中,bitS_follOW[7:0]寄存器用于存储当前变量bits—follow值;编码区间寄 存器R[8:0]用于存储当前编码区间变量R值;编码下限寄存器L[9:0]用于存储当前编码 下限变量L值;pStateldx[5:0]为当前被编码比特的概率索引值,由前级上下文模型引擎 产生;valMPS为大概率符号值,由前级上下文模型引擎产生;binVal为当前被编码比特的 值;标准编码模式中,IWPS[8:0]和Lm^[9:0]分别为归一化操作前的编码区间和编码下 限,豆i/m [8:0]和[M/U>s [9:0]分别为归一化操作后的编码区间和编码下限,中间变量n为RM/ m[8:0]中前导O的个数,变量P等于9-n;旁路编码模式中,Lbyp[10:0]为归一化操作前的 编码下限,[byp[9:0]为归一化操作后的编码下限; 所述标准编码模式和旁路编码模式两种编码模式由输入信号mode控制,当工作于标准编码模式时,标准模式归一化引擎的输出豆班Ps[8:0]和[^ps[9:0]用于更新 编码区间寄存器R[8:0]和编码下限寄存器L[9:0],标准模式跟随比特更新引擎的输出 btf卿[7:0]用于更新寄存器bits_follOW[7:0],若RM/LPS [8:0]的值小于256,寄存器bits_ follow[7:0]的输出、标准模式L和R更新引擎的输出L班pj9:3]以及标准模式跟随比特 更新引擎的输出P [2:0]分别写入FIFO尾部项的btf [7:0]、 1ow[6:0]以及beta[2:0]字 段中;当工作于旁路编码模式时,旁路模式归一化引擎的输出[byp[9:0]用于更新编码下限 寄存器L[9:0],编码区间寄存器R[8:0]的值维持不变,旁路模式跟随比特更新引擎的输 出btfbyp[7:0]被选择用于更新寄存器bits—follow[7:0],寄存器bits—follow[7:0]的输 出写入FIFO尾部项的btf [7:0]字段,Uyp[lO]写入FIFO尾部项的low[6]字段,将0写入 FIF0尾部项的beta[2:0]字段。 其中,所述FIF0的深度为5段,每项为18比特位宽,由btf[7:0]、 1ow[6:0]以及 beta [2:0]字段组成。 其中,所述第二级流水线为可在每周期产生多位输出比特的输出码流产生引擎, 所述输出码流产生引擎包括前导比特输出引擎和后缀比特输出引擎,所述前导比特输出 引擎和后缀比特输出引擎分别连接同一选择器,前导比特输出引擎的输入信号1ow[6]连 接到FIFO输出项1ow[6];前导比特输出引擎的输入信号btf[7:0]连接到FIFO输出项 btf[7:0];后缀比特输出引擎的输入信号1ow[5:0]连接到FIFO输出项的1ow[5:0];后缀 比特输出引擎的输入信号beta[2:0]连接到FIFO输出项的beta[2:0]。
本发明还提供了一种利用上述电路实现的基于CABAC的并行归一化编码方法。
其中,标准编码模式下,定义Y为LMAPS[8:9-n]中最后一个为0的比特所在位,且 当Lm/lps [8:9-n]不存在为0的比特时,y等于0,根据变量Rm/lps [8:0], Lm/lPS [9:0] , n和y , 通过移位操作和逻辑操作得到5M/U>S [8:0]和[M/U>s [9:0]。 其中,标准编码模式下,btfreg[7:0]为归 一 化操作后变量bits_follOW[7:0] 的值,根据当前变量bits—follow[7:0]的值,n和Y ,通过算数运算和逻辑操作得到 btfreg[7:0]。 其中,旁路编码模式下,根据当前变量Lbyp[10:0]的值,通过逻辑操作得到 [byp[9:0]。 其中,旁路编码模式下,btfbyp[7:0]为归 一 化操作后变量bits_follOW[7:0] 的值,根据变量bits—follow[7:0]和Lbyp[10:9]的值,通过算数运算和逻辑操作得到 btfbyp[7:0]。(三)有益效果 与现有技术相比,本发明能够产生如下有益效果在软件实现中,当前比特的归一 化处理不需循环操作,从而提高了归一化处理速度;在电路实现中,任何比特的归一化均为 单周期处理,避免了原多周期归一化操作所引入的流水线停滞;将归一化处理与产生RBSP 码流操作分解为两级流水线,两级流水线间以5级先入先出(FIFO)寄存器连接,此结构可 有效避免流水线停滞。因此,该设计避免了原有算法的多周期归一化操作所引发的CABAC 流水线停滞问题。而且,所提出的电路实现的吞吐率恒定,其吞吐率与所处理比特流中小概 率符号发生概率无关。
图1为H. 264/AVC中现有CABAC系统框图; 图2为H. 264/AVC中标准模式归一化操作以及输出码流的产生流程框图; 图3为本发明实施例的电路整体架构框图; 图4为本发明实施例的标准模式L和R更新引擎的电路图; 图5为本发明实施例的标准模式归一化引擎的电路图; 图6为本发明实施例的标准模式跟随比特更新引擎中生成变量btf^[7:0]的电 路图; 图7为本发明实施例的标准模式跟随比特更新引擎中生成13 [2:0]的电路图;
图8为本发明实施例的RBSP比特生成引擎中数据通路的电路图。
具体实施例方式
下面结合附图和实施例,对本发明的具体实施方式
作进一步详细描述。以下实施 例用于说明本发明,但不用来限制本发明的范围。 依据本发明实施例的电路整体架构框图如图3所示。首先说明一些变量的定义
输入信号 pStateldx[5:0]:当前被编码比特的概率索引值,由前级上下文模型引擎产生;
valMPS :大概率符号值,由前级上下文模型引擎产生;
binVal :当前被编码比特的值; mode :0表明当前工作于标准编码模式,1表明当前工作于旁路编码模式。
输出信号 toRBPS[7:0]:以字节为单位,写入RBSP的码流;
RBPS_we :向RBSP写出使能信号。 定义归一化操作前的编码区间和编码下限分别为Rm/^[8:0]和LM/U>S[9:0];定义 归一化操作后的编码区间和编码下限分别为豆m/^[8:0]和[m^[9:0];定义[8:0]中 前导0的个数为n ;定义L,s[8:9-n]中最后一个为0的比特所在位为y (当L,s[8:9-n] (即L班ps[9:0]中第8至第9-n位)不存在为0的比特时,y等于0);定义btfMg[7:0]为 归一化操作后变量bits—follow的值;定义归一化操作前编码下限为Lbyp[10:0];定义归一 化操作后编码下限为[byp[9:0];定义btfbyp[7:0]为归一化操作后变量bits—follow的值。
如图3所示的电路结构由两级流水线构成。第一级流水线包括如下功能部件
bits_follow[7:0]寄存器存储当前变量bits_follow值;
编码区间寄存器R[8:0]:存储当前编码区间变量R值; 编码下限寄存器L[9:0]:存储当前编码下限变量L值;L[9:0]表示编码下限为10 比特信号,最高为编号为9,最低位编号为O,本发明中,其它具有相同形式的变量采用上述 表示方法定义。 标准模式L和R更新引擎完成标准编码模式下(参考文献l中图9-7所示) 归一化操作之前的逻辑功能,此引擎的输入为binVal, valMPS, pStateldx[5:0] , R[8:0], L[9:0],输出为中间结果Rm/lps [8:0]和Lm/lPS [9:0]; 标准模式归一化引擎完成标准编码模式下对编码区间和编码下限的归一化操作,此引擎的输入为RM/LPs[8:0]和LM/Lps[9:0],输出为P [3:0] , 5m/lps[8:0]和[,s[9:0];
标准模式跟随比特更新引擎完成标准编码模式下对变量bits_follOW的更新并 且生成写入段间FIFO的变量13 [2:0],此引擎的输入信号为L班ps[9:0]、 P [3:0]、 mode以 及bits_fOllOW[7:0],输出信号为bits_follOW的更新值btf卿[7:0],以及写入段间FIFO 的P [2:0]; 旁路模式L更新引擎完成旁路编码模式下编码下限更新值的计算工作,此引擎 的输入为binVal, R[8:0] , L[9:0],输出为Lbyp[10:0]; 旁路模式归一化引擎完成旁路模式下对编码下限的归一化操作,输入为 Lbyp[10:0],输出为[byp[9:0];以及 旁路模式跟随比特更新引擎完成旁路模式下对变量bits—follow的更新,输入 信号为Lbyp[10:9]和bits_follOW[7:0],输出信号为bits—follow的更新值btfbyp[7:0]。
上述第一级流水线有两种工作模式标准编码模式和旁路编码模式,其工作模式 的选择由输入信号mode控制。 当第一级流水线工作于标准编码模式时,标准模式L和R更新引擎、标准模式归 一化引擎、以及标准模式跟随比特更新引擎处于工作状态。标准模式归一化引擎的输出豆 / m[8:0]和[m他[9:0]被用于更新编码区间寄存器R[8:0]和编码下限寄存器L[9:0]。标 准模式跟随比特更新引擎的输出btf^[7:0]被用于更新寄存器bits—follow[7:0]。如果 IWPS [8:0]的值小于256,寄存器bits_follOW[7:0]的输出、标准模式L和R更新引擎的 瑜出Lm/^[9:3]以及标准模式跟随比特更新引擎的输出13 [2:0]分别写入FIFO尾部项的 btf[7:0]、 1ow[6:0]以及beta[2:0]字段中。 当第一级流水线工作于旁路编码模式时,旁路模式L更新引擎、旁路模式归一 化引擎、以及旁路模式跟随比特更新引擎处于工作状态。旁路模式归一化引擎的输出 [byp[9:0]被选择,用于更新编码下限寄存器L[9:0]。注意,当处于旁路编码模式时,编码 区间寄存器R[8:0]的值维持不变。旁路模式跟随比特更新引擎的输出btfbyp[7:0]被选 择,用于更新寄存器bits—follow[7:0]。寄存器bits—follow[7:0]的输出写入FIFO尾 部项的btf[7:0]字段,Uyp[lO]写入FIFO尾部项的1ow[6]字段,将0写入FIFO尾部项的 beta[2:0]字段。 其中,第一级与第二级流水线之间以FIFO连接。FIF0的深度可以大于或等于5 段,优选为5段,FIFO中每项存储区的位宽为18比特,每项由字段btf[7:0]、 1ow[6:0]以 及beta [2:0]组成。 第二级流水线包括RBSP比特生成引擎。RBSP比特生成引擎中包括一个8比特 的缓冲寄存器buf[7:0],前导比特输出引擎和后缀比特输出引擎。如果FIFO非空,RBSP 比特生成引擎从FIF0读取头指针所指向的存储项,根据此项中btf[7:0]、 1ow[6:0]以及 beta[2:0]字段生成输出码流。RBSP比特生成引擎的输出端口为1.以字节为单位写入 RBSP的码流数据输出端口 toRBPS[7:0] ;2.输出使能信号RBPS_we。 RBSP比特生成引擎的 比特输出过程分为两个阶段,第一阶段为前导比特输出,第二阶段为后缀比特输出。下面对 这两个阶段的输出比特产生过程进行具体的说明。 前导比特输出假设前导比特输出操作之前,缓冲寄存器中残存未输出的比特数 为m(表示为buf [m-l: 0]),前导比特输出将占用/ = 「(&/ + m +1)/8"]个时钟周期完成操作,
8其中「]为向上取整运算。前导比特输出操作分为两种情况 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"为按 位拼接操作,{bft{! low[6]}}表示连续btf个值为! low[6]的比特拼接的比特串,! low[6]表示对比特变量low[6]进行取反操作);
2)当i > l,分三步输出前导比特 a)在第1时钟周期,输出{buf[m-l:0], low[6], {(8言1) { ! low[6]}}}到RBSP 码流中,如果i等于l,此时就可以结束前导比特输出操作,否则 b)如果i大于2,从第2到第i-l时钟周期,每周期向RBSP码流中写入{8 { !
low[6]}}; c)设变量k等于btf+m+l-8X (i-l),在第i时钟周期,将{k{ ! 1ow[6]H写入 buf[k-l:O]。 当beta[2:0] > 0时,后缀比特输出引擎将1ow[5:6-beta]输出。设后缀比特输 出前缓冲寄存器buf [7:0]中残存尚未输出的比特数为k,分两种情况讨论
a)如果k+beta〈8,将{buf [k_l:0] , low[5,6-beta]}写回缓冲寄存器buf [7:0] 的低k+beta位; b)否则,即k+beta^8,此时k一定大于2,首先在第一周期将{buf[k_l:0], low[5:k-2]}写入RBSP码流,如果k+beta等于8,此时结束后缀比特输出操作,否则;在第 二周期,将1ow[k-3:6-beta]写入缓冲寄存器buf [7:0]的低k+beta-8位。
下面分别说明本发明实施例的电路整体架构框图中各组成部分的实现结构。
标准模式L和R更新引擎电路设计如图4所示。其中编码范围查找表的组合逻辑 是根据当前编码区间的R[7:6]和pStateldx[5:0]实现查表逻辑,其真值表如文献1中表 9-33所示。 标准模式归一化引擎电路设计如图5所示。其中,符号M))n代表将变量M右 移n位操作,高位补零。符号1^^<<11代表将变量1^^[8:0]左移n位操作,低位补零。 符号Lm/^ << n代表将变量LMAPS[9:0]左移n位操作,低位补零。前导0计数是检测其输 入信号中前导0的个数,采用参考文献2(Synopsys Inc. ,"Design Ware BuildingBlock IP Documentation 0verview,,, October 2009)中的电路设计。 标准模式跟随比特更新引擎中生成btf^[7:0]的电路结构如图6所示。其中,符 号Lm^[8:0] >> p代表将L^ps[8:0]右移p位操作,高位补零。位旋转引擎的功能是 将其第i比特的输入信号连接到第8-i比特的输出信号。前导1计数是检测其输入信号中 前导1的个数,采用参考文献2中的电路设计。表达式S #9-p O:l表示如下逻辑关 系当S不等于9-p时输出为0,否则输出为1。 标准模式跟随比特更新引擎中生成13 [2:0]的电路结构如图7所示。其中,输入 信号S为图6中前导1计数模块的输出。当工作在旁路编码模式时,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];当L一[10](即Lbyp[10:0]中的最高位第10位)和L一[9]都为1时,[一[9]为1,否则[一[9]为0。
旁路模式跟随比特更新引擎完成如下功能当Lbyp[10:9]为01时,btfbyp[7:0]等 于bits—follow[7:0]加l ;否则,btfbyp[7:0]等于0。 第二级流水线RBSP比特生成引擎的数据通路电路如图8所示。此数据通路主要 由8比特的缓冲存储器buf[7:0]、前导比特输出引擎和后缀比特输出引擎组成。前导比特 输出引擎的输入信号1ow[6]连接到FIFO输出项的1ow[6];前导比特输出引擎的输入信号 btf[7:0]连接到FIFO输出项btf [7:0];后缀比特输出引擎的输入信号1ow[5:0]连接到 FIFO输出项的1ow[5:0];后缀比特输出引擎的输入信号beta[2:0]连接到FIFO输出项的 beta[2:0]。 上述电路在实现基于CABAC的并行归一化编码方法时,按照以下方式实现
对于第一级流水线 1)标准编码模式中,根据变量R,s [8:0], L,s [9:0] , n禾P Y ,通过移位操作和逻 辑操作得到豆M/m [8:0]和[MAPS [9:0],此算法在软件实现中不需要循环,在电路实现中以组 合逻辑单周期完成。 2)标准编码模式中,所提出的算法根据当前变量bits_follOW的值,n和Y ,通过 算数运算和逻辑操作得到btf^[7:0]。此算法在软件实现中不需要循环,在电路实现中以 组合逻辑单周期完成所需功能。 3)旁路编码模式中,归一化操作只涉及对编码下限和变量bits_follOW的操作。 所提出的算法根据当前变量Lbyp[10:0]的值,通过逻辑操作得到[byp[9:0],在软件实现中不 需要循环,在电路实现中以组合逻辑单周期完成所需功能。 4)旁路编码模式中,定义btfbyp[7:0]为归一化操作后变量bits—follow的值。 所提出的算法根据变量bits—follow[7:0]和L一[10:9]的值,通过算数和逻辑运算得到 btfbyp[7:0],所需的操作在软件实现中不需要循环,在电路实现中以组合逻辑单周期完成 所需功能。 5)在电路实现中,提高了 RBSP码流产生引擎的吞吐率,并且将归一化引擎与输出
码流产生引擎分解为两级流水线操作,两级流水线间以深度为5的FIFO连接。 6)如果当前的归一化操作需要产生输出码流并且FIFO非满,归一化引擎向FIFO
的尾指针所指向的存储项写入low[6:0], beta[2:0]以及btf[7:0]。如果当前FIFO非
空,输出码流产生引擎每次从FIFO头指针所指向的存储项取出1ow[6:0], beta[2:0]以及
btf[7:0],通过对这些信息的解析生成输出码流。 而第二级流水线的输出码流产生引擎可在每周期产生多位输出比特,每次以字节
为单位写出到RBSP。因为输出码流的吞吐率大于CABAC归一化操作(第一级流水线的操
作),所以即使对当前FIFO项的处理需要多周期操作,只要FIFO的深度足够,就不会停滞前
级归一化引擎流水线。根据实验,FIFO的深度置为5段即可满足要求。 具体来说,标准编码模式中,所提出的归一化算法和输出码流算法如下 (1)豆班ps[8:0]等于左移R班ps[8:0]n位; (2)[班ps[9:0]通过以下操作获得 定义临时变量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)为方便标记,定义P等于9-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 写入任何数据; 0101] 否则,
0102] 首先将GUJ^2写入RBSP;
0103] 然后将LM/LPS[8: Y +1]写入RBSP ; 0104] 得到变量btf^[7:0]等于Y-P 。
0105] 旁路编码模式中,定义归一化操作前的编码下限为Lbyp[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写入任何数据。 0112] 由以上实施例可以看出,本发明的方案在软件实现中,当前比特的归一化处理不 需循环操作,从而提高了归一化处理速度;在电路实现中,任何比特的归一化均为单周期处 理,避免了原多周期归一化操作所引入的流水线停滞;将归一化处理与产生RBSP码流操作 分解为两级流水线,两级流水线间以5级先入先出(FIFO)寄存器连接,此结构可有效避免 流水线停滞。因此,该设计避免了原有算法的多周期归一化操作所引发的CABAC流水线停 滞问题。而且,本发明所提出的电路实现的吞吐率恒定,其吞吐率与所处理比特流中小概率 符号发生概率无关。 以上所述仅是本发明的实施方式,应当指出,对于本技术领域的普通技术人员来 说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变型,这些改进和变型也应 视为本发明的保护范围。
1权利要求
一种基于CABAC的并行归一化编码实现电路,其特征在于,包括第一级流水线,用于完成归一化操作,以及第二级流水线,用于产生输出码流,二者间以先入先出队列FIFO连接,所述第一级流水线包括标准模式L和R更新引擎,用于完成标准编码模式下归一化操作之前编码下限L[9:0]和编码区间R[8:0]的更新,此引擎的输入为binVal,valMPS,pStateIdx[5:0],R[8:0],L[9:0],输出为中间结果RM/LPS[8:0]和LM/LPS[9:0];标准模式归一化引擎,用于完成标准编码模式下对编码区间和编码下限的归一化操作,其输入为RM/LPS[8:0]和LM/LPS[9:0],输出为ρ[3:0],RM/LPS[8:0]和LM/LPS[9:0];标准模式跟随比特更新引擎,用于完成标准编码模式下对跟随比特计数变量bits_follow的更新并且生成写入段间FIFO的变量β[2:0],此引擎的输入信号为LM/LPS[9:0]、ρ[3:0]、mode以及bits_follow[7:0],输出信号为bits_follow[7:0]的更新值btfreg[7:0]以及写入段间FIFO的β[2:0];旁路模式L更新引擎,用于计算旁路编码模式下编码下限的更新值,此引擎的输入为binVal,R[8:0],L[9:0],输出为Lbyp[10:0];旁路模式归一化引擎,用于完成旁路模式下对编码下限的归一化操作,输入为Lbyp[10:0],输出为Lbyp[9:0];旁路模式跟随比特更新引擎,用于完成旁路模式下对变量bits_follow的更新,输入信号为Lbyp[10:9]和bits_follow[7:0],输出信号为bits_follow的更新值btfbyp[7:0];其中,bits_follow[7:0]寄存器用于存储当前变量bits_follow值;编码区间寄存器R[8:0]用于存储当前编码区间变量R值;编码下限寄存器L[9:0]用于存储当前编码下限变量L值;pStateIdx[5:0]为当前被编码比特的概率索引值,由前级上下文模型引擎产生;valMPS为大概率符号值,由前级上下文模型引擎产生;binVal为当前被编码比特的值;标准编码模式中,RM/LPS[8:0]和LM/LPS[9:0]分别为归一化操作前的编码区间和编码下限,RM/LPS[8:0]和LM/LPS[9:0]分别为归一化操作后的编码区间和编码下限,中间变量n为RM/LPS[8:0]中前导0的个数,变量ρ等于9-n;旁路编码模式中,Lbyp[10:0]为归一化操作前的编码下限,Lbyp[9:0]为归一化操作后的编码下限;所述标准编码模式和旁路编码模式两种编码模式由输入信号mode控制,当工作于标准编码模式时,标准模式归一化引擎的输出RM/LPS[8:0]和LM/LPS[9:0]用于更新编码区间寄存器R[8:0]和编码下限寄存器L[9:0],标准模式跟随比特更新引擎的输出btfreg[7:0]用于更新寄存器bits_follow[7:0],若RM/LPS[8:0]的值小于256,寄存器bits_follow[7:0]的输出、标准模式L和R更新引擎的输出LM/LPS[9:3]以及标准模式跟随比特更新引擎的输出β[2:0]分别写入FIFO尾部项的btf[7:0]、low[6:0]以及beta[2:0]字段中;当工作于旁路编码模式时,旁路模式归一化引擎的输出Lbyp[9:0]用于更新编码下限寄存器L[9:0],编码区间寄存器R[8:0]的值维持不变,旁路模式跟随比特更新引擎的输出btfbyp[7:0]被选择用于更新寄存器bits_follow[7:0],寄存器bits_follow[7:0]的输出写入FIFO尾部项的btf[7:0]字段,Lbyp[10]写入FIFO尾部项的low[6]字段,将0写入FIFO尾部项的beta[2:0]字段。
2. 如权利要求1所述的基于CABAC的并行归一化编码实现电路,其特征在于,所述 FIFO的深度为5段,每项为18比特位宽,由btf[7:0]、low[6:0]以及beta [2:0]字段组成。
3. 如权利要求1所述的基于CABAC的并行归一化编码实现电路,其特征在于,所述第 二级流水线为可在每周期产生多位输出比特的输出码流产生引擎,所述输出码流产生引擎 包括前导比特输出引擎和后缀比特输出引擎,所述前导比特输出引擎和后缀比特输出引擎 分别连接同一选择器,前导比特输出引擎的输入信号low[6]连接到FIFO输出项low[6]; 前导比特输出引擎的输入信号btf[7:0]连接到FIFO输出项btf [7:0];后缀比特输出引 擎的输入信号low[5:0]连接到FIF0输出项的low[5:0];后缀比特输出引擎的输入信号 beta[2:0]连接到FIFO输出项的beta[2:0]。
4. 一种利用权利要求1 3之任一项所述的电路实现的基于CABAC的并行归一化编码 方法。
5. 如权利要求4所述的基于CABAC的并行归一化编码方法,其特征在于,标准编码模 式下,定义Y为L,s[8:9-n]中最后一个为0的比特所在位,且当L,s [8:9_n]不存在为 0的比特时,y等于0,根据变量RM/U>S [8:0], L^ps [9:0] , n和y ,通过移位操作和逻辑操作 得到豆,s[8:0]和[,s[9:0]。
6. 如权利要求4所述的基于CABAC的并行归一化编码方法,其特征在于,标准编码 模式下,btfreg[7:0]为归一化操作后变量bits—follow[7:0]的值,根据当前变量bits_ follow[7:0]的值,n和Y ,通过算数运算和逻辑操作得到btfreg[7:0]。
7. 如权利要求4所述的基于CABAC的并行归一化编码方法,其特征在于,旁路编码模式 下,根据当前变量Lbyp[10:0]的值,通过逻辑操作得到[byp[9:0]。
8. 如权利要求4所述的基于CABAC的并行归一化编码方法,其特征在于,旁路编码模式 下,btfbyp [7:0]为归一化操作后变量bits_follOW[7:0]的值,根据变量bits_follOW[7:0] 和LbYD[10:9]的值,通过算数运算和逻辑操作得到btfbYD[7:0]。
全文摘要
本发明公开了一种基于CABAC的并行归一化编码实现电路及编码方法。该电路包括第一级流水线,用于完成归一化操作,以及第二级流水线,用于产生输出码流,二者间以先入先出队列FIFO连接,FIFO的深度为5段。这样,当输出码流产生引擎需要多周期操作时,不会阻塞前级归一化引擎的操作。本发明的方案避免了原有算法的多周期归一化操作所引发的CABAC流水线停滞问题。
文档编号H03M7/40GK101771879SQ201010103340
公开日2010年7月7日 申请日期2010年1月28日 优先权日2010年1月28日
发明者刘振宇, 汪东升 申请人:清华大学