1 /**********
2 Copyright 1990 Regents of the University of California. All rights reserved.
3 Author: 1985 Hong J. Park, Thomas L. Quarles
4 **********/
5
6 #include "ngspice/ngspice.h"
7 #include "ngspice/cktdefs.h"
8 #include "bsim1def.h"
9 #include "ngspice/suffix.h"
10
11 /* routine to calculate equivalent conductance and total terminal
12 * charges
13 */
14
15 void
B1mosCap(CKTcircuit * ckt,double vgd,double vgs,double vgb,double args[8],double cbgb,double cbdb,double cbsb,double cdgb,double cddb,double cdsb,double * gcggbPointer,double * gcgdbPointer,double * gcgsbPointer,double * gcbgbPointer,double * gcbdbPointer,double * gcbsbPointer,double * gcdgbPointer,double * gcddbPointer,double * gcdsbPointer,double * gcsgbPointer,double * gcsdbPointer,double * gcssbPointer,double * qGatePointer,double * qBulkPointer,double * qDrainPointer,double * qSourcePointer)16 B1mosCap(
17 CKTcircuit *ckt,
18 double vgd,
19 double vgs,
20 double vgb,
21 double args[8],
22 /*
23 double GateDrainOverlapCap,
24 double GateSourceOverlapCap,
25 double GateBulkOverlapCap,
26 double capbd,
27 double capbs,
28 double cggb,
29 double cgdb,
30 double cgsb,
31 */
32 double cbgb,
33 double cbdb,
34 double cbsb,
35 double cdgb,
36 double cddb,
37 double cdsb,
38 double *gcggbPointer,
39 double *gcgdbPointer,
40 double *gcgsbPointer,
41 double *gcbgbPointer,
42 double *gcbdbPointer,
43 double *gcbsbPointer,
44 double *gcdgbPointer,
45 double *gcddbPointer,
46 double *gcdsbPointer,
47 double *gcsgbPointer,
48 double *gcsdbPointer,
49 double *gcssbPointer,
50 double *qGatePointer,
51 double *qBulkPointer,
52 double *qDrainPointer,
53 double *qSourcePointer)
54 {
55 double qgd;
56 double qgs;
57 double qgb;
58 double ag0;
59
60 ag0 = ckt->CKTag[0];
61 /* compute equivalent conductance */
62 *gcdgbPointer = (cdgb - args[0]) * ag0;
63 *gcddbPointer = (cddb + args[3] + args[0]) * ag0;
64 *gcdsbPointer = cdsb * ag0;
65 *gcsgbPointer = -(args[5] + cbgb + cdgb + args[1]) * ag0;
66 *gcsdbPointer = -(args[6] + cbdb + cddb ) * ag0;
67 *gcssbPointer = (args[4] + args[1] -
68 (args[7] + cbsb + cdsb )) * ag0;
69 *gcggbPointer = (args[5] + args[0] +
70 args[1] + args[2] ) * ag0;
71 *gcgdbPointer = (args[6] - args[0]) * ag0;
72 *gcgsbPointer = (args[7] - args[1]) * ag0;
73 *gcbgbPointer = (cbgb - args[2]) * ag0;
74 *gcbdbPointer = (cbdb - args[3]) * ag0;
75 *gcbsbPointer = (cbsb - args[4]) * ag0;
76
77 /* compute total terminal charge */
78 qgd = args[0] * vgd;
79 qgs = args[1] * vgs;
80 qgb = args[2] * vgb;
81 *qGatePointer = *qGatePointer + qgd + qgs + qgb;
82 *qBulkPointer = *qBulkPointer - qgb;
83 *qDrainPointer = *qDrainPointer - qgd;
84 *qSourcePointer = -(*qGatePointer + *qBulkPointer + *qDrainPointer);
85
86 }
87
88
89