在搭建视频图像采集系统时,为了达到显示的实时性和同步性,视频流的传输存储通常采用乒乓操作来进行。我这里用的是SDRAM作为存储单元,使用SDRAM中的两片Bank组成一个乒乓块。
乒乓操作要解决的根本问题不是读写不匹配的问题,而是要用低速器件满足高速数据流的处理问题。这里是针对于视频图像采集时的具体情况分析。
摄像头输入的视频源为640x480@30Hz(我这里使用的是OV7725),VGA的驱动显示为640x480@60Hz,也就是说,摄像头发送过来一帧,但VGA已经扫描了两帧,这里就会存在问题是,直接把摄像头发送过来的视频流数据显示,可能会出现两帧重叠现象。
上图是没有乒乓操作的存储,在t0时刻SDRAM完成了1/2帧的存储,VGA已经显示了1帧,t1时刻SDRAM完成1帧的存储,VGA显示了两帧,到了t2时刻可以看到第一帧和第二帧的是交叠的,在理想的情况下这样显示其实是没有什么问题,即使你的t2时刻第一帧图像和第二帧的图像重合,人的肉眼也察觉不到。但是实际上考虑到硬件本身的因素,摄像头输出的帧率并不能保证完美的640*480@30Hz,这样如果持续单帧存储,那么这样的两帧交叠可能会更严重,乒乓操作可以解决这个问题。
我们为了确保当前显示的一帧是完整的一帧,使用两个Bank进行分别存取,在刚开始的时候摄像头给Bank0写入数据,写满Bank0然后切换到Bank3写数据,VGA读取Bank3的数据,读完一帧切换到Bank0读取数据。这样基本上可以保证两帧交叠的概率降低。
在写模块里加上
在读模块里加上
然后就可以实现乒乓操作了
这种写法没有考虑到,如果读写处于同一个Bank操作,还有读写请求同时进行该如何解决。
|