问题描述
在基于FIFO的内置FIFO生成器实现中,当输出深度大于所选的原始深度时,如果可编程空或可编程满阈值接近极限值,则PROG_EMPTY和PROG_FULL可能产生伪断言值。他们的范围。
示例(PROG_EMPTY):
输入/输出深度= 4096
原始深度= 1024
可编程空阈值= 1013
同时读取和写入FIFO,PROG_EMPTY可能会被断言一段时间,即使FIFO中的字数远大于1013.(在本例中,我们的测试场景中PROG_EMPTY断言为2059个字。)
原因(PROG_EMPTY):
将FIFO16基元深度链接在一起时存在固有的延迟。由于这些延迟的性质,读操作可以在链中的下一个FIFO重新填充之前稍微清空最后一个FIFO。在上面的示例中,1024深度原语能够充分清空以略微低于1013字阈值,此时PROG_EMPTY标志被断言。因此,虽然FIFO中可能总共有2059个字,但PROG_EMPTY警告用户最后一个FIFO16中的字数已经下降到1013字以下。
原因(PROG_FULL):
将FIFO16基元深度链接在一起时存在固有的延迟。链中的第一个FIFO可以在来自它的字能够向下传播并从读取接口读取之前填满。因此,第一个FIFO16可以比整个设计更快地接近FULL,因此PROG_FULL可能在奇数时间断言。即使FIFO中指定的字数不足,FIFO也可以报告PROG_FULL。对于其有效范围下限附近的可编程全阈值尤其如此。
解决/修复方法
使用内置FIFO配置时,请务必为读写时钟输入正确的频率。
这两个时钟的相对频率对于产生FIFO很重要。
没有回复内容