为什么你的 reg2reg 路径总是修不好聊聊 Path Groups 的“分组优化”之道Path Groups Critical Range Weight 三招搞定路径优化策略— — — — — — — — —一、痛点引入工具“偏心”的优化策略在后端时序优化的日常搬砖中你是否遇到过这样的困惑明明 reg2reg 路径才是设计的核心关注点但工具偏偏在那边疑狂优化 in2reg 和 reg2out 路径对 reg2reg 路径却视而不见这不是工具出了 Bug而是 EDA 工具的默认行为——在一个 Path Group 内工具只会对最 critical延时最长的那条路径做独立优化其余 sub-critical 路径全部“躺平”。更糟糕的是我们通常会在 in2reg 和 reg2out 路径上加上 over-constraint过约束一旦这些路径成为 critical path它们就会“霸占”优化资源导致我们最关心的 reg2reg 路径完全得不到优化。同理reg2cg、reg2ram、ram2reg 这类特殊路径也存在类似问题。[Warning] 核心痛点在默认情况下整个 Design 只有一个 path groupover-constrained 的 I/O 路径会阻碍 reg2reg 路径的优化那么如何打破这个困局答案就是——Path Groups路径分组。二、Path Groups 原理解析2.1 什么是 Path GroupsPath Groups 是 ICC2/Innovus 等 EDA 工具中用来对 timing path 进行分组的概念。通过将不同类型的路径划分到不同的组中工具可以对每个组独立进行时序优化从而避免某一类路径“独占”优化资源的问题。在用户不主动创建 Path Group 的时候DC/ICC 等工具默认整个 Design 中只存在一个 path group。这意味着所有 timing pathin2reg、reg2reg、reg2out、in2out都在同一个组里竞争优化资源。2.2 为什么需要 Path Groups定义 Path Groups 后可以带来以下关键优势[OK] 独立优化不同路径组的路径可以独立优化互不干扰[OK] 精准定位可以分别查看各组的 timing 状况Setup/Hold WNS/TNS快速找到问题所在[OK] 灵活控制通过 Weight 权重分配优化资源难修路径可以设置更高优先级[OK] 分而治之方便逐个击破不同类型的时序问题2.3 如何定义 Path Groups使用 group_path 命令来自定义路径分组。以下是一个典型的分组方式# Path Group 定义示例 # 输入路径组从所有输入端口出发的路径group_path -name INPUTS -from [all_inputs]# 输出路径组到所有输出端口的路径group_path -to [all_outputs]# 组合逻辑路径组从输入到输出的纯组合路径group_path -name COMBO -from [all_inputs] -to [all_outputs][Tip] 执行上述命令后寄存器之间的 reg2reg 路径会自动归入 default 路径组无需手动指定。2.4 -from / -to 选项的优先级规则这里有一个容易踩坑的知识点组合逻辑路径in2out会同时出现在 INPUTS、OUTPUTS 和 COMBO 的定义范围中。那它到底属于哪个 Path Group 呢规则-from 选项的优先级高于 -to 选项。同时使用 -from 和 -to 的命令如 COMBO 组优先级最高会覆盖仅有 -from 的命令的结果。具体归属逻辑如下执行顺序命令效果1group_path -name INPUTS -from [all_inputs]组合路径先归入 INPUTS2group_path -name OUTPUTS -to [all_outputs]组合路径不被移走-from 优先级 -to3group_path -name COMBO -from [all_inputs] -to [all_outputs]组合路径最终归入 COMBO同时指定优先级最高2.5 查看和报告 Path Groups使用 report_path_groups 命令查看当前设计中定义的所有 Path Group 及其权重# ICC2 中查看 Path Groupreport_path_groups# 查看指定 mode 的 Path Groupreport_path_groups -modes {func test}以下是 report_path_groups 的典型输出# Path groups for mode func# Path_Group Weight From/Through/To# ---------------------------------------------------# **default** 1.00# **in2reg_default** 1.00# **reg2out_default** 1.00# **in2out_default** 1.00# PCI_CLK 1.00 to [get_clocks {PCI_CLK}]# SDRAM_CLK 1.00 to [get_clocks {SDRAM_CLK}]# SYS_CLK 1.00 to [get_clocks {SYS_CLK}]注意为什么不需要从 all_inputs 中排除时钟输入端口因为 group_path 识别的是 timing path 的起点时钟端口只是寄存器的 clock pin不是 timing path 的 startpoint所以不会出现在 INPUTS 路径组中。三、Critical Range让工具不只盯着“老大”3.1 默认优化的局限性定义 Path Groups 后虽然不同类型的路径可以独立优化了但工具在每个组内仍然只优化最 critical 的那一条路径。那些稍微差一点点的 sub-critical 路径即“老二”“老三”们依然被忽略。在某些数据通路设计中很多时序路径是相互关联的。优化 sub-critical 路径可能反而有助于改善 critical path。因此我们需要一种方法让工具对一定范围内的 sub-critical 路径也进行优化。3.2 Critical Range 的定义与用法Critical Range关键范围的作用是在 critical path 的 WNSWorst Negative Slack范围内对所有路径进行优化。例如如果 critical path 的 slack 为 -2.5ns设置 critical range 为 2ns则 slack 在 -2.5ns 到 -0.5ns 之间的所有路径都会被优化。# Critical Range 设置示例 # 方法1对整个设计设置 Critical Rangeset_critical_range 2 [current_design]# 方法2在定义 Path Group 时直接指定group_path -name INPUTS -from [all_inputs] -critical_range 0group_path -name CLK2 -critical_range 0.1[Tip] 建议将 critical range 的值设置为不超过 critical timing path 总值的 10%。过大的 critical range 会导致优化时间显著增长。3.3 Critical Range 的关键约束[Warning] 如果优化导致 critical timing path 的时序变差工具将不会改进 sub-critical path 的时序Critical Range 绝不允许“牺牲老大来拯救小弟”。Critical Range 与 Path Group 的核心区别特性Path GroupsCritical Range优化范围不同路径组之间同一路径组内的 sub-critical 路径允许牺牲可以牺牲一组时序来改善另一组不允许牺牲 critical path 改善 sub-critical副作用可能使最差路径时序变差不会使最差路径时序变差四、Weight 权重设置让工具知道谁更重要4.1 Weight 的作用原理Weight权重是在创建 Path Group 时设置的参数它控制着该路径组在工具 cost function代价函数中的比重。权重越大工具分配给该路径组的优化 effort 就越大。在实际设计中某些路径天生就比其他路径更难优化。例如 reg2cg寄存器到时钟门控单元的路径由于时钟门控单元的 insertion delay 较大这类路径往往更难收敛。此时可以为 reg2cg 创建单独的 Path Group 并设置更大的 weight。4.2 Weight 的使用规范# Weight 设置示例 # 在 group_path 时指定权重group_path -name reg2cg -to [all_clock_gating_pins] -weight 5.0# 对现有路径组修改权重set_path_group_weight -group reg2cg -weight 10.0Weight 参数的使用规范如下# Weight 参数范围与行为# 有效范围0.0 ~ 100.0# 默认值 1.0# 权重 0.0该 Path Group 中的路径完全被排除在 cost function 之外# 权重越大工具分配更多的优化 effort 给该组路径[Warning] 请勿使用非常小的权重值例如 0.0001过小的值可能会阻止工具对设计做微小的改进。五、实战总结与最佳实践5.1 Path Group Critical Range 组合使用同时使用自定义 Path Group 和 Critical Range 是一种强大的优化策略。它可以让工具对更多的路径进行优化尤其在数据通路设计中对 sub-critical 路径的优化可能会间接改善 critical path 的时序。组合使用的 Tcl 命令示例# Path Group Critical Range Weight 综合配置 # 1. 定义 I/O 路径组不设 critical range只优化最 critical 路径group_path -name INPUTS -from [all_inputs] -critical_range 0group_path -name OUTPUTS -to [all_outputs] -critical_range 0# 2. 定义组合逻辑路径组group_path -name COMBO -from [all_inputs] -to [all_outputs] -critical_range 0# 3. 定义特殊路径组并设置权重group_path -name CLK2 -critical_range 0.1group_path -name reg2cg -to [all_clock_gating_pins] -weight 5.0# 4. 查看配置结果report_path_groups5.2 代价与收益的权衡使用 Path Group Critical Range 组合策略时需要注意以下代价[Time] 运行时间工具运行时间会显著加长[Mem] 内存消耗需要更多的计算机内存[Data] 收益可能减少 Total Negative SlackTNS即使 Worst Negative SlackWNS不变关键洞察即使工具不能减少 WNS设置 Critical Range 也可能减少 TNS。因为更多的 sub-critical 路径被优化整体设计质量得到提升。5.3 最佳实践清单1. 始终定义 Path Group将 in2reg、reg2out、reg2reg、in2out 分到不同组2. 合理设置 Critical Range不超过 critical path 总值的 10%3. 为难修路径设置高权重如 reg2cg、reg2ram 等路径4. 避免权重为 0.0 或极小值会导致该组路径被完全忽略5. 关注 TNS 而非仅 WNSCritical Range 的价值更多体现在 TNS 改善上6. 资源充裕时再使用组合策略运行时间和内存消耗会显著增加