Pspice
to IsSpice4 Conversion
1) Look
for all resistor .MODEL lines that look like:
.MODEL
<model_name> RES ....
In
these lines the type of the model must be changed from RES
to R.
Convert them according to the following rule:
Pspice
model:
.MODEL <model name> RES ....
.MODEL RMOD RES TC1 =
0.002
IsSpice model:
.MODEL <model_name> R ....
.MODEL RMOD R TC1 =
0.002
2) Look
for all lines starting with the letter 'R'. They should look like:
R<name>
<node_1> <node_2> <model_name> <resistance_value>
...
Here, the ordering
of the model name and resistance value
must be swapped.
The conversion
rule is:
Pspice model:
R<name> <node_1> <node_2> <model_name>
<resistance_value> ...
Rd 1 10 RMOD 1K TEMP=25
IsSpice model:
R<name> <node_1> <node_2> <resistance_value>
<model_name> ...
Rd 1 10 1K RMOD TEMP=25
3) Look
for .MODEL lines containing the T_MEASURED parameter:
.MODEL
<model_name> <model_type> .... T_MEASURED = <value>
....
The T_MEASURED
parameter must be renamed to TNOM:
Pspice model:
.MODEL <model_name> <model_type> .... T_MEASURED
= <value> ....
.MODEL DLMOD D IS = 1E-012 T_MEASURED
= 25 N = 2
IsSpice model:
.MODEL <model_name> <model_type> .... TNOM
= <value> ....
.MODEL DLMOD D IS = 1E-012 TNOM
= 25 N = 2
4) Look
for .model lines containing the T_ABS parameter:
.MODEL
<model_name> <model_type> T_ABS = <temp_value> ....
The T_ABS
parameter must be renamed to TEMP and moved
to the instance line that calls the .model.
Change the instance and the model line according to the following rule:
Pspice model:
<instance_name> .... <model_name>
.MODEL <model_name> <model_type> T_ABS
= <temp_value> ....
Ddg 25 24 ddgmod
.model ddgmod d t_abs = 25
is = 1E-024 cjo = 3.97482E-010 vj = 0.289018 m = 0.284643 fc =
1E-006
IsSpice model:
<instance_name> .... <model_name> TEMP
= <temp_value>
.MODEL <model_name> <model_type> ....
Ddg 25 24 ddgmod
temp = 25
.model ddgmod d is = 1E-024 cjo = 3.97482E-010 vj = 0.289018 m
= 0.284643 fc = 1E-006
Note that the .MODEL
line you are looking for may occur before the instance line that addresses
it.
Netlists are insensitive to the ordering of instance and MODEL
lines.
5) Look
for .model lines containing vswitch:
.model
<model_name> vswitch ron=??? roff=??? von=??? voff=???
Change the
device type from vswitch to sw.
Use the same RON and ROFF parameters, but replace VON and VOFF with
VT and VH calculated as follows: |
VON=VT+VH
and VOFF=VT-VH
Therefore, VT=(VON+VOFF)/2 and VH=VON-VT
|
Pspice model
.model smod vswitch
ron=.1m roff=1e15 von=-1.19 voff=-1.21
IsSpice model
.model smod sw ron=.1m
roff=1e15 vt=-1.2 vh=.01
6) Convert
G and E tables
G
tables become:
Pspice model
G1 3 4 table {v(1,2)}=(...{table
values}...)
IsSpice model
AG1 %vd(1,2)
%id(3,4) tmod
.model tmod pwl
+ fraction = FALSE,input_domain=0.0, xy_array = [...{table
values}...]
E
tables become:
Pspice model
E1 3 4 table {v(1,2)}=(...{table
values}...)
IsSpice model
AE1 %vd(1,2)
%vd(3,4) tmod
.model tmod pwl
+ fraction = FALSE,input_domain=0.0, xy_array = [...{table
values}...]
7) Convert
E/G/S elements and equations to B element equations
For
E/G elements:
Pspice model
gout 101 102 VALUE={V(201,202)*i(vsense)}
etmax
tmax 0 value={Tr*v(tm1)
+ (Ts-Tr)*v(tm2)}
IsSpice model
Bgout 101 102 I=V(201,202)*i(vsense)
Betmax
tmax 0 v={Tr}*v(tm1)
+ {(Ts-Tr)}*v(tm2)
; see how {} went around Ts-Tr
- Add
B to beginning of line
- Replace
VALUE with V for e source and I for g source
- Remove
curly braces before and after expression
- Place curly
braces around one or more parameters that can be evaluated.
Be careful
not to mix nodes and parameters in expressions.
For S elements:
Pspice model
s1 1 2 201 0 switch
IsSpice model
As1 1 2 201 0 switch
- Add A
to beginning of line
8)
Convert IF-THEN-ELSE syntax:
Pspice
model
Format: IF(argument,then,else)
E1 1 0 Value = {
IF ( V(3) > 5,
10, 100m )
}
E1
1 0 Value = {
IF ( V(3) > 5,
5, IF ( V(3) < 100m,
100m, V(3) )
) } ;nested if-then-else
IsSpice model
Format: |
EVALUATION ? OUTPUT_VALUE1
or EXPRESSION :
OUTPUT_VALUE2 or EXPRESSION |
|
if EVALUATION
is true then
OUTPUT_VALUE1 else OUTPUT_VALUE2 |
BE1
1 0 V = V(3) > 5 ?
10 : 100m
BE1 1 0 V = V(3) > 5 ? 5 : V(3) < 100m ? 100m :
V(3) ;nested if-then-else
9) Analog Behavioral In-line Equations, Expressions, and Functions:
Note: IsSpice4 uses B-elements and Pspice uses G-element or E-elements with keyword Value=. See item 7 above. This is only a list of Pspice syntax and the IsSpice4 equivalent. IsSpice has a lot more functions which you can read about in the IsSpice4 User's Guide. To make it easier to read I highlight in red what is different or not supported.
|
Pspice syntax |
IsSpice syntax |
addition |
+ |
+ |
subtraction |
- |
- |
multiplication |
* |
* |
division |
/ |
/ |
exponentiation |
** |
^ |
unary NOT |
~ |
~ |
boolean OR |
| |
| |
boolean XOR |
^ |
---not supported--- |
boolean AND |
& |
& |
equality test |
== |
---not supported--- |
non-equality test |
!= |
---not supported--- |
greater than test |
> |
> |
greater than or equal to test |
>= |
>= |
less than test |
< |
< |
less than or equal to test |
<= |
<= |
|x| |
ABS(x) |
ABS(x) |
x1/2 |
SQRT(x) |
SQRT(x) |
ex |
EXP(x) |
EXP(x) |
ln(x) |
LOG(x) |
ln(x) |
log(x) |
LOG10(x) |
log(x)
log10(x) |
|x|y |
PWR(x,y) |
PWR(x,y) |
+|x|y (if x > 0)
-|x|y (if x < 0) |
PWRS(x,y) |
PWRS(x,y) |
sin(x) |
SIN(x) |
SIN(x) |
sin-1(x) |
ASIN(x) |
ASIN(x) |
sinh(x) |
SINH(x) |
SINH(x) |
cos(x) |
COS(x) |
COS(x) |
cos-1(x) |
ACOS(x) |
ACOS(x) |
cosh(x) |
COSH(x) |
COSH(x) |
tan(x) |
TAN(x) |
TAN(x) |
tan-1(x) |
ATAN(x)
ARCTAN(x) |
ATAN(x) |
tan-1(y/x) |
ATAN2(y,x) |
ATAN2(y,x) |
tanh(x) |
TANH(x) |
TANH(x) |
magnitude of x |
M(x) |
M(x)
mag(x)
magnitude(x) |
phase of x |
P(x) |
P(x)
ph(x)
phase(x) |
real part of x |
R(x) |
R(x)
re(x)
real(x) |
imaginary part of x |
IMG(x) |
IMG(x)
im(x)
imag(x) |
time derivative of x |
DDT(x) |
---not supported--- |
time integral of x |
SDT(x) |
---not supported--- |
y value as a function of x |
TABLE(x,x1,y1,...) |
Use Code Model (See item 6 above) |
minimum of x and y |
MIN(x,y) |
MIN(x,y) |
maximum of x and y |
MAX(x,y) |
MAX(x,y) |
limit (x,min,max) |
LIMIT(x,min,max) |
---not supported--- |
+1 if x > 0
0 if x = 0
-1 if x < 0 |
SGN(x) |
SGN(x) |
1 if x > 0
0 otherwise |
STP(x) |
STP(x) |
x if t is true
y otherwise |
IF(t,x,y) |
t ? x : y |
|