Browse Source
Added dtemp and "m" to hfet1, pole-zero analysis and corrected a bug in unsetup function. Added two test netlists.
pre-master-46
Added dtemp and "m" to hfet1, pole-zero analysis and corrected a bug in unsetup function. Added two test netlists.
pre-master-46
23 changed files with 425 additions and 192 deletions
-
11ChangeLog
-
16DEVICES
-
1src/spicelib/devices/hfet1/Makefile.am
-
8src/spicelib/devices/hfet1/hfet.c
-
98src/spicelib/devices/hfet1/hfetacl.c
-
34src/spicelib/devices/hfet1/hfetask.c
-
19src/spicelib/devices/hfet1/hfetdefs.h
-
6src/spicelib/devices/hfet1/hfetdel.c
-
8src/spicelib/devices/hfet1/hfetdest.c
-
26src/spicelib/devices/hfet1/hfetext.h
-
11src/spicelib/devices/hfet1/hfetgetic.c
-
2src/spicelib/devices/hfet1/hfetinit.c
-
91src/spicelib/devices/hfet1/hfetload.c
-
7src/spicelib/devices/hfet1/hfetmask.c
-
6src/spicelib/devices/hfet1/hfetmdel.c
-
10src/spicelib/devices/hfet1/hfetmpar.c
-
21src/spicelib/devices/hfet1/hfetparam.c
-
111src/spicelib/devices/hfet1/hfetpzl.c
-
62src/spicelib/devices/hfet1/hfetsetup.c
-
19src/spicelib/devices/hfet1/hfettemp.c
-
12src/spicelib/devices/hfet1/hfettrunc.c
-
13tests/hfet/id_vgs.cir
-
25tests/hfet/inverter.cir
@ -0,0 +1,111 @@ |
|||||
|
/********** |
||||
|
Author: 2003 Paolo Nenzi |
||||
|
**********/ |
||||
|
/* |
||||
|
*/ |
||||
|
|
||||
|
|
||||
|
#include "ngspice.h" |
||||
|
#include "cktdefs.h" |
||||
|
#include "complex.h" |
||||
|
#include "hfetdefs.h" |
||||
|
#include "sperror.h" |
||||
|
#include "suffix.h" |
||||
|
|
||||
|
|
||||
|
int |
||||
|
HFETApzLoad(GENmodel *inModel, CKTcircuit *ckt, SPcomplex *s) |
||||
|
{ |
||||
|
HFETAmodel *model = (HFETAmodel*)inModel; |
||||
|
HFETAinstance *here; |
||||
|
double gm; |
||||
|
double gds; |
||||
|
double xds; |
||||
|
double ggs; |
||||
|
double xgs; |
||||
|
double ggd; |
||||
|
double xgd; |
||||
|
double ggspp; |
||||
|
double ggdpp; |
||||
|
double f; |
||||
|
|
||||
|
double m; |
||||
|
|
||||
|
for( ; model != NULL; model = model->HFETAnextModel ) |
||||
|
{ |
||||
|
for( here = model->HFETAinstances; here != NULL; |
||||
|
here = here->HFETAnextInstance) { |
||||
|
|
||||
|
if (here->HFETAowner != ARCHme) continue; |
||||
|
|
||||
|
gm = *(ckt->CKTstate0 + here->HFETAgm); |
||||
|
gds = *(ckt->CKTstate0 + here->HFETAgds); |
||||
|
xds = CDS*ckt->CKTomega; |
||||
|
ggs = *(ckt->CKTstate0 + here->HFETAggs); |
||||
|
xgs = *(ckt->CKTstate0 + here->HFETAqgs); |
||||
|
ggd = *(ckt->CKTstate0 + here->HFETAggd); |
||||
|
xgd = *(ckt->CKTstate0 + here->HFETAqgd); |
||||
|
ggspp = *(ckt->CKTstate0 + here->HFETAggspp); |
||||
|
ggdpp = *(ckt->CKTstate0 + here->HFETAggdpp); |
||||
|
if(model->HFETAkappaGiven && here->HFETAdelf != 0.0) { |
||||
|
f = ckt->CKTomega/2/M_PI; |
||||
|
gds = gds*(1+0.5*model->HFETAkappa*(1+tanh((f-here->HFETAfgds)/here->HFETAdelf))); |
||||
|
} |
||||
|
|
||||
|
m = here->HFETAm; |
||||
|
|
||||
|
*(here->HFETAdrainDrainPtr) += m * (model->HFETAdrainConduct); |
||||
|
*(here->HFETAsourceSourcePtr) += m * (model->HFETAsourceConduct); |
||||
|
*(here->HFETAgatePrimeGatePrimePtr) += m * (ggd+ggs+ggspp+ggdpp+model->HFETAgateConduct); |
||||
|
*(here->HFETAdrainPrimeDrainPrimePtr) += m * (gds+ggd+model->HFETAdrainConduct+model->HFETAgf); |
||||
|
*(here->HFETAsourcePrimeSourcePrimePtr) += m * (gds+gm+ggs+model->HFETAsourceConduct+model->HFETAgi); |
||||
|
*(here->HFETAsourcePrmPrmSourcePrmPrmPtr) += m * (model->HFETAgi+ggspp); |
||||
|
*(here->HFETAdrainPrmPrmDrainPrmPrmPtr) += m * (model->HFETAgf+ggdpp); |
||||
|
*(here->HFETAdrainDrainPrimePtr) -= m * (model->HFETAdrainConduct); |
||||
|
*(here->HFETAdrainPrimeDrainPtr) -= m * (model->HFETAdrainConduct); |
||||
|
*(here->HFETAsourceSourcePrimePtr) -= m * (model->HFETAsourceConduct); |
||||
|
*(here->HFETAsourcePrimeSourcePtr) -= m * (model->HFETAsourceConduct); |
||||
|
*(here->HFETAgatePrimeDrainPrimePtr) -= m * (ggd); |
||||
|
*(here->HFETAdrainPrimeGatePrimePtr) += m * (gm-ggd); |
||||
|
*(here->HFETAgatePrimeSourcePrimePtr) -= m * (ggs); |
||||
|
*(here->HFETAsourcePrimeGatePrimePtr) += m * (-ggs-gm); |
||||
|
*(here->HFETAdrainPrimeSourcePrimePtr) += m * (-gds-gm); |
||||
|
*(here->HFETAsourcePrimeDrainPrimePtr) -= m * (gds); |
||||
|
*(here->HFETAsourcePrimeSourcePrmPrmPtr) -= m * (model->HFETAgi); |
||||
|
*(here->HFETAsourcePrmPrmSourcePrimePtr) -= m * (model->HFETAgi); |
||||
|
*(here->HFETAgatePrimeSourcePrmPrmPtr) -= m * (ggspp); |
||||
|
*(here->HFETAsourcePrmPrmGatePrimePtr) -= m * (ggspp); |
||||
|
*(here->HFETAdrainPrimeDrainPrmPrmPtr) -= m * (model->HFETAgf); |
||||
|
*(here->HFETAdrainPrmPrmDrainPrimePtr) -= m * (model->HFETAgf); |
||||
|
*(here->HFETAgatePrimeDrainPrmPrmPtr) -= m * (ggdpp); |
||||
|
*(here->HFETAdrainPrmPrmGatePrimePtr) -= m * (ggdpp); |
||||
|
*(here->HFETAgateGatePtr) += m * (model->HFETAgateConduct); |
||||
|
*(here->HFETAgateGatePrimePtr) -= m * (model->HFETAgateConduct); |
||||
|
*(here->HFETAgatePrimeGatePtr) -= m * (model->HFETAgateConduct); |
||||
|
|
||||
|
*(here->HFETAgatePrimeGatePrimePtr) += m * ((xgd+xgs) * s->real); |
||||
|
*(here->HFETAgatePrimeGatePrimePtr+1) += m * ((xgd+xgs) * s->imag); |
||||
|
*(here->HFETAdrainPrmPrmDrainPrmPrmPtr) += m * (xgd * s->real); |
||||
|
*(here->HFETAdrainPrmPrmDrainPrmPrmPtr+1) += m * (xgd * s->imag); |
||||
|
*(here->HFETAsourcePrmPrmSourcePrmPrmPtr) += m * (xgs * s->real); |
||||
|
*(here->HFETAsourcePrmPrmSourcePrmPrmPtr+1) += m * (xgs * s->imag); |
||||
|
*(here->HFETAgatePrimeDrainPrmPrmPtr) -= m * (xgd * s->real); |
||||
|
*(here->HFETAgatePrimeDrainPrmPrmPtr+1) -= m * (xgd * s->imag); |
||||
|
*(here->HFETAgatePrimeSourcePrmPrmPtr) -= m * (xgs * s->real); |
||||
|
*(here->HFETAgatePrimeSourcePrmPrmPtr+1) -= m * (xgs * s->imag); |
||||
|
*(here->HFETAdrainPrmPrmGatePrimePtr) -= m * (xgd * s->real); |
||||
|
*(here->HFETAdrainPrmPrmGatePrimePtr+1) -= m * (xgd * s->imag); |
||||
|
*(here->HFETAsourcePrmPrmGatePrimePtr) -= m * (xgs * s->real); |
||||
|
*(here->HFETAsourcePrmPrmGatePrimePtr+1) -= m * (xgs * s->imag); |
||||
|
*(here->HFETAdrainPrimeDrainPrimePtr) += m * (xds * s->real); |
||||
|
*(here->HFETAdrainPrimeDrainPrimePtr+1) += m * (xds * s->imag); |
||||
|
*(here->HFETAsourcePrimeSourcePrimePtr) += m * (xds * s->real); |
||||
|
*(here->HFETAsourcePrimeSourcePrimePtr+1) += m * (xds * s->imag); |
||||
|
*(here->HFETAdrainPrimeSourcePrimePtr) -= m * (xds * s->real); |
||||
|
*(here->HFETAdrainPrimeSourcePrimePtr+1) -= m * (xds * s->imag); |
||||
|
*(here->HFETAsourcePrimeDrainPrimePtr) -= m * (xds * s->real); |
||||
|
*(here->HFETAsourcePrimeDrainPrimePtr+1) -= m * (xds * s->imag); |
||||
|
} |
||||
|
} |
||||
|
return(OK); |
||||
|
} |
||||
@ -0,0 +1,13 @@ |
|||||
|
HFET Id versus Vgs characteristic |
||||
|
|
||||
|
z1 1 2 0 hfet l=1u w=10u |
||||
|
vgs 2 0 dc 0.3 |
||||
|
vds 1 0 dc 1.0 |
||||
|
|
||||
|
|
||||
|
.model hfet nhfet level=5 rdi=0 rsi=0 m=2.57 lambda=0.17 |
||||
|
+ vs=1.5e5 mu=0.385 vt0=0.13 eta=1.32 sigma0=0.04 |
||||
|
+ vsigma=0.1 Vsigmat=0.3 js1s=0 js1d=0 nmax=6e15 |
||||
|
|
||||
|
.dc vds 0 1 0.01 |
||||
|
.end |
||||
@ -0,0 +1,25 @@ |
|||||
|
DCFL inverter circuit |
||||
|
|
||||
|
.subckt inv 1 2 3 |
||||
|
* |
||||
|
*Vdd 1.0 |
||||
|
*Vin 2 0 |
||||
|
*Vout 3 0 |
||||
|
z1 1 3 3 aload l=1u w=10u |
||||
|
z2 3 2 0 adrv l=1u w=10u |
||||
|
.ends |
||||
|
|
||||
|
vdd 1 0 dc 2 |
||||
|
vin 2 0 dc 0 pwl(0,0V 1ns,0V 1.005ns,1V 2ns,1V) |
||||
|
x1 1 2 3 inv |
||||
|
x2 1 3 4 inv |
||||
|
.model adrv nhfet level=5 rd=60 rs=60 m=2.57 lambda=0.17 |
||||
|
+ vs=1.5e5 mu=0.385 vt0=0.3 eta=1.32 sigma0=0.04 |
||||
|
+ vsigma=0.1 vsigmat=0.3 js1s=1e-12 js1d=1e-12 |
||||
|
+ nmax=6e15 |
||||
|
.model aload nhfet level=5 rd=60 rs=60 m=2.57 lambda=0.17 |
||||
|
+ vs=1.5e5 mu=0.385 vt0=-0.3 eta=1.32 sigma0=0.04 |
||||
|
+ vsigma=0.1 vsigmat=0.3 js1s=1e-12 js1d=1e-12 |
||||
|
+ nmax=6e15 |
||||
|
|
||||
|
.end |
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue