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

  1. /****************************************************************************/
  2. /*        Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991                  */
  3. /*          By MicroSim Corporation, All Rights Reserved                    */
  4. /****************************************************************************/
  5. /* d.h
  6.  *   $Revision:   1.10  $
  7.  *   $Author:   sv  $
  8.  *   $Date:   14 Feb 1991 14:15:22  $ */
  9.  
  10. /******************* USERS OF DEVICE EQUATIONS OPTION ***********************/
  11. /******** The procedure for changing the diode 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. /* Diode definitions */
  16.  
  17. /*
  18. pwt    ?? Aug 86    creation
  19. pwt    16 Mar 88    implement shared data area in device instance
  20. imw    17 Aug 88    expressions
  21. pwt    ?? Sep 88    temp. coef.s for RS and IKF
  22. pwt    11 Sep 88    various coef.s re. BV
  23. */
  24.  
  25. struct dac_def {    /* AC values */
  26.   double    dac_cj;    /* capacitance of junction */
  27.   };
  28.  
  29. struct dsv_def {    /* state vector */
  30.   struct qi_def    dsv_cj; /* junction capacitor charge & current */
  31.   double    dsv_vj;    /* voltage across junction */
  32.   };
  33.  
  34. /* state-vector access */
  35.  
  36. #define D_QIJ(vect)    (sv[vect]->dsv_cj)
  37. #define D_QCJ(vect)    (sv[vect]->dsv_cj.qi_q)
  38. #define D_ICJ(vect)    (sv[vect]->dsv_cj.qi_i)
  39.  
  40. #define D_VJ(vect)    (sv[vect]->dsv_vj)
  41.  
  42. /* device instance */
  43.  
  44. struct d_ {
  45.   struct d_ *d_next;
  46.   char      *d_name;
  47.   struct D_ *d_model;
  48.  
  49.   CKT_IDX        /* circuit matrix indices */
  50.     d_P,        /* P (+) node (anode):   p-type material */
  51.     d_N;        /* N (-) node (cathode): n-type material */
  52.  
  53.   int   d_off;
  54.  
  55.   /* device parameters and expressions */
  56.   /* MUST FOLLOW d_off */
  57.   DXPR(d_area, dx_area);
  58.   DXPR(d_vj,   dx_vj);    /* IC= */
  59.  
  60.   CKT_IDX        /* circuit matrix indices (internal nodes) */
  61.     d_p;
  62.  
  63.   MTX_IDX        /* MatPrm indices: conductance terms */
  64.     d_Pp,
  65.     d_Np,
  66.     d_pP,
  67.     d_pN,
  68.     d_PP,
  69.     d_NN,
  70.     d_pp;
  71.  
  72.   MTX_IDX        /* MatPrm indices: branch currents */
  73.     d_iN,
  74.     d_ip;
  75.  
  76.   double        /* "current" values */
  77.     dcv_ij,        /* current thru junction */
  78.     dcv_gj;        /* equivalent conductance of junction */
  79.  
  80.   struct {        /* shared data area */
  81.     struct dac_def    d_ac;        /* AC (capacitance values) */
  82.     struct dsv_def    d_sv[MSTVCT];    /* state vectors (transient values) */
  83.     }    d_sda;
  84.   };
  85.  
  86. /* device model */
  87.  
  88. struct D_ {
  89.   struct D_ *D_next;
  90.   char      *D_name;
  91.   struct D_ *D_nom;
  92.   struct D_ *D_ako;
  93.  
  94.   double        /* reserved: pre-computed values */
  95.     D_f1,        /* = pb*(1-(1-fc)^(1+m))/(1-m) */
  96.     D_f2,        /* = (1-fc)^(1+m) */
  97.     D_f3,        /* = 1-fc*(1+m) */
  98.     D_vcrit;    /* = n*vt*ln(n*vt/(is*sqrt(2))) */
  99.  
  100.   /* model parameters and expressions */
  101.   MXPR(    D_is,    Dx_is    );
  102.   MXPR(    D_n,    Dx_n    );
  103.   MXPR(    D_isr,    Dx_isr    );
  104.   MXPR(    D_nr,    Dx_nr    );
  105.   MXPR(    D_ikf,    Dx_ikf    );
  106.   MXPR(    D_bv,    Dx_bv    );    /* = computed start of reverse exponential */
  107.   MXPR(    D_ibv,    Dx_ibv    );
  108.   MXPR(    D_nbv,    Dx_nbv    );
  109.   MXPR(    D_ibvl,    Dx_ibvl    );
  110.   MXPR(    D_nbvl,    Dx_nbvl    );
  111.   MDLPARM D_rs;
  112.   MXPR(    D_User_rs,    Dx_User_rs    );    /* = 1/rs */
  113.   MXPR(    D_tt,    Dx_tt    );
  114.   MXPR(    D_cjo,    Dx_cjo    );
  115.   MXPR(    D_vj,    Dx_vj    );
  116.   MXPR(    D_m,    Dx_m    );
  117.   MDLPARM D_fc;    /* = fc*pb */
  118.   MXPR(    D_User_fc,    Dx_User_fc    );
  119.   MXPR(    D_eg,    Dx_eg    );
  120.   MXPR(    D_xti,    Dx_xti    );
  121.   MXPR(    D_tbv1,    Dx_tbv1    );
  122.   MXPR(    D_tbv2,    Dx_tbv2    );
  123.   MXPR(    D_tikf,    Dx_tikf    );
  124.   MXPR(    D_trs1,    Dx_trs1    );
  125.   MXPR(    D_trs2,    Dx_trs2    );
  126.   MXPR(    D_kf,    Dx_kf    );
  127.   MXPR(    D_af,    Dx_af    );
  128.   } ;
  129.  
  130. #ifdef  D_DEVICE
  131.  
  132. struct D_    D_default;
  133.  
  134. #define BASE    D_default
  135.  
  136. struct    Assoc    D_Assoc[] = {            /*IGNORE*/ /* for Pre-C */
  137.     ASSOCIATE (D_is,    1E-14,  "*IS"    ),    /* * = force print */
  138.     ASSOCIATE (D_n,        1.,     "N"    ),
  139.     ASSOCIATE (D_isr,    0.,    "ISR"    ),    /* recomb. current */
  140.     ASSOCIATE (D_nr,    2.,    "NR"    ),    /* recomb. coef. */
  141.     ASSOCIATE (D_ikf,    0.,    "IKF"    ),    /* "knee" current */
  142.     ASSOCIATE (D_bv,    0.,    "BV"    ),
  143.     ASSOCIATE (D_ibv,    1E-10,    "IBV"    ),
  144.     ASSOCIATE (D_nbv,    1.,    "NBV"    ),    /* BV ideality coef. */
  145.     ASSOCIATE (D_ibvl,    0.,    "IBVL"    ),    /* low-level IBV */
  146.     ASSOCIATE (D_nbvl,    1.,    "NBVL"    ),    /* low-level NBV */
  147.     ASSOCIATE (D_User_rs,    0.,     "RS"    ),
  148.     ASSOCIATE (D_tt,    0.,    "TT"    ),
  149.     ASSOCIATE (D_cjo,    0.,    "CJO"    ),
  150.     ASSOCIATE (D_vj,    1.,    "VJ"    ),
  151.     ASSOCIATE (D_m,        .5,    "M"    ),
  152.     ASSOCIATE (D_User_fc,    .5,    "FC"    ),
  153.     ASSOCIATE (D_eg,    1.11,    "EG"    ),
  154.     ASSOCIATE (D_xti,    3.,    "XTI"    ),
  155.     ASSOCIATE (D_tbv1,    0.,    "TBV1"    ),    /* linear BV tempco */
  156.     ASSOCIATE (D_tbv2,    0.,    "TBV2"    ),    /* quad'c BV tempco */
  157.     ASSOCIATE (D_tikf,    0.,    "TIKF"    ),    /* IKF temp. coef. */
  158.     ASSOCIATE (D_trs1,    0.,    "TRS1"    ),    /* linear RS tempco */
  159.     ASSOCIATE (D_trs2,    0.,    "TRS2"    ),    /* quad'c RS tempco */
  160.     ASSOCIATE (D_kf,    0.,    "KF"    ),
  161.     ASSOCIATE (D_af,    1.,    "AF"    ),
  162.     END_PARMS                /*ENDIGNORE*/
  163. } ;
  164.  
  165. #undef  BASE
  166. #endif
  167.