新闻中心

EEPW首页 > 消费电子 > 设计应用 > Motion JPEG视频压缩IP核的设计与实现

Motion JPEG视频压缩IP核的设计与实现

作者:东北大学 李大舟 吴建华时间:2008-06-25来源:电子技术应用收藏

  这种用并行加法来实现了一个简单的阵列乘法,在不使用乘法单元的条件下,是一种实现固定系数乘法的合理选择。在后来的验证中也证明, 除了在计算过程比乘法单元多两个时钟周期,电路面积有所增加以外,其计算精度和运行速度都基本与乘法单元相同。运算过程中比使用嵌入式乘法单元多出的多两个时钟周期也会因为整个二维离散余弦变换是全流水结构而只增加了流水线的铺满时间,流水线一旦铺满后,这个两个时钟周期的延迟对运算延迟的影响将不再存在。

本文引用地址:http://www.amcfsurvey.com/article/84771.htm

  阶段3:消耗3个时钟周期,完成11位有符号数的加减法操作,结果仍为11位有符号数。结果仍为11位有符号数而不是12位有符号数的原因在第一级一维离散余弦变换模块的阶段3中已说明。

  阶段4:消耗3个时钟周期完成11位有符号数的加减运算,结果为12位有符号数,也是二维离散余弦变换的最终结果。

  2.1.4并行全流水结构的二维离散余弦变换模块

  在不考虑二维离散余弦变换中输入数据的串行转为并行,输出数据的并行转为串行的条件下。即假设二维离散余弦变换模块的前一级模块可以在每一个时钟周期内为其提供64位数据,二维离散余弦变换模块的后一级模块可以在每一个时钟周期内接受其产生的96位数据。这时本文提出的并行全流水线结构的二维离散余弦变换模块只需要43个时钟周期就可以完成一个8×8矩阵的二维离散余弦变换。

  图6及图7是该模块在ModelSim仿真软件中的时序仿真结果,仿真的时钟频率设定为100Mhz,43个时钟周期完成一次8×8二维离散余弦变换。

  相同数据在Matlab中二维离散余弦变换结果见图8。

  二者差值的分析:本文提出的二维离散余弦变换模块在对小数乘法结果的处理上采取了截尾方式,没有保留小数参加后续的运算。这与Matlab中64位的浮点运算的运算结果相比在变换系数中的直流系数上和第1个交流系数上相差的数值为8,其它系数可以认为是近似相同的。

  对小数乘法结果的处理采取截尾方式的原因有两点:

  1:保留小数位数过多会导致在后续的计算中输入数据位数过长,特别是对于全8路并行结构更易产生数据偏移或时钟偏移,同时也会降低模块的运行频率。

  2:考虑到后续的量化模块,采用标准的量化表时直流系数的量化步长为16是差值8的2倍,而且量化过程中有对量化结果四舍五入的处理。所以差值8会在量化过程中基本被消除。这一点在后面的实际图像测试中得到了映证,压缩后的图像在视觉上与原始图像一致。

  2.2量化模块

  量化过程就是每个离散余弦变换系数除以各自的量化步长并对结果取整的过程。取整采用的是四舍五入的方式。

  为了方便在FPGA中实现,离散余弦变换系数除以各自的量化步长改为乘以量化步长的倒数,量化步长的倒数使用二进制小数表示,选取长度为12位。乘法器用 EP2C35中两个嵌入式乘法单元并联实现。因为离散余弦变换系数的长度为12位有符号的数,所以乘操作后得到的24位结果,保留高12位,低12位舍去。具体电路在算法结构上分为3个阶段,由5阶的流水线组成,完成整个量化操作耗时5个时钟周期。

  2.3 ZigZag扫描模块

  经过量化处理后的离散余弦变换系数的高频分量大部分为零。经过ZigZag扫描后,一个二维的8×8离散余弦变换系数矩阵变为一个一维含64个元素的序列,频率分量按从低到高排列,一维序列的高频部分会出现大量的连续零元素。产生这种一维序列的目的是为了使用熵编码中游程编码,进一步提高压缩效率。

  从电路功能的角度上看,ZigZag扫描模块的作用就是把按列顺序输入的量化后的离散余弦变换系数以ZigZag扫描的顺序输出。处理时以一个8×8的离散余弦变换系数矩阵为一个处理单元,在接收一个以列顺序输入的8×8的离散余弦变换系数矩阵的同时,把前一个已经接收完毕的8×8的离散余弦变换系数矩阵以ZigZag扫描的顺序输出。一个拥有128个存储单元,每个存储单元长度为9位的双口RAM可以完成上述功能。RAM的128个存储单元在使用上分为两个操作区,每个操作区64个存储单元,一个操作区用于接收以列顺序输入的8×8的离散余弦变换系数矩阵,同时另一个操作区以ZigZag扫描的顺序输出前一个已经接收完毕的8×8的离散余弦变换系数矩阵。两个操作区轮换交替,形成一种乒乓操作模式。在这里使用乒乓操作是为了保持整个的整体全流水线设计。

  乒乓操作是一种常用于数据流控制的处理技巧。其特点是相互配合切换多个存储单元并完成数据的处理,把处理后的数据没有停顿的运送到下一个处理模块。把一个乒乓操作模块当作一个整体,从其两端看数据,输入数据和输出数据都是连续不断的,没有任何停顿,因此非常适合流水线结构。图11是ZigZag扫描模块在 ModelSim仿真软件中的时序仿真结果,仿真的时钟频率设定为100Mhz。输入数据是一个8×8的二维矩阵。按列扫描顺序输入 的如下矩阵:

linux操作系统文章专题:linux操作系统详解(linux不再难懂)


评论


相关推荐

技术专区

关闭