基于FPGA的HEVC去方块滤波硬件设计

2023-03-07 10:02陈焯淼陈志峰汪家华
电视技术 2023年1期
关键词:方块亮度时钟

陈焯淼,陈志峰,陈 建,汪家华

(福州大学 物理与信息工程学院,福建 福州 350108)

0 引 言

当前,基于超高清视频的多媒体娱乐需求快速增长,对视频编码技术提出了更高的要求。高效视频编码(High Efficiency Video Coding,HEVC)是视频编码专家组(Video Coding Experts Group,VCEG)和运动图像专家组(Moving Picture Expert Group,MPEG)组成的视频编码联合协作组(JCT-VC)共同开发的一种视频编码标准[1]。与现有的H.264/AVC标准相比,HEVC标准在相同的视觉质量下,降低了50%的比特率[2]。块效应是基于块的视频压缩存在的最为明显的伪影问题,这是因为图像块的变换和量化是相互独立的。为此,H.265/HEVC标准沿用了H.264/AVC标准的环路滤波技术,采用去方块滤波器来改善主客观视频质量。由于必须对块边界附近的所有像素进行滤波,HEVC标准中的去方块滤波算法仍然有很高的计算复杂度,约占HEVC视频解码器计算复杂度的20%[3]。因此,新的视频编码标准的硬件实现对于行业应用来说非常重要。

文献[4]—文献[10]中,已有学者提出了一些关于去方块滤波硬件实现的研究工作。HSU等人提出一种新颖的内存结构和数据访问形式,设计了一个双行DBF滤波器[4]。TANG等人提出一种具有两个垂直和两个水平边界的8×8块的无SRAM去方块滤波架构[5]。CHRISTOPHER等人提出一种用于去方块滤波器的高效资源共享硬件架构。该架构利用四个边缘滤波器并行过滤8×8块的两个边缘[6]。AYADI等人针对亮度32×32编码块内的所有块边界提出了一种新的DBF硬件架构[7]。SHEN等人提出一种基于1/4LCU的隔行存储组织来解决DF垂直和水平过滤之间的数据依赖性,并实现了去方块滤波与SAO联调[8]。文献[9]设计了一个单边缘去方块滤波器,每帧视频被分成32×32个块,通过流水线的方式再将其分割成8×32个像素的块来处理,但是大幅度增加了外部存储带宽。文献[10]提出一种高通量、低功耗的DBF架构。该架构每个时钟能够处理64个样本,在两条并行数据路径中处理亮度和色度分量。

上述一些研究工作为了追求高并行、高效率而大大增加了面积。本文重点研究一种高效的去方块滤波器在现场可编程逻辑门阵列(Field Programmable Gate Array,FPGA)上的实现,它以极少的资源消耗,通过流水线的形式来提高工作效率;重复利用重构RAM来输入输出数据,按滤波顺序进行滤波。经计算,处理一个最大编码单元(Largest Coding Unit, LCU)共需要907个周期。

1 算法原理

去方块滤波过程共分为4个步骤,其流程如图1所示,详细介绍如下。

图1 去方块滤波流程

(1)确定滤波边界。去方块滤波只对8×8的PU(Prediction Unit,预测单元)或TU(Transform Unit,变换单元)块边界进行滤波,因此需遍历每个CU(Coding Unit编码单元),检查每个CU中的8×8边界是否是PU或者TU的边界。每个边界都有一个滤波标志,根据PU,TU的划分模式,将需要滤波的边界置为1。

(2)计算边界强度(Boundary Strength,BS)。根据编码参数初步判断,边界强度有0,1,2三种。实际滤波垂直边界是以8×4为基本单位,水平以4×8为基本单位。根据每4×4块的编码参数来确定边界的滤波强度。

(3)滤波开关决策。根据边界两边像素值的变化程度判断边界是否需要滤波。若边界两边区域像素本身就不平坦,则在边界处像素的跳跃自然被认为正常的,因此不需要滤波。而滤波强弱选择则根据边界两边像素值的变化率来判断滤波强度。

(4)滤波。滤波分为亮度分量的强滤波、亮度分量的弱滤波以及色度分量的滤波。亮度分量的强滤波,需对边界两边各3个像素进行修正;亮度分量的弱滤波,需对边界两边1~2个像素进行修正;色度分量的滤波是指,当获取边界强度模块判定BS=2时,色度分量需要进行滤波操作,需对边界两边各1个像素进行修正。

2 硬件设计

2.1 去方块滤波硬件框架

DBF的总体架构如图2所示。整体可分为主控制模块、滤波模块及数据缓存模块。主控模块包括状态机控制和地址生成模块。其中,状态机协调整个DBF模块的工作过程,控制流水线的翻转信号(Is_ver)、亮度/色度转换信号(Is_luma)及空闲/工作状态信号,地址生成模块根据状态机状态以及计数器的计数值生成像素和编码参数在存储器中的地址。

