首页> 中国专利> 基于H.264/AVC中CABAC的并行编码实现电路及编码方法

基于H.264/AVC中CABAC的并行编码实现电路及编码方法

摘要

本发明公开了一种基于H.264/AVC中CABAC的并行编码实现电路及编码方法,包括用于执行并行归一化运算的二元化引擎;用于执行每周期两比特的上下文读取及更新操作的上下文模型引擎;用于执行每周期两比特的归一化操作的并行归一化引擎用于产生RBSP输出码流的RBSP码流生成引擎;二元化引擎与上下文模型引擎段间以3写2读先入先出队列连接;并行归一化引擎与RBSP码流生成引擎段间以2写1读先入先出队列连接。本发明使二元化引擎与归一化引擎及RBSP码流生成引擎的处理速度相匹配;解决了各级处理引擎间吞吐率不均衡问题,避免了流水线停滞;解决了编码区间和编码下限归一化与码流产生过程的相关性引发的计算瓶颈问题。

著录项

  • 公开/公告号CN101951516A

    专利类型发明专利

  • 公开/公告日2011-01-19

    原文格式PDF

  • 申请/专利权人 清华大学;

    申请/专利号CN201010291264.9

  • 发明设计人 刘振宇;汪东升;

    申请日2010-09-25

  • 分类号H04N7/26(20060101);H04N7/30(20060101);

  • 代理机构11002 北京路浩知识产权代理有限公司;

  • 代理人王莹

  • 地址 100084 北京市海淀区清华园北京100084-82信箱

  • 入库时间 2023-12-18 01:35:13

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2018-01-16

    专利权的转移 IPC(主分类):H04N7/26 登记生效日:20171227 变更前: 变更后: 申请日:20100925

    专利申请权、专利权的转移

  • 2013-06-05

    授权

    授权

  • 2011-03-16

    实质审查的生效 IPC(主分类):H04N7/26 申请日:20100925

    实质审查的生效

  • 2011-01-19

    公开

    公开

说明书

技术领域

本发明涉及视频编码领域,尤其涉及一种基于H.264/AVC中CABAC的并行编码实现电路及编码方法。

背景技术

H.264/AVC的Main Profile(主要类)采用基于上下文的自适应二进制算术编码(Context-based Adaptive Binary Arithmetic Coding,CABAC)。试验表明,与基于上下文的可变长编码算法(Context-Adaptive Variable-Length Coding,CAVLC)比较,在相同的码率下,采用CABAC可将图像质量提高0.3-0.6dB。在高清应用场景下,CABAC编码算法的不足在于吞吐率低。

CABAC的处理框图如图1所示,第一步,对不具备二元特性的语义元素进行二元化处理,而对于具备二元统计特性的语义元素则直接输出到编码处理单元;第二步,根据二元化处理的输出比特流中的每一比特的概率分布特点,进行自适应二进制算术编码。具体来说,对于具有基于上下文概率分布特点的比特采用标准模式编码,相反,对具有均匀概率分布的比特采用旁路模式编码。采用标准模式编码的比特,首先在上下文模型中获取上下文信息,这包括其概率索引值pStateIdx[5:0]和大概率符号值valMPS,之后根据当前被编码比特的值更新相应的上下文模型。pStateIdx[5:0]和valMPS以及当前被编码比特的值binVal被输入到标准模式编码引擎,用于更新编码区间R[8:0]和编码下限L[9:0],R[8:0]表示编码区间为9比特信号,最高位编号为8,最低位编号为0,其它具有相同形式的变量采用上述表示方法定义。通过对更新后的编码区间R[8:0]和编码下限L[9:0]进行归一化操作,产生原始字节序列载荷码流RBSP。标准模式编码的处理流程参见参考文献1(T.Wiegand,G.Sullivan,and A.Luthra,“Draft itu-trecommendation and final draft international standard of joint videospecification(ITUT rec.H.264-ISO/IEC 14496-10AVC),”May 2003.JVT-G050r1)中图9-7所示。与标准模式编码不同,旁路模式编码采用固定上下文信息,不需要查找和更新上下文模型。

实现H.264/AVC标准CABAC算法存在如下困难:

