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