hevc编码芯片学习-VLSI实现
在Fan等工作中,根据特定算法设计了整像素运动估计引擎,最终的BD-Rate损失非常小,但是硬件开销比较大,搜索算法缺少灵活性,本次设计优化了硬件设计架构,
微代码 取像素
压缩
水平参考像素存储器
寻址控制 转置存储器
垂直参考像素存储器
解压缩 -> 参考像素寄存器阵列 原始像素寄存器阵列
低功耗SAD树
顶层
底层
优化后的硬件架构仍然将使用Fan等提出的4x4块的压缩和解压缩逻辑,水平-垂直参考像素存储器和低功耗32x32大小SAD引擎。本节提出的硬件设计的主要工作如下。
寻址空间逻辑支持微代码可编程
简化了参考像素更新逻辑,减少了该模块的硬件开销。
在转置逻辑中复用了参考像素阵列
引入了像素截位,减少了H-V SRAM,寄存器阵列和SAD引擎的硬件开销。
5.3.1 寻址控制逻辑
在Fan等的工作中,寻址控制逻辑是微特定整像素运动估计算法设计的,相较于其它硬件设计,BD-Rate 的损失较小,但是缺少灵活性,本节提出的IME架构重新设计了寻址控制逻辑,用以支持提出的微代码可编程的功能。支持的配置参考有搜索起始点,参考窗形状和降采样率等。当整像素运动估计的过程开始时,寻址控制模块从微代码存储器中依次读取微代码并执行。而微代码可以根据应用场景的特征提前配置好,或者根据编码过程实时更新。
5.3.2 水平-垂直参考像素存储器
为了支持二维数据复用,本次设计采用了水平-垂直参考像素存储器(H-V SRAM), 该存储器由两个SRAM组成,即水平参考像素存储器 HSRAM和垂直参考像素存储器 V SRAM。如图5-18所示。前者以行的方式存储参考像素,每一行像素存储在H SRAM的同一地址上;后者以列的方式存储参考像素,每一行像素存储在VSRAM 的同一地址上。
图5-18 水平-垂直参考像素存储器
在运动估计的过程中,如果搜索的候选点时垂直移动的,那么却是的参考像素就可以从水平参考像素存储器H SRAM中很方便的获得,相反的,如果搜索的候选点时水平移动的,那么缺失的参考像素就可以从垂直参考像素存储器V SRAM中很方便的获得。
5.3.3 参考像素阵列更新逻辑
在Fan等的设计中,参考像素寄存器阵列可以支持8个更新方向,如图5-19所示。图中的巨星代表参考像素寄存器阵列,灰色部分代表即将更新的像素,由于采用了水平-垂直参考像素存储器,无论搜索的候选点沿哪个方向移动,参考像素都能在一个周期内更新。对于Fan等设计中的参考像素更新逻辑,虽然更新候选点的参考像素时钟周期很少,特别体现在候选点沿对焦线方向移动的时候,但是这种设计会导致大量的硬件开销。
正如前面所述,本次硬件设计仍然采用了水平-垂直参考像素存储器,但是只支持3个候选点更新方向,即向上,向下和向右,如图5-19所示,因此可以大幅减少参考像素阵列更新逻辑的硬件开销。由于减少了支持的更新方向,对于带斜边的参考窗的搜索需要花费更多的时钟周期,但是同时也能搜索更多的候选点,如图5-19和图5-19所示。
5.3.4 转置寄存器
在Fan等的硬件设计中转置功能是基于SRAM实现的,设计转置时不必占用外存宽带,但是该设计仍然存在一些问题。
1 当使用ARM的Memory Compiler生成SRAM的时候,一个8bit,深度为32的SRAM需要2000左右的逻辑门数,而该转置单元需要3个尺寸的SRAM,因此总共的逻辑门数大于64k。
2 由于转置模块是基于SRAM实现的,因此该设计只能提供半双工数据传输。也就是说,从水平参考像素存储器中取像素的过程和向垂直参考像素存储器中写像素的过程是不能同时进行的。
在本节提出的硬件设计中转置模块将复用参考像素阵列,这不仅可以减少硬件代价,还可以提供双工 数据传输,为了简化转置过程的说明,我们用一个4x4块的转置过程来简单说明32x32块的转置过程。如图5-20所示。
图5-20 基于参考像素阵列的转置逻辑
在图5-20中,行序号数字表示,序列号用字母表示,不同块的像素用斜体和下划线标记,这些序号,序列号和块都从0开始计数。举例说明:1A~1D(1A,1B,1C和1D)代表第0个4x4块的第1行;0D ~3D(0D,1D,2D和3D)代表第1个4x4块的第3列;2A~2D (2A,2B,2C,2D)代表第2个4x4块的第2行。
转置的过程如下
(1)在时钟周期0,参考像素寄存器阵列下移动1行,同时i写入0个块的第0行,即像素0A~0D,接着写入第0个块的剩余3行
。
(2)在时钟周期3,第0个块的所有像素呗写入了寄存器阵列
(3)在时钟周期4,参考像素寄存器阵列右移1行,同时写入第1个块的第0行,即像素0A-0D, 接着写入第1个块的剩余3行。
(4) 同时,第0个块的第1列,也就是像素0A-3A,从寄存器阵列中被读出。接着读出第0个块的剩余3列。
(5)在时钟周期7,第一个块的所有像素都被写入寄存器阵列,且第0个块的所有像素都被转置读出了。
(6)在时钟周期8,参考像素寄存器阵列下移动1行,同时写入第2个块的第0行,即像素0A-0D 接着写入第2个块的剩余3行。
(7)同时,第1个块的第1裂,也就是像素0A-3A,从寄存器阵列中被读出,接着是第1个块的声誉3列
(8)在时钟周期11,第2个块的所有像素都被写入了寄存器阵列,并且第1个块的所有像素都被转置读出。
5.3.5 像素截位
一个基于4x4的块压缩和解压缩方案被提出来,用来减少片上参考像素存储器面积,由于采用了这项技术,每个像素相当于被截位到7bit,且引入的BD-Rate损失非常小。
本次设计中,测试了不同截位比特数对于最终BD-Rate和硬编码代价的影响
截位比特数 | 硬件门数 | BD-Rate |
0 | 210k | -- |
1 | 166k | -0.1% |
2 | 145k | 0.13% |
3 | 124k | -0.01% |
4 | 102k | 0.51% |