1、运算粒度小:H.264/AVC标准中归一化操作以及输出码流的产生流程可参见上述从参考文献1中图9-8、9-9以及9-10,其中归一化运算粒度是以一比特为单位。

2、对每一个比特的归一化处理过程中,对编码区间和编码下限的归一化操作和输出比特的产生紧密耦合。如R′表示归一化编码区间的初始值,那么需要次循环完成其归一化操作以及产生相应的输出码流,其中为向下取整操作。由于归一化过程中要解决进位传播问题,H.264/AVC协议中引入Outstan dingBits变量(OB)。如果OB不等于0,输出码流产生单元需要多个周期操作,这种情况会进一步降低CABAC编码引擎的效率。

3、对语义元素二元化处理的输出是非定长编码,部分语义元素编码后为单比特输出,此特性对于实现具有大于1的恒定编码速率的编码引擎带来了困难,因此需要对二元化引擎与算术编码引擎进行吞吐率均衡处理。

发明内容

(一)要解决的技术问题

针对现有技术中存在的缺陷和不足,本发明的目的是提供一种用于H.264/AVC视频编码协议的具有2比特每周期的恒定吞吐率的CABAC编码实现电路及编码方法,其一,使得二元化引擎与归一化引擎及RBSP码流生成引擎的处理速度相匹配;其二,解决各级处理引擎间的吞吐率不均衡问题并避免流水线停滞;其三,解决CABAC算法中编码区间和编码下限归一化与码流产生过程的相关性所引发的计算瓶颈问题。

(二)技术方案

为解决上述技术问题,本发明提供了一种基于H.264/AVC中CABAC的并行编码实现电路,包括第一级流水线,为用于执行并行归一化运算的二元化引擎;第二级流水线,为用于执行每周期两比特的上下文读取及更新操作的上下文模型引擎;第三级流水线,为用于执行每周期两比特的归一化操作的并行归一化引擎;以及第四级流水线,为用于产生原始字节序列载荷RBSP输出码流的RBSP码流生成引擎;其中,所述二元化引擎与上下文模型引擎段间以3写2读先入先出队列连接;并行归一化引擎与RBSP码流生成引擎段间以2写1读先入先出队列连接。

其中,所述二元化引擎为基于乒乓存储结构的离散余弦变换/量化DCT/Q系数二元化引擎,用于并行执行系数扫描和二元化编码。

其中,所述二元化引擎的输入信号包括当前被处理的语义元素值Cur.SE,与所述语义元素值相关的临近语义元素值NeighborSEs,3写2读先入先出队列中空闲存储单元的数目hole_num[2:0],以及相关的二元化引擎控制信息Ctrl.Info;所述二元化引擎的输出信号包括3比特的二元化输出值{binVali|i∈{0,1,2}},每一输出比特相对应的上下文索引值{ctxIdxi[7:0]|i∈{0,1,2}}以及写入3写2读先入先出队列中的二元化输出比特及相关上下文索引值的总数目w_num[1:0],当w_num[1:0]不等于0时,所述二元化引擎将{binVali,ctxIdxi[7:0]|i<w_num[1:0]}写入下级先入先出队列,其中i为0或1或2,a[b:c]形式的变量表示编码区间为b+1的比特信号a,a为信号的名称,b为最高位编号,为c最低位编号。

其中,所述二元化引擎的电路结构具有如下特征:1)执行所述系数扫描的过程中,所述电路读取4x4块DCT/Q系数,并将该系数按线性地址递增顺序写入乒乓存储结构内;2)在执行所述系数扫描的过程中同时记录15比特的标志矢量以及最后非零系数的索引值;3)所述标志矢量及最后非零系数的索引值用于标志图significant_map的二元化编码,所述标志图是在编码过程中根据标志矢量寄存器与最后非零系数的索引值动态产生的;4)对4x4块DCT/Q系数的二元化编码过程中,通过所述标志矢量及最后非零系数的索引值,所述电路一步生成非零系数的读取地址。

