答疑分类
答疑分类: |
4-FPGA开发 » 2-AMD(XILINX) |
这位同学的问题非常好,所以我做了长幅度的解答,
没错,同步VS机制同于状态机准备开始写DDR或者读DDR,进入到等待写或者等待读状态机。
当写FIFO的时候,通过FIFO的Counter计数器,当写FIFO中的数据接近或者等于满足一次FDMA设置的burst数据长度,就可以启动FDMA写请求,这个时候可以确保数据是连续的从FIFO中取出来。
同理当读FIFO的时候,通过FIFO的Counter计数器,可以知道当前读FIFO的剩余空间可以满足存放一次通过FDMA从DDR中取出数据的长度,以此作为读请求条件通过FDMA,从DDR中取出数据。
图像显示系统,图像不被撕裂是一个基本要求,那么3帧缓存,和2帧他们有什么差异呢?为什么3帧缓存是大部分显示采集系统用的缓存方案呢?
在我们绝大部分的摄像头采集系统中,输入输出的帧率是不一致,至少有细微的差异,为了方便理解,我们可以假设,写入速度是读出速度的2倍。
那么对于使用2帧乒乓存储的系统,比如写速度是读速度的2倍,这样就存在一个情况,当你在读的时候,你的上一帧每读完的时候,就被新的一帧写入数据破坏了,这样对于动态运动采集,就是有一帧图像,一部分是上一帧数据,一部分是最新的数据,这样图像就是不完整的,这就会发生图像撕裂的情况
所以我们需要3帧缓存,3帧缓存设计中,我们设计了写同步计数器,和读同步计数器。当我们的写入速度小于读的速度时候,由于写通道的计数器更新的慢,我们读通道的更新,只要晚于1帧的写通道,就永远不会读到正在更新的的缓存,并且写通道也永远不会写入到正在读出的缓存,因为即便是写通道快写结束了,还有一帧缓存空间剩余的。
这样就衍生出了另外一个问题,当写通道的速度慢于读通道,那么读通道会采取重复读帧的方式工作
那么当写速度大于读通道的时候,我们应该用慢的读通道计数器工作,这样,写通道,即便再快,也不会去破坏正在读的通道的数据 |
|