本文主要介绍熵编码算数编码的硬件设计的一篇经典文章。
文章主要提出了三个创新点:
1. 利用LPS更新的数据依赖的不完全性加速二进制算数编码(cabac的瓶颈),提出了PN和HPC技术;
2. 进一步利用依赖不完全性,提出LHrLPS;
3. 提出了BPBS使得常规和旁路之间并行。
首先介绍最基本的算术编码硬件架构,一般是四路并行的四级流水线。右图是4-bin BAE整体硬件架构图,左图是一路BAE的示意图,第一级流水线负责根据state得到四个并行的lpsrange,第二级流水线完成range的更新,第三级流水线负责low的更新,第四级流水线输出low。很显然,range更新的这级流水线是算术编码的关键路径。
文章第一个创新点是PN和HPC。PN的技术是:如果当前bin == LPS 的时候,重归一化即是对于lpsrange的重归一化。所以可以把lps重归一化提前到前一级流水线。经过PN之后,可以发现如果bin是LPS,那么range的关键路径就会非常短,那么就紧接着提出了HPC技术,也就是右边这张图。他将原来的四路FU换成了三路FL + 一路LU,得到了图b。为了节省面积,设计了图c。这样虽然处理的BPCC(每个clock送过来的bins)少了一点,但是关键路径缩短了,最后吞吐量能够提高18.4%。
第三个技术叫LH-rLPS,基于以下发现:如果第一个bin是LPS,如果紧接着再来一个BIN,那么电路的结构如图a所示。这个时候可以发现LUT2因为输入的range其实都是通过LUT1查表得到的,另外两张表是同一张查找表,所以实际上这两张表只需要在前一级流水加一个4-4的router,即可将两张LUT合成一个表格。那么可以发现,只要前面增加了一个LU引擎,那么其实对FU的关键路径是不影响的。与基线相比,LHrLPS的吞吐量提升38.4%。另外不能无限增多lps的级联:一是LPS本身的比例比较低,连续的LPS出现的概率更加的低,二是如果增大了lu的数目,同样其他流水级也要增加并行性,导致关键路径移到low的流水级上。
旁路的bins会浪费一个fu lu或者mu。所以旁路编码其实不需要浪费算数编码引擎,将旁路编码进行单独的通路,通过并入并处模块完成常规编码和旁路编码的同步。最终熵编码算数编码的框架图如上图所示。
实验结果如表所示,PN + LH rLPS+ BPBS技术可以实现CABAC算数编码引擎实现1836Mbin/s。
关 注 我 们 
  实验室网站:http://viplab.fudan.edu.cn/
  OpenASIC官方网站:www.openasic.org
  知乎专栏:http://zhuanlan.zhihu.com/viplab
  微信公众号:OpenASIC
继续阅读
阅读原文