三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

避坑指南:ICC布局规划中那些新手容易忽略的细节(宏放置、PNS、时序收敛)

避坑指南:ICC布局规划中那些新手容易忽略的细节(宏放置、PNS、时序收敛)

ICC布局规划避坑指南:宏放置、PNS与时序收敛的实战细节

在芯片设计流程中,布局规划阶段往往决定了整个项目的成败。许多工程师在完成基础培训后,面对实际项目仍会陷入各种"陷阱"——那些看似简单却影响深远的操作细节。本文将聚焦三个最易被忽视的核心环节:宏单元放置策略、电源网络综合(PNS)的完整流程,以及时序收敛的前置分析。通过拆解LAB2实验中的典型场景,我们不仅还原问题现象,更揭示背后的物理实现原理。

1. 宏单元放置:从基础操作到深层优化

手动放置宏单元是布局规划的第一步,也是错误率最高的环节之一。在LAB2实验中,PLL宏的放置过程暴露了多个值得深究的技术细节。

1.1 锁定机制的本质差异

初学者常混淆set_dont_touch与set_dont_touch_placement的区别:

  • 物理冻结:后者专为防止虚拟平面布局(VF)过程中的位置变动,执行后会生成物理约束标记
  • 逻辑保护:前者仅阻止逻辑优化但允许物理位置调整

实际操作中,对PLL等敏感宏应使用组合命令:

set_dont_touch [get_cells I_PLL*] set_dont_touch_placement [get_cells I_PLL*]

1.2 飞线引导的放置策略

通过show flylines可视化连接关系时,需注意:

  1. 飞线长度估算基于中心点距离,忽略绕线障碍
  2. 对于高速时钟路径,建议实际间距比飞线显示增加20%

典型优化流程:

  1. 使用select_objects -type macro选取目标宏
  2. 激活flyline_analysis模式观察关键连接
  3. 采用move_objects -x_offset -y_offset微调位置

1.3 约束脚本的加载时机

macro_place_cons.tcl与keepout.tcl的加载顺序会导致结果差异:

加载顺序宏聚集度通道利用率后续布线难度
VF前加载高低易
VF后加载中高难

最佳实践:在首次VF布局后分析拥塞图,再决定是否重加载约束:

create_fp_placement -timing_driven report_congestion -grc_based source scripts/macro_place_cons.tcl source scripts/keepout.tcl create_fp_placement -incremental

2. 电源网络综合:超越PNS的完整流程

许多工程师误将PNS等同于完整的电源网络实现,实际上它只是整个流程中的一环。LAB2实验揭示了三个关键补充步骤。

2.1 PNS前的预备工作

在运行commit_fp_rail前必须完成:

  1. 宏组环创建:使用create_fp_group_block_ring为相关宏建立统一供电
  2. 金属层规划:通过set_fp_rail_constraints定义各层优先级
  3. IR Drop目标:用set_fp_rail_voltage_area设置允许压降范围

典型配置示例:

set_fp_rail_constraints -add_layer \ -layer METAL5 -direction horizontal -max_strap 20 set_fp_rail_constraints -add_layer \ -layer METAL4 -direction vertical -max_strap 15

2.2 后处理的双重预布线

PNS完成后必须执行:

  1. preroute_instances:连接宏单元电源引脚
  2. preroute_standard_cells:填充标准单元行电源

注意:忽略第二步会导致标准单元供电不完整,后续时序分析将完全失真

2.3 金属层阻塞设置

通过set_pnet_options防止单元放置在电源带下方:

set_pnet_options -complete "METAL4 METAL5" create_fp_placement -incremental

这一步骤常被忽视,导致:

  • 电源网络寄生参数计算偏差
  • 单元与电源带间的串扰风险

3. 时序收敛:隐藏在全局布线前的关键检查

在LAB2的时序验证环节,80%的初学者会直接执行route_zrt_global,却忽略了前置分析的重要性。

3.1 虚拟布线的时序预测

通过预布线分析可提前发现问题:

set_route_mode -early_global true report_timing -delay_type max

关键指标对比:

分析阶段精度速度适用场景
早期全局布线中快初始布局评估
完整全局布线高慢最终签核验证

3.2 拥塞与时序的关联分析

使用组合命令发现潜在问题:

report_congestion -grc_based -overflow_only report_timing -slack_lesser_than 0.5 -max_paths 20

常见关联模式:

  • 局部拥塞:导致路径延迟突增
  • 全局拥塞:造成时钟偏移增大

3.3 优化闭环的建立

采用增量式优化流程:

  1. 运行optimize_fp_timing -fix_design_rule
  2. 检查report_constraint -all_violators
  3. 重复route_zrt_global -incremental

经验值:通常需要3-5次迭代才能达到零违例

4. 实战中的复合问题排查

当多个问题同时出现时,建议按以下优先级处理:

4.1 诊断流程树

1. 检查电源完整性 └─ IR drop > 5% → 调整PNS参数 2. 分析时序违例 └─ 建立时间违例 → 优化单元布局 3. 验证物理规则 └─ DRC错误 → 修正keepout约束

4.2 典型错误组合及解决方案

错误现象根本原因修正方案
宏周围局部拥塞keepout间距不足增加宏边界约束10-15um
全局IR drop超标strap数量不足降低PNS目标电阻值15%
时钟路径延迟突增缓冲器放置不当手动锁定关键缓冲器位置

4.3 调试脚本模板

保存以下诊断脚本为debug_fp.tcl:

# 电源网络检查 report_power_network -voltage_area all # 拥塞分析 report_congestion -hotspot -threshold 0.7 # 时序验证 report_timing -delay_type max -max_paths 5 -slack_lesser_than 0

在项目实践中,这些看似微小的操作差异往往导致结果的天壤之别。曾经有个设计因忽略preroute_standard_cells步骤,最终时序收敛多花了三周时间。记住:优秀的布局规划不是靠运气,而是对每个细节的精准掌控。

← 返回列表