本文首先对视频编码器中的熵编码模块进行简要介绍,然后对三篇关于HEVC熵编码模块的低功耗设计文章进行了分析和总结,并由此引出对VVC中熵编码模块设计的思考。目录如下:
01
背 景

HEVC是ITU和MPEG专家组在2013年提出的视频编码标准,比上一代视频压缩性能提升了一倍。HM 是HEVC的官方参考软件,计算量是先前标准H.264 /AVC(高级视频编码)参考软件的3.2倍,这就导致每编码一帧所需功耗更高,这意味着研究低功耗视频编码器尤为重要[1]。
熵编码模块是 HEVC 编码器的最后一个部分。在经过预测,变换与量化,环路滤波之后产生了大量的待编码数据,这些数据将统一送入熵编码模块进行最后的压缩。这一过程主要利用了信息熵的概念熵编码利用信息间的熵冗余,对于信息量大的用长码流表示,信息量小的用短码流表示,进而压缩数据。HEVC在这一块使用了CABAC技术,也叫做基于上下文的可变长二进制算术编码技术。
CABAC的整体框架如图所示,其主要构成部分主要分为三个部分:二值化模块、上下文模块、算术编码模块。
二值化模块主要是把前级传递来的语法元素转换成二进制的形式,其中主要用到的二值化方式有K 阶指数哥伦布,截断莱斯编码,定长编码,截断一元码以及一些特定的方式。
上下文模块主要负责进行概率统计和分配。
算术编码部分则负责把二值化的输出进行算数编码产生最终的码流。这一块主要有俩个算数编码引擎,常规模式和旁路模式编码。常规模式需要经过上下文更新模块,进行LPS(低概率符号)和MPS(高概率符号)的概率更新。而旁路模式中这两者的概率固定为0.5,不需要进行上下文更新。
02
功耗测试

在数字集成电路中,信号转换会导致动态功耗。默认情况下,商业合成工具生成概率输入值,以估计电路消耗的功率。然而,这种方法通常不太能代表电路应用程序的实际输入行为。因此,需要一种准确的功率估计方法来表示实际的应用行为,并为设计者提供可靠的结果质量,以实现关键耗电块的优化。
图中显示了功耗测试的拟议方法。首先,使用商业综合工具来综合寄存器传输级(RTL)描述(如Cadence Genus Synthesis Solution和Synopsys Design Compiler)。
该工具在Verilog中生成电路网表,会产生一个标准延迟格式(SDF)文件,用于注释门和网的特定延迟以及面积、功耗和关键路径的设计报告。
然后Cadence Incisiv和Synopsys VCS等模拟工具使用以集成电路硬件描述语言(VHDL)/Verilog/SystemVerilog编写的测试台文件,模拟生成的网表,向电路提供来自标准基准图像或视频的输入数据,以生成dump文件,这个dump文件的格式一般是值更改转储或切换计数格式。
我们从视频编解码器软件中提取用作刺激的输入数据,并存储到文本文件中。通常,编解码器软件处理的视频序列来自特定于每个视频编码标准的通用测试条件(CTC)。通过这些文本文件,模拟工具接收这些值,并使用门级网表文件和SDF延迟文件执行测试台,以生成准确的切换活动。在模拟结束时,将生成转储文件,其中包含电路网表中所有节点的切换活动。最后,第二次使用相同的参数执行合成工具,但这一次将转储文件馈送给软件,以生成准确的功耗报告。
03
相关论文

