<RTL设计的艺术> 预读FIFO假空问题分析与整理

本文探讨了在FPGA设计中遇到的预读FIFO假空问题,分析了同步FIFO(sfifo)的结构、逻辑和SRAM读写时序。通过实例揭示了预读模式下,即使fifo空标志(empty)为1,水线(fifo_lvl)大于0也不一定可读的情况,并提出通过增加寄存器级联的改进方案来解决问题。
摘要由CSDN通过智能技术生成

目录

一、问题背景

二、提前预知结论

三、sram读写时序

四、sfifo的结构与逻辑

五、非预读fifo的写入与读出

六、预读fifo的读出过程

七、结论的推出

八、改进方案

九、主要代码

十、最终效果


一、问题背景

我曾经设计过一个bug,经过一周的分析、总结、复盘,整理成这篇文章同大家分享。

二、提前预知结论

1、sfifo(同步fifo)empty为1不一定空,水线大于0不一定可读;

2、解决上述问题需要在fifo内增加1级或者2级寄存器存储数据;

三、sram读写时序

一般情况下,普通memory读数据“mem_rd_data”都至少延后读使能“mem_rden_n”一个cycle,这点很重要,因为它导致了当前预读fifo存在的问题。

图1、sram读写时序

四、sfifo的结构与逻辑

sfifo由SFIFO_CTRL+memory的结构构成,SFIFO_CTRL负责管理memory的读写。在非预读模式下,外部读写使能“fifo_wen”“fifo_ren”直连到memory的读写使能端口“mem_wren_n”“mem_rden_n”,此时SFIFO_CTRL只做地址管理;预读模式下,SFIFO_CTRL出了地址管理之外,需要自己产生memory读使能信号“mem_rden_n”

图2、目前的sfifo内部结构

  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

积小流哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值