其中,所述上下文模型引擎的上下文读取和更新操作采用标准单元库中的寄存器实现,并采用如下设计:将所述上下文模型引擎的上下文模型根据其所属的片模式进行分类,属于同一片模式的上下文存储在2读2写端口的存储单元中,而其它的上下文模型信息存储在单端口的片上内存中,当片模式改变时,对2读2写端口的存储单元中的内容进行更新,在更新过程中,每周期更新2条上下文。

其中,所述并行归一化引擎由两个单周期归一化引擎级联组成,每周期同时处理两比特的归一化处理,其输入信号包括:binVal0、valMPS0、pStateIdx0[5:0]、valid0、mode0、binVal1、valMPS1、pStateIdx1[5:0]、valid1以及mode1;其中,binVal0和binVal1表示被处理比特的值;valMPS0和valMPS1表示大概率符号值;pStateIdx0[5:0]和pStateIdx1[5:0]表示概率索引值;valid0和valid1表示被处理比特是否有效;mode0和mode1表示被处理比特的编码模式,0为标准编码模式,1为旁路编码模式,输入信号的后缀0和1用于区分被处理比特的顺序;并行归一化引擎的输出信号为OB0[7:0]、β0[2:0]、L0[6:0]、we0、OB1[7:0]、β1[2:0]、L1[6:0]及we1;当{wei|i∈{0,1}}为1时,相应的输出OBi[7:0]、βi[2:0]和Li[6:0]被写入下级2写1读先入先出队列,i=0或1,用于下级引擎生成RBSP码流。

其中,所述并行归一化引擎包括:OB[7:0]寄存器,用于存储当前变量OB值;R[8:0]编码区间寄存器,用于存储当前编码区间变量值;L[9:0]编码下限寄存器,用于存储当前编码下限变量值;所述2写1读先入先出队列的深度为10,每项为18比特位宽;标准模式下,位段[17:11]存储编码下限更新后的高7位;旁路模式下,位段[17]存储编码下限更新后的最高位,位段[16:11]无意义;位段[10:3]存储OB[7:0];位段[2:0]存储变量β[2:0];其中OB[7:0]与β[2:0]存储的内容为并行归一化引擎的输出信号OBi[7:0]和βi[2:0],i=0或1;每周期所述并行归一化引擎在队列尾最多写入两比特归一化后的输出结果,同时,当队列不为空时,RBSP码流生成引擎读出头指针所指向的存储项;其中位段[b:c]表示编码区间为c到b的位段,b、c为整数,b为最高位编号,为c最低位编号。

其中,所述RBSP码流生成引擎为可在每周期产生多位输出比特的输出码流产生引擎,所述输出码流产生引擎包括前导比特输出引擎和后缀比特输出引擎,当2写1读先入先出队列非空时,输出码流产生引擎根据2写1读先入先出队列头项的信息生成RBSP码流,所述前导比特输出引擎用于根据2写1读先入先出队列头项最高位的值以及所存储的变量OB[7:0]的值,生成由一比特最高位的值以及后续OB[7:0]位比特值为最高位取反的字符串;所述后缀比特输出引擎用于产生由输入位段[16:16-β[2:0]+1]组成的比特串,并输入到RBSP码流,其中,写入到RBSP码流中的数据以字节方式对齐输出。

此外,本发明还提供了一种利用上述电路实现的基于H.264/AVC中CABAC的并行编码方法,包括以下步骤:

所述二元化引擎对并行执行DCT/Q系数扫描和对DCT/Q系数的二元化编码;

所述上下文模型引擎根据所述3写2读先入先出队列的输出信号执行每周期两比特的上下文读取及更新操作;

所述并行归一化模型引擎分别执行标准编码和旁路编码模式下对编码区间和编码下限的归一化操作;

所述RBSP码流生成引擎根据2写1读先入先出队列的输出信号产生RBSP输出码流。

(三)有益效果

与现有技术相比,本发明能够产生如下有益效果:

首先,提出了二元化加速引擎设计,每周期可产生1至3比特的二元化输出码流,具体来说,4x4块DCT/Q系数的二元化处理基于乒乓存储结构,系数扫描和二元化编码并行工作,从而满足了2比特每周期的恒定处理速率,而且二元化引擎与后级处理引擎间以6级3写2读先入先出队列连接,此结构可均衡前后级的处理速率,从而二元化引擎可以匹配后续归一化引擎及RBSP码流生成引擎的处理速度;

