XILINX平台FIFO的几个小Tips

科技   2024-09-06 16:50   湖南  



图像课程,开发板-->淘宝店铺:胡狼FPGA   

咨询微信:MyWork666888      

QQ交流群:543928922


上几天群里有个小伙伴和狼哥私下讨论了下xilinx平台fifo的一些问题,狼哥觉得挺有意思的,今天在群里也和大家讨论了下,觉得对面试可能有点用处,对自己理解或者手写fifo也会有点用处,在这里记录分享下。
首先说个讨论的前提,就是fifo是基于block ram,而不是lut ram,我们知道,xilinx平台,block ram读数据必须得有一个周期。有了这个前提,我们对fifo提出如下3个问题:

Q1:为啥基于bram的fifo可以复位,它是怎么做到对数据进行快速清零的?
对于这个问题,我们首先知道bram没有复位口,清零数据需要遍历地址写入0才可以清零,但是fifo复位只需要几个周期即可,那么它是怎么实现快速清零数据的呢?实际上这个问题可以说是埋了个陷阱,fifo全称是first in first out,先进先出,先要写进数据才能读出数据,这是它的基本逻辑,所以对于fifo来说,我们并不需要去清除bram里的数据,只需要清零fifo的读写指针即可,假象是bram数据被快速清零了。

Q2:为啥基于bram的fifo复位需要一些周期才能操作?


这里我们可以看看这张fifo的仿真图,图上有两个fifo时序,以粉色为分界线,上面是异步时钟的,下面是同步时钟的,我们用同一个复位信号对他们进行复位操作,可以看到同步的fifo实际上复位时间要比异步的快,测试中同步fifo写在复位后立马是能写入数据,也是能正确写入的,而异步复位的则需要一段时间之后才可以操作,之所以会这样是因为异步fifo需要做跨时钟的一些处理,需要的时间比同步长。

Q3:为啥基于bram的fifo读取数据可以做到零时延,而bram读取实际上最少需要一个周期?
对于这个问题,我们首先要清楚bram和fifo的读取机制,这样才能更好理解零时延。对于bram读取数据,它是基于寻址来完成的,给一个特定的地址才能出一个特定地址的数据,且这个地址事先是不可预知的,但是fifo不同,它的特点是非空才能正确读取到数据,另外对于fifo而言,它是先入先出,从实现上来说,寻址实际上是可以预知的,正是因为这个区别,对于fifo来说数据就是可预取的,所以逻辑实现时可以把第一个写进去的数据在写的同时预取到输出,等空信号拉低后来读取,数据已经在数据线上了,同时如果fifo里有多余一个的数据,第一个读使能也能将第二个数据预取出来,输出第一个的同时预取第二个,以此类推这么个思路,做到零延时输出的一个效果。

今天的分享就到这,抛砖引玉,有其他脑洞和思路的欢迎评论区留言。

*******往期精彩文章列表********

FPGA图像算法.横条纹消除

FPGA图像算法.竖条纹消除术

Zynq系统化入门进阶详细教程

基于Zynq的图像处理入门课程

FPGA图像Canny四图拼接显示项目

FPGA之Mpsoc的VCU压缩解压demo

FPGA图像无极缩放.Demo2
FPGA图像算法.无极缩放
FPGA图像算法.导向滤波
狼板001PLUS上线,首发优惠进行中
FPGA硬件.FMC-HDMI4K-MIPI接口板
点击上面链接查看详情



胡狼FPGA
专注FPGA开发,图像接口和图像算法开发,技术之余扯扯家常,让FPGA服务生活,让生活更美好
 最新文章