0
\ \ begingroup \美元

我有一个带有两个时钟域的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。

还有别的办法吗?

\ \ endgroup \美元
4
  • \ \ begingroup \美元 您的特定于域的重置不是由常见的异步重置驱动的吗?为什么你会重置你的FIFO的逻辑只有一半,为什么你会期望它工作正确,如果你做了? \ \ endgroup \美元- - - - - -戴夫花呢 3月13日20日14:25
  • \ \ begingroup \美元 重置指针不是一个选项吗?或者在任何一个重置上重置两个指针? \ \ endgroup \美元- - - - - -Cristobol Polychronopolis 3月13日20日14:40
  • \ \ begingroup \美元 @DaveTweed我不确定这里的标准实践是什么,但我有一个在不同时钟域上具有内存和计算的系统。现在,如果有东西挂起在计算内部,我想要重置芯片的计算部分,而不是在内存方面断言重置。因此我有两个不同的重置,每个重置在当前的设计中可能是独立的断言。 \ \ endgroup \美元- - - - - -沙Gangrade 3月16日6点20分
  • \ \ begingroup \美元 但是FIFO,作为时钟域之间的接口,需要完全重置(两边)或者根本不重置。换句话说,重置“计算”并不一定意味着计算时钟域中的所有东西都需要重置。当然,更好的方法是消除“挂起”,或者找出一种“计算”方法来检测它们并自行恢复。 \ \ endgroup \美元- - - - - -戴夫花呢 3月16日20点31分

你的答案

点击“发布你的答案”,即表示你同意我们的服务条款隐私政策饼干的政策

浏览其他带标签的问题问你自己的问题