可能会重置跨域?

时间:2019-06-30 22:11:51

标签: verilog reset clock

我有一个门控时钟的ICG。 ICG的使能由一个复位域(例如rst1)驱动。 门控时钟从另一个复位域rst2驱动触发器。

这是“重置域交叉”(RDC)吗? 像spyglass / jasper这样的工具是否可以像发现常规RDC(存在于数据路径上)一样找到此问题?

1 个答案:

答案 0 :(得分:0)

我将对此进行介绍,为我所看到的提供一些背景知识。

首先,我认为没有“重置域交叉”之类的东西。我将其称为“涉及重置信号的时钟域穿越”。因为在顺序逻辑中从一个点到另一个点时,复位与D或Q相同。

为了清楚起见,我们忽略了RST1 / RST2,而以CLK1和CLK2进行了讨论。 RST1与CLK1是同步的(从断言的角度来看,正如Pradyuman Bissa所述),而RS2与CLK2是同步的,但是相对于CLK2。

您所描述的电路,我假设是这样的: Reset with CDC issue

这是CDC的问题,很可能会被CDC工具捕获(Jasper,我认为这是更多用于正式验证的工具,因此可能无法捕获)。导致CDC工具 NOT 被捕获的事情可能是添加的任何其他约束类型。假设您在CLK1和CLK2之间做了一些排除,或者通配了一些排除或单元。这些会将其从故障列表中删除,因此您将看不到它。

已经对具有50个以上时钟的设计进行了CDC评估,我可以告诉您,失败列表是如此之长,以至于您有机会使用错误的排除/通配符掩盖自己的错误。

此电路可能仍在工作。尤其是在取消置位复位后的某个时间启用了CLK1(门控)的情况。

所以要回答有关捕获工具的问题,可能会的。在老人咆哮之前在这里结束。

但是我会争论,我相信Pradyuman Bissa在说的是,您应该创建一个模块/单元,该模块/单元可以为您提供此功能,而无需明确定义逻辑。这也使您可以减少首先引入CDC的机会。有时,消除这些错误的最好方法是减少您首先犯错的机会。

示例可能类似于下图: Clock gate with Reset Sync

然后,您可以在需要门控时钟并与其他时钟域进行伴随复位的任何时候实例化此功能。显然需要确保将CLK2的复位保持足够长的时间以使复位同步能够看到它,这存在一些问题。

我已经看到许多问题,人们会采取类似的方式并放置逻辑,而不仅仅是创建一个特定的单元并在需要时实例化该单元。在设计的总体方案中,此单元所需的门/触发器数量通常很少。