4. 输入文件准备:DEF/LEF文件、网表文件、SPEF文件格式

做寄生参数提取,说白了就是跟三种文件打交道:LEF、DEF、网表,还有最后的SPEF。很多新手一上来就被这些文件格式搞晕了。我刚开始接触时也差不多,对着几万行的DEF文件发呆,不知道哪些信息有用。

今天咱们就把这些文件掰开揉碎了讲。你搞清楚它们的来龙去脉,后面提取参数时心里就有底了。

4.1 LEF文件:工艺的“乐高说明书”

LEF全称是Library Exchange Format。你可以把它想象成乐高积木的说明书——告诉你每个标准单元长什么样、端口在哪儿、有哪些走线层。

LEF文件分两种:

  • 技术LEF:定义工艺信息,比如金属层数、最小线宽、通孔类型。这部分通常由代工厂提供,你基本不用改。
  • 单元LEF:描述每个标准单元、宏单元的物理信息。包括单元大小、引脚位置、布线阻挡层等。

关键点:LEF里有个东西叫“OBS”(Obstruction),它定义了单元内部哪些区域不能走线。我遇到过好几次,因为OBS定义不完整,导致提取出来的寄生参数偏大。检查LEF时,一定要确认OBS覆盖了所有电源/地轨和内部走线。

看一段典型的单元LEF片段:

MACRO AND2X1
  CLASS CORE ;
  ORIGIN 0 0 ;
  SIZE 1.0 BY 2.0 ;
  PIN A
    DIRECTION INPUT ;
    PORT
      LAYER M1 ;
      RECT 0.2 1.0 0.4 1.4 ;
    END
  END A
  PIN Y
    DIRECTION OUTPUT ;
    PORT
      LAYER M1 ;
      RECT 0.6 0.6 0.8 1.0 ;
    END
  END Y
  OBS
    LAYER M1 ;
    RECT 0 0 1.0 0.5 ;
    RECT 0 1.5 1.0 2.0 ;
  END
END MACRO

看到没?每个PIN都定义了它在M1层上的具体位置。提取工具就是靠这些信息来识别连线的起点和终点。

4.2 DEF文件:芯片的“施工蓝图”

DEF(Design Exchange Format)描述的是你整个芯片的物理实现——单元摆在哪、走线怎么绕、电源网络怎么铺。

我个人习惯把DEF分成三个层次来读:

  1. 顶层信息:芯片尺寸、单位、使用的工艺节点。
  2. 组件信息:每个标准单元、宏单元的具体坐标和朝向。
  3. 网络信息:每个信号网络的走线路径、通孔位置、线宽。

实用技巧:提取寄生参数前,我通常会先检查DEF文件里的“NONDEFAULTRULE”部分。这里定义了特殊走线规则,比如时钟线的线宽加倍、间距加倍。如果这部分信息缺失,提取出来的时钟网络寄生参数会偏小,时序分析就会过于乐观。

DEF文件里网络走线的描述长这样:

NETS 3 ;
- CLK
  ( PIN A ) ( PIN B ) ( PIN C )
  ROUTED M2 ( 10 20 ) ( 30 20 ) VIA23 ( 30 20 ) M3 ( 30 40 ) ;
  ROUTED M2 ( 30 20 ) ( 50 20 ) ;
END NETS

这里每个坐标点、每段走线层、每个通孔,都会直接影响寄生参数的计算。走线越长、层数越高,寄生电容和电阻就越大。

4.3 网表文件:电路的“连接关系图”

网表文件描述的是电路逻辑连接关系。寄生参数提取用的网表通常是SPICE格式或Verilog格式。

SPICE网表更底层,每个晶体管、每个节点都写得清清楚楚:

.SUBCKT INV A Y VDD VSS
M1 Y A VSS VSS NMOS W=0.5U L=0.13U
M2 Y A VDD VDD PMOS W=1.0U L=0.13U
.ENDS

Verilog网表则更抽象,只描述单元间的连接:

INV U1 (.A(net1), .Y(net2), .VDD(vdd), .VSS(vss));
AND2X1 U2 (.A(net2), .B(net3), .Y(net4));

注意:网表里经常出现“浮动节点”或“悬空引脚”。我曾经在一个项目里,因为某个宏单元的测试引脚没接,导致提取时工具报了几百个警告。排查了两天才发现是网表里少写了一个连接。提取前先用LVS跑一遍,能省很多麻烦。

4.4 SPEF文件:寄生参数的“最终报告”

SPEF(Standard Parasitic Exchange Format)是提取工具的输出文件,也是时序分析工具的输入文件。它把物理走线信息转换成了电阻、电容值。

SPEF文件的核心结构:

*D_NET net1 12.5
*CONN
*I A:IN *C 0.5
*I B:IN *C 0.3
*CAP
1 0.8
2 1.2
*RES
1 2 5.0
*END

这里每个数字都有含义:

  • *D_NET:网络名和总电容
  • *CONN:端口连接信息,*C后面的数字是端口电容
  • *CAP:每个节点的对地电容
  • *RES:节点间的电阻值

SPEF有三种常见格式:

格式类型 描述 适用场景
RCC 电阻+集总电容 早期时序分析,精度一般
RC 分布式RC网络 主流选择,精度足够
RCL 包含电感 高频/射频设计,数据量大

我个人建议,对于数字芯片,用RC格式就够了。RCL格式虽然更精确,但文件体积会膨胀5-10倍,处理时间也长很多。

4.5 文件间的“三角关系”

这四个文件不是孤立的。它们之间的关系,我画了张图:

寄生参数提取输入输出文件关系图 LEF 文件 工艺/单元物理信息 DEF 文件 芯片布局布线信息 网表文件 电路连接关系 寄生参数提取工具 StarRC / QRC / Calibre xRC SPEF 文件 寄生电阻/电容/电感 输入文件作用 • LEF:提供工艺规则 • DEF:提供物理走线 • 网表:提供连接关系 三者缺一不可

你看,LEF提供“积木块”的物理尺寸,DEF告诉工具“积木块”摆在哪、怎么连,网表说明“积木块”之间的逻辑关系。三者合并,提取工具才能算出每条走线的寄生参数,最终输出SPEF。

我的习惯:每次拿到新的设计,我会先检查LEF和DEF的版本是否匹配。有一次代工厂更新了LEF,但DEF还是老版本,结果提取出来的寄生参数全偏了。花了一天排查,最后发现是版本不匹配。现在我做任何项目前,第一件事就是核对文件版本。

4.6 常见问题与避坑

做寄生参数提取这么多年,我总结了几条血泪教训:

  • DEF文件里的“FIXED”和“PLACED”:FIXED表示单元位置固定,提取工具不会动它。PLACED表示单元已摆放但未固定。如果所有单元都是PLACED状态,提取工具可能会重新优化走线,导致寄生参数变化。
  • LEF里的“ANTENNA”规则:天线效应规则在LEF里定义,但很多提取工具默认不检查。我建议打开这个选项,尤其是使用先进工艺时。
  • 网表里的“*”通配符:有些网表用“*”表示总线连接,比如“data[0:7]”。提取工具不一定能正确解析,最好展开成显式连接。

特别提醒:SPEF文件里的电容值单位通常是皮法(pF)或飞法(fF)。我曾经见过一个案例,因为单位搞错,时序分析结果差了三个数量级。提取前确认一下SPEF头部的“*T_UNIT”和“*C_UNIT”定义,这个习惯能救你一命。

嗯,文件准备这块就讲这么多。你把这些格式吃透了,后面做提取参数时就能看懂工具在干什么,出了问题也知道从哪查起。