从HSPICE的仿真流程看,除去初始化配置过程,真正的仿真是从输入网表文件开始的,该文件是SPICE仿真的核心输入文件。
HSPICE 根据输入网表文件( input netlist file )中的内容进行运算并产生仿真结果,仿真结果存储在输出列表文件或其他图形数据文件之中。
那么输入网表文件中到底都包含哪些内容呢?
1. 输入网表文件的基本内容
输入网表文件的命名方式为 design.sp
,文件包含如下四个方面的内容。
- Design netlist (subcircuits, macros, power supplies, and so on)(设计网表)
- Statement naming the library to use (optional)(所用到的库)
- Specifies the type of analysis to run (optional)(所执行分析的类型)
- Specifies the type of output desired (optional)(期望的输出)
更加具体的内容如下:
每部分内容描述方式示例:
具体的输入网表示例:
总的来说,输入网表文件一般包含如下内容:
- 标题语句:放在代码的第一行,通常情况下代码的第一行在执行时会被忽略,所以这一行可以是文件名,或者是对文件内容的简单描述。
- 电源和信号源描述语句:指明电路中使用的电源和信号源的类型、连接关系和参数
- 元器件描述语句(电路描述语句):指明电路中元器件的类型和它们之间的链接关系,以及元器件参数和模型参数等
- 仿真类型语句:指明进行什么类型的仿真分析,如直流、交流、瞬态分析等
- 模型语句:指明元器件采用的模型,可以调用已有模型,也可以在代码中自己定义。
- 结束语句:
.end
位于代码的最后一行,表示代码结束。
2. 输入网表文件示例
这里给出了一个简单输入网表文件的示例。
如果你想对一个简单的反相器进行进行仿真,测量其时序行为,你需要在输入网表文件中描述以下内容:
定义好上述内容之后,可以使用瞬态分析,然后生成输入、输出端口的波形数据。
最终的写好的的输入网表文件的内容如下:
* Sample inverter circuit
* **** MOS models *****
.MODEL n1 NMOS LEVEL=3 THETA=0.4 ...
.MODEL p1 PMOS LEVEL=3 ...
* ***** Define power supplies and sources *****
VDD VDD 0 5
VPULSE VIN 0 PULSE 0 5 2N 2N 2N 98N 200N
VGND GND 0 0
* ***** Actual circuit topology *****
M1 VOUT VIN VDD VDD p1
M2 VOUT VIN GND GND n1
* ***** Analysis statement *****
.TRAN 1n 300n
* ***** Output control statements *****
.OPTION POST PROBE
.PROBE V(VIN) V(VOUT)
.END
3. 一些基本规则
-
输入文件的第一行无论内容是什么,总是会被工具认为是标题行,工具会在每一个输出文件中打印该行内容。第一行的任何内容都不会作为仿真内容,如果没有标题,就要空出来。
-
输入文件支持
.gzip
格式,文件中的.inc, .lib , .load
也支持这种格式。 -
输入网表中的指令顺序可随意,最后一定要以
.end
结尾,否则会报错。 -
默认情况下,行指令不区分大小写,但是
.INC
或.LIB
语句中对路径的描述是有大小写之分的。如果想要开启大小写敏感,可以在启动HSPICE的时候使用-case 1
选项,如下:
% hspice -case 1 -i design.sp -o design.lis
大小写敏感作用在以下内容:
-
注释有两种,以
*
开始的一整行都为注释内容,跟在某一个命令行后面的注释可以使用$
-
HSPICE语法中,一行就是一个描述语句,如果需要换行,或者说续行,可以使用
+
或者是\\
,如下所示。
*** continuation is between tokens ***
R1 1 0
+ R='res1-res2'
*** string continuation ***
R6 4 0 R='res1-\\
res2'
R5 4 0 R='res1- \\
res2'
*** token continuation ***
R4 node1 no\\
de2 R= 'res1-res2'
4. 数值表示方法
HSPICE 中的数值有以下三种表示方式:
① 整数或浮点数
② 浮点数后面跟一个整数类型的指数
③ 整数或浮点数后面跟一个缩放因子
① 如果想要定义指数,也可以用两个 **
,比如 2的5次方可以写成:2**5
② 可以使用 1e-12
或者 1p
,但是如果想要混合使用,如 1e-6u
,就需要做如下指定:
.option MIXED_NUM_FORMAT = 1
③ 数字输出格式的指定