Jspice3
b1pzld.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: 1985 Thomas L. Quarles
5  1993 Stephen R. Whiteley
6 ****************************************************************************/
7 
8 #include "spice.h"
9 #include <stdio.h>
10 #include "bsim1def.h"
11 #include "sperror.h"
12 
13 
14 int
15 B1pzLoad(inModel,ckt,s)
16  GENmodel *inModel;
17  register CKTcircuit *ckt;
18  register SPcomplex *s;
19 {
20  register B1model *model = (B1model*)inModel;
21  register B1instance *here;
22  int xnrm;
23  int xrev;
24  double gdpr;
25  double gspr;
26  double gm;
27  double gds;
28  double gmbs;
29  double gbd;
30  double gbs;
31  double capbd;
32  double capbs;
33  double xcggb;
34  double xcgdb;
35  double xcgsb;
36  double xcbgb;
37  double xcbdb;
38  double xcbsb;
39  double xcddb;
40  double xcssb;
41  double xcdgb;
42  double xcsgb;
43  double xcdsb;
44  double xcsdb;
45  double cggb;
46  double cgdb;
47  double cgsb;
48  double cbgb;
49  double cbdb;
50  double cbsb;
51  double cddb;
52  double cdgb;
53  double cdsb;
54 
55  for( ; model != NULL; model = model->B1nextModel) {
56  for(here = model->B1instances; here!= NULL;
57  here = here->B1nextInstance) {
58 
59  if (here->B1mode >= 0) {
60  xnrm=1;
61  xrev=0;
62  } else {
63  xnrm=0;
64  xrev=1;
65  }
66  gdpr=here->B1drainConductance;
67  gspr=here->B1sourceConductance;
68  gm= *(ckt->CKTstate0 + here->B1gm);
69  gds= *(ckt->CKTstate0 + here->B1gds);
70  gmbs= *(ckt->CKTstate0 + here->B1gmbs);
71  gbd= *(ckt->CKTstate0 + here->B1gbd);
72  gbs= *(ckt->CKTstate0 + here->B1gbs);
73  capbd= *(ckt->CKTstate0 + here->B1capbd);
74  capbs= *(ckt->CKTstate0 + here->B1capbs);
75  /*
76  * charge oriented model parameters
77  */
78 
79  cggb = *(ckt->CKTstate0 + here->B1cggb);
80  cgsb = *(ckt->CKTstate0 + here->B1cgsb);
81  cgdb = *(ckt->CKTstate0 + here->B1cgdb);
82 
83  cbgb = *(ckt->CKTstate0 + here->B1cbgb);
84  cbsb = *(ckt->CKTstate0 + here->B1cbsb);
85  cbdb = *(ckt->CKTstate0 + here->B1cbdb);
86 
87  cdgb = *(ckt->CKTstate0 + here->B1cdgb);
88  cdsb = *(ckt->CKTstate0 + here->B1cdsb);
89  cddb = *(ckt->CKTstate0 + here->B1cddb);
90 
91  xcdgb = (cdgb - here->B1GDoverlapCap) ;
92  xcddb = (cddb + capbd + here->B1GDoverlapCap) ;
93  xcdsb = cdsb ;
94  xcsgb = -(cggb + cbgb + cdgb + here->B1GSoverlapCap ) ;
95  xcsdb = -(cgdb + cbdb + cddb) ;
96  xcssb = (capbs + here->B1GSoverlapCap - (cgsb+cbsb+cdsb)) ;
97  xcggb = (cggb + here->B1GDoverlapCap + here->B1GSoverlapCap +
98  here->B1GBoverlapCap) ;
99  xcgdb = (cgdb - here->B1GDoverlapCap ) ;
100  xcgsb = (cgsb - here->B1GSoverlapCap) ;
101  xcbgb = (cbgb - here->B1GBoverlapCap) ;
102  xcbdb = (cbdb - capbd ) ;
103  xcbsb = (cbsb - capbs ) ;
104 
105 
106  *(here->B1GgPtr ) += xcggb * s->real;
107  *(here->B1GgPtr +1) += xcggb * s->imag;
108  *(here->B1BbPtr ) += (-xcbgb-xcbdb-xcbsb) * s->real;
109  *(here->B1BbPtr +1) += (-xcbgb-xcbdb-xcbsb) * s->imag;
110  *(here->B1DPdpPtr ) += xcddb * s->real;
111  *(here->B1DPdpPtr +1) += xcddb * s->imag;
112  *(here->B1SPspPtr ) += xcssb * s->real;
113  *(here->B1SPspPtr +1) += xcssb * s->imag;
114  *(here->B1GbPtr ) += (-xcggb-xcgdb-xcgsb) * s->real;
115  *(here->B1GbPtr +1) += (-xcggb-xcgdb-xcgsb) * s->imag;
116  *(here->B1GdpPtr ) += xcgdb * s->real;
117  *(here->B1GdpPtr +1) += xcgdb * s->imag;
118  *(here->B1GspPtr ) += xcgsb * s->real;
119  *(here->B1GspPtr +1) += xcgsb * s->imag;
120  *(here->B1BgPtr ) += xcbgb * s->real;
121  *(here->B1BgPtr +1) += xcbgb * s->imag;
122  *(here->B1BdpPtr ) += xcbdb * s->real;
123  *(here->B1BdpPtr +1) += xcbdb * s->imag;
124  *(here->B1BspPtr ) += xcbsb * s->real;
125  *(here->B1BspPtr +1) += xcbsb * s->imag;
126  *(here->B1DPgPtr ) += xcdgb * s->real;
127  *(here->B1DPgPtr +1) += xcdgb * s->imag;
128  *(here->B1DPbPtr ) += (-xcdgb-xcddb-xcdsb) * s->real;
129  *(here->B1DPbPtr +1) += (-xcdgb-xcddb-xcdsb) * s->imag;
130  *(here->B1DPspPtr ) += xcdsb * s->real;
131  *(here->B1DPspPtr +1) += xcdsb * s->imag;
132  *(here->B1SPgPtr ) += xcsgb * s->real;
133  *(here->B1SPgPtr +1) += xcsgb * s->imag;
134  *(here->B1SPbPtr ) += (-xcsgb-xcsdb-xcssb) * s->real;
135  *(here->B1SPbPtr +1) += (-xcsgb-xcsdb-xcssb) * s->imag;
136  *(here->B1SPdpPtr ) += xcsdb * s->real;
137  *(here->B1SPdpPtr +1) += xcsdb * s->imag;
138  *(here->B1DdPtr) += gdpr;
139  *(here->B1SsPtr) += gspr;
140  *(here->B1BbPtr) += gbd+gbs;
141  *(here->B1DPdpPtr) += gdpr+gds+gbd+xrev*(gm+gmbs);
142  *(here->B1SPspPtr) += gspr+gds+gbs+xnrm*(gm+gmbs);
143  *(here->B1DdpPtr) -= gdpr;
144  *(here->B1SspPtr) -= gspr;
145  *(here->B1BdpPtr) -= gbd;
146  *(here->B1BspPtr) -= gbs;
147  *(here->B1DPdPtr) -= gdpr;
148  *(here->B1DPgPtr) += (xnrm-xrev)*gm;
149  *(here->B1DPbPtr) += -gbd+(xnrm-xrev)*gmbs;
150  *(here->B1DPspPtr) += -gds-xnrm*(gm+gmbs);
151  *(here->B1SPgPtr) += -(xnrm-xrev)*gm;
152  *(here->B1SPsPtr) -= gspr;
153  *(here->B1SPbPtr) += -gbs-(xnrm-xrev)*gmbs;
154  *(here->B1SPdpPtr) += -gds-xrev*(gm+gmbs);
155 
156  }
157  }
158  return(OK);
159 }
double * B1SPbPtr
Definition: bsim1def.h:141
double * B1GbPtr
Definition: bsim1def.h:114
double * B1DdpPtr
Definition: bsim1def.h:112
Definition: cddefs.h:119
double * B1BbPtr
Definition: bsim1def.h:106
double * B1DPdpPtr
Definition: bsim1def.h:108
double * B1DPdPtr
Definition: bsim1def.h:128
double * B1GdpPtr
Definition: bsim1def.h:116
double * B1BgPtr
Definition: bsim1def.h:130
int B1pzLoad(GENmodel *inModel, CKTcircuit *ckt, SPcomplex *s)
Definition: b1pzld.c:15
double B1sourceConductance
Definition: bsim1def.h:42
double B1GBoverlapCap
Definition: bsim1def.h:75
double * B1GspPtr
Definition: bsim1def.h:118
double * B1SPdpPtr
Definition: bsim1def.h:143
double * B1DPspPtr
Definition: bsim1def.h:126
double B1drainConductance
Definition: bsim1def.h:43
#define OK
Definition: iferrmsg.h:17
double * B1BdpPtr
Definition: bsim1def.h:122
#define NULL
Definition: spdefs.h:121
B1instance * B1instances
Definition: bsim1def.h:303
double * B1BspPtr
Definition: bsim1def.h:124
double * B1SPgPtr
Definition: bsim1def.h:135
double * B1DPbPtr
Definition: bsim1def.h:139
double * B1SPsPtr
Definition: bsim1def.h:137
double * B1SspPtr
Definition: bsim1def.h:120
double B1GSoverlapCap
Definition: bsim1def.h:74
double * B1GgPtr
Definition: bsim1def.h:102
static char model[32]
Definition: subckt.c:76
struct sBSIM1model * B1nextModel
Definition: bsim1def.h:301
struct sBSIM1instance * B1nextInstance
Definition: bsim1def.h:22
double * B1DPgPtr
Definition: bsim1def.h:132
double * B1SsPtr
Definition: bsim1def.h:104
double * B1DdPtr
Definition: bsim1def.h:100
double * B1SPspPtr
Definition: bsim1def.h:110
double B1GDoverlapCap
Definition: bsim1def.h:73