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

  1. /****************************************************************************/
  2. /*        Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991                  */
  3. /*          By MicroSim Corporation, All Rights Reserved                    */
  4. /****************************************************************************/
  5. /* j.h
  6.  *   $Revision:   1.10  $
  7.  *   $Author:   sv  $
  8.  *   $Date:   14 Feb 1991 14:16:08  $ */
  9.  
  10. /******************* USERS OF DEVICE EQUATIONS OPTION ***********************/
  11. /******** The procedure for changing the JFET 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. /* Junction FET definitions */
  16.  
  17. /*
  18. pwt    ?? Aug 86    creation
  19. pwt    17 Mar 88    implement shared data area in device instance
  20. pwt    11 Apr 88    add parameter: "M" (junction grading factor)
  21. imw    17 Aug 88    expressions
  22. pwt    10 Oct 88    add reverse leakage parameters
  23. pwt    04 May 90    remove one value saved for bypass calculations
  24. */
  25.  
  26. struct jac_def {    /* AC values */
  27.   double        /* capacitances */
  28.     jac_cgs,
  29.     jac_cgd;
  30.   };
  31.  
  32. struct jsv_def {    /* state vector */
  33.   struct qi_def        /* junction capacitor charges & currents */
  34.     jsv_cgs,
  35.     jsv_cgd;
  36.   double        /* voltages */
  37.     jsv_vgs,
  38.     jsv_vgd;
  39.   };
  40.  
  41. /* state-vector access */
  42.  
  43. #define J_QIGS(vect)    (sv[vect]->jsv_cgs)
  44. #define J_QCGS(vect)    (sv[vect]->jsv_cgs.qi_q)
  45. #define J_ICGS(vect)    (sv[vect]->jsv_cgs.qi_i)
  46.  
  47. #define J_QIGD(vect)    (sv[vect]->jsv_cgd)
  48. #define J_QCGD(vect)    (sv[vect]->jsv_cgd.qi_q)
  49. #define J_ICGD(vect)    (sv[vect]->jsv_cgd.qi_i)
  50.  
  51. #define J_VGS(vect)    (sv[vect]->jsv_vgs)
  52. #define J_VGD(vect)    (sv[vect]->jsv_vgd)
  53.  
  54. /* device instance */
  55.  
  56. struct j_ {
  57.   struct j_ *j_next;
  58.   char      *j_name;
  59.   struct J_ *j_model;
  60.  
  61.   CKT_IDX        /* circuit matrix indices: external nodes */
  62.     j_D,
  63.     j_G,
  64.     j_S;
  65.  
  66.   int    j_off;
  67.  
  68.   /* device parameters and expressions */
  69.   /* MUST FOLLOW j_off */
  70.   DXPR( j_area, jx_area);
  71.   DXPR( j_vds,  jx_vds);
  72.   DXPR( j_vgs,  jx_vgs);
  73.  
  74.   CKT_IDX        /* circuit matrix indices: internal nodes */
  75.     j_d,
  76.     j_s;
  77.  
  78.   MTX_IDX        /* MatPrm indices: conductance terms */
  79.     j_Dd,
  80.     j_Gd,
  81.     j_Gs,
  82.     j_Ss,
  83.     j_dD,
  84.     j_dG,
  85.     j_ds,
  86.     j_sG,
  87.     j_sS,
  88.     j_sd,
  89.     j_DD,
  90.     j_GG,
  91.     j_SS,
  92.     j_dd,
  93.     j_ss;
  94.  
  95.   MTX_IDX        /* MatPrm indices: branch currents */
  96.     j_iG,
  97.     j_id,
  98.     j_is;
  99.  
  100.   double        /* "current" values */
  101.     jcv_ig,        /* currents */
  102.     jcv_id,
  103.     jcv_gm,        /* derivitives */
  104.     jcv_gds,
  105.     jcv_ggs,
  106.     jcv_ggd,
  107.     jcv_ggds,
  108.     jcv_gggs;
  109.  
  110.   struct {        /* shared data area */
  111.     struct jac_def    j_ac;        /* AC (capacitance values) */
  112.     struct jsv_def    j_sv[MSTVCT];    /* state vectors (transient values) */
  113.     }    j_sda;
  114.   };
  115.  
  116. /* device model */
  117.  
  118. struct J_ {
  119.   struct J_ *J_next;
  120.   char      *J_name;
  121.   struct J_ *J_nom;
  122.   struct J_ *J_ako;
  123.  
  124.   int    J_type;        /* device type == N_TYPE or P_TYPE */
  125.  
  126.   double        /* reserved: pre-computed values */
  127.     J_f1,        /* = pb*(1-(1-fc)^(1-m))/(1-m) */
  128.     J_f2,        /* = (1-fc)^(1+m) */
  129.     J_f3,        /* = 1-fc*(1+m) */
  130.     J_vcrit;    /* = vt*ln(vt/(is*sqrt(2))) */
  131.  
  132.   /* model parameters and expressions */
  133.   MXPR(    J_vto,    Jx_vto);
  134.   MXPR(    J_beta,    Jx_beta);
  135.   MXPR(    J_lambda,Jx_lambda);
  136.   MXPR(    J_is,    Jx_is);
  137.   MXPR(    J_n,    Jx_n);
  138.   MXPR(    J_isr,    Jx_isr);
  139.   MXPR(    J_nr,    Jx_nr);
  140.   MXPR(    J_alpha,Jx_alpha);
  141.   MXPR(    J_vk,    Jx_vk);
  142.   MDLPARM J_rd;
  143.   MXPR(    J_User_rd,    Jx_User_rd);        /* = 1/rd */
  144.   MDLPARM J_rs;
  145.   MXPR(    J_User_rs,    Jx_User_rs);        /* = 1/rs */
  146.   MXPR(    J_cgd,    Jx_cgd);
  147.   MXPR(    J_cgs,    Jx_cgs);
  148.   MXPR(    J_m,    Jx_m);
  149.   MXPR(    J_pb,    Jx_pb);
  150.   MDLPARM J_fc;        /* = fc*pb */
  151.   MXPR(    J_User_fc,    Jx_User_fc);
  152.   MXPR(    J_vtotc,Jx_vtotc);
  153.   MXPR(    J_betatce,Jx_betatce);
  154.   MXPR(    J_xti,    Jx_xti);
  155.   MXPR(    J_kf,    Jx_kf);
  156.   MXPR(    J_af,    Jx_af);
  157.   } ;
  158.  
  159. #ifdef    J_DEVICE
  160.  
  161. struct    J_    J_default;
  162.  
  163. #define    BASE    J_default
  164.  
  165. struct    Assoc    J_Assoc[] = {            /*IGNORE*/ /* for Pre-C */
  166.     ASSOCIATE (J_vto,    -2.,    "*VTO"    ),    /* force print */
  167.     ASSOCIATE (J_beta,    1E-4,    "*BETA"    ),    /* force print */
  168.     ASSOCIATE (J_lambda,    0.,    "LAMBDA"),
  169.     ASSOCIATE (J_is,    1E-14,    "IS"    ),
  170.     ASSOCIATE (J_n,        1.,    "N"    ),
  171.     ASSOCIATE (J_isr,    0.,    "ISR"    ),    /* recomb. current */
  172.     ASSOCIATE (J_nr,    2.,    "NR"    ),    /* recomb. coef. */
  173.     ASSOCIATE (J_alpha,    0.,    "ALPHA"    ),    /* ionization coef. */
  174.     ASSOCIATE (J_vk,    0.,    "VK"    ),    /* ionization knee */
  175.     ASSOCIATE (J_User_rd,    0.,    "RD"    ),
  176.     ASSOCIATE (J_User_rs,    0.,    "RS"    ),
  177.     ASSOCIATE (J_cgd,    0.,    "CGD"    ),
  178.     ASSOCIATE (J_cgs,    0.,    "CGS"    ),
  179.     ASSOCIATE (J_m,        .5,    "M"    ),
  180.     ASSOCIATE (J_pb,    1.,    "PB"    ),
  181.     ASSOCIATE (J_User_fc,    .5,    "FC"    ),
  182.     ASSOCIATE (J_vtotc,    0.,    "VTOTC"    ),
  183.     ASSOCIATE (J_betatce,    0.,    "BETATCE"),
  184.     ASSOCIATE (J_xti,    3.,    "XTI"    ),
  185.     ASSOCIATE (J_kf,    0.,    "KF"    ),
  186.     ASSOCIATE (J_af,    1.,    "AF"    ),
  187.     END_PARMS                /*ENDIGNORE*/
  188. } ;
  189.  
  190. #undef    BASE
  191. #endif
  192.