微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > FIFO ip最后一个数据会在下一个读出周期读出

FIFO ip最后一个数据会在下一个读出周期读出

时间:10-02 整理:3721RD 点击:
使用的是异步FIFO,写频率是5MHz,读频率是50MHz。现在可以写入10个数据,但是总是读出9个数据,延长读使能也不行,最后一个数据会在下一个读周期读出,不知道怎么处理,希望大神指点。

你是不是贴个仿真波形图什么的好一点撒

确定写的时候,最后一个数写进去了?写信号能看到,不代表已经写进去了



  你好,因为下一次读数,读出来的第一个就是前一次读数的最后一个数,所以我觉得应该是写入了。

写错了。
仔细检查读写操作,有没有写错,确认好。


你好,我重新设定了读使能,但是,您看,它的读数为什么会这样,empty信号为什么在那有个变化。
   

你好,我重新设定了读使能,但是,您看,它的读数为什么会这样,empty信号为什么在那有个变化。




您好,这是放大了的图。
   


你好,我重新设定了读使能,但是,您看,它的读数为什么会这样,empty信号为什么在那有个变化。



   


最好把fifo所有的信号都看一下,最好空满标识都有。

读写使能都同步在一个时钟上?不是一个是5M,一个是50M,读之前应该判断一下empty。empty的变化原因应该是最后一个数据“21”还没写进去fifo,读使能就有效了。

http://bbs.eetop.cn/thread-385268-1-1.html
别人遇到相同的问题。



   你看,你这个写了2个数以后,空信号才变成非空,说明写数据可能在入口有寄存器寄存,要不你拉长一下写使能,看出现什么现象?印象中,FIFO深度得是2的n次方啊,10不是啊

    您说的对,FIFO的深度是2的n次方,因为我只需要10个数,所以就这么用了。我是个初学者,也不知道这样用对不对。


是的,我也觉得是这么个问题,改在empty后读使能生效就可以正常读了,我是个初学者,那怎么判断empty呢,我用的是计数器,写使能结束之后开始计数,计数到empty后开始读使能生效。



   是的,我看到了,我现在觉得可能是数据没有完全写入,我就开始读了,所以会出现empty的那个问题。调整之后可以正常读出了。


好了,你明白问题的所在了。读写的时序问题,写有寄存器操作,消耗clk,造成读和写同时操作。

回复之后才看见帖子第二页问题已经解决了。所以把答案删除了

空指示信号在读时钟域生成,需要将写时钟域的地址同步到读时钟域,同步过程需要耗费几个写时钟周期的时间;
从这个图上可以看到,由于读写时钟相差较大,且读使能启动比较早,在最后一个写入数据的地址还没有完全同步到读时钟域前,在读时钟域,读地址就追上写地址了,因此空指示信号会拉高。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top