Jspice3
b2acld.c
Go to the documentation of this file.
1 /***************************************************************************
2 JSPICE3 adaptation of Spice3f2 - Copyright (c) Stephen R. Whiteley 1992
3 Copyright 1990 Regents of the University of California. All rights reserved.
4 Authors: 1988 Min-Chie Jeng, Hong June Park, Thomas L. Quarles
5  1993 Stephen R. Whiteley
6 ****************************************************************************/
7 
8 #include "spice.h"
9 #include <stdio.h>
10 #include "bsim2def.h"
11 #include "sperror.h"
12 
13 
14 int
15 B2acLoad(inModel,ckt)
16  GENmodel *inModel;
17  register CKTcircuit *ckt;
18 {
19  register B2model *model = (B2model*)inModel;
20  register B2instance *here;
21  int xnrm;
22  int xrev;
23  double gdpr;
24  double gspr;
25  double gm;
26  double gds;
27  double gmbs;
28  double gbd;
29  double gbs;
30  double capbd;
31  double capbs;
32  double xcggb;
33  double xcgdb;
34  double xcgsb;
35  double xcbgb;
36  double xcbdb;
37  double xcbsb;
38  double xcddb;
39  double xcssb;
40  double xcdgb;
41  double xcsgb;
42  double xcdsb;
43  double xcsdb;
44  double cggb;
45  double cgdb;
46  double cgsb;
47  double cbgb;
48  double cbdb;
49  double cbsb;
50  double cddb;
51  double cdgb;
52  double cdsb;
53  double omega; /* angular fequency of the signal */
54 
55  omega = ckt->CKTomega;
56  for( ; model != NULL; model = model->B2nextModel) {
57  for(here = model->B2instances; here!= NULL;
58  here = here->B2nextInstance) {
59 
60  if (here->B2mode >= 0) {
61  xnrm=1;
62  xrev=0;
63  } else {
64  xnrm=0;
65  xrev=1;
66  }
67  gdpr=here->B2drainConductance;
68  gspr=here->B2sourceConductance;
69  gm= *(ckt->CKTstate0 + here->B2gm);
70  gds= *(ckt->CKTstate0 + here->B2gds);
71  gmbs= *(ckt->CKTstate0 + here->B2gmbs);
72  gbd= *(ckt->CKTstate0 + here->B2gbd);
73  gbs= *(ckt->CKTstate0 + here->B2gbs);
74  capbd= *(ckt->CKTstate0 + here->B2capbd);
75  capbs= *(ckt->CKTstate0 + here->B2capbs);
76  /*
77  * charge oriented model parameters
78  */
79 
80  cggb = *(ckt->CKTstate0 + here->B2cggb);
81  cgsb = *(ckt->CKTstate0 + here->B2cgsb);
82  cgdb = *(ckt->CKTstate0 + here->B2cgdb);
83 
84  cbgb = *(ckt->CKTstate0 + here->B2cbgb);
85  cbsb = *(ckt->CKTstate0 + here->B2cbsb);
86  cbdb = *(ckt->CKTstate0 + here->B2cbdb);
87 
88  cdgb = *(ckt->CKTstate0 + here->B2cdgb);
89  cdsb = *(ckt->CKTstate0 + here->B2cdsb);
90  cddb = *(ckt->CKTstate0 + here->B2cddb);
91 
92  xcdgb = (cdgb - here->pParam->B2GDoverlapCap) * omega;
93  xcddb = (cddb + capbd + here->pParam->B2GDoverlapCap) * omega;
94  xcdsb = cdsb * omega;
95  xcsgb = -(cggb + cbgb + cdgb + here->pParam->B2GSoverlapCap)
96  * omega;
97  xcsdb = -(cgdb + cbdb + cddb) * omega;
98  xcssb = (capbs + here->pParam->B2GSoverlapCap
99  - (cgsb+cbsb+cdsb)) * omega;
100  xcggb = (cggb + here->pParam->B2GDoverlapCap
101  + here->pParam->B2GSoverlapCap
102  + here->pParam->B2GBoverlapCap) * omega;
103  xcgdb = (cgdb - here->pParam->B2GDoverlapCap ) * omega;
104  xcgsb = (cgsb - here->pParam->B2GSoverlapCap) * omega;
105  xcbgb = (cbgb - here->pParam->B2GBoverlapCap) * omega;
106  xcbdb = (cbdb - capbd ) * omega;
107  xcbsb = (cbsb - capbs ) * omega;
108 
109 
110  *(here->B2GgPtr +1) += xcggb;
111  *(here->B2BbPtr +1) += -xcbgb-xcbdb-xcbsb;
112  *(here->B2DPdpPtr +1) += xcddb;
113  *(here->B2SPspPtr +1) += xcssb;
114  *(here->B2GbPtr +1) += -xcggb-xcgdb-xcgsb;
115  *(here->B2GdpPtr +1) += xcgdb;
116  *(here->B2GspPtr +1) += xcgsb;
117  *(here->B2BgPtr +1) += xcbgb;
118  *(here->B2BdpPtr +1) += xcbdb;
119  *(here->B2BspPtr +1) += xcbsb;
120  *(here->B2DPgPtr +1) += xcdgb;
121  *(here->B2DPbPtr +1) += -xcdgb-xcddb-xcdsb;
122  *(here->B2DPspPtr +1) += xcdsb;
123  *(here->B2SPgPtr +1) += xcsgb;
124  *(here->B2SPbPtr +1) += -xcsgb-xcsdb-xcssb;
125  *(here->B2SPdpPtr +1) += xcsdb;
126  *(here->B2DdPtr) += gdpr;
127  *(here->B2SsPtr) += gspr;
128  *(here->B2BbPtr) += gbd+gbs;
129  *(here->B2DPdpPtr) += gdpr+gds+gbd+xrev*(gm+gmbs);
130  *(here->B2SPspPtr) += gspr+gds+gbs+xnrm*(gm+gmbs);
131  *(here->B2DdpPtr) -= gdpr;
132  *(here->B2SspPtr) -= gspr;
133  *(here->B2BdpPtr) -= gbd;
134  *(here->B2BspPtr) -= gbs;
135  *(here->B2DPdPtr) -= gdpr;
136  *(here->B2DPgPtr) += (xnrm-xrev)*gm;
137  *(here->B2DPbPtr) += -gbd+(xnrm-xrev)*gmbs;
138  *(here->B2DPspPtr) += -gds-xnrm*(gm+gmbs);
139  *(here->B2SPgPtr) += -(xnrm-xrev)*gm;
140  *(here->B2SPsPtr) -= gspr;
141  *(here->B2SPbPtr) += -gbs-(xnrm-xrev)*gmbs;
142  *(here->B2SPdpPtr) += -gds-xrev*(gm+gmbs);
143 
144  }
145  }
146 return(OK);
147 }
148 
149 
150 
double * B2GbPtr
Definition: bsim2def.h:84
B2instance * B2instances
Definition: bsim2def.h:226
struct sBSIM2instance * B2nextInstance
Definition: bsim2def.h:19
double * B2GspPtr
Definition: bsim2def.h:88
double * B2DPgPtr
Definition: bsim2def.h:102
double * B2DPbPtr
Definition: bsim2def.h:109
double * B2SPdpPtr
Definition: bsim2def.h:113
double * B2SsPtr
Definition: bsim2def.h:74
#define OK
Definition: iferrmsg.h:17
double * B2SPbPtr
Definition: bsim2def.h:111
double * B2DdpPtr
Definition: bsim2def.h:82
double * B2BspPtr
Definition: bsim2def.h:94
#define NULL
Definition: spdefs.h:121
double B2sourceConductance
Definition: bsim2def.h:39
int B2acLoad(GENmodel *inModel, CKTcircuit *ckt)
Definition: b2acld.c:15
double * B2DPspPtr
Definition: bsim2def.h:96
double * B2SspPtr
Definition: bsim2def.h:90
double * B2SPgPtr
Definition: bsim2def.h:105
double * B2GdpPtr
Definition: bsim2def.h:86
double * B2SPsPtr
Definition: bsim2def.h:107
double * B2DPdpPtr
Definition: bsim2def.h:78
double * B2SPspPtr
Definition: bsim2def.h:80
double * B2DPdPtr
Definition: bsim2def.h:98
static char model[32]
Definition: subckt.c:76
struct sBSIM2model * B2nextModel
Definition: bsim2def.h:224
double * B2GgPtr
Definition: bsim2def.h:72
struct bsim2SizeDependParam * pParam
Definition: bsim2def.h:50
double B2drainConductance
Definition: bsim2def.h:40
double * B2BgPtr
Definition: bsim2def.h:100
double * B2BdpPtr
Definition: bsim2def.h:92
double * B2DdPtr
Definition: bsim2def.h:70
double * B2BbPtr
Definition: bsim2def.h:76