作者Darren H. Chen方向Backend Flow / 后端实现流程 / EDA 工具工程 / PlacementdemoLAY-BE-15_placement标签Backend Flow、EDA、Placement、Timing、Congestion、Power、Legalization、Physical OptimizationPlacement 是很多人最容易直观理解的后端步骤把标准单元放到芯片上。但如果只停留在这个理解就会严重低估 placement 的复杂性。真正的 placement 不是简单“摆放 cell”而是在一个被 floorplan、IO、macro、row、library、timing constraint、routing resource 共同限定的物理空间中寻找一个多目标折中解。这个解必须同时考虑时序 拥塞 功耗 面积 合法性 可布线性 可修复性所以placement 的本质不是几何排布而是在物理空间中对逻辑图进行多目标优化映射。本文从底层架构角度讨论为什么布局优化本质上是时序、拥塞、功耗和合法性的折中一、Placement 的输入不是只有 netlist很多人以为 placement 的输入是netlist但真正进入 placement 阶段时工具需要的输入远不止这些。至少包括linked design database standard cell library LEF physical abstract Liberty timing/power model floorplan row/site macro/blockage IO placement power structure timing constraints design rules routing layer/resource placement parameters如果这些输入中任何一类不正确placement 结果都会受到影响。例如row 错误 - legal placement 失败 pin shape 错误 - route congestion 判断失真 Liberty 错误 - timing-driven placement 失真 floorplan 错误 - cell 被推到不合理区域 macro blockage 错误 - routing channel 不足 SDC 错误 - critical path 判断错误。所以 placement 不是孤立算法而是前面所有工程建模结果的综合消费者。二、Placement 在数据库中改变了什么Placement 的直接结果是 cell location。但从数据库角度看它改变的不只是坐标。它还会改变cell placement status cell density distribution net estimated wirelength pin-to-pin physical distance timing delay estimation congestion map buffer/sizing opportunities clock tree 起点条件 routing initial condition因此一个 placement 结果会影响后续所有阶段。可以抽象为PlacementState { cell_locations, placement_status, density_map, estimated_wirelength, congestion_estimation, timing_estimation, physical_context_for_cts, routing_initial_condition }这就是为什么 placement 一旦质量不好后面的 CTS 和 routing 很难完全补救。三、Placement 的第一目标合法性Placement 首先必须合法。合法性包括cell 放在 row 上 cell 对齐 site cell 不 overlap cell 不超出 core cell 不进入 blockage orientation 合法 multi-height cell 放置合法 fixed object 不被移动 power rail 对齐 cell spacing 满足基本规则。没有合法性任何时序、功耗、拥塞优化都没有意义。这就像城市规划中建筑不能先放到河里、路上或别人的地块里。但合法性只是底线不是最终目标。一个 placement 可以合法但仍然很差wirelength 很长 critical path 分散 local density 很高 routing congestion 很严重 power hotspot 明显 clock sink 分布不合理。所以 placement 需要在合法性之上继续优化。四、Placement 的第二目标Wirelength最基础的 placement 目标是减少 wirelength。因为 wirelength 会影响delay capacitance transition routing resource dynamic power congestion短线通常更好。但问题在于不能所有 net 都同时变短。一个 cell 往左移动可能让某些 net 变短也让另一些 net 变长。所以 placement 是图嵌入问题逻辑连接图 ↓ 映射到二维物理平面 ↓ 尽量减少全局连接代价这里的难点是图结构复杂 fanout 分布不均 macro 和 blockage 切割空间 IO 固定在边界 timing constraint 给不同 net 不同权重。因此 wirelength 是重要目标但不能单独决定 placement。五、Placement 的第三目标TimingTiming-driven placement 的核心是关键路径上的对象应该在物理上更接近或者获得更好的优化机会。时序不是简单由逻辑级数决定。在后端阶段互连延迟往往非常重要。Placement 会直接影响net length load capacitance transition cell delay interconnect delay setup slack hold risk clock path balance因此timing-driven placement 会给不同对象不同优先级。例如critical path 上的 cell 需要更紧凑 高扇出控制信号可能需要更合理分布 clock-related cell 需要考虑后续 CTS 长路径可能需要预留 buffer 空间 跨 macro 的路径需要避免绕远。但问题是时序最优的 placement 未必拥塞最低 拥塞最低的 placement 未必面积最小 面积最紧的 placement 未必可布线 局部优化一条路径可能损害另一组路径。所以 timing 只是 placement 的一个重要目标而不是唯一目标。六、Placement 的第四目标CongestionCongestion 是 placement 中最容易被低估的目标之一。Placement 阶段并没有真正完成详细布线但工具会估算 routing demand 和 routing resource。如果某个区域很多 net 需要穿过 pin density 很高 macro channel 很窄 power stripe 占用了 routing layer local cell density 很高 routing track 不足。就可能形成 congestion hotspot。Congestion 会导致route detour wirelength 增加 delay 增加 DRC 增加 via 数增加 runtime 增加 routing failure。所以 placement 必须考虑可布线性。一个看起来 timing 很好的 placement如果把大量连接挤到狭窄通道里后续 routing 可能无法收敛。七、Placement 的第五目标PowerPlacement 也会影响功耗。主要体现在wire capacitance buffer insertion clock sink distribution switching activity region power density IR drop sensitivity cell leakage selection opportunity。如果 placement 让相关逻辑过度分散wire capacitance 会增加动态功耗会上升。如果 clock sink 分布很差后续 clock tree 可能更长clock power 增加。如果高活动区域过于集中可能带来局部 power density 问题。所以 placement 不只是 timing 和 congestion也和 power 强相关。八、Placement 的第六目标可修复性真实工程里第一次 placement 很少就是最终结果。后面还要经历CTS route timing closure hold fix ECO signoff fix因此一个 placement 结果不仅要当前看起来好还要给后续修复留空间。例如critical path 附近是否有 buffer 空间 hold fix 是否有插 cell 空间 route detour 是否可接受 ECO spare cell 是否分布合理 local density 是否过高 macro pin 附近是否太满。可修复性是成熟 flow 很重视的指标。因为一个指标暂时好但没有修复空间后续阶段可能很难收敛。九、Placement 的典型阶段Placement 通常不是一个单步动作。可以抽象为global placement legalization detailed placement placement optimization incremental placement1. Global Placement目标是形成大致分布。此时更关注wirelength density timing cost congestion estimation2. Legalization目标是把 cell 放到合法 row/site 上消除 overlap。此时更关注合法性 最小扰动 row capacity fixed object blockage3. Detailed Placement目标是在局部进一步改善。例如cell swap local reorder small movement density smoothing wirelength improvement4. Placement Optimization目标是结合 timing/congestion/power 做物理优化。可能涉及buffer resize clone move restructure spacing critical path improvement不同工具命令不同但底层阶段思想类似。十、Placement 的底层架构视角从工具内部看placement 需要多个模型协同。Design Netlist GraphPlacement EngineFloorplan / Row / MacroLibrary Timing Power Physical ModelsTiming ConstraintsRouting Resource ModelCell LocationsDensity MapEstimated CongestionEstimated TimingPlacement ReportsCTSRoute PreparationTiming Closure这说明 placement engine 不是只读 netlist而是同时读逻辑图 物理空间 库模型 时序约束 routing resource然后输出一个综合折中结果。十一、为什么 Placement 结果必须报告化Placement 不能只看 GUI 图。必须生成报告。典型报告包括placement_summary.rpt utilization_after_place.rpt density_map_summary.rpt congestion_estimation.rpt placement_timing_summary.rpt unplaced_cells.rpt overlap_check.rpt fixed_cell_check.rpt placement_optimization.rpt这些报告回答是否还有 unplaced cell 是否合法 density 是否过高 congestion 是否集中 timing 是否改善 critical path 是否仍然很长 是否有大量 cell 被推到边界 是否有 macro 周边拥塞没有报告placement 就只能靠图形印象判断。有了报告placement 才能被比较和复盘。十二、Placement 不应该只看单一指标一个常见错误是只看wirelength或者只看WNS/TNS但 placement 是多目标问题。应该同时看timing congestion density legality wirelength power runtime 后续可修复性例如结果可能问题timing 好但 congestion 高routing 后 timing 可能反弹congestion 低但 wirelength 长delay 和 power 可能变差utilization 高后续 ECO/hold fix 空间不足local density 高legalize 和 route 风险增加WNS 改善但 TNS 变差只改善少数路径整体更差placement 合法但 macro 周边拥塞后续 route 难收敛所以 placement 分析一定要多维。十三、Placement 的方法论先看可行性再看优化性Placement 分析可以分两层。第一层可行性先问是否全部 cell 已放置 是否没有 overlap 是否符合 row/site 是否没有明显 density 爆点 是否没有明显 macro channel 问题 是否 routing congestion 可接受如果这些不满足就不要急着谈 timing 优化。第二层优化性再问critical path 是否改善 wirelength 是否合理 buffer/sizing 是否有空间 clock sink 分布是否合理 功耗和密度是否均衡 后续 ECO 是否有空间也就是说先能放再放好。十四、Placement 和 Floorplan 的反馈关系Placement 结果也会反过来验证 floorplan。如果 placement 后发现某个 macro channel 拥塞极高 IO 到逻辑路径过长 局部 row 面积不足 某个区域 cell 密度异常 power stripe 附近 routing demand 过高。这可能说明 floorplan 需要调整。因此placement 不只是一个阶段结果也是 floorplan 质量的反馈。一个成熟流程应该允许floorplan ↓ placement ↓ report ↓ floorplan adjustment ↓ placement rerun但每次调整都应该有报告依据而不是凭感觉移动 macro 或改变 core size。十五、Placement 脚本应该怎么组织Placement 脚本不应该只是place_optimize更合理的结构是01_place_precheck.tcl 02_set_place_options.tcl 03_run_global_place.tcl 04_run_legalization.tcl 05_run_place_opt.tcl 06_report_placement.tcl 07_check_place_quality.tcl每个阶段都要有边界输入是否满足 命令是否成功 关键报告是否生成 失败是否停止 结果是否可比较。Placement 阶段通常耗时较长副作用也大所以更需要 stage control 和 log/cmd.log 支撑。十六、Demo 应该验证什么本篇对应 demo 不必完成工业级 placement。它应该验证 placement 阶段的工程骨架是否存在 linked design 是否存在 floorplan/row 是否能探测 placement 相关命令 是否能执行最小 placement 或模拟 stage 是否能生成 placement summary 是否能检查 unplaced/overlap/density 是否能输出 placement quality report。建议输入最小 Verilog/LEF/Liberty floorplan 结果 row/site placement config timing constraint。建议输出placement_precheck.rpt placement_command_probe.rpt placement_summary.rpt placement_legality_check.rpt placement_quality_summary.rpt placement_stage_summary.rptDemo 的重点不是追求 QoR而是验证 placement 阶段如何被脚本化组织、记录和评估。十七、总结Placement 要把逻辑图映射到物理空间而这个映射同时影响cell 合法位置 wirelength timing delay routing congestion power consumption clock distribution ECO 修复空间。如果只追求单一指标就可能牺牲其他关键目标。所以 placement 的核心不是“把 cell 放下去”而是在合法物理空间中寻找一个同时满足 timing、congestion、power、legality 和可修复性的折中解。这就是 placement 作为后端核心阶段的真正复杂度。结尾一句话Placement 的表面结果是一组 cell 坐标。但它真正输出的是后续 CTS、routing、timing closure 能否继续推进的物理初始条件。所以判断 placement 成熟与否不能只看图形是否整齐而要看它是否为后续实现留下了可收敛的空间。