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”。下图给出从数据读入到宏单元物理/逻辑校验的完整关系,包含关键输入、检查点与失败回退路径。

Innovus 设计导入与宏单元校验流程 网表 top_synth.v LEF(tech + cell) MMMC view 定义 库文件 .lib / .db DEF(可选物理起点) init_design 绑定逻辑/物理/约束 宏单元物理检查 SIZE / ORIGIN pin 层与方向 blockage / SYMMETRY 逻辑连接检查 instance 名一致 悬空 / 未连接 net PG 与总线位序 通过 进入 Floorplan 失败回退:修正 LEF / 网表 / MMMC 后重新 init_design 常见:cell 名失配、ORIGIN 偏移、pin 未连接、view 缺角 检查命令: checkDesign -all verifyConnectivity reportMacroInfo

六、常见问题与判据

导入阶段的问题往往在 Floorplan 才暴露,因此要提前建立判据。下表列出宏单元相关的典型现象、可能原因与处理方向(示例,供排查参考)。

现象可能原因处理方向
宏单元尺寸与预期不符LEF 版本错误或 ORIGIN 非零核对 LEF 版本,检查 ORIGIN,必要时修正坐标
报 missing physical / logicalLEF 与 .lib 中 cell 名不一致统一命名,或补充缺失的 LEF/lib
宏单元 pin 无法布线pin 层被 blockage 覆盖或方向错误检查 pin 层与 obstruction,调整布线层规划
镜像后摆放非法SYMMETRY 不支持该方向按 LEF 允许的方向摆放,或修改约束
时序分析缺角MMMC view 未覆盖全部 corner补全 view definition,确认 SDC 与库对应
建议在导入后立即执行一次 checkDesign -all 与 verifyConnectivity,把 warning 数量作为“是否可进入 Floorplan”的门槛。宏单元相关的 warning 应清零或逐条记录原因,避免把问题带入布局阶段。

完成上述检查后,设计才具备进入宏单元规划与 Floorplan 的基础:逻辑连接明确、物理抽象完整、约束场景可切换。此时再讨论宏单元摆放、通道预留与电源规划,才有稳定的数据前提。