其次,任何比特的归一化均用组合电路进行处理,避免了现有技术中多周期归一化操作所引入的流水线停滞;将并行归一化处理与RBSP码流产生操作分解为两级流水线,并行归一化引擎与RBSP码流产生引擎间以10级2写1读先入先出队列连接,此结构可有效避免流水线停滞;

最后,所提出的电路实现的吞吐率恒定,为2比特每时钟周期,其吞吐率与所处理比特流中小概率符号发生概率无关,这解决了CABAC算法中编码区间和编码下限归一化与码流产生过程的相关性所引发的计算瓶颈。

附图说明

图1为H.264/AVC的现有CABAC系统框图;

图2为本发明实施例的电路整体架构框图;

图3为本发明实施例的基于乒乓存储的并行二元化引擎的电路图;

图4为本发明实施例的并行归一化引擎的电路图;

图5为本发明实施例的标准模式编码区间和编码下限更新引擎的电路图;

图6为本发明实施例的标准模式跟随比特更新引擎中生成变量OB及变量β的电路图。

具体实施方式

下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。

本发明可应用于H.264/AVC中实时CABAC编码引擎的设计与实现。

依据本发明实施例的电路整体架构框图如图2所示。首先说明CABAC编码器顶级流水线结构及各级流水线的输入输出变量的定义:

CABAC编码器采用4级流水线结构,自上而下包括:(1)二元化引擎;(2)上下文模型引擎;(3)并行归一化引擎以及(4)RBSP码流生成引擎。为维持各流水线引擎间吞吐率的平衡,二元化引擎与上下文模型引擎之间采用6存储单元的3写2读先入先出队列连接,并行归一化引擎与RBSP码流生成引擎之间采用10存储单元的2写1读先入先出队列连接。下面依次介绍各级流水线:

第一级流水线为二元化引擎,其来自并行编码模块(即CABAC编码器)外部的输入信号包括:

1.Cur.SE:被处理的语义元素值;

2.NeighborSEs:与被处理语义元素相关的邻居语义元素值;

3.Ctrl.Info:相关的二元化引擎控制信息,包括模块复位信号及编码使能信号。

二元化引擎的来自3写2读先入先出队列的输入信号包括:

1.hole_num[2:0]:表示当前3写2读先入先出队列中的空单元数。hole_num[2:0]表示编码区间为3比特信号,最高位编号为2,最低位编号为0,其它具有相同形式的变量采用上述表示方法定义,例如,ctxIdx[7:0]表示编码区间为8比特信号,最高位编号为7,最低位编号为0。

二元化引擎输出到3写2读先入先出队列的信号包括:

1.binVal0:本周期所生成的第0个比特的值;

2.ctxIdx0[7:0]:本周期所生成的第0个比特的上下文索引值,其中ctxIdx0[7:0]等于255则表明binVal0采用旁路编码模式;

3.binVal1:本周期所生成的第1个比特的值;

4.ctxIdx1[7:0]:本周期所生成的第1个比特的上下文索引值,ctxIdx1[7:0]等于255则表明binVal1采用旁路编码模式;

5.binVal2:本周期所生成的第2个比特的值;

6.ctxIdx2[7:0]:本周期所生成的第2个比特的上下文索引值,ctxIdx2[7:0]等于255则表明binVal2采用旁路编码模式;

7.w_num[1:0]:从第0个比特开始,写入到3写2读先入先出队列的数目:w_num[1:0]为0,表示不写入任何数据;w_num[1:0]为1,表示binVal0和ctxIdx0[7:0]写入尾指针所指的存储单元;w_num[1:0]为2,表示binVal0和ctxIdx0[7:0]写入尾指针所指的存储单元,且binVal1和ctxIdx1[7:0]写入尾指针加一所指的存储单元;w_num[1:0]为3,表示binVal0和ctxIdx0[7:0]写入尾指针所指的存储单元,且binVal1和ctxIdx1[7:0]写入尾指针加一所指的存储单元,且binVal2和ctxIdx2[7:0]写入尾指针加二所指的存储单元。

