story · 5月12日

SDC 中异步 clock group 的处理方法

现代 SoC 设计通常采用多个时钟,并包含多个时钟域。当数据从一个时钟域跨越到另一个时钟域时,由于异步时钟域交叉(CDC),会出现亚稳态问题的风险。

假设在设计中,触发器 F1 由时钟 C1 控制,触发器 F2 由时钟 C2 控制,且 C1 和 C2 相对于彼此是异步的,那么数据从 F1 到 F2 的传输就存在一个异步 CDC 点。

image.png

同步解决方案

异步 CDC 可能导致 F2 触发器的输出进入亚稳态。如果 F2 处于亚稳态,其输出数据可能会被多个逻辑路径读取为不同的逻辑值。

为了防止这种情况,通常采用同步技术。一种简单的同步方法是让 F2 的数据输出仅连接到一个触发器(F3)。F3 由相同的时钟触发,然后 F3 可以连接到任意多个路径。

这个额外的触发器(F3)有效地为 F2 的输出提供了一个完整的时钟周期,使其在被 F3 采样之前达到稳定的逻辑值,然后再分发到设计的其余部分。除了这种简单的双触发器方案外,还有许多其他同步技术用于解决亚稳态问题。

时序分析挑战

由于时钟 C1 和 C2 相对于彼此是异步的,来自 F1 的数据可能在任何时刻相对于 F2 的时钟 C2 到达 F2。数据有时会在 C2 有效边沿之前到达,有时刚好在有效边沿之前(违反 setup 时间),有时刚好在有效边沿之后(违反 hold 时间)等。

时序分析工具考虑所有可能的数据和边沿值的最坏情况组合,这些 CDC 路径会导致时序分析工具报告 setup 和 hold 违规,这是由于 F1 和 F2 之间的异步时序造成的。

时序分析工具报告违规并没有错。F2 的数据输入确实存在 setup 和 hold 违规。然而,设计已经通过同步器(F3)制定了缓解 setup/hold 违规的计划。

因此,设计对已放置同步器的 CDC 点不希望看到时序违规报告。更重要的是,设计工具可能会不必要地为这些路径过度分配资源以满足时序要求,而导致其他路径资源不足。

解决这个问题是一个实际项目的问题,而不仅仅是设计的麻烦。解决这个问题的一个好方法是使用适当的约束。约束文件的行业标准是 Synopsys Design Constraints (SDC)格式,它指定设计意图,包括时序、功率和面积约束。

传统缓解时序挑战的方法

设计通常使用 set_false_path 命令,使得异步 CDC 路径不被检查 timing,因此不会报告相关错误。然而,使用 set_false_path 命令有几个缺点:

  1. 虽然我们不希望在 F2 上看到任何 setup 或 hold 违规报告,但这个命令允许这个路径有任意长的延迟。实际上,我们通常希望将路径延迟限制在某个上限内。
  2. 必须同时指定双向的 false path - 对于从 C1 到 C2 的路径和从 C2 到 C1 的路径:
    set_false_path -from [get_clocks C1] -to [get_clocks C2](覆盖图1中显示的路径)set_false_path -from [get_clocks C2] -to [get_clocks C1](假设存在另一个数据从C2跨到C1的路径)
  1. 如果有许多交互的异步时钟域,必须从每个时钟到每个其他时钟指定所有异步关系,这变得非常繁琐。

SDC 引入 set_clock_groups 命令解决了上述许多问题:

  1. 命令本身解释了为什么路径不需要检查 timing 的原因。
  2. 命令有开关区分异步(-asynchronous)、逻辑互斥(-logically_exclusive)或物理互斥(-physically_exclusive)的时钟。因此,命令及其开关充当描述文档。
  3. 关系现在以更细粒度的分辨率(异步/逻辑互斥/物理互斥)指定,以便工具执行串扰分析。
  4. 命令指定时钟之间的关系。一旦建立异步关系,它适用于两个方向的路径。
  5. 无论异步时钟的数量如何,都可以在一个命令中指定异步关系:set_clock_groups -asynchronous -group [get_clocks C1] -group [get_clocks C2] -group [get_clocks C3] …

尽管在所有方面都优于以前使用的 set_false_path 命令,但 set_clock_groups 命令仍有一点没有涵盖。从时序分析角度看,set_clock_groups 命令(类似于 set_false_path 命令)阻止了异步/逻辑互斥/物理互斥时钟组之间路径的时序分析。虽然不需要检查互斥时钟组之间的路径 timing 是正确的,但设计可能希望为异步时钟之间的路径延迟指定上限,

当前解决方案

因此,设计必须再次使用 set_max_delay 或 set_multicycle_path 命令来为涉及异步时钟的路径设置上限时序约束。

如果在两个时钟之间指定 set_max_delay,延迟计算也会考虑时钟网络上的延迟差异。在这种情况下,主要关注的是数据路径延迟。因此,一些工具扩展了标准 SDC 的 set_max_delay 命令,以指定只需查看数据路径延迟,而忽略时钟路径延迟。例如,Xilinx Vivado Design Suite 支持开关-datapath_only。

没有访问这些约束扩展工具的设计必须使用其他更复杂的方法。其中一种方法是将额外的异步时钟定义为理想时钟,以消除时钟网络上的延迟。然而,理想时钟会影响同一时钟网络内的路径,因为不再考虑 skew。

结论与建议

时序分析工具应该在处理 set_clock_groups -asynchronous 时加入额外的智能:

  1. 跨越异步时钟组的路径应该约束到上限(类似于 set_max_delay,但不考虑时钟网络延迟),而不是完全不检查时序。这个上限可以是两个时钟周期中的较小值。
  2. 时序分析讨论中大多被忽略的另一个方面与 F2 和 F3 之间的路径有关。实现工具会将此路径视为具有一个完整周期、无中间逻辑且单一扇出的路径。因此,工具可能会给这条路径最低优先级,将这两个触发器放置得很远,或者对此路径使用最差情况的布线。然而,这是一个同步器,我们希望这条路径非常快,以给 F2 尽可能多的时间稳定,并最小化亚稳态的可能性。
  3. ASIC 方法通过创建同步器作为单元宏来最小化此路径上的延迟,该宏包含 F2 和 F3,并预先路由两个触发器之间的路径,以便实现工具不能将它们放置得很远。
  4. 对于 FPGA 用户,像 Xilinx 的 Vivado Design Suite 这样的实现工具提供用户属性(async_reg),以便设计师可以指定 F3 靠近 F2 放置,并使用最好的(最快的)路径布线。
  5. 理想情况下,工具应该解释 set_clock_groups -asynchronous 约束也意味着同步触发器必须尽可能靠近目标触发器放置。

支持上述约束行为的设计工具将使设计的生活更轻松,他们不再需要找到复杂的方法来处理设计中的 CDC。这种方法也避免了开发非标准约束扩展来处理 CDC 的需要。

静态时序分析 Q&A(18)(End)

END

作者:learn vlsi
来源:数字芯片实验室

推荐阅读

更多数字 IC 设计技术干货等请关注数字芯片实验室专栏。添加极术小姐姐(微信:aijishu20)微信可申请加入IC设计交流群。
推荐阅读
关注数
12335
内容数
229
前瞻性的眼光,和持之以恒的学习~
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息