IC设计错误案例006:亚稳态导致的afifo非空即读错误

  1. 亚稳态导致的异步fifo非空即读错误

如下图所示:在写时钟侧,数据data_in同时将不同bit位的数据段写入到两个异步fifo,而在读侧,采用其中一个异步fifo中的非空信号empty取反产生读使能ren,读两个异步fifo,此类设计,会偶发的出现异步fifo空读中断的情况,即其中一个异步fifo没数据时,读使能ren有效。

为什么会产生空读现象呢?

虽然在写侧数据时同时写入的,但是因为格雷码跨时钟的时候会出现亚稳态导致waddr跨时钟会延迟一个被读时钟周期采样到,因此可能出现如下情况:在读侧T0周期时,afifo_u0的waddr已完成跨时钟到达读时钟域,empty0=0,而afifo_u1的waddr跨时钟已没有完成,empty1=1。此时采用assign ren=!empty0,会在empty1=1的情况下读afifo_u1,因为产生空读中断。

IC设计错误案例006:亚稳态导致的afifo非空即读错误