Electronic – Help Converting a PSPICE MOSFET .LIB to an LTSPICE .SUB

conversionltspicemodelmosfetpspice

I am designing a buck-boost regulator for a course at school and I would like to use the OnSemi ntk3139p PMOS transistor. OnSemi provides a few spice models for this part and I am getting stuck converting the Pspice file so that it is usable in LTspice. I realize I could pick something else, but I wanted to take this opportunity to dive into some of the nitty gritty in spice.

Some of the references I have been following for spice are:

The Pspice file in question is listed bellow:

.SUBCKT ntk3139p 1 2 3
**************************************
*      Model Generated by MODPEX     *
*Copyright(c) Symmetry Design Systems*
*         All Rights Reserved        *
*    UNPUBLISHED LICENSED SOFTWARE   *
*   Contains Proprietary Information *
*      Which is The Property of      *
*     SYMMETRY OR ITS LICENSORS      *
*Commercial Use or Resale Restricted *
*   by Symmetry License Agreement    *
**************************************
* Model generated on Jan  4, 07
* MODEL FORMAT: PSpice
* Symmetry POWER MOS Model (Version 1.0)
* External Node Designations
* Node 1 -> Drain
* Node 2 -> Gate
* Node 3 -> Source
M1 9 7 8 8 MM L=100u W=100u
* Default values used in MM:
* The voltage-dependent capacitances are
* not included. Other default values are:
*   RS=0 RD=0 LD=0 CBD=0 CBS=0 CGBO=0
.MODEL MM PMOS LEVEL=1 IS=1e-32
+VTO=-1 LAMBDA=0 KP=5.6585
+CGSO=1.09084e-06 CGDO=5.71422e-08
RS 8 3 0.298194
D1 1 3 MD
.MODEL MD D IS=1.38278e-09 RS=0.152961 N=1.5 BV=20
+IBV=0.00025 EG=1.2 XTI=1 TT=2.5e-09
+CJO=2.06195e-11 VJ=0.5 M=0.371211 FC=0.1
RDS 3 1 1.6e+07
RD 9 1 0.0001
RG 2 7 110.624
D2 5 4 MD1
* Default values used in MD1:
*   RS=0 EG=1.11 XTI=3.0 TT=0
*   BV=infinite IBV=1mA
.MODEL MD1 D IS=1e-32 N=50
+CJO=3.80558e-11 VJ=0.507085 M=0.9 FC=1e-08
D3 5 0 MD2
* Default values used in MD2:
*   EG=1.11 XTI=3.0 TT=0 CJO=0
*   BV=infinite IBV=1mA
.MODEL MD2 D IS=1e-10 N=0.4 RS=3e-06
RL 5 10 1
FI2 7 9 VFI2 -1
VFI2 4 0 0
EV16 10 0 9 7 1
CAP 11 10 3.80558e-11
FI1 7 9 VFI1 -1
VFI1 11 6 0
RCAP 6 10 1
D4 6 0 MD3
* Default values used in MD3:
*   EG=1.11 XTI=3.0 TT=0 CJO=0
*   RS=0 BV=infinite IBV=1mA
.MODEL MD3 D IS=1e-10 N=0.4
.ENDS ntk3139p

My crack at converting it is:

