【Backend Flow工程实践 14】IO / Macro / Row:物理约束如何决定后端实现的搜索空间?
作者Darren H. Chen方向Backend Flow / 后端实现流程 / EDA 工具工程 / 物理约束建模demoLAY-BE-14_io_macro_row标签Backend Flow、EDA、IO、Macro、Row、Floorplan、Physical Constraint上一篇文章讨论了 floorplan 的本质在 placement 之前先建立物理世界的边界、网格、可放置区域和电源骨架。但 floorplan 不是一个单一动作。它内部最关键的三类约束经常被低估IO Macro Row它们分别控制了后端实现的三个方向IO 决定边界连接方式 Macro 决定大对象位置与阻挡关系 Row 决定标准单元合法放置空间。如果说 floorplan 是后端实现的物理世界那么 IO / Macro / Row 就是这个世界里最基础的空间约束系统。本文只讨论一个问题为什么 IO / Macro / Row 会直接决定后端实现的搜索空间一、什么是搜索空间在后端实现中placement、CTS、routing 都不是随意尝试。它们是在一定约束下寻找可接受解。这个“可接受解”的范围就是搜索空间。例如 placement 的搜索空间由这些因素决定core 区域有多大 row 在哪里 哪些区域有 blockage macro 占了哪些区域 IO pin 在边界哪个位置 power stripe 占用了哪些 routing resource 哪些 cell fixed 哪些区域有密度限制 哪些路径需要更短距离。如果搜索空间太大工具需要更多计算。如果搜索空间太小可能根本没有可行解。如果搜索空间定义错误工具会在错误问题上努力。所以IO / Macro / Row 的意义不是“设置一些物理对象”而是定义后续所有优化算法能搜索、不能搜索、应该重点搜索的空间。二、IO边界不是外壳而是连接契约IO pin 位于 block 边界附近看起来只是接口位置。但从系统角度看IO 是设计和外部世界的连接契约。它决定外部信号从哪里进入 输出信号从哪里离开 clock/reset 从哪里进入 power/ground 如何进入 上下游 block 如何对接 top-level routing 如何接入 封装或上层芯片如何连接。因此IO 不是“最后补一下 pin”而是 floorplan 初期就必须考虑的边界约束。IO 位置会直接影响内部逻辑聚集方向 timing path 长度 routing congestion clock entry point macro placement 电源连接 top-level integration。三、IO pin 为什么影响内部布局假设一个输入端口in1位于芯片左侧。它驱动的逻辑如果被 placement 放到最右侧就会产生更长 wirelength 更高 delay 更多 routing resource 更高拥塞风险 更差时序余量。所以 IO pin 位置实际上给内部 placement 提供了空间偏置。可以理解成IO pin 是逻辑图映射到物理平面的边界锚点。多个 IO 共同形成边界引力场。如果 IO 顺序和内部逻辑关系严重不匹配placement 就会承受很大压力。因此 IO planning 的目标不是把 pin 放得整齐而是让边界连接和内部逻辑结构尽量一致。四、IO 约束有哪些层次IO 约束至少有四层。1. 方向约束输入 pin 输出 pin 双向 pin clock/reset pin power/ground pin不同 pin 类型对 placement 和 routing 的影响不同。2. 边界约束left right top bottom specific edge specific slot边界位置决定外部连接方向。3. 排序约束pin order bus order group order interface order排序影响 routing 交叉数量。4. 物理约束layer width spacing offset track alignment blockage shielding这些决定 pin 是否可制造、可连接、可布线。所以 IO planning 不是单纯 name-to-location而是接口语义到物理位置的映射。五、Macro大对象不是大 cellMacro 和 standard cell 不同。Standard cell 通常数量多、尺寸小、可自由移动。Macro 通常数量少、尺寸大、内部结构固定对设计空间影响巨大。Macro 可能是SRAM ROM PLL analog block IP block hard macro pre-routed blockMacro 的特点是面积大 pin 位置固定 内部不可穿透或部分不可穿透 需要电源连接 可能有 keepout 可能有方向限制 可能影响 clock/reset 分布 可能造成 routing channel 瓶颈。所以 macro 不是“大一点的 cell”而是改变全局搜索空间的硬约束。六、Macro 放置为什么是 floorplan 的核心因为 macro 的位置会决定标准单元可用区域 routing channel 关键路径长度 IO 到逻辑的连接路径 power stripe 拓扑 clock tree 形态 局部拥塞分布。一个 macro 放错位置后续可能出现某些区域没有足够 row macro pin 附近拥塞 macro 之间 channel 太窄 关键路径绕远 clock tree 不平衡 power connection 困难 routing DRC 爆发。这些问题到了 placement 或 routing 阶段才暴露时通常代价很高。所以 macro placement 是 floorplan 中最需要提前思考的部分之一。七、Macro 的三类空间影响Macro 对搜索空间的影响可以分为三类。1. 占用空间Macro 本体区域不能放标准单元。这会减少可用 placement area。2. 阻挡空间Macro 上方或周围可能存在 routing blockage。这会减少可用 routing resource。3. 影响空间Macro 附近可能需要 halo、keepout、channel。这会影响周围 cell 放置和布线密度。所以一个 macro 的真实影响范围往往大于它的几何边界。八、Macro pin 是连接热点Macro pin 通常集中在某几条边上。如果很多逻辑都要连接到 macro pin就会在 macro 边界附近形成连接热点。这会导致pin access 拥塞 local route congestion buffer 插入困难 timing path 堆积 clock/reset 接入困难。因此 macro placement 不只看 macro 之间是否摆得下还要看 macro pin 朝向和逻辑分布是否匹配。一个常见方法是让 macro pin 朝向主要逻辑区域 给 macro pin 一侧留足 routing channel 避免多个 macro pin 面对面挤在狭窄通道里 为 high fanout/control signal 预留通路。九、Row标准单元搜索空间的底层网格Row 是 standard cell 的合法放置轨道。如果没有 rowplacement 就没有合法落点。Row 决定cell 可以放在哪些 y 坐标 cell 可以在 x 方向怎样对齐 不同高度 cell 是否能放置 power rail 是否能对齐 legalizer 如何移动 cell density 如何计算 tap/endcap 如何插入。所以 Row 不是可视化背景而是标准单元搜索空间的离散化结构。十、为什么 Row 会影响优化结果Placement 算法可以先在连续空间中估算位置但最终必须 legalize 到 row/site。如果 row 规划不合理会出现global placement 看起来不错 legalization 后 wirelength 变差 cell 被推离理想位置 局部拥塞上升 critical path 被拉长 density 分布失真。也就是说row 不只是决定合法性也会反过来影响优化质量。如果可用 row 被 macro、blockage、电源结构切得太碎placement 就很难产生稳定结果。十一、Row、Macro、Blockage 的耦合Row 经常会被 macro 和 blockage 打断。例如macro 区域不能有 standard cell row macro halo 内可能不能放 cell power switch 区域可能限制 row route blockage 区域可能影响 local density keepout 区域需要 row 切割。因此row 不是一次生成就结束。它要和 macro/blockage 一起检查row 是否穿过 macro row 是否进入 keepout row 是否存在过短碎片 row 是否导致孤立可放置区域 row 是否支持后续 cell legalization。如果 row 被切得太碎placement 会变得非常困难。十二、IO / Macro / Row 如何共同约束搜索空间三者的关系可以画成这样IO Boundary ConstraintsPlacement Search SpaceMacro Occupancy and BlockageRow and Site GridLegal Cell LocationsRouting ChannelsTiming Path GeometryPower Connection FeasibilityPlacement ResultRouting ResultTiming ResultPower Integrity这说明IO 决定边界连接方向 Macro 决定大块占用与通道 Row 决定标准单元可落点。三者共同定义了后端实现的基础搜索空间。十三、物理约束要先做 consistency check在进入 placement 前必须检查 IO / Macro / Row 约束是否自洽。典型检查包括IO pin 是否超出边界 IO pin layer 是否可用 IO pin 是否重叠 macro 是否越界 macro 是否互相 overlap macro halo 是否导致无通道 row 是否穿过 macro row 是否足够连续 row site 是否匹配 cell library 可用 row 面积是否满足 utilization power/ground pin 是否能连接。如果这些检查不做placement 失败后很难定位根因。十四、为什么物理约束需要报告化IO / Macro / Row 都是空间约束。空间约束最容易出现的问题是肉眼看着差不多 实际数据库状态不对。例如图上 macro 没有 overlap但 halo overlap 图上 row 很多但可用 row 面积不足 图上 pin 在边界但 layer 不合法 图上 channel 看着够实际 routing track 不够。所以必须生成报告。建议输出io_pin_summary.rpt io_order_check.rpt macro_summary.rpt macro_overlap_check.rpt macro_channel_check.rpt row_site_summary.rpt row_fragment_check.rpt placement_area_summary.rpt constraint_consistency.rpt这些报告会让空间约束从“图形感受”变成“工程证据”。十五、一个推荐的约束建模顺序正式 flow 中不建议随意交叉修改 IO、macro、row。更清晰的顺序是1. 建立 die/core 2. 导入或定义 IO 约束 3. 放置 macro 4. 设置 macro halo / blockage 5. 生成或修正 row 6. 检查 row 与 macro/blockage 的关系 7. 检查可用 placement area 8. 检查 routing channel 9. 生成约束 summary 10. 进入 placement这个顺序的核心是先固定大尺度空间约束再让小尺度对象搜索。Macro 和 IO 是大尺度约束。Row 是标准单元搜索网格。Placement 是在这些约束中寻找解。十六、Demo 应该验证什么本篇对应 demo 不需要做复杂 macro floorplan。它应该验证是否能读取 IO port 是否能生成 IO summary 是否能识别 macro 或模拟 macro constraint 是否能生成 row/site summary 是否能检查 row 与 blockage 的关系 是否能输出 placement area summary 是否能报告约束一致性。建议输入最小 Verilog / LEF / Liberty floorplan config IO constraint config macro placement config row/site config。建议输出io_macro_row_precheck.rpt io_pin_summary.rpt macro_constraint_summary.rpt row_site_summary.rpt placement_area_summary.rpt constraint_consistency.rptDemo 的重点不是做复杂布局而是建立一个可解释的物理约束模型。十七、总结IO / Macro / Row 分别从三个方向约束工具IO 定义边界连接 Macro 定义大对象占用、阻挡和连接热点 Row 定义标准单元合法落点。这三者共同决定哪些位置可放 哪些区域不可放 哪些通道可走线 哪些路径可能变长 哪些区域会拥塞 哪些对象后续难以优化。所以后端实现不是先让工具“随便放一版”再说而是先把物理搜索空间定义清楚。结尾一句话IO、Macro 和 Row 表面上是 floorplan 的三个元素。从底层看它们是 Backend Flow 给 placement 和 routing 设置的边界条件。边界条件不清楚后面的优化结果就很难稳定也很难解释。