MPEG-4 SP级解码器中的SDRAM接口设计

出处:sillboy 发布于:2007-04-29 11:49:21

摘 要:本文提出了一种在MPEG-4 SP级解码器中的SDRAM接口设计,并巧妙地利用了一种新颖的填充方法,使得程序执行的效率大幅度提高。
关键词:SDRAM;MPEG-4;填充
引言
图像处理系统都需要用到容量大、读写速度高的存储介质。SRAM操作简单,但其昂贵的价格会使产品成本上升。相比较而言,SDRAM的控制较RAM复杂,但具有价格便宜、体积小、速度快、功耗低等优点,所以从降低成本的角度出发,本文采用SDRAM实现MPEG-4 SP(Simple Profile)级解码器的数据缓冲功能。

MPEG-4 SP级解码器
MEPG-4 SP的定义就是面向低码率的视频通信标准,工作在矩形I帧和P帧,支持带有运动补偿的基于DCT 编码的基本功能。I帧采用帧内编码方式,而P帧采用帧间编码方式,仍然在16×16 的宏块基础上进行帧间/帧内编码。其中,Intra 宏块的纹理编码采用 DCT 变换和 AC/DC 预测,进一步降低了码率;Inter 宏块的运动矢量可有1MV和 4 MV两种表示方法,其中运动矢量具有半像素,支持非限制运动矢量。
本解码器选用FPGA作为系统的处理器,因为FPGA可提供必需的并行机制,从而可为视频解码器提供经济的实时解决方案。对比目前硬件的MOPS性能,发现通用处理器的性能约为2000 MOPS;DSP处理器将这一数字提高到8000 MOPS左右,但仍然受限于只能通过有限数量的计算单元完成数据流的处理。相比之下,FPGA则有很大的自由度,性能可轻松超过10万MOPS,而且用FPGA能够比较方便地实现系统的集成,维护和升级。
图1是解码器的电路结构图,实现了从ES流到可供显示器显示用的模拟信号的解码过程。首先,进入FPGA的ES流被缓存到FIFO中,FIFO的大小是3M bits,实践表明它可以应对各种码速率的码流输入;然后FPGA读取FIFO中的数据进行解码,外扩16Mbits的SDRAM作为必要的数据中转;解码得出的数据是4:2:0的YCrCb信号,通过色度空间转换变为RGB信号,再加上用于控制显示的行、场同步以及消隐信号,传送给ADV7210转化成模拟信号,从而在显示器上看到实际解出的画面。

SDRAM接口电路的设计
整体时序和结构安排
图2是SDRAM的接口电路结构框图。SDRAM接口负责SDRAM与FPGA内部模块的数据交互,其中命令产生器与SDRAM直接通信,产生SDRAM能识别的控制信号;地址产生模块负责地址映射,因为总控制器给出的地址是解出的宏块在重建帧中的相对位置和P帧中宏块对应的MV,经过地址映射后,就变成SDRAM命令产生器能识别的地址;上电模块完成正常工作前的SDRAM初始化工作。SDRAM总控模块控制着整个接口,主要负责启动和控制相关模块。总控模块在上电时启动上电模块;在场消影期启动刷新模块。解码时与SDRAM的数据交互主要分三部分:读显示数据,填充并且读参考帧数据,写入解出的宏块数据,在此期间总控模块的控制信号启动相应的地址映射模块产生读写地址,并由地址选择模块负责分配。
存储策略和地址映射策略
在SDRAM中总共存储了两帧图像的数据,其中一帧作为参考帧,在解P帧时要根据运动矢量提供参考宏块的数据形成重建帧,同时它还可实现显示数据缓冲;另外一帧是写入正在解出的重建帧数据。解码器处理的图像格式为CIF,数据格式为4:2:0,所以每一帧占用空间为352×288×1.5×8 bit。SDRAM中的两个bank(组),分别存放正在重建的帧和参考帧。每一个bank被分成三个连续空间,一块用来顺序存储亮度信息,另外两块分别顺序存储色度信息。在下一个帧起始信号到来时,原来存储参考帧的bank变成存储重建帧,而另外一个bank中存储的解完的重建帧将作为正在重建的下一帧的参考帧。