.SUBCKT ntk3139p 1 2 3
**************************************
*      Model Generated by MODPEX     *
*Copyright(c) Symmetry Design Systems*
*         All Rights Reserved        *
*    UNPUBLISHED LICENSED SOFTWARE   *
*   Contains Proprietary Information *
*      Which is The Property of      *
*     SYMMETRY OR ITS LICENSORS      *
*Commercial Use or Resale Restricted *
*   by Symmetry License Agreement    *
**************************************
* External Node Designations
* Node 1 -> Drain
* Node 2 -> Gate
* Node 3 -> Source
M1 9 7 8 8 MM L=100u W=100u
RS 8 3     0.298194
D1 1 3     MD
RDS 3 1    1.6e+07
RD 9 1     0.0001
RG 2 7     110.624
D3 5 0     MD2
RL 5 10    1
FI2 7 9    VFI2 -1
VFI2 4 0 0
EV16 10 0 9 7 1
CAP 11 10  3.80558e-11
FI1 7 9    VFI1 -1
VFI1 11 6 0
RCAP 6 10 1
D4 6 0     MD3
* Model definitions
.MODEL MM PMOS(LEVEL=1 
+ IS=1e-32
+ VTO=-1 
+ LAMBDA=0 
+ KP=5.6585
+ CGSO=1.09084e-06 
+ CGDO=5.71422e-08)
.MODEL MD D (IS=1.38278e-09 
+ RS=0.152961 
+ N=1.5 BV=20
+ IBV=0.00025 
+ EG=1.2 
+ XTI=1 
+ TT=2.5e-09
+ CJO=2.06195e-11 
+ VJ=0.5 
+ M=0.371211 
+ FC=0.1)
.MODEL MD1 D (IS=1e-32 N=50
+ CJO=3.80558e-11 VJ=0.507085 M=0.9 FC=1e-08)
.MODEL MD2 D (IS=1e-10 N=0.4 RS=3e-06)
.MODEL MD3 D (IS=1e-10 N=0.4)
.ENDS

I have rearranged some of the lines so that they resemble some of the other subcircuit LTspice files that I have been looking at with the netlist first and the model definitions second and I have added the parenthesis to the parameters of the model directives. Most of the subcircuit file makes sense to me but a few of the devices I am not sure about such as FI2. I think this is a current dependent current source but it may not be used properly here. I am not sure where I am going wrong here as the error I am getting in LTspice is

Fatal Error: Unknown subcircuit called in:
  xu1 n002 n001 0 ntk3139p.sub ntk3139p

The way I implement my NTK3139P.sub is:

  • I save the NTK3139P.sub file in C:\Program Files (x86)\LTC\LTCspiceIV\lib\sub
  • Open LTspice
  • Create New symbol
    • Pin numbers coorelate with subcircuit definitions
    • In attributes: Prefix = X, Value = ntk3139p
    • Saved where it can be seen by LTSpice
  • Restart LTspice
  • Create super simple schematic to test it with the FET, a resistor, a voltage source, and ground
  • Run a .tran 1 simulation
  • The aforementioned error occurs

Any help debugging this and/or explanations of where I went wrong or a friendly point to some more general spice literature would be appreciated!

Best Answer

If I simply save that PSpice file to a ntk3139p.lib file and import it in LTspice, it all works fine:

enter image description here

The Rds(on) looks in line with the datasheet for that part.

enter image description here

What you need to keep in mind is to change the PMOS statement line to X (because it's a subcircuit) and match the name to the subckt name declared in that lib. Ctrl-click to access the advanced properties page for the FET:

enter image description here

This is actually explained in detail at http://www.linear.com/solutions/1083


And if you actually want to import that model into LTspice so that you don't have to use an .include statement, what you need to do is

  1. Copy the aforementioned ntk3139p.lib into LTspiceIV\lib\sub; this directory can [and does] contain both .lib and .sub files.
  2. Create a ntk3139p.asy in LTspiceIV\lib\sym (or in one of its subfolders, in which case the component will show up in the corresponing category in the F2 select component dialog). This .asy file is initially a copy of pmos.asy that comes with LTspice in this case. Now you need to edit this ntk3139p.asy file either in a text editor or using LTspice itself (via Edit->Attributes or Ctrl+A) so that it reads:

enter image description here

Now you can add the new component, but since we're using X as type it automatically get labelled as an IC (U) rather than MOSFET as before. But we don't need an .inc line anymore for the simulation to work:

enter image description here

Honestly this procedure is usually not worth the hassle for me... and if you reinstall LTspice or load your schematic on a different machine, you have to do it all over again, never mind that it becomes less clear in the schematic what components you need[ed] extra libraries for. Furthermore, you can no longer change the MOSFET by right-clicking on it an picking a new model. If you try that with your custom asy file, you get:

enter image description here

Which for me is the most annoying part. So I don't recommend doing this import procedure for MOSFETS; I think it's only worth the hassle for ICs.


I honestly don't know exactly what the .sub files are restricted to contain in LTspice, but the ones that come with the program are all binary files containing LT's proprietary models, some of which also make use of LT's extensions like steady and so forth. I don't think the .sub binary format that LTspice uses is publicly documented anywhere.