|
|
@ -1,25 +1,29 @@ |
|
|
** NMOSFET: table generator with BSIM4 2D (Vdrain, Vgate) |
|
|
** NMOSFET: table generator with BSIM4 2D (Vdrain, Vgate) |
|
|
* This file may be run by 'ngspice table-generator-b4-2d.sp' |
|
|
* This file may be run by 'ngspice table-generator-b4-2d.sp' |
|
|
* It will generate a 2D data table by simulating the MOS drain current |
|
|
|
|
|
|
|
|
* It will generate a 2D data table by simulating the MOS drain current |
|
|
* as function of drain and gate voltages. The simulation uses |
|
|
* as function of drain and gate voltages. The simulation uses |
|
|
* the ngspice BSIM4.6.1 MOS model and Berkeley model parameters. |
|
|
* the ngspice BSIM4.6.1 MOS model and Berkeley model parameters. |
|
|
* This table is an input file for the XSPICE 2D table model. |
|
|
* This table is an input file for the XSPICE 2D table model. |
|
|
* You have to select NMOS or PMOS by manually editing this file: currently |
|
|
|
|
|
* PMOS is selected. For NMOS change '*' in column 1 |
|
|
|
|
|
* for CSPARAM, m1, outfile, echo *table... |
|
|
|
|
|
|
|
|
* You have to select NMOS or PMOS by manually editing parameter |
|
|
|
|
|
* 'mostype'. |
|
|
* In addition you may change the step sizes vdstep vgstep vbstep in CSPARAM |
|
|
* In addition you may change the step sizes vdstep vgstep vbstep in CSPARAM |
|
|
* to obtain the required resolution for the data. |
|
|
* to obtain the required resolution for the data. |
|
|
* These tables will contain pure dc data. For transient simulation you may |
|
|
* These tables will contain pure dc data. For transient simulation you may |
|
|
* need to add some capacitors to the device model for a 'real world' simulation. |
|
|
* need to add some capacitors to the device model for a 'real world' simulation. |
|
|
|
|
|
|
|
|
*NMOS |
|
|
|
|
|
*.csparam vdstart=-0.1 |
|
|
|
|
|
*.csparam vdstop=1.8 |
|
|
|
|
|
*.csparam vdstep=0.05 |
|
|
|
|
|
*.csparam vgstart=-0.1 |
|
|
|
|
|
*.csparam vgstop=1.8 |
|
|
|
|
|
*.csparam vgstep=0.05 |
|
|
|
|
|
|
|
|
* setting the MOS type (NMOS or PMOS) |
|
|
|
|
|
.param mostype = 2 ; NMOS, 2 for PMOS |
|
|
|
|
|
|
|
|
|
|
|
.if (mostype == 1) |
|
|
|
|
|
*NMOS |
|
|
|
|
|
.csparam vdstart=-0.1 |
|
|
|
|
|
.csparam vdstop=1.8 |
|
|
|
|
|
.csparam vdstep=0.01 |
|
|
|
|
|
.csparam vgstart=-0.1 |
|
|
|
|
|
.csparam vgstop=1.8 |
|
|
|
|
|
.csparam vgstep=0.01 |
|
|
|
|
|
.csparam mtype=1 |
|
|
|
|
|
.elseif (mostype == 2) |
|
|
*PMOS |
|
|
*PMOS |
|
|
.csparam vdstart=-1.8 |
|
|
.csparam vdstart=-1.8 |
|
|
.csparam vdstop=0.1 |
|
|
.csparam vdstop=0.1 |
|
|
@ -27,22 +31,41 @@ |
|
|
.csparam vgstart=-1.8 |
|
|
.csparam vgstart=-1.8 |
|
|
.csparam vgstop=0.1 |
|
|
.csparam vgstop=0.1 |
|
|
.csparam vgstep=0.01 |
|
|
.csparam vgstep=0.01 |
|
|
|
|
|
.csparam mtype=2 |
|
|
|
|
|
.endif |
|
|
|
|
|
|
|
|
** Circuit Description ** |
|
|
** Circuit Description ** |
|
|
*m1 2 1 3 0 nbsim4 L=0.13u W=10.0u rgeoMod=1 |
|
|
|
|
|
|
|
|
.if (mostype == 1) |
|
|
|
|
|
m1 2 1 3 0 nbsim4 L=0.13u W=10.0u rgeoMod=1 |
|
|
|
|
|
.elseif (mostype == 2) |
|
|
m1 2 1 3 0 pbsim4 L=0.13u W=10.0u rgeoMod=1 |
|
|
m1 2 1 3 0 pbsim4 L=0.13u W=10.0u rgeoMod=1 |
|
|
|
|
|
.endif |
|
|
vgs 1 0 1.8 |
|
|
vgs 1 0 1.8 |
|
|
vds 2 0 1.8 |
|
|
vds 2 0 1.8 |
|
|
vss 3 0 0 |
|
|
vss 3 0 0 |
|
|
|
|
|
|
|
|
.control |
|
|
.control |
|
|
** output file ** |
|
|
** output file ** |
|
|
*set outfile = "bsim4n-2d-1.table" |
|
|
|
|
|
set outfile = "bsim4p-2d-1.table" |
|
|
|
|
|
|
|
|
echo |
|
|
|
|
|
if mtype = 1 |
|
|
|
|
|
set outfile = "$inputdir/bsim4n-2d-1.table" |
|
|
|
|
|
echo nmos table generation , table is written to |
|
|
|
|
|
echo $outfile |
|
|
|
|
|
else |
|
|
|
|
|
if mtype = 2 |
|
|
|
|
|
set outfile = "$inputdir/bsim4p-2d-1.table" |
|
|
|
|
|
echo pmos table generation , table is written to |
|
|
|
|
|
echo $outfile |
|
|
|
|
|
end |
|
|
|
|
|
end |
|
|
|
|
|
echo |
|
|
|
|
|
|
|
|
save i(vss) |
|
|
save i(vss) |
|
|
*echo *table for nmos bsim 4 > $outfile |
|
|
|
|
|
echo *table for pmos bsim 4 > $outfile |
|
|
|
|
|
|
|
|
if mtype = 1 |
|
|
|
|
|
echo *table for nmos bsim 4 > $outfile |
|
|
|
|
|
else |
|
|
|
|
|
echo *table for pmos bsim 4 > $outfile |
|
|
|
|
|
end |
|
|
|
|
|
|
|
|
let xcount = floor((vdstop-vdstart)/vdstep) + 1 |
|
|
let xcount = floor((vdstop-vdstart)/vdstep) + 1 |
|
|
let ycount = floor((vgstop-vgstart)/vgstep) + 1 |
|
|
let ycount = floor((vgstop-vgstart)/vgstep) + 1 |
|
|
@ -95,7 +118,10 @@ end |
|
|
|
|
|
|
|
|
.endc |
|
|
.endc |
|
|
|
|
|
|
|
|
.include ./modelcards/modelcard.pmos |
|
|
|
|
|
|
|
|
.if (mostype == 1) |
|
|
.include ./modelcards/modelcard.nmos |
|
|
.include ./modelcards/modelcard.nmos |
|
|
|
|
|
.elseif (mostype == 2) |
|
|
|
|
|
.include ./modelcards/modelcard.pmos |
|
|
|
|
|
.endif |
|
|
|
|
|
|
|
|
.end |
|
|
.end |