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分成三个层次来读:
- 顶层信息:芯片尺寸、单位、使用的工艺节点。
- 组件信息:每个标准单元、宏单元的具体坐标和朝向。
- 网络信息:每个信号网络的走线路径、通孔位置、线宽。
实用技巧:提取寄生参数前,我通常会先检查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告诉工具“积木块”摆在哪、怎么连,网表说明“积木块”之间的逻辑关系。三者合并,提取工具才能算出每条走线的寄生参数,最终输出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”定义,这个习惯能救你一命。
嗯,文件准备这块就讲这么多。你把这些格式吃透了,后面做提取参数时就能看懂工具在干什么,出了问题也知道从哪查起。