如我之前文章所述,半导体器件模型是公式和参数的组合,建好的模型只是用公式的形式把物理现象描述出来。要想将模型应用于电路仿真,还必须借助计算机编程语言,通过编译程序来实现。
最早的 SPICE 和 SPICE 模型都是 FORTRAN 语言编写的,例如 SPICE2。目前,FORTRAN 语言用的比较少了,取而代之的是 C 语言。自从1985年用 C 语言取代 FORTRAN 语言来编写 SPICE3 开始,C 语言开始成为新一代 SPICE 紧凑型建模的标准实现语言并沿用至今,被绝大多数模型开发者所采用。
C 语言是一种相对较底层的计算机语言,能够直接切入仿真器,具有计算速度快、运算效率高的优点。但 C 语言是一种通用的计算机语言,它不是专门用于器件建模的,因而在使用 C 语言实现器件模型时,必须考虑与建模本身无关的仿真器接口问题:仿真器接口需要实现很多功能,例如模型参数的读入,分配内存, 给变量赋初值等等,但对于不同的仿真器一般需要不同的接口实现形式,这样模型开发者必须为不同的仿真器分别开发接口,非常麻烦。另一个令模型开发者头疼的问题是,许多商用仿真器并不向模型开发者开放 C 语言模型接口,即使模型开发好了,也不能将开发好的模型植入这些商用仿真器中使用。这些问题使得 SPICE 紧凑型建模成为一项难度和工作量都比较大的工作。
也有一些人采用 MATLAB,虽然其简单易用,具有强大的数据操作和绘图功能,能够较完美地实现数据的拟合,但因 MATLAB 无法直接在电路仿真器上直接使用而未得到推广。
近年来,硬件描述语言 Verilog-A 功能逐步得到加强,对紧凑型模型的支持逐步完善,在模型的实现上扮演越来越重要的角色。Verilog-A 是一种针对模拟电路的工业标准模型语言,是 Verilog-AMS的连续时间子集,是一种高级语言。相比 C 语言,它在支持紧凑型模型建模方面有了很大的改进。主要体现在:Verilog-A 使模型开发者将更多的精力用于器件建模本身, 而不需要过多的关注仿真器的接口问题;Verilog-A 仿真器可以自动求解紧凑型模。此外,Verilog-A 提供了较强大的参数定义语句,可以较方便地定义参数默认值和范围。对于同一个模型,用 Verilog-A 编写的模型,其源代码比C实现的源代码在长度上能缩短好几倍。总而言之,Verilog-A 可以缩短模型开发周期,降低模型开发难度,是非常适合于紧凑型模型开发的计算机语言。更重要的是,用 Verilog-A 格式开发的模型可以在任何支持 Verilog-A 语言的电路模拟器上运行。由于这些优点,Verilog-A 语言已经被几个领先的紧凑模型开发人员所采用,如 Berkeley BSIM 模型开发组、Arizona State的PSP 模型开发组等。Verilog-A语言已经成为紧凑模型开发的新标准。
若想使用 Verilog-A 语言建模,还需一个前提条件,就是支持 Verilog-A 语言的 SPICE 仿真器。目前,主流 SPICE 软件提供商都已逐步支持 Verilog-A 语言, 如 HSPICE,ADS,Spectre,SmartSPICE 等商业 SPICE 软件都已支持 Verilog-A 模型的编译。另外,很多模型提取软件如Keysight的 ICCAP、MBP 及概伦电子的 BSIMProPlus 等也可支持 Verilog-A 的编译。
Laurent Lamaitre 在 2002 年发布了 ADMS,该软件可将 Verilog-A 模型代码转化为 C 语言模型代码,开源 SPICE 软件 NGSPICE 已通过 ADMS 实现了对 Verilog-A 语言的支持。
`include "constants.vams"
`include "disciplines.vams"
module XXX (dout, din);
inout dout, din;
electrical dout, din;
parameter real fc=100e6;
//behavioral description
endmodule
-
模块的描述通过module和endmodule来完成;
-
端口的方向有:input / output / inout;
-
端口的类型有:electrical / voltage / current;
-
参数可以在模块调用时进行赋值;
-
对于数字可以用real和integer类型数进行存储;
-
模拟电路的描述必须在analog内进行,可以用begin…end定义analog区间;
-
电器节点的赋值用<+操作符,而一般数的赋值可以直接用等号;
-
电压电流的表示方式V(n1), V(n1,n2), I(n1), I(n1,n2),其中V和I均要大写
Example
我们以最简单的Diode模型为例,来说明Verilog-A是如何定义SPICE模型的。
`include "disciplines.h"
module diode(n1,n2);
inout n1,n2;
electrical n1,n2;
parameter real isat=10^-6;
analog begin
I(n1,n2)<+ isat*(exp(V(n1,n2)/$vt())-1);
end
endmodule
我们可以在Keysight的ICCAP中进行仿真及模型的开发。
同样在ICCAP中可以进行模型参数的调谐和优化。
参考资料:
-
ADMS - A Fully Customizable Compact Model Compiler
-
https://en.wikipedia.org/wiki/Verilog-A
-
qthelp://ads.2023update1/doc/veriloga/About_Model_Development_in_Verilog-A.html
发表评论