4. 早期拥塞预估与快速原型
拥塞问题如果在详细布线阶段才被发现,往往意味着布局已经定型、时序已经优化、时钟树已经插入,此时再回头修改布局,代价极高。因此,Innovus 流程中一个非常关键的工程习惯是:在布局阶段之前,就用早期全局布线或虚拟布线对拥塞做一次快速预估,把潜在的高拥塞区域提前暴露出来,为 floorplan、模块摆放、引脚分配和布局约束提供决策依据。本节讨论的就是这套"快速原型"方法:它做什么、用什么命令、看什么指标、如何判断结果。
为什么要在布局前做拥塞预估
拥塞的本质是局部区域的布线资源需求超过了可用资源。在布局之前,标准单元还没有真正落位,但我们已经知道:模块的面积、模块之间的逻辑连接关系、宏单元(macro)的位置、引脚(pin)的分布、电源网格(power grid)占用的布线层。这些信息足以支撑一次粗略但有效的拥塞估计。
早期预估的价值在于三点:第一,它能在几分钟到几十分钟内给出全芯片的拥塞热图,而不是等到数小时详细布线之后;第二,它允许工程师在 floorplan 阶段就调整宏单元间距、通道宽度、引脚位置;第三,它可以作为布局约束(placement blockage、cell padding、region constraint)的输入,让后续布局主动避开拥塞区。
Innovus 中的早期评估手段
Innovus 提供多种在布局前或布局早期评估拥塞的途径,常用的包括:
- 早期全局布线(earlyGlobalRoute):在只有 floorplan 或粗略布局时执行全局布线,快速估算每个 gcell 的布线需求与供给,输出 overflow 分布。
- 虚拟布线 / 试布线(trialRoute):在布局完成后、详细布线前进行快速试布线,用于验证布局质量,也可在布局早期迭代使用。
- 拥塞地图(congestion map):通过
reportCongestion或图形界面查看水平/垂直方向的 overflow 热图。 - 快速评估流程:结合
place_opt的早期阶段或globalRoute的快速模式,在布局迭代中持续监控拥塞。
这些手段的共同点是:用较低的计算成本换取对拥塞空间分布的快速认知。它们不追求与最终布线完全一致,而是追求"早发现、早干预"。
典型快速评估流程
一个可复用的早期拥塞评估流程通常包含以下环节。假设我们已完成 floorplan,宏单元已摆放,电源网格已规划,标准单元尚未详细布局。
# 1. 设置全局布线层与 gcell 粒度
setPlaceMode -congEffort high
setRouteMode -earlyGlobalMaxRouteLayer 6
# 2. 执行早期全局布线
earlyGlobalRoute
# 3. 生成拥塞报告
reportCongestion -overflow -hotspot
# 4. 查看拥塞热图(GUI)
# GUI: Route -> Congestion -> Show Congestion Map
# 5. 根据结果调整 floorplan 或添加约束
# 例如:调整宏单元间距、添加 placement blockage
createPlaceBlockage -box {100 200 300 400} -type macro
其中 setPlaceMode -congEffort high 会让布局引擎在早期阶段更积极地考虑拥塞;earlyGlobalRoute 是核心命令,它在当前设计状态下执行一次快速全局布线;reportCongestion -overflow -hotspot 则输出 overflow 统计和热点位置。
需要说明的是,上述参数(如最大布线层 6、gcell 粒度)属于示例配置,实际项目中应根据工艺节点、金属层堆叠和设计规模调整。例如在 7nm 及以下节点,早期全局布线通常需要限制在较低金属层,以避免上层资源被过早占用。
如何解读拥塞结果
执行完早期全局布线后,我们主要观察三类信息:
- 总 overflow:全芯片水平与垂直方向的溢出总量。它反映整体布线资源的紧张程度。如果总 overflow 很大,说明 floorplan 或模块面积需要重新评估。
- 热点位置:overflow 集中的 gcell 区域。这些区域通常对应宏单元之间的窄通道、引脚密集区、或逻辑连接高度集中的模块边界。
- 方向性:水平 overflow 与垂直 overflow 的比例。如果某一方向明显更严重,可能意味着该方向的布线层分配不合理,或模块引脚方向与布线方向冲突。
判断标准可以这样设定(示例阈值,非通用标准):若某 gcell 的 overflow 超过其容量的 10%,则标记为高风险;若连续多个相邻 gcell 均超过 5%,则视为拥塞带,需要在布局前处理。
从预估结果到布局约束
早期拥塞预估的最终目的是指导布局。常见的干预手段包括:
- 调整宏单元间距:在拥塞热点区域增大宏单元之间的通道宽度,为布线留出更多资源。
- 添加 placement blockage:在拥塞区域禁止放置标准单元,避免进一步加剧局部资源竞争。
- 设置 cell padding:对高引脚密度的标准单元增加 padding,降低局部单元密度。
- 修改引脚分配:将宏单元上过于集中的引脚分散到不同边,或调整引脚所在金属层。
- 调整模块形状或位置:在 floorplan 层面重新划分区域,把高连接度的模块拉近,减少跨区域布线需求。
这些调整应在布局之前或布局早期完成,因为一旦标准单元大量落位,修改成本会迅速上升。
快速原型的迭代节奏
早期拥塞预估不是一次性的动作,而是一个迭代过程。典型的迭代节奏是:执行一次 earlyGlobalRoute,查看 overflow 和热点,调整 floorplan 或约束,再次执行 earlyGlobalRoute,观察 overflow 是否下降。每次迭代通常只需要几分钟到十几分钟,远低于完整布局加布线的耗时。
在迭代过程中,建议记录每次的 overflow 总量和主要热点位置,形成简单的对比表。这样可以在多次调整后判断哪些措施真正有效,避免盲目修改。
与后续流程的衔接
早期拥塞预估完成后,其结果应作为后续布局的输入约束。例如,将高风险区域转换为 placement blockage 或 region constraint,让布局引擎在放置标准单元时主动避开这些区域。同时,早期预估中发现的引脚密集问题,也应在布局前通过引脚优化或模块接口调整来解决。
需要强调的是,早期预估的绝对数值与最终详细布线结果会有差异,因为标准单元的实际落位、时钟树插入、时序优化都会改变布线需求。因此,早期预估的定位是"风险筛查"而非"精确预测"。它的价值在于用最小的代价,把最明显的拥塞风险提前暴露出来,让工程师在成本最低的阶段做出决策。
在实际项目中,建议把早期拥塞预估作为 floorplan 评审的一个固定环节:floorplan 完成后,先跑一次 earlyGlobalRoute,确认没有大面积 overflow 热点,再进入布局阶段。这个习惯可以显著减少后期因拥塞导致的返工。