2. 宏单元与Floorplan基础概念

在Innovus的数字后端流程中,Floorplan(布局规划)是决定芯片能否收敛的第一道关口。要理解Floorplan,必须先建立一套统一的术语坐标系:哪些对象是"被摆放的",哪些是"被预留的",哪些是"被连接的",哪些是"被约束的"。本节围绕Macro、Standard Cell、IO、Block、Hierarchy、Bump、Obstruction这七个核心术语展开,并说明宏单元规划在物理设计中的实际角色。

一、从设计层次看对象分类

一个SoC在Innovus眼中并不是一张平面图,而是一棵层次树。顶层(Top)之下通常挂载若干Block,每个Block内部又可能包含子Block、Macro和Standard Cell。Hierarchy(层次)就是这棵树的结构描述,它决定了逻辑连接关系如何映射到物理位置。

Macro是预先完成版图、以硬核(Hard Macro)或软核形式交付的功能单元,例如SRAM、PLL、ADC、SerDes PHY。它拥有固定的物理尺寸、固定的引脚位置(Pin Shape与Layer已确定),因此不能被综合工具重新布局,只能被"摆放"。Standard Cell则是标准单元,高度统一(常见为7T、9T、12T track),宽度按栅极数量变化,由布局布线工具自动放置。IO是芯片边缘的输入输出单元,承担信号进出、ESD保护与电平转换,其位置通常由封装和Pad Ring规划决定。Bump是倒装封装下的凸点,用于把芯片内部信号引出到封装基板,位置受封装布线约束。

Obstruction(障碍/阻挡)是一个容易被忽视但极其关键的术语。它表示某块区域禁止放置特定对象,例如Placement Blockage禁止标准单元进入,Routing Blockage禁止某层金属走线,Macro Obstruction则用于在Macro周围保留缓冲与走线通道。Obstruction不是物理器件,而是约束的物理表达。

Floorplan 对象层次与物理关系示意 Die(顶层) IO Ring(Pad / IO Cell 环绕) Bump(凸点阵列,受封装约束) Block A(子模块) Macro SRAM 硬核 固定尺寸/引脚 Standard Cell 等高校准单元 自动布局 Obstruction Placement Blockage Routing Channel Macro 间走线通道 Block B(子模块) Macro PLL Std Cell Obstruction Routing Blockage (M4-M6) Block C Macro ADC Standard Cell 逻辑区 Macro Standard Cell Obstruction Routing Channel Bump IO Ring

二、Macro与Standard Cell的本质差异

理解Macro与Standard Cell的差异,是理解Floorplan为何存在的根本原因。Standard Cell是"可塑的":工具可以在合法化(Legalization)阶段微调其位置,可以在优化阶段插入Buffer、调整驱动强度、交换阈值电压。Macro是"不可塑的":它的版图已经固化,工具只能选择放在哪里、旋转多少度、镜像与否,不能改变其内部结构。

这一差异带来两个直接后果。第一,Macro一旦放错位置,后期几乎无法通过优化弥补,因为它的引脚位置固定,长连线只能绕行,导致时序和拥塞同时恶化。第二,Macro周围必须预留Halos(也称Keep-out Margin),用于放置Buffer和走线。Halos的宽度通常按Macro引脚密度和金属层需求估算,例如一个引脚密集的SRAM,其左右两侧可能需要2~5μm的Halos,上下两侧可略窄。

在Innovus中,Macro的摆放通过place_inst或Floorplan Editor交互完成,Halos通过create_place_halo或set_inst_halo设置。一个常见的教学示例是:某Block内有两个256×16的SRAM Macro,尺寸约120μm×80μm,若将两者紧贴放置,中间无通道,则连接两者的数据总线只能从上方或下方绕行,走线长度可能增加300μm以上,在1GHz时钟下引入约0.3ns的额外延迟。若在两者之间预留15μm通道,走线可直接穿越,延迟可控制在0.1ns以内。这个数量级说明:Macro间距不是"美观问题",而是时序预算问题。

