3. 布局规划(Floorplan)基础

布局规划是物理实现流程中“决定成败”的一步。综合后的网表只是一堆逻辑连接,而 Floorplan 要回答的是:这些逻辑最终落在硅片上的什么位置、占多大面积、宏单元(Macro)放在哪里、IO 信号从哪进出、电源怎么送到每一个标准单元。一旦 Floorplan 定型,后续的 Placement、CTS、Routing 都在这个“骨架”上展开,返工代价极高。因此本节不追求把 Floorplan 一次做完美,而是建立一套可执行、可判断、可迭代的基础方法。

一、Die 与 Core 区域:先定边界,再谈内容

Floorplan 的第一个动作是定义 Die 和 Core。Die 是芯片的物理外框,Core 是可放置标准单元和宏单元的有效区域,二者之间由 IO 环、电源环(Power Ring)和边角区域隔开。在 Fusion Compiler 中,通常用 initialize_floorplan 命令一次性建立初始框架:

initialize_floorplan \
  -shape R \
  -utilization 0.65 \
  -core_space {10 10 10 10} \
  -side_length {2000 1500} \
  -orientation R0

这里 -utilization 0.65 表示目标标准单元利用率约 65%,-core_space 给出 Core 到 Die 四边的间距(单位 μm),-side_length 是 Die 的宽高。利用率不是越高越好:65% 左右通常给布线留出足够通道;若压到 80% 以上,后期容易出现拥塞和 DRC 违例。Core 面积可用一个简单关系估算:

Core 面积 ≈ 标准单元总面积 / 目标利用率 + 宏单元面积 + 布线/电源预留

例如标准单元总面积 0.8 mm²、宏单元 0.5 mm²、目标利用率 0.65,则 Core 面积约 0.8/0.65 + 0.5 ≈ 1.73 mm²,再按长宽比展开成具体尺寸。这个估算值只作为起点,最终以实际拥塞和时序结果修正。

二、IO 摆放:方向、顺序与约束

IO 摆放决定信号进出芯片的物理位置。核心原则有三条:按信号流向就近放置、按总线/差分对成组放置、按电源/地成对放置。例如 DDR 接口的地址、数据、时钟应集中在同一侧,减少跨芯片走线;差分对必须相邻且等长;电源和地 IO 要成对出现,保证回流路径短。

在 Fusion Compiler 中,IO 通常通过 place_ports 或读入 IO 约束文件完成。一个可参考的约束片段如下:

set_io_constraints -side left  -ports {clk rst_n} -spacing 20
set_io_constraints -side right -ports {data_out[*]} -spacing 10
set_io_constraints -side top   -ports {vdd vss} -spacing 5

摆放后要检查:IO 是否与 Core 边缘对齐、是否与电源环冲突、是否留出足够的 escape routing 空间。若 IO 太密,可适当增大 Die 尺寸或调整 spacing,而不是强行压缩。

三、宏单元规划:位置、朝向与通道

宏单元(SRAM、PLL、模拟 IP 等)面积大、端口固定,是 Floorplan 中最难挪动的对象。规划时优先处理三类问题:数据流方向、电源/地连接、布线通道。常见做法是把宏单元沿 Core 边缘或角落摆放,中间留出连续的标准单元区域;宏单元之间预留至少 10~20 μm 的通道,用于电源走线和信号穿越。

宏单元的朝向(orientation)也很关键。若宏单元端口朝内,信号可直接进入标准单元区;若朝外,则需要绕行。Fusion Compiler 中可用 create_placement_blockage 或 set_dont_touch 固定宏单元位置,再用 place_opt 前的 check_floorplan 检查重叠和通道宽度。

四、电源网络初步规划:先通后优

电源网络(Power Plan)的目标是让每个标准单元和宏单元都能以足够低的 IR Drop 获得供电。初步规划通常按“Ring → Stripe → Rail”三层展开:先在 Core 外围做电源环(Power Ring),再在 Core 内做纵向/横向电源条(Power Stripe),最后依靠标准单元轨道(Rail)完成最后一跳。

一个可参考的电源规划参数如下:

对象参数示例值说明
Power Ring宽度 / 间距2 μm / 1 μm围绕 Core 四边
Power Stripe宽度 / 间距1 μm / 20 μm纵横交错,覆盖 Core
Macro 电源连接方式Stripe 直连宏单元电源脚就近接入
IR Drop 目标静态 / 动态< 5% / < 10%作为初步判断依据

电源网络不是越密越好:过密的 Stripe 会占用布线资源,反而加剧拥塞。初步规划后可用 check_power_plan 或 IR Drop 分析快速评估,若某区域压降偏大,再局部加密 Stripe 或加宽 Ring。

Floorplan 基础结构:Die / Core / IO / Macro / Power Die(芯片外框) Power Ring(电源环) Core(标准单元与宏单元有效区) IO 左侧(clk/rst) IO 右侧(data_out) IO 顶部(vdd/vss) SRAM Macro PLL Macro Analog IP Macro 标准单元区 (利用率 ~65%) 橙色虚线:Power Ring;橙色实线:Power Stripe(纵横交错) 宏单元 标准单元区 IO 电源网络

五、Floorplan 检查与迭代

完成上述四步后,不要急着进入 Placement。先用 check_floorplan 检查宏单元重叠、IO 与 Core 冲突、电源网络连通性;再用 report_utilization 确认标准单元区利用率是否在目标范围;最后用 check_power_plan 或 IR Drop 快速评估电源网络是否满足初步目标。若发现拥塞热点,优先调整宏单元位置或通道宽度,而不是直接降低利用率。

实用判断依据:宏单元之间通道 ≥ 10 μm;标准单元区利用率 60%~70%;电源 Stripe 间距 15~25 μm;IO 与 Core 边缘间距 ≥ 5 μm。这些数值是常见起点,实际项目需根据工艺节点和设计规模调整。
常见误区:把 Floorplan 当成“一次性画框”。实际上 Floorplan 是迭代过程:Placement 后的拥塞图、CTS 后的时钟树、Route 后的 DRC 都可能反过来要求调整宏单元位置或电源网络。越早发现结构性问题,返工成本越低。

总结来说,Floorplan 基础可以归纳为一条主线:定 Die/Core → 摆 IO → 放 Macro → 铺电源 → 检查迭代。每一步都有明确的输入、可观察的中间结果和判断依据。掌握这条主线,后续的 Placement 和 CTS 才有稳定的基础。