第二级流水线为上下文模型引擎,其来自3写2读先入先出队列的输入信号包括:

1.item_num[2:0]:表示当前3写2读先入先出队列中有效比特数。

2.binVal0:3写2读先入先出队列头指针指向单元的比特值;

3.ctxIdx0[7:0]:3写2读先入先出队列头指针指向单元的上下文索引值;

4.binVal1:3写2读先入先出队列头指针加一指向单元的比特值;

5.ctxIdx1[7:0]:3写2读先入先出队列头指针加一指向单元的上下文索引值。

上下文模型引擎输出到3写2读先入先出队列的信号包括:

1.r_num[1:0]:表示从3写2读先入先出队列中的读出的单元数。

上下文模型引擎输出到并行归一化引擎的信号后缀为0,该信号由读入的第一个比特值及相关的上下文索引值产生,包括:

1.valid0:表示读取的第一个比特是否有效(1:有效,0:无效);

2.binVal0:第一个比特值;

3.mode0:当mode0=0,表示第一个比特采用标准编码模式进行编码;当mode0=1,表示第一个比特采用旁路编码模式进行编码;

4.pStateIdx0[5:0]:第一个比特为大概率符号的概率索引值;

5.valMPS0:第一个比特对应的大概率符号的二进制值。

上下文模型引擎输出到并行归一化引擎的信号后缀为1,该信号由读入的第二个比特值及相关的上下文索引值产生,包括valid1,binVal1,mode1,pStateIdx1[5:0]以及valMPS1,其含义与上述信号相同。

第三级流水线为并行归一化引擎,其输出到2写1读先入先出队列的信号包括:

1.we0:当we0等于1,表示第一比特归一化会产生RBSP码流,输出OB0[7:0]、β0[2:0]以及L0[6:0]的值需写入2写1读先入先出队列;当we0等于0,表示没有产生RBSP码流,输出OB0[7:0]、β0[2:0]以及L0[6:0]的值不会写入2写1读先入先出队列;

2.L0[6:0]:用于产生RBSP码流;

3.OB0[7:0]:用于产生RBSP码流,表明L0[6](表示L0[6:0]的最高位)后跟随的值为(为L0[6]的非运算)的比特个数;

4.β0[2:0]:用于产生RBSP码流,其值非零则表明L0[5:6-β0[2:0]]将输出到RBSP码流;

5.we1:当we1等于1,表明第二比特归一化会产生RBSP码流,输出OB1[7:0]、β1[2:0]以及L1[6:0]的值将写入2写1读先入先出队列;当we1等于0,表明没有产生RBSP码流,输出OB1[7:0]、β1[2:0]以及L1[6:0]的值不会写入2写1读先入先出队列;

6.L1[6:0]:用于产生RBSP码流;

7.OB1[7:0]:用于产生RBSP码流,指明L1[6]后跟随的值为的比特个数;

8.β1[2:0]:用于产生RBSP码流,其值非零则表明L1[5:6-β1[2:0]]也将输出到RBSP码流;

第四级流水线为RBSP码流生成引擎,其来自2写1读先入先出队列的输入信号包括:

1.valid:表示2写1读先入先出队列头指针所指向的存储单元中的数据是否有效(1:有效;0:无效);

2.L[6:0],OB[7:0]与β[2:0]为头指针所指向的存储单元中的数据;RBSP码流生成引擎输出到2写1读先入先出队列的信号包括:

1.re:读使能信号,re为1时,头指针所指向的存储单元中的数据从队列中被弹出。

RBSP码流生成引擎输出到RBSP码流的信号为:

1.RBSP[7:0]:生成的以字节对齐的RBSP码流;

2.RBSP_we:输出码流写使能信号,为1时表明当前输出端口RBSP[7:0]数据有效,否则,输出端口RBSP[7:0]数据无效。

以下结合图3~6说明本发明电路的工作原理。