HEVC标准定义了很多二值化方法,其中一些方法是通过前缀-后缀方式将其中两种方法组合而成。二值化器的主要目的是为发生率较高的元素生成较小的位表示。基本的二值化格式有:一元(U)、截断一元(TU)、截断Rice(TR)、固定长度(FL)和Exp-Golomb(EGk)。其他方法是上述或某些特定SE的自定义格式的组合。表中是一些简单的例子。
该文章使用了两个具有不同视频分辨率的测试视频序列:PeopleOnStreet(2560x1600)和BasketballDrive(1920x1080)。对于每个序列,用两种不同的配置:低延迟(LD)和随机存取(RA),以及两个QP:22和37,进行四轮测试。在HEVC软件参考16.6(HM)[13]上对序列的初始帧进行测试,结果我们获得了不同二值化方法的平均发生百分比;以及那些相同的二值化方法的平均连续调用次数。
PeopleOnStreet分析的平均结果(即四轮的平均结果)如图所示。正如预期的那样,并不是所有的二值化方法都被用于初始帧,其中,C2是查表法,C5是定长与k阶哥伦布编码的结合。从图中可以看到,FL占89%的二值化调用比例,而其他的二值化调用比例总共为11%。此外,图还示出了上述方法的全部连续调用次数:当首先调用FL方法时,在第一次调用之后,接下来很可能至少连续9次调用。对于C5方法,它倾向于被连续调用三次。
BasketballDrive序列的测试结果也如图所示。测试结果与PeopleOnStreet序列的结果比较接近:FL方法的总调用率为93%,其他方法为7%;FL的平均连续调用次数为11.25次,而C5的平均连续调用次数为2.75次。
当一个语法元素被二值化时,所有可能的方法都执行了一遍并产生对应的输出结果,最后用一个选择器选择出最佳结果。从测试结果可以看FL的连续调用次数为9到11次左右,这意味着在连续一段时间内非FL的二值化方式的计算过程是不必要的,于是我们就有了低功耗二值化模块的设计思路:去掉不必要的信号切换活动来减少动态功耗。这篇文章提到的方法是操作数隔离。
当使用操作数隔离后,每次对一个语法元素二值化时,该模块中只有一个二值化核心进行有效的信号切换,其余核心保持零输入,这就减少了不必要的动态功耗。然后,该论文将这种低功耗技术应用在了四路并行的二值化模块中,并对单路和四路的功耗节省情况进行了测试,如图所示。可以看到二值化模块的低功耗版本平均实现了20%(单路)和22%(四路并行)的功耗节约。
算法最开始需要统计输入信源符号的概率分布,由于只有“0”和“1”两种,所以概率分布可以用一维的概率区间范围表示,分布如图所示。其中大概率符号(More Probable Symbol, MPS)表明输入二进制串中出现概率比较大的符号,小概率符号(Less Probable Symbol, LPS)表明输入二进制串中出现概率比较小的符号,显然P_LPS+P_MPS=1,R表示区间范围,L表示区间下界,编码初始化的区间范围为[0,1],概率统计过程实际上表现为编码区间不断迭代子分。当下一个字符是LPS字符,那么新的区间范围R’使用LPS的区间,其值R'=R×P_LPS,同时新区间范围里的LPS和MPS字符的概率发生变化,范围也随之更新。
右上图中为四路并行的二进制算术编码框架,可以看到数据依赖很严重,对下一个bin的处理依赖于上一个bin的range、low、OB输出。图中bin的输入类型有三种:常规模式LPS、常规模式MPS、旁路模式。根据对五种序列的测试发现,这三种输入的比例如右下图所示。
1)门控时钟
为了节约动态功耗,最初有个十分简单的想法:在芯片实际工作过程中,有些信号或者功能并不需要一直开启,那么就可以在它们不用的时候将其时钟信号关闭。这样一来信号不再翻转,从而能够有效减少动态功耗,这就是门控时钟。
在不同流水级插入门控时钟,可以减少动态功耗。见图中橙色、粉色、绿色标注的寄存器,这些地方都可使用门控时钟,以在不同的输入情况下尽可能减少寄存器中信号的翻转。
2)操作数隔离
该技术针对相当大的组合逻辑(例如加法器、乘法器等)的开关/电容动态功率。如果输入在不需要的时间内保持相同的先前值,则不会切换到目标逻辑。
只有当组合逻辑足够大并且只需要在操作的某些部分激活时,这种方法才有价值(因为与门或锁存器用于阻止逻辑的输入)。
在拟议的设计中采用了基于锁存器的方法,以避免在旁路bin为当前bin类型时,在第二阶段从范围输入到减法器的任何输入变化(即不需要范围更新)。此外,第三级的两个加法器将根据其使用条件来阻止low的输入(即一个加法器仅用于常规LPS bin,而另一个加法器仅用于旁路bin)。
如图展示了使用文中提到的低功耗技术所造成的功耗节省。将论文的架构与其他论文架构进行比较,在没有任何节能技术的情况下,插入时钟选通可以节省10%~16%的功耗,而操作数隔离可以获得12%~28%的功耗增益,两者都是与基本体系结构相比的。当这两种技术同时使用时,功耗节省范围:25%~40%。
使用五个测试视频序列进行统计分析:BasketballDrive、BQTerrace、Kimono(1920x1080–全高清)、PeopleOnStreet和Traffic(2560x1600–WQXGA);测试配置:LD(即low delay模式)和RA(random-access);QP:22,37。
观察测试结果,我们发现常规bin连续出现次数约为11.87次。而旁路bin则平均连续出现4.55次。按类别将常规bin分开,MPS bin往往连续出现3.27次,而LPS bin则连续出现1.4次。
一个初步结论是,旁路bin确实分组出现。由于它们彼此之间的数据依赖性较低,如果可以采用一种可能的方式同时处理其中的许多数据,并且总体电路时钟频率几乎没有退化,这可能会导致吞吐率的增加。此外,对于不同的视频序列和QP值,该速率变化很大(例如,和服序列平均达到几乎八个连续的旁路bin出现)。还值得注意的是,低QP值往往会有更大的旁路bin突发(即质量下降更少)。
该论文低功耗的实现与上一篇相似,区别在于多了多路旁路模式的结构,以及对应这个结构的操作数隔离设计。
结果表明低功耗技术,使用真实视频序列作为刺激,实现了14.26%的节能。
04
总结思考
考虑到以上的论文都是先针对真实的视频输入激励来测试输入bin的类型以及出现的次数。对于VVC,新一代视频编码标准,考虑先对其输入bin的类型做一个简单的测试。
本次测试使用的VVC的参考软件VVenC[5]进行输入bin的导出工作,并标明输入类型:常规或旁路。测试序列有四种不同分辨率的序列:BasketballPass(416x240)、RaceHorsesC(832x480)、Kimono(1920x1080)、Traffic(2560x1600)。QP设置为22,测试8帧。然后对导出的bin进行统计,统计结果如上图所示。
结果显示,常规模式与旁路模式的比例与HEVC熵编码比较相似。那么下一步可以考虑测试连续出现次数,然后将以上三篇论文提到的低功耗技术:门控时钟和操作数隔离,应用于VVC熵编码中。
根据硬件架构的艺术这本书中描述,低功耗的设计分为下图中的四个层次:系统级、体系结构级、寄存器传输级和晶体管级。
寄存器传输级的主要低功耗技术主要有时钟门控、格雷码状态机、操作数隔离、资源共享、总线反转编码等。
以上我们讨论的三篇论文中使用的方法是其中的时钟门控和操作数隔离技术,这两种方案的实现前提都是基于真实视频输入激励产生的统计信息。我对VVC的熵编码输入bin类型比例进行统计,确认了以上两种低功耗技术的可行性,下一步可以考虑测试连续出现次数,然后在具体的硬件代码中进行以上技术的实现与测试。
关 注 我 们 
实验室网站:http://viplab.fudan.edu.cn/
OpenASIC官方网站:www.openasic.org
知乎专栏:http://zhuanlan.zhihu.com/viplab
微信公众号:OpenASIC
继续阅读
阅读原文