XILINX平台FIFO的几个小Tips

上几天群里有个小伙伴和狼哥私下讨论了下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图像算法.竖条纹消除术
2024功利性学习目录合集
Zynq系统化入门进阶详细教程
基于Zynq的图像处理入门课程
FPGA图像Canny四图拼接显示项目
FPGA之Mpsoc的VCU压缩解压demo
FPGA图像无极缩放.Demo2
FPGA图像算法.无极缩放
FPGA图像算法.导向滤波
狼板001PLUS上线,首发优惠进行中
点击上面链接查看详情
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值