4x4块DCT/Q系数的二元化电路结构如图3所示。4x4块DCT/Q系数的二元化处理分为两个阶段:扫描阶段和二元化编码阶段。在扫描阶段,Zig-Zag(锯齿形)扫描地址产生电路按Zig-Zag顺序生成外部4x4块DCT/Q系数存储器读取地址,读出的系数经过逻辑电路产生其绝对值减一(abs_minus1[14:0])及其符号(sign),abs_minus1[14:0]和sign写入二元化引擎内部的乒乓存储单元(存储单元0或存储单元1)。由于DCT/Q系数的绝对值小于215,所以当舍弃其绝对值减一的进位值,只保留其低15位的情况下,当系数为0时,abs_minus1[14:0]等于215-1。本设计以此判断原系数是否为0,且生成的标志位写入15位的“标志矢量寄存器”,同时此标志位也是“最后非零系数索引值”寄存器的时钟使能信号。

对一个4x4块DCT/Q系数扫描完成后,进入二元化编码阶段。在编码阶段首先是对标志图(significant_map)进行二元化处理。在本发明中,significant_map的产生是在编码过程中根据“标志矢量”寄存器与“最后非零系数索引值”寄存器动态产生的(可参考图3)。标志矢量与最后非零系数索引值作为输入信号送入“significant_map二元化引擎”,此引擎每周期最多可产生3比特的二元化输出,其工作原理如下:“significant_map二元化引擎”使用“当前标志位索引”变量指明本周期二元化操作所对应的标志矢量中开始的索引地址,其对应的标志位为“标志位0”,“当前标志位索引”加一对应的标志位为“标志位1”,“当前标志位索引”加二对应的标志位为“标志位2”。此外,在“significant_map二元化引擎”中还存在一个变量“前周期最后非零标志遗留”,当此变量为1时表明:在上周期二元化编码过程中,最后一位标志编码输出为1且其“最后非零标志”还没有写入3写2读先入先出队列,因此需要在当前周期将此标志输出。根据“前周期最后非零标志遗留”,以及“标志位0”和“标志位1”的值,输出二元化比特的结果分五种情况处理:

1.“前周期最后非零标志遗留”等于0,“标志位0”等于0,“标志位1”等于0:输出binVal0及ctxIdx0[7:0]由“标志位0”决定,输出binVal1及ctxIdx1[7:0]由“标志位1”决定,输出binVal2及ctxIdx2[7:0]由“标志位2”决定;

2.“前周期最后非零标志遗留”等于0,“标志位0”等于0,“标志位1”等于1:输出binVal0及ctxIdx0[7:0]由“标志位0”决定,输出binVal1及ctxIdx1[7:0]由“标志位1”决定,输出binVal2及ctxIdx2[7:0]是“标志位1”的“最后非零标志”,如果“当前标志位索引”加一等于“最后非零系数索引值”,binVal2等于1,否则binVal2等于0;

3.“前周期最后非零标志遗留”等于0,“标志位0”等于1:输出binVal0及ctxIdx0[7:0]由“标志位0”决定,输出binVal1及ctxIdx1[7:0]是“标志位0”的“最后非零标志”,如果“当前标志位索引”等于“最后非零系数索引值”,binVal1等于1,否则binVal1等于0,输出binVal2及ctxIdx2[7:0]由“标志位1”决定;

4.“前周期最后非零标志遗留”等于1,“标志位0”等于0:输出binVal0及ctxIdx0[7:0]是“标志位0”前一位的“最后非零标志”,如果“当前标志位索引”减一等于“最后非零系数索引值”,binVal0等于1,否则binVal0等于0,输出binVal1及ctxIdx1[7:0]由“标志位0”决定,输出binVal2及ctxIdx2[7:0]由“标志位1”决定;

5.“前周期最后非零标志遗留”等于1,“标志位0”等于1:输出binVal0及ctxIdx0[7:0]是“标志位0”前一位的“最后非零标志”,如果“当前标志位索引”减一等于“最后非零系数索引值”,binVal0等于1,否则binVal0等于0,输出binVal1及ctxIdx1[7:0]由“标志位0”决定,输出binVal2及ctxIdx2[7:0]是“标志位0”的“最后非零标志”,如果“当前标志位索引”等于“最后非零系数索引值”,binVal2等于1,否则binVal2等于0;需要注意的是:上述分五种情况处理的方法中所提到的输出信号并不是都写入到3写2读先入先出队列,具体写入binVali和ctxIdxi[7:0]的个数由w_num[1:0]控制。

