4. 布局阶段核心概念
布局(Placement)是物理实现流程中承上启下的关键阶段。它把综合后的门级网表映射到芯片版图的行(row)结构上,决定了标准单元、宏单元和I/O的物理位置。布局质量直接决定后续时钟树综合(CTS)和布线(Route)能否收敛。在Synopsys ICC2中,布局主要由place_opt命令驱动,其内部把布局拆分为全局布局(Global Placement)和详细布局(Detail Placement)两个阶段,并穿插拥塞与时序的优化迭代。
Global Placement与Detail Placement的本质区别
全局布局的目标是“大致定位”。它把每个标准单元视为可重叠的点,通过最小化线长(如HPWL,半周长线长)和时序代价函数,把单元“推”到芯片上合理的区域。此时单元允许重叠、允许落在row之外,甚至允许落在宏单元上方。全局布局求解的是一个连续优化问题,常用解析法(如二次规划、非线性优化)或基于划分的方法。它回答的是“这个单元应该放在芯片的哪个区域”,而不是“放在哪一行哪一列”。
详细布局的目标是“合法化并微调”。它把全局布局的结果作为初始位置,在保持row结构、电源轨对齐、单元不重叠的前提下,把每个单元吸附到合法的site上。详细布局会做局部移动、单元交换(swap)、单元重定位,以进一步降低线长和消除重叠。它回答的是“这个单元具体落在哪个site”。
两者的核心差异可以概括为:全局布局是连续域、允许重叠、以区域为目标;详细布局是离散域、禁止重叠、以site为目标。ICC2中,place_opt会自动调度这两个阶段,用户通常不需要手动分别调用,但理解其分工有助于读懂日志和调试结果。
拥塞与时序的权衡
布局阶段最核心的矛盾是拥塞(Congestion)与时序(Timing)的权衡。拥塞来源于局部区域单元密度过高或引脚密度过大,导致布线资源不足。时序则要求关键路径上的单元彼此靠近,以减少线延迟。两者常常冲突:把关键路径单元拉近会加剧局部拥塞;为了缓解拥塞把单元分散开,又会拉长关键路径。
ICC2的place_opt通过拥塞图和时序图共同驱动布局。拥塞图(congestion map)把芯片划分为网格(gcell),统计每个gcell的布线需求与供给,得到overflow值。时序图则基于路径的slack,对负slack路径上的单元施加“吸引力”。在迭代过程中,工具会先做时序驱动布局,再检查拥塞热点,对热点区域施加“排斥力”或降低密度,然后重新评估时序。用户可以通过report_congestion查看overflow分布,通过report_timing查看WNS/TNS变化。
实际项目中,如果拥塞严重(如overflow > 5%),应优先缓解拥塞,因为布线阶段无法修复严重拥塞;如果时序紧张但拥塞可控,则应加强时序驱动。ICC2提供set_place_opt_options或直接在place_opt中指定-congestion和-timing_driven来调整权重。一个常见的策略是:先以拥塞为主跑一轮,观察时序是否可接受;若时序恶化过多,再提高时序权重重跑。
布局合法化与优化目标
布局合法化(Legalization)是详细布局的核心任务,要求每个标准单元落在合法的row site上,电源轨与row对齐,单元之间不重叠,且满足方向(orientation)约束。合法化不是简单的“四舍五入”,因为大量单元同时吸附到最近site会产生新的重叠,需要局部搜索和交换来消除。
布局的优化目标是一个多目标函数,通常包括:线长(HPWL)、时序(WNS/TNS)、拥塞(overflow)、密度(density)、功耗和可布线性。ICC2在place_opt中通过代价函数加权这些目标,并在迭代中动态调整权重。用户可以通过report_qor查看布局后的QoR指标,通过check_legality验证合法化结果。
check_legality返回无违规,所有单元在合法site上;report_congestion显示最大overflow低于3%~5%(视工艺和设计而定);report_timing显示WNS没有比综合后显著恶化(通常允许一定退化,但不应超过10%~15%);- 利用率(utilization)在合理范围,通常70%~85%,过高会加剧拥塞。
ICC2中place_opt的选项与运行策略
ICC2的place_opt命令提供了丰富的选项来控制布局行为。以下是一个典型的高努力度时序驱动布局脚本示例:
# 设置布局选项
set_app_options -name place_opt.flow.enable_ccd -value true
set_app_options -name place_opt.flow.enable_global_route -value true
# 运行place_opt
place_opt -effort high \
-congestion \
-timing_driven \
-num_cpus 8
# 检查结果
check_legality
report_congestion -gcell_type all
report_timing -max_paths 10
report_qor
关键选项说明:-effort high会增加迭代次数和优化力度,适合时序紧张或拥塞严重的设计;-congestion启用拥塞驱动,工具会在布局时主动分散高密度区域;-timing_driven启用时序驱动,对关键路径单元施加位置约束;-num_cpus指定并行核数,加速运行。
运行策略上,建议分阶段推进:第一轮用-effort medium快速评估布局质量,查看拥塞和时序基线;如果拥塞热点集中,先用-congestion跑一轮缓解;如果时序差距大,再叠加-timing_driven和-effort high。每次运行后都要用report_congestion和report_timing对比,避免盲目追求单一指标。
place_opt后务必执行check_legality。
总结来说,Global Placement负责“区域定位”,Detail Placement负责“site合法化”,两者通过迭代与拥塞/时序反馈紧密耦合。理解这一分工,掌握place_opt的选项与运行策略,是布局阶段收敛的基础。