请问Hspice 中 .subckt怎么用
时间: 2023-12-24 08:02:52 浏览: 168
在 Hspice 中,`.subckt` 语句也用于定义子电路(sub-circuit),以便在主电路中进行多次重复使用。`.subckt` 语句的语法与 SPICE 的语法类似,但有一些特定的要求。
下面是一个简单的例子,演示了如何定义和使用一个简单的子电路:
```
.subckt adder a b cin sum cout
xor g1 sum a b
and g2 cout a b
or g3 x cin g2
or g4 sum g2 g3
.model xor gate (vhigh=5, vlow=0, ron=1e3, roff=1e6)
.model and gate (vhigh=5, vlow=0, ron=1e3, roff=1e6)
.model or gate (vhigh=5, vlow=0, ron=1e3, roff=1e6)
.ends adder
```
在这个例子中,我们定义了一个名为 `adder` 的子电路,它有五个输入端口 `a`、`b`、`cin` 和 `sum`、`cout`,以及四个内部端口 `g1`、`g2`、`g3` 和 `g4`。在子电路的定义中,我们使用 `xor`、`and` 和 `or` 门来实现加法器的逻辑,并定义了相应的门模型。注意,每个门模型的参数都需要在 `.model` 语句中指定。
在使用子电路时,您需要使用 `.include` 指令将子电路文件包含在主电路文件中,并使用 `.subckt` 指令实例化子电路。例如:
```
.include "adder.sp"
a in1
b in2
cin in3
sum out1
cout out2
x gnd
.subckt adder a=in1 b=in2 cin=in3 sum=sum cout=cout
```
在这个例子中,我们首先使用 `.include` 指令将子电路文件 `adder.sp` 包含在主电路文件中。然后,我们定义了五个端口 `in1`、`in2`、`in3`、`out1` 和 `out2`。最后,我们使用 `.subckt` 指令实例化子电路,并将输入和输出端口连接到主电路的端口上。
请注意,子电路的所有输入和输出端口都必须在实例化时指定,并且名称必须完全匹配。此外,子电路名称和端口名称不能与主电路中的任何其他元件名称相同。
希望这个简单的例子能够帮助您理解 `.subckt` 的用法。