第一次接触HSPICE仿真时,很多人会被那个神秘的.sp文件搞得一头雾水。这就像刚学编程时遇到的第一个"Hello World"程序,只不过在芯片设计领域,我们的"Hello World"变成了一个描述电路连接关系的文本文件。我刚开始用HSPICE时,最常犯的错误就是把网表文件当成普通配置文件来处理,结果仿真总是报错。
网表文件本质上是一个电路描述文件,它用特定的语法规则告诉HSPICE三件事:电路里有什么元件、这些元件怎么连接、以及我们想做什么样的仿真分析。举个例子,就像你要组装一台电脑,需要告诉装配工人:主板用哪款、CPU装在哪、内存插哪个槽,最后还要说明这台电脑是用来打游戏还是做设计。
一个标准的网表文件通常包含这几个关键部分:
网表文件的结构其实很有讲究,虽然HSPICE对语句顺序没有强制要求,但良好的组织习惯能让文件更易读。我习惯按这样的逻辑排列:
记得有次我为了省事,把模型定义放在了文件最后,结果调试时找了半天问题。后来养成了固定结构的习惯,效率提高不少。
注释是网表文件中最重要的"文档"。我见过太多人(包括我自己)写完网表几个月后再看,完全不明白当初为什么要这么写。好的注释应该解释:
HSPICE支持两种注释方式:
续行处理也很实用,特别是当某个元件有很多参数时。可以用加号(+)或反斜杠()实现续行,但要注意:
spice复制* 正确的续行方式
R1 node1 node2 R=1k TC1=0.001 +
TC2=0.0001
* 错误的续行方式(参数被截断)
R2 node3 node4 R=2k TC1=0.002 \
TC2=0.0002
HSPICE默认不区分大小写,但有几个例外情况:
我曾经遇到过一个问题:在Linux系统下仿真正常,移植到Windows后却报错,最后发现是.LIB语句中的文件路径大小写不一致导致的。所以跨平台工作时,最好统一使用小写文件名。
HSPICE支持多种数值表示方法,这给使用带来了便利,但也容易造成混淆。常用的格式有:
缩放因子特别实用,常用的有:
有时候我们需要混合使用科学计数法和缩放因子,比如1e-6u。默认情况下HSPICE不允许这种写法,需要在文件开头添加:
spice复制.option MIXED_NUM_FORMAT=1
指数运算可以用双星号(**)表示:
spice复制* 表示2的10次方
V1 1 0 2**10
仿真结果的精度很大程度上取决于数值表示。有几个实用技巧:
让我们通过一个完整的反相器仿真实例,把前面讲的所有知识点串起来。这个案例将展示:
反相器是数字电路最基本的组成单元,理解它的时序特性对后续复杂电路设计至关重要。
下面是详细的网表文件内容,我添加了丰富的注释说明每个部分的作用:
spice复制* 反相器时序分析案例
* 创建日期:2023-10-15
* 作者:经验分享
***** 1. 模型定义 *****
.MODEL nmos_model NMOS (
+ LEVEL=49 VERSION=3.1 * 使用BSIM3v3模型
+ TOX=4.5E-9 * 氧化层厚度4.5nm
+ VTH0=0.45 * 阈值电压0.45V
+ U0=350 * 迁移率350cm^2/Vs
+)
.MODEL pmos_model PMOS (
+ LEVEL=49 VERSION=3.1
+ TOX=4.5E-9
+ VTH0=-0.48 * PMOS阈值电压为负
+ U0=120 * PMOS迁移率较低
+)
***** 2. 电源与激励 *****
VDD VDD 0 DC 1.8 * 1.8V电源
VIN IN 0 PULSE(0 1.8 1n 0.1n 0.1n 4.9n 10n) * 输入脉冲信号
* 脉冲参数:V1 V2 TD TR TF PW PER
***** 3. 电路拓扑 *****
MP1 OUT IN VDD VDD pmos_model W=1u L=0.18u
MN1 OUT IN 0 0 nmos_model W=0.5u L=0.18u
* NMOS宽度较小是为了匹配PMOS的驱动能力
***** 4. 分析设置 *****
.TRAN 0.01n 20n * 瞬态分析,步长0.01ns,总时长20ns
***** 5. 输出控制 *****
.OPTION POST=2 * 详细输出模式
.PROBE V(IN) V(OUT) * 保存输入输出波形
.MEASURE TRISE TRIG V(IN) VAL=0.9 RISE=1 * 测量上升时间
+ TARG V(OUT) VAL=0.9 FALL=1
.END
运行这个网表文件后,我们可以得到:
通过这些结果,我们可以评估:
在实际项目中,我通常会基于这个基础网表做更多扩展分析,比如:
网表文件就像电路设计的源代码,写得越规范、注释越完善,后续调试和优化就越轻松。刚开始可能会觉得语法规则繁琐,但熟悉后你会发现,这种文本化的电路描述方式其实非常高效和灵活。