怎么解决EDK中rdpfifo溢出的问题?

2020-02-23 10:44发布

        前一阵子发了帖子,但是一直没人回,估计是各位大牛都没看到,
这里给出帖子的链接 http://bbs.21ic.com/icview-713730-1-1.html
希望大家帮我看看,给个建议,谢谢!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
3条回答
machairodus
2020-02-23 12:30
一般情况下FIFO的长度为2的n次方,这样地址位可以全部使用上,有利于FIFO的循环使用。判断溢出和读空的方法有很多,网上也有介绍,我只在这里说一下我认为比较好的一个方法,就是FIFO的地址位设为n+1位(如:{n+1, n}),这样地址的低n位指向FIFO的实际空间,最高的那个n+1位可以做判断用。初始化时读地址和写地址都清空,设为相等值,读时读地址+1,写时写地址+1,如果读写地址完全相同,表示FIFO为空,此时禁止读;如果低n位相同,但是n+1位相反,表示FIFO为满,此时禁止写,如果不禁止的话就是溢出了(如果地址转换成格雷码,那么FIFO的状态比较就要参考高2位地址信息了)。另外异步FIFO要注意信号的跨时钟域同步问题,一般采用双锁存器同步法,可靠性适中,方法简单。
always @ (posedge  Wr_CLK) //注意是写时钟频率信号
begin
         Rd_Addr2 <= Rd_Addr1; //Rd_Addr2就是同步到写时钟频率上的读地址
     Rd_Addr1 <= Rd_Addr;   //Rd_Addr就是在读时钟频率上的读地址
end
当然用三寄存器锁存的方法可靠性更高,但是性能会受到影响。

一周热门 更多>