1

我有以下 Hspice 代码:

.SUBCKT inv_slvt in out vdd
Mpmos  out  in    vdd  pmos_slvt
Mnmos  out  in    0    nmos_slvt
.ENDS

.SUBCKT inv_lvt in out vdd
Mpmos  out  in    vdd  pmos_lvt
Mnmos  out  in    0    nmos_lvt
.ENDS

有没有办法通过参数化模型类型的后缀(即“slvt”与“lvt”)将代码简化为单个子电路定义?

4

1 回答 1

2

您不能参数化模型名称、参数或参数值的一部分。但是,您可以参数化整个名称。因此,在您的情况下,您必须将 MOSFET 名称参数化为 pmos_slvt、nmos_slvt、pmos_lvt 或 nmos_lvt。以下是你将如何去做:

.global vdd! gnd!

* Defining the default values for parameters nmodel and pmodel
.SUBCKT inv in out pmodel=str('pmos_lvt') nmodel=str('nmos_lvt')
   Mpmos  vdd! in out vdd!  str(pmodel)
   Mnmos  gnd! in out gnd!  str(nmodel)
.ENDS

Vvdd vdd! 0 dc=3.3
Vgnd gnd! 0 dc=0

Xinv in out inv pmodel=str('pmos_slvt') nmodel=str('nmos_slvt')

处理字符串时,它们的值应作为 str('value') 传递。例如:

.PARAM par1 = str('nmos_180')

当您想使用保存字符串的参数值时,您将使用 str(parameter_name),如下所示:

.MODEL str(par1) nmos ...

作为旁注,我想提一下您没有正确使用 MOSFET 实例。Spice 中的 MOSFET 器件有 4 个端子:漏极、栅极、源极和体。在例化 MOSFET 器件时,您必须使用全部四个。在这种情况下,您可以使用全局节点,因为它们在子电路中可用。全局节点的名称不一定要大写,但这是一种很好的做法,可以让设计人员轻松识别它们。

于 2019-10-31T19:08:53.490 回答