输入网表文件
- 1. 输入网表文件基本内容
- 2. 输入网表文件示例
- 3. 一些基本规则
- 4. 数值表示
- 5. 压缩文件格式的读取
- 6. 参数和表达式
从HSPICE的仿真流程看,出去初始化配置过程,真正的仿真是从输入网表文件开始的。
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
跟的路径有大小写之分的。如果想要开启大小写敏感,可以在启动HSPCIE的时候使用-case 1
选项,如下:
% hspice -case 1 -i design.sp -o design.lis
大小写敏感作用在以下内容:
-
注释有两种,以
*
开始的一整行都为注释内容,跟在某一个命令行后面的注释可以使用$
-
续行有两种情况,如下所示,使用
+
或者是\\
*** 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