3. 层次化设计基础:Cell(单元)的定义、实例化与层次化引用关系
在 ICV DRC 配置中,Cell(单元)是层次化设计的核心构建块。理解 Cell 的定义、实例化以及它们之间的引用关系,是编写高效、可维护 DRC 规则文件的前提。本章将系统性地介绍这些基础概念,并展示它们在 DRC 上下文中的具体应用。
3.1 Cell 的定义与属性
一个 Cell 代表一个独立的、可复用的版图单元。在 DRC 规则文件中,Cell 不仅是一个几何图形的容器,还承载着特定的层次化属性。
| 属性 | 说明 | DRC 上下文示例 |
|---|---|---|
| Cell 名称 | 全局唯一的标识符,用于区分不同的单元。 | INV_X1, NAND2_X2, TOP |
| 几何图形 | 构成 Cell 的物理层图形(如扩散区、多晶硅、金属层)。 | Cell 内部的 M1, M2, VIA1 图形 |
| 端口(Pin) | Cell 与其他 Cell 或顶层进行电气连接的接口。 | VDD, VSS, A, Y |
| 边界(Boundary) | 定义 Cell 占用的物理区域,通常用于布局规划。 | PR_BOUNDARY 层 |
| 层次化属性 | 标记 Cell 的类型或用途,影响 DRC 规则的检查方式。 | is_std_cell, is_macro, is_io_pad |
关键概念: 在 DRC 中,Cell 的定义通常通过
cell 或 define_cell 语句在规则文件头部声明。一个 Cell 可以包含子 Cell,形成层次化结构。
3.2 Cell 的实例化(Instantiation)
实例化是将一个已定义的 Cell 放置到另一个 Cell 或顶层设计中的过程。每个实例都拥有独立的坐标、方向和变换属性。
- 主 Cell(Master Cell): 被实例化的原始 Cell 定义。
- 实例(Instance): 主 Cell 在父 Cell 中的一个具体副本。
- 变换(Transform): 包括平移(X, Y 坐标)、旋转(0°, 90°, 180°, 270°)和镜像(X 轴或 Y 轴)。
实例化示例(伪代码):
// 定义主 Cell
cell INV_X1 {
// 内部几何图形和端口定义
}
// 在顶层 Cell 中实例化
cell TOP {
// 实例化 INV_X1,放置在 (10.0, 20.0) 处,不旋转
inst u1 = INV_X1 at (10.0, 20.0) orient R0;
// 实例化 INV_X1,放置在 (50.0, 20.0) 处,旋转 90 度
inst u2 = INV_X1 at (50.0, 20.0) orient R90;
// 实例化 INV_X1,放置在 (10.0, 60.0) 处,X 轴镜像
inst u3 = INV_X1 at (10.0, 60.0) orient MY;
}
3.3 层次化引用关系
层次化引用关系描述了 Cell 之间如何通过实例化相互连接,形成树状或网状结构。理解这些关系对于 DRC 的“层次化检查”至关重要。
3.3.1 父子关系(Parent-Child)
父 Cell 包含子 Cell 的实例。子 Cell 是父 Cell 的组成部分。这种关系是层次化设计的基石。
3.3.2 兄弟关系(Sibling)
同一个父 Cell 下的不同子 Cell 实例之间互为兄弟。DRC 规则经常需要检查兄弟 Cell 之间的间距、交叠等物理约束。
3.3.3 引用路径(Reference Path)
从顶层 Cell 到某个特定实例的完整路径,用于唯一标识该实例。例如:TOP/u1/u2 表示顶层 Cell 下的 u1 实例内部的 u2 实例。
常见陷阱: 循环引用(Circular Reference)是层次化设计中的致命错误。即 Cell A 实例化 Cell B,而 Cell B 又直接或间接地实例化 Cell A。这会导致 DRC 工具在展开层次时陷入无限循环。所有 EDA 工具都严格禁止循环引用。
3.4 层次化引用在 DRC 中的意义
DRC 工具利用层次化引用关系,可以高效地执行检查,避免重复计算。核心思想是:“一次检查,多次复用”。
- Cell 内部检查: 对于标准单元库中的 Cell(如
INV_X1),DRC 工具只需对其主 Cell 定义检查一次。所有该 Cell 的实例都自动继承检查结果,无需重复检查。 - Cell 间检查: 检查不同 Cell 实例之间的相互作用(如间距、交叠)。这需要 DRC 工具理解实例的变换和相对位置。
- 顶层检查: 检查顶层 Cell 与所有子 Cell 实例之间的全局规则,如电源网络完整性、天线效应等。
层次化检查效率对比:
// 非层次化(扁平化)检查:展开所有实例,检查所有图形
// 缺点:数据量大,检查速度慢,重复工作多
// 层次化检查:
// 1. 对 INV_X1 主 Cell 内部规则检查 1 次
// 2. 对 NAND2_X1 主 Cell 内部规则检查 1 次
// 3. 检查 TOP 层中 u1, u2, u3 之间的交互规则
// 优点:数据量小,检查速度快,避免重复
3.5 层次化引用关系的管理
在大型 SoC 设计中,层次化引用关系可能非常复杂。良好的管理实践包括:
- 使用层次化名称空间: 通过引用路径(如
TOP/BLOCK1/INST1)精确指定检查目标。 - 利用 DRC 命令进行层次化操作: 如
select_cell,exclude_cell,push_down,pull_up等,控制检查的范围和深度。 - 避免过深的层次: 过深的层次嵌套会增加 DRC 工具解析引用关系的开销,通常建议层次深度不超过 10-15 层。
- 使用抽象视图(Abstract View): 对于大型宏单元(如 SRAM、PLL),在 DRC 中使用其抽象视图(仅包含端口和阻挡层),而非完整版图,以大幅减少数据量。
最佳实践: 在编写 DRC 规则文件时,始终从顶层视角出发,明确哪些 Cell 需要被“推平”(flatten)检查,哪些 Cell 可以保持层次化检查。合理利用
cell 和 instance 选择器,可以精确控制检查粒度,平衡运行时间和检查覆盖率。