三、IO、Bump与封装约束的传导

IO和Bump位于芯片边缘,它们的物理位置不由后端工程师自由决定,而由封装类型、基板布线、测试探针卡共同约束。对于Wire Bond封装,IO Pad沿Die边缘排列,Pad间距受Bond Finger间距限制;对于Flip-Chip封装,Bump以阵列形式分布在Die表面,间距通常为100~200μm。

Bump位置一旦确定,会反向约束Floorplan:靠近Bump的Block应优先放置与该Bump信号相关的逻辑,以减少从Bump到Block的走线长度。例如DDR PHY对应的Bump通常集中在Die一侧,那么DDR PHY Block就应靠近该侧放置,否则高速信号需要横穿整个Die,既增加延迟又占用大量布线资源。

四、Hierarchy对Floorplan的约束

Hierarchy不仅描述逻辑归属,还决定了物理实现的边界。在Innovus中,每个Block可以作为一个独立的Partition进行实现,拥有自己的Floorplan、Placement和Routing。顶层则负责Block之间的接口连接、电源网络和全局时钟。

Hierarchy对Floorplan的核心约束是:Block的形状和引脚位置必须在顶层和子模块之间达成一致。如果顶层把Block A规划为矩形,而Block A内部实现时发现Macro无法放入,就需要回到顶层调整形状。这种反复是Floorplan阶段的主要迭代来源。因此,有经验的工程师会在顶层规划时给每个Block预留10%~15%的面积余量,以吸收子模块实现时的不确定性。

五、Obstruction:约束的物理表达

Obstruction在Innovus中分为几类:Placement Blockage阻止标准单元进入指定区域,常用于Macro上方或电源开关区域;Routing Blockage阻止指定金属层走线,常用于保护敏感模拟信号或避免与Macro内部布线冲突;Pin Blockage阻止引脚放置。此外还有Partial Blockage,允许一定密度的单元放置,用于控制局部拥塞。

Obstruction的设置需要与Halos配合。Halos是"软"约束,工具在必要时可以忽略;Obstruction是"硬"约束,工具必须遵守。因此,对于必须保留的走线通道,应使用Routing Blockage而非仅依赖Halos。一个实用的检查方法是:在Placement完成后运行check_place,观察是否有单元被放置在Obstruction内;在Routing后运行verify_drc,确认Blockage区域没有违规走线。

六、宏单元规划在物理设计中的角色

宏单元规划是Floorplan的核心任务,其目标可以概括为三个"可收敛":时序可收敛、拥塞可收敛、电源可收敛。

时序可收敛要求Macro靠近其数据来源或目的地,减少长连线。拥塞可收敛要求Macro之间、Macro与IO之间保留足够的走线通道,避免局部金属密度过高。电源可收敛要求Macro的电源引脚能够被电源网络有效覆盖,避免IR Drop热点。

在实际项目中,宏单元规划通常遵循以下判断顺序:先确定IO和Bump位置,再确定大Macro(如SRAM、PLL)的粗略区域,然后规划Block边界,最后细化Macro间距和Halos。这个顺序不可颠倒,因为IO和Bump是外部约束,大Macro是内部最不灵活的对象,Block边界是两者的折中。

实践提示:在Innovus中完成初步Macro摆放后,可用report_floorplan查看Macro利用率、通道宽度和Block面积。若Macro利用率超过70%,通常意味着标准单元区域不足,需要扩大Block面积或减少Macro数量。若通道宽度小于5μm,则需检查是否满足该层金属的最小走线需求。

总结来说,Macro、Standard Cell、IO、Bump、Block、Hierarchy、Obstruction这七个术语构成了Floorplan的"词汇表"。Macro和Standard Cell是两类被摆放对象,IO和Bump是外部约束的入口,Block和Hierarchy是组织这些对象的容器,Obstruction是约束的物理表达。宏单元规划的角色,就是在这些对象和约束之间找到一组可行的空间分配方案,使后续的Placement、CTS和Routing能够在可接受的时间内收敛。