我有一个带有两个时钟域的SoC设计,每个时钟域都有自己的异步复位(这大致意味着复位的异步断言和同步去断言)。我试图通过一个64位信号从时钟域C1到时钟域C2,这是通过一个async_fifo处理fifo指针被传递到单独的时钟域使用灰色编码。
让我们假设系统从重置中醒来,所有的fifo指针都被初始化为0,post that I send 4 transactions through async fifo,这使指针值在两边都增加到4。
此时,在时钟域C2上断言复位,这将导致async_fifo中的read_ptr变为0,但写入指针没有被复位,仍然保持值4,这将导致空信号降低。在这一点上,我的逻辑开始读取垃圾数据的FIFO。
一个可能的解决方案是,当一个域重置时,同时重置写指针和读指针。但这需要复位同步器和一些更多的组合逻辑复位,并驱动复位从触发器,这不是一个好的实践DFT。
还有别的办法吗?