Verilog 可能的重置域交叉?

Verilog 可能的重置域交叉?,verilog,reset,clock,Verilog,Reset,Clock,我有一个可以控制时钟的ICG。 ICG的启用由一个复位域(如rst1)驱动。 选通时钟驱动另一个复位域(如rst2)的触发器 这是“重置域交叉”(RDC)吗? 像spyglass/jasper这样的工具能像发现传统RDC(存在于数据路径上)一样发现这个问题吗?我将尝试一下,给出一些我所看到的背景信息 首先,我认为不存在“重置域交叉”这样的事情。我称之为“时钟域交叉,涉及重置信号”。因为在顺序逻辑中,从一个点到另一个点的重置与D或Q没有什么不同 为了清楚起见,我们可以忽略RST1/RST2,并用C

我有一个可以控制时钟的ICG。 ICG的启用由一个复位域(如rst1)驱动。 选通时钟驱动另一个复位域(如rst2)的触发器

这是“重置域交叉”(RDC)吗?
像spyglass/jasper这样的工具能像发现传统RDC(存在于数据路径上)一样发现这个问题吗?

我将尝试一下,给出一些我所看到的背景信息

首先,我认为不存在“重置域交叉”这样的事情。我称之为“时钟域交叉,涉及重置信号”。因为在顺序逻辑中,从一个点到另一个点的重置与D或Q没有什么不同

为了清楚起见,我们可以忽略RST1/RST2,并用CLK1和CLK2来讨论。RST1与CLK1是同步的(从Pradyuman Bissa所述的脱评观点来看),RS2与CLK2是相同的

我假设你描述的电路是这样的:

这是CDC的问题,很可能会被CDC工具捕获(我认为Jasper更适合于正式验证,所以它可能不会捕获)。导致CDC工具无法捕捉到这一点的是添加的任何类型的附加约束。假设您在CLK1和CLK2之间进行了一些排除,或者您对一些排除或单元格进行了通配符。这些将从故障列表中删除此项,因此您不会看到此项

在对50多个时钟的设计进行CDC评估后,我可以告诉你,失败列表太长了,你很有可能用不正确的排除/通配符来掩盖自己的错误

这条电路有可能仍然工作。特别是如果在复位解除后某个时间启用CLK1(选通)

所以要回答你关于工具捕捉它的问题,是的,它可能会。在老人咆哮之前到此结束

但我想说的是,我相信Pradyuman Bissa所说的是,您应该创建一个模块/单元,该模块/单元为您提供此功能,而无需显式定义逻辑。这也让你减少了一开始就引入CDC的机会。有时候,消除这些错误的最好方法是减少你一开始犯错误的机会

例如,下图所示:

然后,您可以在需要选通一个时钟并与另一个时钟域一起重置的任何时候实例化它。显然,需要确保CLK2的重置保持足够长的时间,以便重置同步能够看到它,这存在一些问题


我见过很多这样的问题,人们采用这样的方式,手工放置逻辑,而不是仅仅创建一个特定的单元并在需要时实例化它。在设计的总体方案中,该单元所需的门/触发器的数量通常是最小的。

我认为您的重置交叉想法是错误的!!总是希望复位的断言是异步的,而反断言是同步的。在反断言过程中,如果上升沿上的重置被解除(假设posedge触发F/F)然后,由于设置时间冲突,系统可能会进入亚稳态。为了避免这种情况,使用两个触发器同步器进行复位解除断言。在用于复位逻辑的两个触发器同步器中,两个触发器级联连接,第一个触发器的输入与逻辑1相连。第二个触发器的输出用作全局复位输出。谢谢回复。然而,我并没有问关于重置同步器的问题。非常感谢你们的回答。在我的例子中,重置与clk是异步的。也就是说,重置断言独立于clk。因此,这不是CDC的问题。您可以争论这是RDC还是功能问题。复位的异步断言、同步解除断言不会是CDC、RDC或功能问题(对于大多数正常电路)。某些CDC工具可能无法找到此路径,并且即使解除断言是同步的,仍会报告CDC。尽管如此,我认为CDC会指示复位同步电路输入的交叉。