home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 13 / 13.iso / p / p064 / 3.ddi / B.H < prev    next >
Encoding:
C/C++ Source or Header  |  1991-07-01  |  5.9 KB  |  226 lines

  1. /****************************************************************************/
  2. /*        Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991                  */
  3. /*          By MicroSim Corporation, All Rights Reserved                    */
  4. /****************************************************************************/
  5. /* b.h
  6.  *   $Revision:   1.10  $
  7.  *   $Author:   sv  $
  8.  *   $Date:   14 Feb 1991 14:14:18  $ */
  9.  
  10. /******************* USERS OF DEVICE EQUATIONS OPTION ***********************/
  11. /******** The procedure for changing the GaAsFET model parameters  **********/
  12. /******** and device equations is the same as for the MOSFET.  See **********/
  13. /******** the comments in the files mos.c and m.h for details.     **********/
  14.  
  15. /* GaAsFET definitions */
  16.  
  17. /*
  18. pwt    ?? Aug 86    creation
  19. pwt    17 Mar 88    implement shared data area in device instance
  20. imw    17 Aug 88    modified to use expressions
  21. pwt    12 Apr 90    put in TriQuint additions
  22. pwt    04 May 90    remove one value saved for bypass calculations
  23. */
  24.  
  25. struct bac_def {    /* AC values */
  26.   double        /* capacitances */
  27.     bac_cgs,
  28.     bac_cgd,
  29.     bac_cds;
  30.   };
  31.  
  32. struct bsv_def {    /* state vector */
  33.   struct qi_def        /* capacitor charges & currents */
  34.     bsv_cgs,
  35.     bsv_cgd,
  36.     bsv_cds;
  37.   double        /* voltages (mostly) */
  38.     bsv_vgs,
  39.     bsv_vgd,
  40.     bsv_iexds;    /* excess phase current (due to transit time) */
  41.   };
  42.  
  43. /* state-vector access */
  44.  
  45. #define B_QIGS(vect)    (sv[vect]->bsv_cgs)
  46. #define B_QCGS(vect)    (sv[vect]->bsv_cgs.qi_q)
  47. #define B_ICGS(vect)    (sv[vect]->bsv_cgs.qi_i)
  48.  
  49. #define B_QIGD(vect)    (sv[vect]->bsv_cgd)
  50. #define B_QCGD(vect)    (sv[vect]->bsv_cgd.qi_q)
  51. #define B_ICGD(vect)    (sv[vect]->bsv_cgd.qi_i)
  52.  
  53. #define B_QIDS(vect)    (sv[vect]->bsv_cds)
  54. #define B_QCDS(vect)    (sv[vect]->bsv_cds.qi_q)
  55. #define B_ICDS(vect)    (sv[vect]->bsv_cds.qi_i)
  56.  
  57. #define B_VGS(vect)    (sv[vect]->bsv_vgs)
  58. #define B_VGD(vect)    (sv[vect]->bsv_vgd)
  59. #define B_IEXDS(vect)    (sv[vect]->bsv_iexds)
  60.  
  61. /* device instance */
  62.  
  63. struct b_ {
  64.   struct b_ *b_next;
  65.   char      *b_name;
  66.   struct B_ *b_model;
  67.  
  68.   CKT_IDX
  69.     b_D,        /* circuit matrix indices: external nodes */
  70.     b_G,
  71.     b_S;
  72.  
  73.   int    b_off;
  74.  
  75.   /* parameter/expression pointer pairs */
  76.   /* MUST FOLLOW b_off */
  77.  
  78.   DXPR(b_area, bx_area);
  79.   DXPR(b_vds,  bx_vds);      /* IC= */
  80.   DXPR(b_vgs,  bx_vgs);
  81.  
  82.   CKT_IDX        /* circuit matrix indices: internal nodes */
  83.     b_d,
  84.     b_g,
  85.     b_s;
  86.  
  87.   MTX_IDX        /* MatPrm indices: conductance terms */
  88.     b_Dd,
  89.     b_gd,
  90.     b_gs,
  91.     b_Ss,
  92.     b_dD,
  93.     b_dg,
  94.     b_ds,
  95.     b_sg,
  96.     b_sS,
  97.     b_sd,
  98.     b_DD,
  99.     b_gg,
  100.     b_SS,
  101.     b_dd,
  102.     b_ss,
  103.     b_GG,
  104.     b_Gg,
  105.     b_gG;
  106.  
  107.   MTX_IDX        /* MatPrm indices: branch currents */
  108.     b_ig,
  109.     b_id,
  110.     b_is;
  111.  
  112.   double        /* "current" values */
  113.     bcv_ig,        /* currents */
  114.     bcv_id,
  115.     bcv_gm,        /* derivitives */
  116.     bcv_gds,
  117.     bcv_ggs,
  118.     bcv_ggd;
  119.  
  120.   struct {        /* shared data area */
  121.     struct bac_def    b_ac;        /* AC (capacitance values) */
  122.     struct bsv_def    b_sv[MSTVCT];    /* state vectors (transient values) */
  123.     }    b_sda;
  124.   };
  125.  
  126. /* device model */
  127.  
  128. struct B_ {
  129.   struct B_ *B_next;
  130.   char      *B_name;
  131.   struct B_ *B_nom;
  132.   struct B_ *B_ako;
  133.  
  134.   int    B_type;        /* device type == N_TYPE only (so far) */
  135.  
  136.   double        /* reserved: pre-computed values */
  137.     B_f1,        /* = vbi*(1-(1-fc)^(1-m))/(1-m) where m = .5 */
  138.     B_f2,        /* = (1-fc)^(1+m)               where m = .5 */
  139.     B_f3,        /* = 1-fc*(1+m)                 where m = .5 */
  140.     B_vcrit;    /* = n*vt*ln(n*vt/(is*sqrt(2))) */
  141.  
  142.   /* model parameter/expression pointer pairs */
  143.   MXPR( B_level, Bx_level);
  144.   MXPR( B_vto, Bx_vto);
  145.   MXPR( B_vtotc, Bx_vtotc);
  146.   MXPR( B_vbi, Bx_vbi);
  147.   MXPR( B_alpha, Bx_alpha);
  148.   MXPR( B_b, Bx_b);
  149.   MXPR( B_beta, Bx_beta);
  150.   MXPR( B_betatce, Bx_betatce);
  151.   MXPR(  B_lambda, Bx_lambda);
  152.   MDLPARM B_rg;
  153.   MXPR( B_User_rg, Bx_User_rg);
  154.   MDLPARM B_rd;
  155.   MXPR( B_User_rd, Bx_User_rd);
  156.   MDLPARM B_rs;
  157.   MXPR( B_User_rs, Bx_User_rs);
  158.   MXPR( B_cgd, Bx_cgd);
  159.   MXPR( B_cgs, Bx_cgs);
  160.   MXPR( B_cds, Bx_cds);
  161.   MXPR( B_is, Bx_is);
  162.   MXPR( B_tau, Bx_tau);
  163.   MXPR( B_kf, Bx_kf);
  164.   MXPR( B_af, Bx_af);
  165.   MDLPARM B_fc;
  166.   MXPR( B_User_fc, Bx_User_fc);
  167.   MXPR( B_m, Bx_m);
  168.   MXPR( B_n, Bx_n);
  169.   MXPR( B_delta, Bx_delta);    /* TriQuint additions */
  170.   MXPR( B_gamma, Bx_gamma);
  171.   MXPR( B_q, Bx_q);
  172.   MXPR( B_vmax, Bx_vmax);    /* TriQuint request: have vmax be accessable */
  173.   MXPR( B_vdelta, Bx_vdelta);    /* Statz "delta": might as well have this too.. */
  174.   MXPR( B_eg, Bx_eg);
  175.   MXPR( B_xti, Bx_xti);
  176.   MXPR( B_trg1, Bx_trg1);
  177.   MXPR( B_trd1, Bx_trd1);
  178.   MXPR( B_trs1, Bx_trs1);
  179.   } ;
  180.  
  181. #ifdef    B_DEVICE
  182.  
  183. struct    B_    B_default;
  184.  
  185. #define BASE    B_default
  186.  
  187. struct    Assoc    B_Assoc[] = {            /*IGNORE*/ /* for Pre-C */
  188.     ASSOCIATE (B_level,    1.,    "*LEVEL"),    /* force print */
  189.     ASSOCIATE (B_vto,    -2.5,    "*VTO"    ),    /* force print */
  190.     ASSOCIATE (B_vtotc,    0.,    "VTOTC"    ),
  191.     ASSOCIATE (B_vbi,    1.,    "VBI"    ),
  192.     ASSOCIATE (B_alpha,    2.,    "*ALPHA"),    /* force print */
  193.     ASSOCIATE (B_b,        .3,    "*B"    ),    /* force print */
  194.     ASSOCIATE (B_beta,    .1,    "*BETA"    ),    /* force print */
  195.     ASSOCIATE (B_betatce,    0.,    "BETATCE"),
  196.     ASSOCIATE (B_lambda,    0.,    "LAMBDA"),
  197.     ASSOCIATE (B_User_rg,    0.,    "RG"    ),
  198.     ASSOCIATE (B_User_rd,    0.,    "RD"    ),
  199.     ASSOCIATE (B_User_rs,    0.,    "RS"    ),
  200.     ASSOCIATE (B_cgd,    0.,    "CGD"    ),
  201.     ASSOCIATE (B_cgs,    0.,    "CGS"    ),
  202.     ASSOCIATE (B_cds,    0.,    "CDS"    ),
  203.     ASSOCIATE (B_is,    1E-14,    "IS"    ),
  204.     ASSOCIATE (B_tau,    0.,    "TAU"    ),
  205.     ASSOCIATE (B_kf,    0.,    "KF"    ),
  206.     ASSOCIATE (B_af,    1.,    "AF"    ),
  207.     ASSOCIATE (B_User_fc,    .5,    "FC"    ),
  208.     ASSOCIATE (B_m,        .5,    "M"    ),
  209.     ASSOCIATE (B_n,        1.,    "N"    ),
  210.     ASSOCIATE (B_delta,    0.,    "DELTA"    ),    /* TriQuint add's */
  211.     ASSOCIATE (B_gamma,    0.,    "GAMMA"    ),
  212.     ASSOCIATE (B_q,        2.,    "Q"    ),
  213.     ASSOCIATE (B_vmax,    .5,    "VMAX"    ),    /* TriQuint req. */
  214.     ASSOCIATE (B_vdelta,    .2,    "VDELTA"),    /* TriQuint req. */
  215.     ASSOCIATE (B_q,        2.,    "Q"    ),
  216.     ASSOCIATE (B_eg,    1.11,    "EG"    ),
  217.     ASSOCIATE (B_xti,    0.,    "XTI"    ),
  218.     ASSOCIATE (B_trg1,    0.,    "TRG1"    ),
  219.     ASSOCIATE (B_trd1,    0.,    "TRD1"    ),
  220.     ASSOCIATE (B_trs1,    0.,    "TRS1"    ),
  221.     END_PARMS                /*ENDIGNORE*/
  222. } ;
  223.  
  224. #undef    BASE
  225. #endif
  226.