4. Floorplan初始化与Die/Core规划

Floorplan 初始化是数字后端实现中“定生死”的一步。它决定了芯片的物理边界、标准单元可摆放区域、宏单元的大致位置以及电源网络的骨架。一旦 die 尺寸、core 区域和 IO 间距确定,后续的 placement、CTS 和 routing 都会在这个框架内展开。如果这一步规划失当,后期往往需要推倒重来,代价极高。本节围绕 create_floorplan 命令,讲解 die 尺寸估算、core 到 IO 的间距、宽高比、利用率目标以及初步布局策略。

一、create_floorplan 命令的基本用法

Innovus 中初始化 floorplan 的核心命令是 create_floorplan。它支持多种尺寸指定方式,最常用的是按 die 尺寸、按 core 尺寸或按利用率自动推算。典型调用形式如下:

create_floorplan \
  -core_density_size 1.0 0.7 20 20 20 20 \
  -core_aspect_ratio 1.0 \
  -core_utilization 0.65 \
  -left_io2core 20 -right_io2core 20 \
  -top_io2core 20 -bottom_io2core 20 \
  -start_first_row \
  -flip_first_row \
  -flip_second_row

其中 -core_density_size 用于指定 core 到 IO 的间距和 core 尺寸比例,-core_utilization 指定目标利用率,-core_aspect_ratio 指定宽高比。也可以直接使用 -die_size_by_io_height 或 -die_size 显式指定 die 尺寸。理解这些参数之间的换算关系,是做好 floorplan 的前提。

二、Die 尺寸估算

Die 尺寸估算的核心逻辑是:先根据标准单元总面积和 IO 数量估算 core 面积,再加上 core 到 IO 的间距,得到 die 面积。标准单元总面积可以从综合后的网表中统计,也可以由 report_area 或 report_design_area 得到。假设综合报告显示标准单元总面积为 500000 µm²,目标利用率设为 0.65,则 core 面积至少需要:

core_area = 500000 / 0.65 ≈ 769231 µm²

若宽高比设为 1.0,则 core 边长约为 √769231 ≈ 877 µm。再加上左右各 20 µm、上下各 20 µm 的 IO 间距,die 尺寸约为 917 µm × 917 µm。实际项目中还要考虑宏单元、电源环、decap 和 fill 的占用,通常会在估算值上留 5%~10% 的余量。

需要注意的是,利用率目标不是越高越好。利用率过高会导致布线拥塞、时序难以收敛;利用率过低则浪费面积、增加成本。对于以标准单元为主的设计,0.65~0.75 是常见区间;若设计中包含大量宏单元,则标准单元区域的局部利用率应适当降低。

三、Core 到 IO 的间距

Core 到 IO 的间距(io2core)决定了电源环、IO 驱动单元和 core 之间的缓冲空间。这个间距不能随意设置,它需要容纳:电源环宽度、电源环之间的间距、IO 单元到 core 的走线通道,以及可能的 corner cell 和 endcap。典型值在 15~30 µm 之间,具体取决于工艺节点和电源规划方案。

在 create_floorplan 中,-left_io2core、-right_io2core、-top_io2core、-bottom_io2core 分别控制四边的间距。如果四边间距相同,可以统一设置;如果某一边需要放置更多电源环或特殊 IO,则应单独加大。间距设置过小会导致电源环无法闭合或 DRC 违例;设置过大则浪费面积。

四、Aspect Ratio 与利用率目标

Aspect Ratio(宽高比)定义为 core 宽度与高度的比值。AR = 1.0 表示正方形 core,AR > 1.0 表示宽大于高,AR < 1.0 表示高大于宽。选择 AR 时需要考虑:

  • 芯片封装与引脚排布:某些封装形式对 die 长宽比有约束。
  • 宏单元形状:如果设计中包含长条形 SRAM 或 IP,core 形状应与之协调。
  • 布线资源:过于扁平的 core 可能导致水平或垂直方向布线资源不均衡。
  • 时钟树:正方形 core 通常有利于时钟树平衡。

利用率目标与 AR 相互影响。在 core 面积固定的情况下,改变 AR 会改变 core 的边长,进而影响标准单元行的长度和数量。Innovus 会根据 -core_utilization 和 -core_aspect_ratio 自动计算 core 尺寸,但设计者需要检查生成的 floorplan 是否合理。

五、初步布局策略

Floorplan 初始化完成后,需要制定初步布局策略。核心原则是:

  1. 宏单元优先:先摆放宏单元(SRAM、IP、PLL 等),再摆放标准单元。宏单元通常沿 core 边缘或角落放置,避免阻挡布线通道。
  2. 数据流导向:根据模块间的数据流关系,将相关模块放在相邻区域,减少长距离布线。
  3. 电源网络预留:在宏单元之间和 core 边缘预留电源环和电源条的空间。
  4. 通道预留:宏单元之间应保留足够的布线通道,通常不小于 20 µm,具体取决于金属层数和布线需求。
  5. Pin 访问:确保宏单元的 pin 朝向布线通道,避免 pin 被遮挡。

以下 SVG 展示了 floorplan 初始化中 die、core、IO 间距、宏单元和标准单元区域的关系,以及关键参数对布局的影响。

Floorplan 初始化:Die / Core / IO 间距 / 宏单元布局关系 Die 边界 IO / Pad 区域 IO / Pad 区域 IO / Pad 区域 IO / Pad 区域 Core 区域(标准单元可摆放区) SRAM SRAM IP Core PLL 标准单元 摆放区 通道 通道 标准单元行区域 电源环(Power Ring) io2core io2core 关键参数与影响 Die 尺寸 由 core 面积 + io2core 推算 Core 面积 标准单元总面积 / 利用率 io2core 间距 容纳电源环与走线通道 Aspect Ratio core 宽 / core 高 利用率目标 标准单元 0.65~0.75 宏单元布局 沿边/角落,预留通道 core_area = std_area / util die = core + 2 × io2core 参数

六、参数设置示例与检查要点

假设一个中等规模设计,综合后标准单元面积为 480000 µm²,目标利用率 0.70,宽高比 1.0,四边 io2core 均为 20 µm。则:

core_area = 480000 / 0.70 ≈ 685714 µm²
core_side = √685714 ≈ 828 µm
die_side = 828 + 20 + 20 = 868 µm

在 Innovus 中执行 create_floorplan 后,应检查以下要点:

  • core 区域是否完整包含所有标准单元行,行是否对齐。
  • IO 间距是否足够容纳电源环,电源环是否闭合。
  • 宏单元是否沿边放置,是否阻挡了主要布线通道。
  • 利用率是否在目标范围内,是否存在局部过密区域。
  • die 尺寸是否满足封装约束,是否有足够的 seal ring 空间。
提示:如果设计中宏单元面积占比超过 30%,建议先手动摆放宏单元,再执行 create_floorplan 或使用 -core_density_size 精细控制 core 区域。宏单元之间的通道宽度应不小于 20 µm,具体取决于金属层数和布线需求。
注意:利用率目标不是固定值。对于高频设计或布线资源紧张的设计,应适当降低利用率(如 0.60~0.65),为布线和时序优化留出余量。利用率过高会导致后期无法收敛,反而增加迭代成本。

Floorplan 初始化完成后,建议保存为 floorplan_initial.enc,并在后续步骤中逐步细化。Die/Core 规划是后续 placement 和 CTS 的基础,只有这一步做扎实,整个实现流程才能顺利推进。