在abs_minus1[14:0]及sign二元化处理过程中,“标志矢量”寄存器与“最后非零系数索引值”寄存器共同生成存储在“系数队列”中的非零系数的读取地址。“系数队列读取地址”的初始值设置为“最后非零系数索引值”,此时“系数队列读取地址”指向“系数队列”中最后一个最后非零系数。在初始阶段,“标志矢量寄存器”右移n位,n等于15减去“最后非零系数索引值”。当完成一个系数的abs_minus1[14:0]及sign二元化处理后,系数队列读取地址减去tz+1(tz为当前“标志矢量寄存器”中尾随零的数量,即尾随的连续0比特的数目),这样系数队列读取地址就指向“系数队列”中下一个非零系数。而后,“标志矢量”寄存器右移tz+1位。此过程一直持续下去,直到当前系数队列读取地址的值小于tz+1。

上下文模型每周期可处理2比特的上下文读取和更新操作,因此实现上下文模型的存储电路具有2读端口和2写端口,采用标准单元库中的寄存器实现,因此具有功耗和芯片面积开销较大的缺陷。为了减少上下文模型电路的功耗和芯片面积,本发明所提出的设计将399种上下文模型根据其所属的片模式(slice mode)分为3类:SI/I,SP/P和B(是H.264协议中规定的片模式类别名称)。属于同一片模式的上下文模型被存储在2读2写端口的存储单元中,而其它的上下文模型信息被存储在单端口片上内存中。当片模式改变时,需要对2读2写端口的存储单元中的上下文模型进行更新。此设计是基于片模式的改变,一般只发生在一帧/场编码的开始,并且不同片模式间共享的上下文条数为237项。更新过程中,每周期可更新2条上下文,总过程不超过69个周期。此方法可以有效地减少芯片面积开销和上下文模型存储单元的读取和更新功耗代价。

2比特并行归一化电路框图如图4所示,其中存在如下功能部件:OB[7:0]寄存器(图中为“OB”):存储当前变量OB值。R[8:0]编码区间寄存器(图中为“R”):存储当前编码区间变量值。L[9:0]编码下限寄存器((图中为“L”)):存储当前编码下限变量值。

编码区间和编码下限的更新引擎包括“L&R更新引擎0”和“L&R更新引擎1”。“L&R更新引擎0”用于第一比特(比特0)的编码区间和编码下限的更新工作,更新后的输出为R′0[8:0]和L′0[10:0]。此更新引擎工作于标准(mode0≡0,“≡”表示“恒等于”)和旁路(mode0≡1)两种模式。当工作于标准模式时,其输出R′0[8:0]和L′0[10:0]的定义为:

其中,RLPS为根据R[8:0]和pStateIdx[5:0]的值按照参考文献1中的定义查表所得,RMPS=R-RLPS

当工作于旁路模式时,R′0[8:0]等于其输入R[8:0],L′0[10:0]的定义为:

“L&R更新引擎1”用于执行第二比特(比特1)的编码区间和编码下限的更新工作,其输入的编码区间和编码下限是R′0[8:0]和L′0[10:0]归一化后的结果,来自于“归一化引擎0”的输出R″0[8:0]和L″0[10:0],其它的输入包括与比特1相关的信号,包括binVal1,mode1,pStateIdx1[5:0]以及valMPS1。“L&R更新引擎1”的更新算法与“L&R更新引擎0”相同。

编码区间和编码下限的归一化引擎包括“归一化引擎0”和“归一化更新引擎1”。归一化引擎有两种工作模式:标准模式和旁路工作模式。当归一化引擎工作在标准模式,其电路框图如图5所示。当归一化引擎工作在旁路模式,如果L′[10]≡1,定义L″[9:0]≡L′[9:0],否则,定义L″[9]=0且L″[8:0]≡L′[8:0]。

