仿真实战
1. 反相器直流仿真
1.1 输入文件
仿真所用电路图:
输入网表文件:
Inverter Circuit
.OPTION POST
.DC VIN 0 5 0.1
.PRINT DC V(IN) V(OUT)
M1 OUT IN VCC VCC PCH L=1U W=20U
M2 OUT IN 0 0 NCH L=1U W=20U
VCC VCC 0 5
VIN IN 0 0 PULSE .2 4.8 2N 1N 1N 5N 20N
CLOAD OUT 0 .75P
.MODEL PCH PMOS LEVEL=1
.MODEL NCH NMOS LEVEL=1
.END
2.2 执行仿真
执行仿真的命令有很多,第一种仿真执行命令如下:
hspice -i quick.sp -o quick.lis &
执行该命令的时候,终端不会输出内容,仿真结束之后,会有如下提示:
如果是使用如下命令启动仿真:
hspice quickDC.sp
这个时候,不会产生 .lis
文件,但是,终端会显示内容,显示的就是 .lis
文件中的内容。
下面这个命令就是在加了一个重定向命令,此时,终端不会输出任何内容,但是可以得到 .list
文件。 (重定向算是Linux系统的功能吧。)
hspice quickDC.sp > quickDC.lis &
3.3 仿真输出控制
可以看到,仿真结束后,生成了如下三个文件:
其中 .st0
是输出状态文件,和仿真结果无关,.sw0
就是使用option post
得到的仿真波形结果。(波形文件的后缀名是和仿真类型相关联的。)
.lis 文件内容
一开始是一些基本信息:
然后是器件参数信息
和执行仿真相关的信息:
使用.print
语句输出到该文件中的数据:
(x是数据起始位置,y是数据结束位置。)
最后是一些统计分析的信息
波形文件
波形文件quickDC.sw0
是option post
命令生成的,使用WaveView打开之后如下所示:
这里我们可以选择电路中所有的节点进行观察,也就是说HSPICE工具保存了所有的仿真数据。
3.4 修改输出配置
对输入网表文件的输出控制部分增加一些内容,如下所示:
.option POST NODE LIST PROBE
此时,输出文件的变化
① 输出波形文件
可以看到,这里只能选择 .print
语句中描述的语句,这是.option probe
在发挥作用。
② 输出列表文件中,增加了如下内容。
所有的元件(elements)信息,这是.option list
在发挥作用。
所有节点的连接信息,这是.option node
在发挥作用。
2. 反相器瞬态分析
输入网表文件:
直流工作点计算结果(.ic0
文件):
仿真得到的波形文件(.tr0
):
这个时候我们发现,反相器的上升延时和下降延时差距很大,这是因为我们把 PMOS 和 NMOS 的宽长比设置的一样了。
为了分析不同的宽长比对电路产生的影响,我们可以对该参数进行扫描分析。
使用不同宽长比进行仿真
第一个思路是.alter
语句,如下:
这个时候会执行三次仿真,得到三个直流工作点计算结果和三个输出文件:
当然啊,我们可以使用WaveView打开这三个文件,然后把他们放在一起进行比较,得到的波形如下:
第二个思路是使用sweep
,如下所示:
这个时候我们只得到一个输出波形文件,打开之后如下所示:
显然第二种方法更方便一些。
3. 几种不同输入源的比较
这里就主要考虑脉冲源、向量源和 PWL 源,主要是和数字电路相关的输入波形确定。
Pulse Source
定义文件:
波形文件:
在脉冲波形的定义中,是可以有关于周期的定义的,波形长度会随着仿真时间的增加而增加。
Pattern Source
输入激励定义如下:
得到的输入波形如下:
这里的问题是,输入激励定义了多久就是多久,不会随着仿真时间的增加,自动的进行周期性的重复。
仿真时间超过定义的输入激励事件的部分,输入激励会保持为定义的最后一个值,上例中就保持为1。
PWL Source
激励定义文件:
波形文件:
三个波形依次是 v1,v3,v2。
① 如果没有给出 r
关键字,波形是不会重复的,指定了 r
之后,波形就会随仿真施加周期性的重复。
② 如果没有定义 0 时刻的值,那么就是默认为定义的第一个值
③ 分段线性的意思就是,t1时刻的值到 t2 时刻的值是线性变化的,如图中黄线(V3)所示。