新闻中心

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

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

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

  阶段3:消耗3个时钟周期 完成9位有符号数的加减运算,结果为9位有符号数。一般的9位有符号数的加减的结果应该用10位有符号数来表示,因为进位操作或借位操作导致结果的位数从9位增长到10位。但是阶段3的输入序列是由9位有符号数乘以固定系数得到的,且固定系数的值都小于0.5,所以序列之间的加减操作不会引起进位操作或借位操作,9位有符号数足够表示加减操作的结果序列。

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

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

2.1.2并行矩阵转置模块

  常用的8×8矩阵转置的方法是,先把64个矩阵元素按行扫描的顺序一个个串行输入到一个RAM(64个存储空间)中,然后按转置后的矩阵的行扫描顺序把 RAM中64个矩阵元素逐次输出。这种方法最少需要128时钟周期才能完成一个8×8矩阵的转置。可称其为串行矩阵转置。串行矩阵转置一次接收一个输入数据与一维离散余弦变换一次产生8个输入数据在传输速率上不匹配,第一级一维离散余弦变换模块需要在串行矩阵转置工作期间等待,当串行矩阵转置完成后再产生新的一维离散余弦变换系数并传递给串行矩阵转置模块。这也是二维离散余弦变换难以设计为全并行的原因。

  本文提出了一种新的矩阵转置方法,称为其并行矩阵转置。用8个RAM(每个RAM有8个存储空间)代替一个RAM(有64个存储空间),再增加两个8通道的旋转多路器,同时配合对8个RAM的变址读操作。一次输入原始矩阵的一列,20个周期后完成一个8×8矩阵的转置。比串行矩阵转置节省至少100个时钟周期。

  并行矩阵转置模块的写操作:每个时钟周期变换一次RAM_BANK的接入顺序,每个RAM_BANK每次写入地址随时钟周期而顺序递增从,0增加到7,每次增加1。

  并行矩阵转置模块的读操作:每个时钟周期变换一次RAM_BANK的输出顺序,每个RAM_BANK每次读出地址随时钟周期而变化,且同一时钟周期内不同的RAM_BANK有不同的读出地址。

  在实际设计时,通过接入旋转多路器实现每个时钟周期改变第一级一维离散余弦变换输出端与RAM_BANK的接入顺序,通过输出旋转多路器实现每个时钟周期改变一次RAM_BANK与第二级一维离散余弦变换输入端的接入顺序。这两个旋转多路器,都是以8个时钟周期为1个旋转周期,在1个旋转周期内实现8个通道的旋转接通。每个RAM_BANK的读写地址都依靠同一个地址产生器产生,在一个时钟周期内所有RAM_BANK的写地址相同,读地址不同。

  在设计具体的硬件电路时,一个RAM_BANK就是一个双端口RAM,为提高工作效率,每个RAM_BANK实际含有32个存储单元而不是理论上的8个存储单元。这样一个RAM_BANK就可以分为4个区块,每个区块8个存储单元,在写入一个区块的同时可以读出前一个已经写入数据的区块,形成一种乒乓缓冲的结构,用电路面积换取运行效率。整个矩阵转置模块是一个13阶的流水线结构,每阶流水耗用一个时钟周期。

  图5是并行矩阵转置模块在ModelSim仿真软件中的时序仿真结果,仿真的时钟频率设定为100Mhz。从输入数据到开始得到结果,中间间隔了13个时钟周期。

  2.1.3第二级一维离散余弦变换模块

  第二级一维离散余弦变换模块在计算结构上与第一级一维离散余弦变换模块一样也分为4个阶段,完成一次运算耗用13个时钟周期,每个时钟周期完成一个流水线操作,实际的电路结构是13阶的流水线结构。

  阶段1:消耗3个时钟周期,完成10位有符号数的加减运算,结果为11位有符号数。

  阶段2:消耗4个时钟周期,完成11位有符号数的固定系数乘法。

  这个阶段与第一级一维离散余弦变换模块的有所不同,没有使用乘法单元,因为完成一个11位有符号数的固定系数乘法需要2个乘法单元并联,完成整个阶段28个乘法操作需要56个乘法单元,这占整个芯片嵌入式乘法单元的80%。一个模块过多的耗用嵌入式乘法单元会造成Cyclone II芯片在布局布线时跨越区域过大,从而导致布线延时过大。

  第二级一维离散余弦变换模块在这个阶段中采用Altera的Mega function中的PARALLEL_ADD模块实现固定系数乘法操作。PARALLEL_ADD模块可以在4个时钟周期内完成8个16位有符号数的加法操作。11位有符号数的乘法转化为8个以内的11位有符号数的加法。固定系数都小于0.5,所以PARALLEL_ADD模块的结果可取11位。上述方法可理解为用并行加法来实现了一个简单的阵列乘法器。

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


评论


相关推荐

技术专区

关闭