OB更新引擎包括“OB更新引擎0”和“OB更新引擎1”。OB[7:0]更新引擎同样具有两种工作模式:标准模式和旁路工作模式。当其工作在标准模式,变量OB[7:0]和β[2:0]的更新电路框图如图6所示,其中变量n[2:0]为图5的一个输出,变量σ为前导1计数器的输出;当其工作在旁路模式,β[2:0]恒等于0,对于变量OB[7:0]的更新分两种情况:当输入L′[10:9]≡01,其输出OB′[7:0]=OB[7:0]+1;否则,OB′[7:0]=0。“OB更新引擎0”的输入L′[10:0]来自L′0[10:0],输入n[2:0]来自n0[2:0],输入OB[7:0]来自OB[7:0]寄存器的输出,其输出为OB′0[7:0]和β0[2:0]。“OB更新引擎1”的输入L′[10:0]来自L′1[10:0],输入n[2:0]来自n1[2:0],输入OB[7:0]来自OB′0[7:0],其输出为OB′1[7:0]和β1[2:0]。

输出写使能信号we0在如下情况中等于0:(1)相应的输入信号valid0≡0,即输入比特0无效;(2)当输入比特采用标准模式编码时,L′0[9]≡0,且L′0[8:9-n0[2:0]]中没有为0的比特;(3)当输入比特采用旁路模式编码时,L′0[10:9]≡01。除上述情况外,we0等于1。当we0等于1时,输出β0[2:0],OB0[7:0]及L0[6:0]写入下级2写1读先入先出队列的尾指针所指的存储单元。

输出写使能信号we1在如下情况中等于0:(1)相应的输入信号valid1≡0,即输入比特1无效;(2)当输入比特采用标准模式编码时,L′1[9]≡0,且L′1[8:9-n1[2:0]]中没有为0的比特;(3)当输入比特采用旁路模式编码时,L′1[10:9]≡01。除上述三种情况外,we1等于1。当we1等于1时,输出β1[2:0],OB1[7:0]及L1[6:0]将写入下级的2写1读先入先出队列,所写入的存储单元的位置与we0的值有关:如果we0等于0,写入尾指针所指的存储单元,否则写入尾指针加一所指的存储单元。

输出信号L0[6:0]与比特0的编码模式有关,对于标准编码模式,L0[6:0]等于L′0[9:3];否则,L0[6:0]等于L′0[10]。输出信号L1[6:0]与比特1的编码模式有关,对于标准编码模式,L1[6:0]等于L′1[9:3];否则,L1[6:0]等于L′1[10]。

valid0或valid1等于1时,寄存器OB[7:0],R[8:0]及L[9:0]中的值需要更新,当valid1等于1时,OB′1[7:0],R″1[8:0]及L″1[9:0]的值用于更新上述寄存器;否则,OB′0[7:0],R″0[8:0]及L″0[9:0]的值用于更新上述寄存器。

2写1读先入先出队列的深度为10,每项为18比特位宽:位段[17:11]为变量L[6:0],标准模式下,存储编码下限更新后的高7位,旁路模式下,位段[17]存储编码下限更新后的最高位,位段[16:11]无意义;位段[10:3]为变量OB[7:0];位段[2:0]为变量β[2:0]。

RBSP码流生成引擎从2写1读先入先出队列的头指针所指的存储单元取出变量L[6:0],β[2:0]以及OB[7:0],按字节对齐方式产生RBSP码流。比特生成引擎的数据通路电路主要由8比特的缓冲存储器buf[7:0]、前导比特输出引擎和后缀比特输出引擎组成。前导比特输出引擎的输入信号为L[6]和OB[7:0],其功能是生成比特流L[6]及后续OB[7:0]个前导比特输出引擎单周期内最多产生8比特输出,这些输出比特与缓冲存储器buf[7:0]中缓存的比特拼接后,将前8比特写入RBSP码流,剩余的比特重新存入buf[7:0];后缀比特输出引擎的输入信号为L[5:0]和β[2:0],当β[2:0]的值不等于0时,后缀比特输出引擎产生码流L[5:6-β[2:0]],此输出与缓冲存储器中缓存的比特拼接后,如果总比特数量不小于8,将前8比特写入RBSP码流,剩余的比特重新存入缓冲存储器,否则,拼接后的比特流直接存入缓冲存储器。

以上所述仅是本发明的实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变型,这些改进和变型也应视为本发明的保护范围。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号