在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 49413|回复: 86

[原创] FIFO使用技巧

[复制链接]
发表于 2011-10-30 19:02:08 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
FIFO是在FPGA设计中使用的非常频繁,也是影响FPGA设计代码稳定性以及效率等得关键因素。我总结一下我在使用FIFO过程中的一些心得,与大家分享。
         我本人是做有线通信的,所做的设计中大量的使用到FIFO,用于报文的缓存。我经常使用一个FIFO存报文内容,另一个FIFO存报文的长度,两者配合使用。
         在数据连续读取时,为了能不间断的读出数据而又不导致FIFO为空后还错误的读出数据。可以将FIFO的Empty和Almost_empty以及读使能配合起来使用,来保证能够连续读,并准确的判断FIFO空满状态,提前决定是否能启动读使能。具体的实施办法是:当Empty为1,立即停止读;当Empty为0,Almost_empty为0时,可以放心读;当Empty为0,但是Almost_empty为1时,如果上一拍读使能Read也为1,那么不能读;当Empty为0,但是Almost_empty为1时,如果上一拍读使能Read为0,可以读最后一拍。
        在FIFO使用时,使用到Almost_full信号以及读写counter来控制FIFO的读满预警,如果数据不是在空满判断的下一拍写入FIFO,则设计FIFO的满预警时要小心。如果你不确定判断满预警之后要延迟多少拍才能真正写入FIFO,那么尽量让FIFO有足够满预警裕量。例如,在wr_data_count为128才是真的满了,你可以设成wr_data_count为120的时候就给出满预警,可以保证设计的可靠和安全。当然,如果你能准确的算出判断满预警与真正写入FIFO的延迟,可以用精确的满预警阈值。
      当需要使用到数据位宽转换时,如将128位的数据转换成64位的数据,最好不要用XILINX自己生成的位宽转换FIFO。可以例化两个64位的FIFO,自己控制128转64。这样可以大大的节省资源,是XILINX CORE生成的FIFO资源的一半。
发表于 2011-11-16 14:18:55 | 显示全部楼层
当Empty为0,但是Almost_empty为1时,如果上一拍读使能Read也为1,那么不能读;当Empty为0,但是Almost_empty为1时,如果上一拍读使能Read为0,可以读最后一拍。

请问这个为什么呢?
 楼主| 发表于 2011-11-17 00:13:12 | 显示全部楼层
回复 2# lh130748


    这是因为当almost_empty为1时,表示FIFO中仅仅还有一个数据没有被读出来,如果此时读使能同时为1,那么最后的这一个数据正在被读出来了,相当于在下一个时钟沿时,已经没有数据在FIFO中。如果读使能为0,那么最后的那个数据在刚才那个时钟周期没有读出来,可以现在这个时钟周期把它读出来。
发表于 2011-11-18 14:00:06 | 显示全部楼层
写得蛮易懂的,觉得你确实对fifo很有了解呀。
发表于 2011-11-20 13:05:44 | 显示全部楼层
多谢分享~
发表于 2011-11-22 08:35:05 | 显示全部楼层
我也受益。谢谢
发表于 2011-11-22 08:52:25 | 显示全部楼层
学习了,fifo不错。
发表于 2011-11-22 08:58:00 | 显示全部楼层
请问fifo的时序约束该如何添加 是false path 还是multi cycle
发表于 2011-11-22 14:00:23 | 显示全部楼层
嗯,还好,挺好理解的
发表于 2011-12-3 18:26:02 | 显示全部楼层
挺好,将空将慢是做提高FIFO效率的基本做法。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-23 07:51 , Processed in 0.020966 second(s), 9 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表