4. 设计数据准备
Redhawk 作为业界领先的功耗与电源完整性(IR/EM)分析平台,其分析结果的准确性高度依赖于输入设计数据的质量。在项目启动阶段,数据准备往往占据整个流程 30% 以上的时间。本章将系统讲解从原始 GDS/SPEF/DEF 到 Redhawk 可识别工程文件的完整转换链路,重点解决数据导入、完整性校验、单位制统一以及缺失信息补全四大核心问题。
上图展示了 Redhawk 数据准备的核心链路:从原始物理设计文件出发,经过导入、校验、单位转换和缺失补全四个阶段,最终形成可用于功耗分析、IR Drop 分析和电迁移验证的工程文件。整个过程是一个闭环迭代流程,任何环节发现问题都需要回溯修正。
4.1 设计数据导入:格式识别与映射策略
核心原理:Redhawk 支持多种业界标准格式的输入,包括 GDSII/OASIS(版图几何)、DEF(设计交换格式)、SPEF(标准寄生参数格式)、Verilog Netlist(门级网表)以及 SDC(时序约束)。其内部通过 db_import 引擎将这些异构数据统一映射为内存中的层次化数据库对象。导入过程并非简单的文件读取,而是涉及层映射(Layer Mapping)、单元映射(Cell Mapping)和端口映射(Port Mapping)三层转换逻辑。
- 创建工程:在 Redhawk GUI 中选择
File → New Project,指定工艺节点(如 7nm、5nm)和设计名称。 - 导入版图:选择
File → Import → Layout,加载 GDSII 或 OASIS 文件。此时需提供 Layer Map 文件(.layermap),将 GDS 层号映射到 Redhawk 内部层名称(如 M1、M2、V1、V2)。 - 导入网表:选择
File → Import → Netlist,加载 Verilog 网表。Redhawk 会自动识别标准单元和宏单元,但需要标准单元库的 LEF 文件来获取单元几何和引脚位置。 - 导入寄生参数:选择
File → Import → SPEF,加载 RC 寄生参数文件。SPEF 中的节点命名必须与网表一致,否则会出现连接性错误。 - 导入时序约束:选择
File → Import → SDC,加载时钟定义和时序约束,用于后续功耗分析中的翻转率传播。
案例拆解:某 5nm AI 芯片项目,原始数据包含 12 个 GDS 分块文件、1 个顶层 DEF 和 3 个不同电压域的 SPEF。导入时发现 GDS 中 M5 层使用了两个不同的层号(51 和 52)表示同一物理层——这是后端团队在拼接不同模块时产生的层号冲突。通过编写自定义 Layer Map 将 51 和 52 均映射到 Redhawk 的 M5 层,并利用 merge_layers 命令合并几何数据,最终解决了该问题。
| 数据格式 | 关键内容 | 常见问题 | 解决策略 |
|---|---|---|---|
| GDSII/OASIS | 版图几何形状 | 层号冲突、数据量过大 | Layer Map 映射、分块导入 |
| DEF | 布局布线信息 | 单元缺失、电源网络不完整 | 与 LEF 交叉验证 |
| SPEF | RC 寄生参数 | 节点命名不一致 | Netlist 节点名对齐 |
| Verilog | 逻辑连接关系 | 未映射单元 | 补充标准单元库 |
report_layers 命令验证各层几何面积是否与预期一致。
4.2 数据完整性检查:五维校验法
核心原理:数据完整性是 Redhawk 分析可信度的基石。完整性检查覆盖五个维度:几何完整性(版图是否有空洞或重叠)、连接完整性(电源/地网络是否闭合)、层次完整性(子模块引用是否解析)、时序完整性(时钟定义是否完整)和工艺完整性(所有层是否都有工艺参数)。Redhawk 提供 check_design 命令自动执行基础检查,但高级检查需要人工配置规则。
判断方法:执行 check_design -verbose 后,重点关注以下四类报告:
- Error:必须修复,否则分析无法进行(如电源短路、单元缺失)。
- Warning:建议修复,可能影响精度(如悬空引脚、未连接阱)。
- Info:提示信息,无需处理(如层面积统计)。
- Fatal:直接终止分析(如数据库损坏)。
# 在 Redhawk 命令行中执行
check_design -all
report_design_issues -severity error
report_design_issues -severity warning -limit 50
案例拆解:某 12nm 物联网芯片在导入后执行完整性检查,发现 37 个 Error 和 156 个 Warning。深入分析 Error 发现:其中 32 个源于 SPEF 中节点 U345/A 在网表中不存在——原因是综合工具在优化时删除了该缓冲器,但 SPEF 未同步更新。解决方法是重新生成 SPEF 或使用 update_netlist 命令同步网表。Warning 中 89 个是悬空引脚,经确认是测试逻辑的预留端口,通过设置 set_ignore_pins 排除。
4.3 单位统一:时间与电容的标准化
核心原理:Redhawk 内部使用统一的单位制:时间单位为纳秒(ns),电容单位为皮法(pF),电压单位为伏特(V),电流单位为毫安(mA)。然而,不同工具生成的 SPEF 和 SDC 文件可能使用不同单位——例如,某些后端工具输出 SPEF 时电容单位为飞法(fF),时间单位为皮秒(ps)。单位不统一会导致功耗计算出现数量级错误,且难以排查。
判断方法:在导入 SPEF 时,Redhawk 会尝试从文件头部解析 UNITS 字段。但部分 SPEF 文件缺少该字段或标注错误。此时需要人工确认:
// SPEF 文件头部示例
*SPEF "IEEE 1481-1998"
*DESIGN "top"
*DATE "Tue Jan 14 10:30:00 2025"
*VENDOR "Synopsys"
*PROGRAM "StarRC"
*VERSION "2024.12"
*DESIGN_FLOW "PIN_CAP_NONE"
*DIVIDER /
*DELIMITER :
*BUS_DELIMITER [ ]
*T_UNIT 1 NS
*C_UNIT 1 FF
*R_UNIT 1 OHM
*L_UNIT 1 HENRY
操作流程:Redhawk 提供 set_units 命令进行单位覆盖:
# 强制指定 SPEF 单位
set_units -time ns -capacitance pf -resistance ohm -current ma -voltage v
| 参数 | Redhawk 内部单位 | 常见外部单位 | 转换系数 |
|---|---|---|---|
| 时间 | ns | ps / us | 1 ns = 1000 ps = 0.001 us |
| 电容 | pF | fF / uF | 1 pF = 1000 fF = 1e-6 uF |
| 电阻 | Ohm | kOhm | 1 kOhm = 1000 Ohm |
| 电压 | V | mV | 1 V = 1000 mV |
| 电流 | mA | uA / A | 1 A = 1000 mA = 1e6 uA |
report_units 确认所有单位符合预期,并对比 SPEF 中总电容值与版图估算值是否在同一数量级。
4.4 缺失信息处理:默认值策略与工艺库补全
核心原理:即使数据完整性检查通过,仍可能存在"隐性缺失"——即数据存在但值不合理或未定义。典型场景包括:标准单元缺少功耗模型(Power Model)、金属层缺少 RC 工艺参数、宏单元缺少时序库信息。Redhawk 采用三级补全策略:工艺库默认值 → 用户自定义默认值 → 基于相似单元的推断。
操作流程:
- 检查缺失项:执行
report_missing_data列出所有缺失的工艺参数和单元模型。 - 设置工艺默认值:在工艺文件中为每层金属指定默认的方块电阻和单位面积电容。
- 单元功耗模型补全:对于缺少功耗模型的单元,使用
set_cell_power_model指定查找表或默认值。 - 宏单元处理:对于宏单元(SRAM、PLL 等),使用
create_macro_model创建简化功耗模型。
create_macro_model -type table 创建基于输入转换时间和输出负载的二维查找表;③ 对于无法获取数据的单元,使用同类型宏单元的平均功耗作为默认值,并在报告中标注置信度。最终所有宏单元均获得可用的功耗模型,分析结果与实测误差控制在 8% 以内。
总结复盘:设计数据准备是 Redhawk 分析流程中最耗时但最关键的环节。通过系统化的导入策略、五维完整性检查、严格的单位统一和科学的缺失信息补全,可以确保后续功耗分析、IR Drop 验证和电迁移分析的准确性。建议团队建立标准化的数据准备 Checklist,将本章内容固化为可重复执行的流程文档,并在每个项目启动时进行数据质量评审。