当前位置:   article > 正文

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

预读fifo

目录

一、问题背景

二、提前预知结论

三、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内部结构

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号