3. Innovus设计导入与数据准备
Innovus 的物理实现流程并不是从“摆放标准单元”开始,而是从一组彼此约束、互相校验的输入数据开始。读入网表、LEF、DEF、MMMC 与库文件,本质上是在工具内部建立三个模型:逻辑连接模型(谁连谁)、物理几何模型(谁长什么样、占多大、能放哪)、时序与约束模型(在什么条件下必须满足什么)。宏单元规划与 Floorplan 的质量,很大程度上取决于这三个模型在导入阶段是否一致、完整、可追溯。本节围绕“读什么、怎么读、读完后检查什么”展开,重点落在宏单元的物理信息与逻辑连接关系上。
一、导入数据的角色分工
先把每类文件在 Innovus 中的职责说清楚,后续排错才不会张冠李戴。
- 网表(.v):提供逻辑连接关系,即 instance、module、port 与 net 的层次结构。它决定“逻辑上谁驱动谁”,但不含任何尺寸与位置信息。
- LEF(.lef):提供物理抽象。Tech LEF 描述工艺层、布线轨道、via 规则;Cell LEF 描述标准单元、宏单元(RAM、IP、PLL 等)的尺寸、pin 位置与方向、blockage、antenna 等。宏单元能否被正确摆放,几乎完全由 Cell LEF 决定。
- DEF(.def):提供已有的物理实现信息,如 die 面积、row、已放置的宏单元位置与方向、pin 位置、blockage。若从既有设计继续,DEF 是“物理起点”。
- MMMC(.mmmc / view definition):定义多模式多角度的 view,把 SDC 约束、库、RC 条件组合成可切换的分析场景,决定时序分析在哪些条件下进行。
- 库文件(.lib / .db):提供时序、功耗、功能信息,与 LEF 的 cell 名必须一一对应。
关键点:LEF 与 .lib 是“同一物理单元的两面”,名字对不上,工具就会报 missing physical / missing logical 类错误。宏单元尤其容易出问题,因为 IP 供应商常给出独立的 LEF 与 .lib,版本稍有差异就会失配。
二、读入顺序与常用命令
Innovus 对导入顺序有一定敏感性,推荐按“逻辑 → 物理抽象 → 物理实现 → 约束”的顺序推进。下面是一段可直接参考的初始化脚本骨架(示例参数,需按实际工艺替换):
# 1. 指定工艺与单元 LEF
set init_lef_file {tech.lef stdcell.lef sram_1024x32.lef pll.lef}
set init_verilog ./netlist/top_synth.v
set init_top_cell top
set init_mmmc_file ./mmmc/view_definition.tcl
set init_design_uniquify 1
# 2. 初始化设计(读网表 + LEF + MMMC)
init_design
# 3. 若已有物理信息,再读 DEF
# defIn ./def/top_floorplan.def
# 4. 检查宏单元物理与逻辑一致性
checkDesign -all
其中 init_design 会一次性完成网表、LEF、MMMC 的加载与绑定;defIn 用于叠加已有物理信息。若 DEF 中的宏单元在 LEF 中不存在,或方向、尺寸不一致,工具会在读入时给出 warning,这些 warning 必须逐条确认,不能直接忽略。
三、宏单元物理信息检查
宏单元与标准单元最大的区别是:它尺寸大、pin 分布固定、内部可能有 blockage、通常还带 keepout 或 halo 需求。导入后应重点核对以下物理属性:
- 尺寸与原点:LEF 中 SIZE 与 ORIGIN 决定宏单元的实际占位。若 ORIGIN 非零,摆放时坐标会整体偏移,容易造成“看起来对齐、实际越界”。
- pin 层与方向:宏单元 pin 多在 M2/M3/M4,方向(INPUT/OUTPUT/INOUT)与层号直接影响后续布线可行性。
- blockage 与 obstruction:内部 routing blockage 会限制穿越布线,必须与布线规划一致。
- 对称与方向支持:LEF 中 SYMMETRY 决定宏单元能否镜像。若只允许 X 对称,却强行做 MY 镜像,工具可能报错或产生非法摆放。
- halo / keepout:多数宏单元需要周边留出禁布区,用于电源环、well 接触与布线通道。
可用如下命令快速查看某个宏单元的物理信息:
# 查看宏单元尺寸、原点、pin 与 blockage
dbGet [dbGet head.macros.name sram_1024x32].size
dbGet [dbGet head.macros.name sram_1024x32].origin
dbGet [dbGet head.macros.name sram_1024x32].pins.name
reportMacroInfo -macro sram_1024x32
四、逻辑连接关系检查
物理信息正确,不代表连接正确。宏单元常出现“悬空输入”“输出未连接”“电源 pin 未接”等问题。导入后应确认:
- 每个宏单元实例在网表中都存在,且 instance 名与 DEF 中一致;
- 宏单元的关键输入(时钟、复位、使能)已连接到有效 net,而非 dangling;
- 电源/地 pin 已通过 PG 连接或 globalNetConnect 绑定;
- 总线型宏单元(如多位 RAM)的地址、数据位序与网表一致,避免位序颠倒。
常用检查命令:
# 检查悬空与未连接
checkDesign -netlist
verifyConnectivity -type all -error 1000
# 查看某宏单元实例的连接
dbGet [dbGet -p top.insts.name u_ram0].instTerms.name
五、导入检查流程与判据
把上述检查串成一条可复用的流程,便于每次导入后快速判断“能不能进入 Floorplan”。下图给出从数据读入到宏单元物理/逻辑校验的完整关系,包含关键输入、检查点与失败回退路径。
六、常见问题与判据
导入阶段的问题往往在 Floorplan 才暴露,因此要提前建立判据。下表列出宏单元相关的典型现象、可能原因与处理方向(示例,供排查参考)。
| 现象 | 可能原因 | 处理方向 |
|---|---|---|
| 宏单元尺寸与预期不符 | LEF 版本错误或 ORIGIN 非零 | 核对 LEF 版本,检查 ORIGIN,必要时修正坐标 |
| 报 missing physical / logical | LEF 与 .lib 中 cell 名不一致 | 统一命名,或补充缺失的 LEF/lib |
| 宏单元 pin 无法布线 | pin 层被 blockage 覆盖或方向错误 | 检查 pin 层与 obstruction,调整布线层规划 |
| 镜像后摆放非法 | SYMMETRY 不支持该方向 | 按 LEF 允许的方向摆放,或修改约束 |
| 时序分析缺角 | MMMC view 未覆盖全部 corner | 补全 view definition,确认 SDC 与库对应 |
checkDesign -all 与 verifyConnectivity,把 warning 数量作为“是否可进入 Floorplan”的门槛。宏单元相关的 warning 应清零或逐条记录原因,避免把问题带入布局阶段。完成上述检查后,设计才具备进入宏单元规划与 Floorplan 的基础:逻辑连接明确、物理抽象完整、约束场景可切换。此时再讨论宏单元摆放、通道预留与电源规划,才有稳定的数据前提。