1. 项目概述
在数字芯片后端设计中,NDR(Non-Default Rule)规则设置是物理实现阶段的关键环节。它直接影响芯片的时序收敛、信号完整性和最终流片成功率。作为从业12年的数字后端工程师,我处理过从28nm到5nm各种工艺节点的NDR规则配置,深知这个看似简单的设置背后隐藏着无数"坑"。
NDR规则本质上是对特定网络(如时钟、复位、高速总线等)进行不同于默认规则的走线约束。合理的NDR设置能有效解决串扰、IR drop、电迁移等问题,而不当的设置则可能导致绕线拥塞甚至设计无法收敛。本文将基于实际项目经验,详解NDR规则的核心配置逻辑和实操技巧。
2. 核心需求解析
2.1 为什么需要NDR规则?
标准单元的默认走线规则(Default Rule)是为普通信号网络设计的,但芯片中总存在需要特殊对待的信号:
- 时钟网络:要求极低的skew和jitter,需要更宽的线宽和更大的间距
- 复位网络:高扇出网络,需要更强的驱动能力
- 高速总线:如DDR接口,需要匹配阻抗并减少串扰
- 模拟信号:如PLL输出,对噪声敏感
以40nm工艺为例,默认规则可能是:
- 最小线宽:0.1um
- 最小间距:0.1um
而时钟NDR通常会设置为: - 线宽:0.2um(2倍默认值)
- 间距:0.2um(2倍默认值)
- 双倍通孔(Double via)
2.2 NDR规则的类型
根据约束目标不同,NDR主要分为以下几类:
| 类型 | 典型应用 | 关键参数 |
|---|---|---|
| 宽度驱动型 | 时钟、复位 | 增大线宽(1.5-3倍默认值) |
| 间距保护型 | 高速总线 | 增大线间距(2-5倍默认值) |
| 屏蔽隔离型 | 敏感模拟信号 | 添加shield(接地保护线) |
| 通孔增强型 | 高可靠性网络 | 双通孔/条形通孔 |
3. 实操配置流程
3.1 工艺文件准备
在Innovus或ICC2中配置NDR前,需要确认工艺文件已包含以下信息:
- 技术节点对应的设计规则文件(tech LEF)
- 通孔定义文件(via map)
- 金属层堆叠定义
重要提示:必须检查工艺文档中的"WIREEXTENSION"参数,这决定了NDR线宽超出标准单元pin端的延伸长度,设置不当会导致DRC错误。
3.2 创建NDR规则集
以Innovus为例,创建时钟NDR的Tcl命令示例:
tcl复制create_routing_rule CLK_NDR \
-widths {M1 0.15 M2 0.15 M3 0.2} \
-spacings {M1 0.15 M2 0.15 M3 0.2} \
-crossover_via M1_M2_double \
-shield_net VSS
关键参数说明:
-widths:按金属层指定线宽-spacings:设置线到线间距-crossover_via:指定通孔类型-shield_net:可选屏蔽网络
3.3 应用NDR到指定网络
将规则应用到时钟网络的典型流程:
tcl复制# 获取时钟网络集合
set clk_nets [get_nets -hier "CLK*"]
# 应用NDR规则
set_routing_rule -rule CLK_NDR $clk_nets
# 设置布线优先级(数值越大优先级越高)
set_net_routing_priority -priority 10 $clk_nets
4. 高级配置技巧
4.1 基于电压域的NDR设置
在多电压域设计中,不同电压网络的NDR需要特殊处理:
tcl复制# 高压网络(1.8V)需要更大间距
create_routing_rule HV_NDR \
-spacings {M1 0.3 M2 0.3 M3 0.4}
# 获取高压域网络
set hv_nets [get_nets -voltage 1.8 -hier *]
# 应用规则并设置间距检查
set_routing_rule HV_NDR $hv_nets
set_net_spacing_rule -rule HV_SPACING $hv_nets
4.2 动态NDR调整策略
在布线不同阶段可动态调整NDR:
- 全局布线阶段:使用宽松规则保证连通性
tcl复制create_routing_rule CLK_NDR_LOOSE -widths {M3 0.18} - 详细布线阶段:应用最终规则
tcl复制create_routing_rule CLK_NDR_FINAL -widths {M3 0.2} -spacings {M3 0.2} - 优化阶段:局部放宽高拥塞区域
tcl复制
set_routing_rule -exceptions {area x1 y1 x2 y2} CLK_NDR_LOOSE
5. 常见问题与解决方案
5.1 布线拥塞问题
现象:NDR网络导致局部绕线资源不足
解决方案:
- 使用
report_route_congestion分析热点区域 - 对非关键分支路径降低NDR强度:
tcl复制set clk_leaf [filter_collection $clk_nets "full_name =~ *leaf*"] set_routing_rule -rule CLK_NDR_LIGHT $clk_leaf - 调整金属层分配策略:
tcl复制
set_routing_rule -layers {M3 M5} CLK_NDR
5.2 时序违例问题
现象:NDR导致线电容增大引发setup违例
调试步骤:
- 提取寄生参数检查电容增量:
tcl复制report_net_parasitics -net CLK_ROOT -format detailed - 对比默认规则与NDR规则的RC差异
- 必要时调整NDR宽度(保持间距不变):
tcl复制modify_routing_rule CLK_NDR -widths {M3 0.18}
5.3 DRC错误问题
典型错误:NDR线宽与标准单元pin不匹配
预防措施:
- 提前检查单元库的pin几何定义:
tcl复制
report_lib_cell -geometry -cell CLK_INV - 确保NDR线宽≥单元pin宽度:
tcl复制create_routing_rule CLK_NDR -widths {M1 0.16} # 假设单元pin宽0.15um - 设置自动端接延伸:
tcl复制set_routing_rule -extension 0.05 CLK_NDR
6. 不同工艺节点的NDR策略
6.1 成熟节点(28nm及以上)
特点:金属层较少,对NDR更敏感
推荐配置:
- 时钟网络:2倍线宽 + 2倍间距
- 总线:1.5倍间距 + 交替层走线
- 复位:1.8倍线宽 + 单屏蔽
6.2 先进节点(16nm及以下)
特点:多层金属,但线RC影响更大
优化策略:
- 采用差分NDR代替单端加宽:
tcl复制create_routing_rule CLK_DIFF_NDR \ -pair {M3 0.14 0.14 0.2} # 线宽 间距 线对间距 - 使用半宽+屏蔽的组合方案:
tcl复制create_routing_rule CLK_SHIELDED \ -widths {M4 0.12} \ -spacings {M4 0.16} \ -shield_net VSS \ -shield_spacing 0.1
7. 验证与签核检查
7.1 物理验证
必须检查的项目:
- 最小间距(minSpacing)
- 最小宽度(minWidth)
- 通孔覆盖(viaEnclosure)
- 线端延伸(endOfLine)
使用Calibre检查命令示例:
code复制DRC CHECK MAP NDR_RULES {
@clk_ndr = NET AREA WHERE (NET.NAME == "CLK*")
@clk_ndr { SPACING >= 0.2 }
}
7.2 电气验证
关键检查项:
- 电迁移(EM)分析:
tcl复制report_em -net_type clock -limit 1e6 - IR drop验证:
tcl复制
analyze_power -net CLK_ROOT -voltage_drop - 信号完整性(SI)检查:
tcl复制
extract_rc -coupling_cap analyze_crosstalk -net_group clock_network
在实际项目中,NDR规则的优化往往需要3-5次迭代。以某5G基带芯片为例,初始NDR设置导致绕线完成率仅87%,通过以下调整最终达到99%:
- 将顶层时钟线宽从0.3um降至0.25um
- 对长距离总线改用间距优先模式
- 在拥塞区域设置NDR豁免区域