SDRAM接口的主要任务
解码器工作时是以宏块为单位进行处理的。解一个宏块时,首先从已经存在SDRAM中的参考帧中读取参考宏块数据,加上残差数据后得到解出的宏块,存储到SDRAM中,而且发给显示模块的数据也是以宏块为单位提供的。所以考虑到解码器工作的实际情况,本文选择长度为8的突发读写模式,这样可以高效地存储数据。下面介绍SDRAM的具体任务。
和解码模块的数据交互
SDRAM主要与解码模块和显示模块进行大量的数据交互,具体的数据流向(实线)和地址线(虚线)如图3所示。
图3中的RAM在FPGA内部,负责缓存SDRAM读出和将要存储的数据。本存储方案以宏块为基本单位,所以每个RAM存储的都是一个宏块的数据。其中,存储重建帧色度和亮度数据的RAM和存储待显示的亮度和色度数据的RAM大小都为384byte,包括亮度的16×16和色度的8×8×2个像素点。存储参考帧色度和亮度参考数据的RAM大小为486byte,其中包括亮度的4个9×9的像素点和色度的9×9×2个像素点。MPEG-4解码器支持半像素的,所以先根据半像素的运动矢量取出一个9×9的块,再进行半像素插值成8×8的宏块以后,与残差相加得到重建宏块。
填充
MPEG-4支持非限制运动矢量,所以填充就成为数据存储操作的一个重要内容。本文提出了一种简便的方法,该方法在把数据存储到SDRAM中的时候,并不进行填充操作,而是在读出数据的时候用了一种等价的方法,得到了相同的结果,大大减少了数据操作的复杂度。
具体的实现过程如图4所示,在程序中增加了一个变量,这里称之为“偏移量”。解码出来的矢量如果没有超出图像的边界,“偏移量”值设为0;如果超出了边界,则送给读取SDRAM模块的矢量,取刚好没有超出边界但离解出的运动矢量接近的值,并把“偏移量”设为超出边界的像素数,并表明超出的方向。
根据16×16宏块的位置和解码得出的四个8×8块运动矢量的大小求解出偏移量:
if 宏块位置位于边界处 and 宏块的四个8×8块超出边界 then
按照上述的规则分别设置四个8×8块的运动矢量和偏移量;
else
运动矢量不变;
偏移量<=0;
end if;
如果偏移量不等于0,从SDRAM读到RAM中的数据并不是我们想要的数据,里面有很多多余的数据,但可以根据“偏移量”的值,在从RAM读取补偿数据时,配合上适当的逻辑,准确地取出相应的非限制运动矢量对应的数据块,然后和残差数据相加得到的重建块。
刷新
在解码器中选用的SDRAM必须在128ms内至少刷新4096次。在时序安排上主要利用了显示时的消影期进行集中刷新。这样就避免了分散刷新有可能带来的一些控制和数据存储延时方面的问题,而且也完全满足SDRAM刷新次数的要求。

硬件实现
解码器采用SDRAM是ISSI公司的IS42S1600,规格为512K Word×16bit×2 Bank(16Mbits),采用VHDL硬件描述语言,SDRAM接口模块工作在80MHz的频率上,已经成功地应用到了MPEG-4的解码器中。通过对各种码流的测试,表明接口模块在各种情况下都可以正确的工作。接口模块占用了FPGA的668个逻辑单元,518个片式触发器,分别占资源的8%和3%。现在我们只是使用了SDRAM的16位数据总线的低8位,如果升级成更高版本的解码器,配合上数据拼接模块,还有一半的吞吐潜力可以提升。■

参考文献
1 ISSI IS42S16100 DATASHEET NOVEMBER 2001

(收稿日期:2004-07-04)




  

关键词:接口

版权与免责声明

凡本网注明“出处:维库电子市场网”的所有作品,版权均属于维库电子市场网,转载请必须注明维库电子市场网,https://www.dzsc.com,违反者本网将追究相关法律责任。

本网转载并注明自其它出处的作品,目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品出处,并自负版权等法律责任。

如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系,否则视为放弃相关权利。

广告
上传BOM文件: BOM文件
*公司名:
*联系人:
*手机号码:
QQ:
应用领域:

有效期:
OEM清单文件: OEM清单文件
*公司名:
*联系人:
*手机号码:
QQ:
有效期:

扫码下载APP,
一键连接广大的电子世界。

在线人工客服

买家服务:
卖家服务:

0571-85317607

客服在线时间周一至周五
9:00-17:30

关注官方微信号,
第一时间获取资讯。

建议反馈

联系人:

联系方式:

按住滑块,拖拽到最右边
>>
感谢您向阿库提出的宝贵意见,您的参与是维库提升服务的动力!意见一经采纳,将有感恩红包奉上哦!