home *** CD-ROM | disk | FTP | other *** search
- /****************************************************************************/
- /* Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991 */
- /* By MicroSim Corporation, All Rights Reserved */
- /****************************************************************************/
- /* b.h
- * $Revision: 1.10 $
- * $Author: sv $
- * $Date: 14 Feb 1991 14:14:18 $ */
-
- /******************* USERS OF DEVICE EQUATIONS OPTION ***********************/
- /******** The procedure for changing the GaAsFET model parameters **********/
- /******** and device equations is the same as for the MOSFET. See **********/
- /******** the comments in the files mos.c and m.h for details. **********/
-
- /* GaAsFET definitions */
-
- /*
- pwt ?? Aug 86 creation
- pwt 17 Mar 88 implement shared data area in device instance
- imw 17 Aug 88 modified to use expressions
- pwt 12 Apr 90 put in TriQuint additions
- pwt 04 May 90 remove one value saved for bypass calculations
- */
-
- struct bac_def { /* AC values */
- double /* capacitances */
- bac_cgs,
- bac_cgd,
- bac_cds;
- };
-
- struct bsv_def { /* state vector */
- struct qi_def /* capacitor charges & currents */
- bsv_cgs,
- bsv_cgd,
- bsv_cds;
- double /* voltages (mostly) */
- bsv_vgs,
- bsv_vgd,
- bsv_iexds; /* excess phase current (due to transit time) */
- };
-
- /* state-vector access */
-
- #define B_QIGS(vect) (sv[vect]->bsv_cgs)
- #define B_QCGS(vect) (sv[vect]->bsv_cgs.qi_q)
- #define B_ICGS(vect) (sv[vect]->bsv_cgs.qi_i)
-
- #define B_QIGD(vect) (sv[vect]->bsv_cgd)
- #define B_QCGD(vect) (sv[vect]->bsv_cgd.qi_q)
- #define B_ICGD(vect) (sv[vect]->bsv_cgd.qi_i)
-
- #define B_QIDS(vect) (sv[vect]->bsv_cds)
- #define B_QCDS(vect) (sv[vect]->bsv_cds.qi_q)
- #define B_ICDS(vect) (sv[vect]->bsv_cds.qi_i)
-
- #define B_VGS(vect) (sv[vect]->bsv_vgs)
- #define B_VGD(vect) (sv[vect]->bsv_vgd)
- #define B_IEXDS(vect) (sv[vect]->bsv_iexds)
-
- /* device instance */
-
- struct b_ {
- struct b_ *b_next;
- char *b_name;
- struct B_ *b_model;
-
- CKT_IDX
- b_D, /* circuit matrix indices: external nodes */
- b_G,
- b_S;
-
- int b_off;
-
- /* parameter/expression pointer pairs */
- /* MUST FOLLOW b_off */
-
- DXPR(b_area, bx_area);
- DXPR(b_vds, bx_vds); /* IC= */
- DXPR(b_vgs, bx_vgs);
-
- CKT_IDX /* circuit matrix indices: internal nodes */
- b_d,
- b_g,
- b_s;
-
- MTX_IDX /* MatPrm indices: conductance terms */
- b_Dd,
- b_gd,
- b_gs,
- b_Ss,
- b_dD,
- b_dg,
- b_ds,
- b_sg,
- b_sS,
- b_sd,
- b_DD,
- b_gg,
- b_SS,
- b_dd,
- b_ss,
- b_GG,
- b_Gg,
- b_gG;
-
- MTX_IDX /* MatPrm indices: branch currents */
- b_ig,
- b_id,
- b_is;
-
- double /* "current" values */
- bcv_ig, /* currents */
- bcv_id,
- bcv_gm, /* derivitives */
- bcv_gds,
- bcv_ggs,
- bcv_ggd;
-
- struct { /* shared data area */
- struct bac_def b_ac; /* AC (capacitance values) */
- struct bsv_def b_sv[MSTVCT]; /* state vectors (transient values) */
- } b_sda;
- };
-
- /* device model */
-
- struct B_ {
- struct B_ *B_next;
- char *B_name;
- struct B_ *B_nom;
- struct B_ *B_ako;
-
- int B_type; /* device type == N_TYPE only (so far) */
-
- double /* reserved: pre-computed values */
- B_f1, /* = vbi*(1-(1-fc)^(1-m))/(1-m) where m = .5 */
- B_f2, /* = (1-fc)^(1+m) where m = .5 */
- B_f3, /* = 1-fc*(1+m) where m = .5 */
- B_vcrit; /* = n*vt*ln(n*vt/(is*sqrt(2))) */
-
- /* model parameter/expression pointer pairs */
- MXPR( B_level, Bx_level);
- MXPR( B_vto, Bx_vto);
- MXPR( B_vtotc, Bx_vtotc);
- MXPR( B_vbi, Bx_vbi);
- MXPR( B_alpha, Bx_alpha);
- MXPR( B_b, Bx_b);
- MXPR( B_beta, Bx_beta);
- MXPR( B_betatce, Bx_betatce);
- MXPR( B_lambda, Bx_lambda);
- MDLPARM B_rg;
- MXPR( B_User_rg, Bx_User_rg);
- MDLPARM B_rd;
- MXPR( B_User_rd, Bx_User_rd);
- MDLPARM B_rs;
- MXPR( B_User_rs, Bx_User_rs);
- MXPR( B_cgd, Bx_cgd);
- MXPR( B_cgs, Bx_cgs);
- MXPR( B_cds, Bx_cds);
- MXPR( B_is, Bx_is);
- MXPR( B_tau, Bx_tau);
- MXPR( B_kf, Bx_kf);
- MXPR( B_af, Bx_af);
- MDLPARM B_fc;
- MXPR( B_User_fc, Bx_User_fc);
- MXPR( B_m, Bx_m);
- MXPR( B_n, Bx_n);
- MXPR( B_delta, Bx_delta); /* TriQuint additions */
- MXPR( B_gamma, Bx_gamma);
- MXPR( B_q, Bx_q);
- MXPR( B_vmax, Bx_vmax); /* TriQuint request: have vmax be accessable */
- MXPR( B_vdelta, Bx_vdelta); /* Statz "delta": might as well have this too.. */
- MXPR( B_eg, Bx_eg);
- MXPR( B_xti, Bx_xti);
- MXPR( B_trg1, Bx_trg1);
- MXPR( B_trd1, Bx_trd1);
- MXPR( B_trs1, Bx_trs1);
- } ;
-
- #ifdef B_DEVICE
-
- struct B_ B_default;
-
- #define BASE B_default
-
- struct Assoc B_Assoc[] = { /*IGNORE*/ /* for Pre-C */
- ASSOCIATE (B_level, 1., "*LEVEL"), /* force print */
- ASSOCIATE (B_vto, -2.5, "*VTO" ), /* force print */
- ASSOCIATE (B_vtotc, 0., "VTOTC" ),
- ASSOCIATE (B_vbi, 1., "VBI" ),
- ASSOCIATE (B_alpha, 2., "*ALPHA"), /* force print */
- ASSOCIATE (B_b, .3, "*B" ), /* force print */
- ASSOCIATE (B_beta, .1, "*BETA" ), /* force print */
- ASSOCIATE (B_betatce, 0., "BETATCE"),
- ASSOCIATE (B_lambda, 0., "LAMBDA"),
- ASSOCIATE (B_User_rg, 0., "RG" ),
- ASSOCIATE (B_User_rd, 0., "RD" ),
- ASSOCIATE (B_User_rs, 0., "RS" ),
- ASSOCIATE (B_cgd, 0., "CGD" ),
- ASSOCIATE (B_cgs, 0., "CGS" ),
- ASSOCIATE (B_cds, 0., "CDS" ),
- ASSOCIATE (B_is, 1E-14, "IS" ),
- ASSOCIATE (B_tau, 0., "TAU" ),
- ASSOCIATE (B_kf, 0., "KF" ),
- ASSOCIATE (B_af, 1., "AF" ),
- ASSOCIATE (B_User_fc, .5, "FC" ),
- ASSOCIATE (B_m, .5, "M" ),
- ASSOCIATE (B_n, 1., "N" ),
- ASSOCIATE (B_delta, 0., "DELTA" ), /* TriQuint add's */
- ASSOCIATE (B_gamma, 0., "GAMMA" ),
- ASSOCIATE (B_q, 2., "Q" ),
- ASSOCIATE (B_vmax, .5, "VMAX" ), /* TriQuint req. */
- ASSOCIATE (B_vdelta, .2, "VDELTA"), /* TriQuint req. */
- ASSOCIATE (B_q, 2., "Q" ),
- ASSOCIATE (B_eg, 1.11, "EG" ),
- ASSOCIATE (B_xti, 0., "XTI" ),
- ASSOCIATE (B_trg1, 0., "TRG1" ),
- ASSOCIATE (B_trd1, 0., "TRD1" ),
- ASSOCIATE (B_trs1, 0., "TRS1" ),
- END_PARMS /*ENDIGNORE*/
- } ;
-
- #undef BASE
- #endif