首页 > 解决方案 > 可能重置域交叉?

问题描述

我有一个控制时钟的 ICG。ICG 的启用由一个复位域驱动,例如 rst1。门控时钟驱动来自另一个复位域的触发器,例如 rst2。

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

标签: verilogresetclock

解决方案


我将对此进行尝试,并提供一些我所看到的背景。

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

为了清楚起见,我们忽略 RST1/RST2,并根据 CLK1 和 CLK2 进行讨论。RST1 与 CLK1 同步(从取消断言的角度,如 Pradyuman Bissa 所述),RS2 与 CLK2 相同,但与 CLK2 同步。

你描述的电路,我假设看起来像这样: 使用 CDC 问题重置

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

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

该电路可能仍然有效。特别是如果 CLK1(门控)在复位解除后的某个时间启用。

因此,要回答您有关捕获它的工具的问题,是的,它可能会。在老人咆哮之前到此结束。

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

一个示例可能如下图所示: 带复位同步的时钟门

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

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


推荐阅读