图2 去方块滤波硬件架构

滤波模块包括编码参数计算、边界强度计算、滤波决策及选择性滤波等子模块。其中,滤波决策子模块根据编码参数计算出的边界处像素值差别的判决门限(tc)、滤波开关的判决门限(β)和边界强度计算出的BS,判断是否需要进行强、弱滤波,还是不滤波;选择性滤波子模块对来自输入缓存(buffer)的P和Q像素块,同时进行强滤波、弱滤波或不滤波操作。该设计的滤波顺序为:亮度垂直→亮度水平→色度垂直→色度水平,并根据滤波决策结果选择对应的滤波种类或未滤波数据输出。

数据缓存模块又可以分为像素缓存(data_ram)和编码参数(param_ram)缓存。其中,data_ram用来存放像素,做完垂直滤波后的像素将重新写回data_ram中,用于下一阶段的水平滤波;param_ram用来存放编码参数,在输入像素的同时输入编码参数,用于计算阈值和边界处像素值差别的判决门限以及边界强度BS。

2.2 边界判断与边界强度计算模块的硬件实现

去方块滤波架构中,边界判断和边界强度计算模块是较复杂的计算单元,在滤波数据准备好前就需要得到边界强度的值。而由第1节内容可知,计算边界强度前还需要确定滤波边界,具体的电路结构如图3所示。

图3 边界判断&边界强度计算电路结构

首先,将cu、tu和pu的划分结构都整合到查找表中,然后根据输入的cu_depth(cu深度)、tu_depth(tu深度)、pu_partition(pu划分方式)和Q块的地址来判断该4×4块是否有滤波边界。值得注意的是,Q块的边界情况与对应的P块是一致的,因此只需要判断一个4×4块的边界情况即可。然后,根据滤波边界结果来计算对应的BS值。对于没有边界的块,BS直接置0;对于有滤波边界的块,还需根据P块和Q块对应的预测模式(pred_mode_p和pred_mode_q)、非零变换系数标志位(cbf_p和cbf_q)和运动矢量(mv_p和mv_q)来进一步计算BS的值。

2.3 流水线控制时序

以64×64的编码树单元(Coding Tree Unit,CTU)的DBF处理为例,数据输入、编码参数计算、滤波操作、数据输出组成的四级流水线如图4所示。去方块的数据处理单元通常是4×4大小的P块和Q块,为了处理方便,每个时钟周期读取一个P块或一个Q块数据,即每个时钟能读取16个像素,读取一个P块和Q块的数据共需要花费2个时钟。

图4 流水线示意图

在读取像素的同时读取编码参数,并在一个时钟内计算得到在滤波阶段所需要的参数(BS、β、tc)。在滤波阶段获取到参数之后,消耗2个时钟得到滤波后的数据并更新到P,Q块输出寄存器中。由于P,Q块输出寄存器中的数据是同时更新,需再等待一个时钟后寄存器的数据按输入顺序串行输出。这样输入到输出共花了5个时钟。为了节省资源消耗,将垂直滤波后的像素根据地址生成模块中的地址重新写回重构RAM中,用于下一阶段的水平滤波,做完水平滤波后再输出到外部。

3 实验结果

本文提出的DBF硬件架构是在Verilog中设计的,并使用Altera FPGA开发平台进行综合与时序分析。其中,选用QuartusⅡ16.1为EDA开发工具,所选择的器件型号为Altera Arria10 10AS066N3F40E2SG。通过RTL仿真对并行体系结构进行了测试和验证,得到了仿真结果,完全符合软件代码的结果。表1将实验结果与之前的工作进行了对比。首先,所提出的硬件架构能够达到215 MHz的工作主频,在907个时钟周期内实现了去方块滤波器的所有功能。文献[4]在768个时钟周期内仅实现了BS计算和滤波操作,而文献[7]花费了2 252个时钟周期仅实现了亮度滤波操作;其次,所提架构仅消耗了5 212个查找表和1 291个寄存器,与文献[4]和[7]相比,架构在逻辑资源利用上有更大的优势,查找表和寄存器资源不到文献[7]的十分之一。

表1 与先前工作的比较(CTU尺寸64×64)

4 结 语

本文提出了一种高效的HEVC去方块滤波器的硬件架构。因其采用垂直滤波和水平滤波模块的共用结构,复用了数据存储结构,合理利用了FPGA片上资源,在提高系统吞吐量的同时,大大缩减了资源消耗。实验综合结果表明,本文的设计可以以215 MHz的时钟频率对1 080p@60fps视频实现实时去方块滤波,但吞吐率并不是最优。如何提高该架构的吞吐率,是下一步的研究目标。

猜你喜欢
方块亮度时钟
有多少个方块
别样的“时钟”
不一样的方块桥
古代的时钟
谜题方块
亮度调色多面手
亮度一样吗?
有趣的时钟
基于斩波调制的LED亮度控制
人生的亮度