同样:Y01~Y03以及Y20~Y23也可将式(5)展开得到。同理可得:
由前述的变换算法分析可知,Hadamard变换和DCT变换的核心变换矩阵只存在是否乘以2的差别,因此将式(5)和(7)中的cr换成Hi,且2变为1,由此可得到Hadamard变换。
在实际的硬件电路中,乘以2和除以2的操作都可以通过移位来实现。此外,DCT正向变换与Hadamard变换在整个变换过程中不是同时进行操作,因此将 DCT正向变换与Hadamard变换结合到一起,并分时复用,以是否乘2来区分当前是哪种变换。同时采用16个残差数据同时输入,输出8位变换数据,每 2个时钟输出一个4×4块的变换结果。这样既充分利用了硬件资源,又能一次性处理一个4×4残差块的全部16个数据,确保了效率。DCT变换和 Hadamard变换的核心变换均可用快速蝶形算法实现,如图2所示。
对iDCT反向变换和iHadamard反变换的核心变换进行分析,原理与上述相似。
2.3 量化及反量化模块设计
整个量化及反量化模块全部采用乘法器、加法器和移位操作来实现,并采用FPGA内部的两个ROM来分别存放正反量化的乘法因子MF和尺度因子V。
由于变换模块输出是8位,因此量化模块采用8数据输入,每2个时钟输出一个4×4块的量化结果。反量化模块也是采用8数据输入,且每2个时钟输出一个4×4块的反量化结果。
3 时序分析及硬件调试验证
该结构设计全部采用VHDL编写程序,使用ISE环境下的XST进行综合,综合频率达到112 MHz。该设计采用的FPGA是Xilinx公司生产的XC2V1500,并使用在线逻辑分析仪Chipscope来观察量化输出数据 (quant_out_i)和反变换后的残差输出数据(inv_dct_i);图3所示为反变换后的残差输出数据(inv_dct_i)。输入数据采用数值相同的4×4块,因此输出数据也完全相同。波形显示:每次输出8个数据;对于一个宏块的16个亮度4×4块进行处理时,可在45个时钟内完成变换量化 (包括AC/DC)用于编码,在91个时钟内完成变换量化反变换反量化一系列操作得到用于重建的残差,在236个时钟内完成对一个宏块的残差数据从输入到反变换输出重建值的完整过程。
4 结 语
提出的这种H.264变换量化结构完全基于FPGA实现,每一个时钟输出8个数据,每2个时钟得出对一个4×4块处理的最终结果。一方面采用流水线操作,对16个数据并行处理提高了数据的处理速度,另一方面分时复用技术又在一定程度上节省了硬件资源。相比文献中只实现了部分功能,本文实现了从残差输入经变换量化、反变换反量化得到用于重建的残差值这一系列完整的操作,并保证了在一定的数据处理速度下对资源的优化处理,适合用于H.264.编码器硬件加速。