30 double DrainSatCurrent = 0.0;
31 double EffectiveLength = 0.0;
32 double GateBulkOverlapCap = 0.0;
33 double GateDrainOverlapCap = 0.0;
34 double GateSourceOverlapCap = 0.0;
35 double SourceSatCurrent = 0.0;
36 double DrainArea = 0.0;
37 double SourceArea = 0.0;
38 double DrainPerimeter = 0.0;
39 double SourcePerimeter = 0.0;
140 EffectiveLength=here->
B1l - model->
B1deltaL * 1.e-6;
147 DrainSatCurrent = 1.0e-15;
151 SourceSatCurrent = 1.0e-15;
163 vbs= *(ckt->CKTstate0 + here->B1vbs);
164 vgs= *(ckt->CKTstate0 + here->B1vgs);
165 vds= *(ckt->CKTstate0 + here->B1vds);
167 vbs= *(ckt->CKTstate1 + here->B1vbs);
168 vgs= *(ckt->CKTstate1 + here->B1vgs);
169 vds= *(ckt->CKTstate1 + here->B1vds);
174 if((vds==0) && (vgs==0) && (vbs==0) &&
189 *(ckt->CKTstate0 + here->B1vbs) =
190 *(ckt->CKTstate1 + here->B1vbs);
191 vbs = (1+xfact)* (*(ckt->CKTstate1 + here->B1vbs))
192 -(xfact * (*(ckt->CKTstate2 + here->B1vbs)));
193 *(ckt->CKTstate0 + here->B1vgs) =
194 *(ckt->CKTstate1 + here->B1vgs);
195 vgs = (1+xfact)* (*(ckt->CKTstate1 + here->B1vgs))
196 -(xfact * (*(ckt->CKTstate2 + here->B1vgs)));
197 *(ckt->CKTstate0 + here->B1vds) =
198 *(ckt->CKTstate1 + here->B1vds);
199 vds = (1+xfact)* (*(ckt->CKTstate1 + here->B1vds))
200 -(xfact * (*(ckt->CKTstate2 + here->B1vds)));
201 *(ckt->CKTstate0 + here->B1vbd) =
202 *(ckt->CKTstate0 + here->B1vbs)-
203 *(ckt->CKTstate0 + here->B1vds);
204 *(ckt->CKTstate0 + here->B1cd) =
205 *(ckt->CKTstate1 + here->B1cd);
206 *(ckt->CKTstate0 + here->B1cbs) =
207 *(ckt->CKTstate1 + here->B1cbs);
208 *(ckt->CKTstate0 + here->B1cbd) =
209 *(ckt->CKTstate1 + here->B1cbd);
210 *(ckt->CKTstate0 + here->B1gm) =
211 *(ckt->CKTstate1 + here->B1gm);
212 *(ckt->CKTstate0 + here->B1gds) =
213 *(ckt->CKTstate1 + here->B1gds);
214 *(ckt->CKTstate0 + here->B1gmbs) =
215 *(ckt->CKTstate1 + here->B1gmbs);
216 *(ckt->CKTstate0 + here->B1gbd) =
217 *(ckt->CKTstate1 + here->B1gbd);
218 *(ckt->CKTstate0 + here->B1gbs) =
219 *(ckt->CKTstate1 + here->B1gbs);
220 *(ckt->CKTstate0 + here->B1cggb) =
221 *(ckt->CKTstate1 + here->B1cggb);
222 *(ckt->CKTstate0 + here->B1cbgb) =
223 *(ckt->CKTstate1 + here->B1cbgb);
224 *(ckt->CKTstate0 + here->B1cbsb) =
225 *(ckt->CKTstate1 + here->B1cbsb);
226 *(ckt->CKTstate0 + here->B1cgdb) =
227 *(ckt->CKTstate1 + here->B1cgdb);
228 *(ckt->CKTstate0 + here->B1cgsb) =
229 *(ckt->CKTstate1 + here->B1cgsb);
230 *(ckt->CKTstate0 + here->B1cbdb) =
231 *(ckt->CKTstate1 + here->B1cbdb);
232 *(ckt->CKTstate0 + here->B1cdgb) =
233 *(ckt->CKTstate1 + here->B1cdgb);
234 *(ckt->CKTstate0 + here->B1cddb) =
235 *(ckt->CKTstate1 + here->B1cddb);
236 *(ckt->CKTstate0 + here->B1cdsb) =
237 *(ckt->CKTstate1 + here->B1cdsb);
254 vgdo = *(ckt->CKTstate0 + here->B1vgs) -
255 *(ckt->CKTstate0 + here->B1vds);
256 delvbs = vbs - *(ckt->CKTstate0 + here->B1vbs);
257 delvbd = vbd - *(ckt->CKTstate0 + here->B1vbd);
258 delvgs = vgs - *(ckt->CKTstate0 + here->B1vgs);
259 delvds = vds - *(ckt->CKTstate0 + here->B1vds);
264 *(ckt->CKTstate0 + here->B1cd) -
265 *(ckt->CKTstate0 + here->B1gbd) * delvbd +
266 *(ckt->CKTstate0 + here->B1gmbs) * delvbs +
267 *(ckt->CKTstate0 + here->B1gm) * delvgs +
268 *(ckt->CKTstate0 + here->B1gds) * delvds ;
271 *(ckt->CKTstate0 + here->B1cd) -
272 ( *(ckt->CKTstate0 + here->B1gbd) -
273 *(ckt->CKTstate0 + here->B1gmbs)) * delvbd -
274 *(ckt->CKTstate0 + here->B1gm) * delvgd +
275 *(ckt->CKTstate0 + here->B1gds) * delvds;
278 *(ckt->CKTstate0 + here->B1cbs) +
279 *(ckt->CKTstate0 + here->B1cbd) +
280 *(ckt->CKTstate0 + here->B1gbd) * delvbd +
281 *(ckt->CKTstate0 + here->B1gbs) * delvbs ;
290 tempv =
MAX(
FABS(cbhat),
FABS(*(ckt->CKTstate0 + here->B1cbs)
291 + *(ckt->CKTstate0 + here->B1cbd)))+ckt->
CKTabstol;
294 FABS(*(ckt->CKTstate0+here->B1vbs)))+
297 FABS(*(ckt->CKTstate0+here->B1vbd)))+
300 FABS(*(ckt->CKTstate0+here->B1vgs)))+
303 FABS(*(ckt->CKTstate0+here->B1vds)))+
305 if( (
FABS(cdhat- *(ckt->CKTstate0 + here->B1cd)) <
308 if ( (
FABS(cbhat-(*(ckt->CKTstate0 + here->B1cbs) +
309 *(ckt->CKTstate0 + here->B1cbd))) < ckt->
CKTreltol *
312 vbs = *(ckt->CKTstate0 + here->B1vbs);
313 vbd = *(ckt->CKTstate0 + here->B1vbd);
314 vgs = *(ckt->CKTstate0 + here->B1vgs);
315 vds = *(ckt->CKTstate0 + here->B1vds);
318 cd = *(ckt->CKTstate0 + here->B1cd);
319 cbs = *(ckt->CKTstate0 + here->B1cbs);
320 cbd = *(ckt->CKTstate0 + here->B1cbd);
321 cdrain = here->
B1mode * (cd + cbd);
322 gm = *(ckt->CKTstate0 + here->B1gm);
323 gds = *(ckt->CKTstate0 + here->B1gds);
324 gmbs = *(ckt->CKTstate0 + here->B1gmbs);
325 gbd = *(ckt->CKTstate0 + here->B1gbd);
326 gbs = *(ckt->CKTstate0 + here->B1gbs);
330 cggb = *(ckt->CKTstate0 + here->B1cggb);
331 cgdb = *(ckt->CKTstate0 + here->B1cgdb);
332 cgsb = *(ckt->CKTstate0 + here->B1cgsb);
333 cbgb = *(ckt->CKTstate0 + here->B1cbgb);
334 cbdb = *(ckt->CKTstate0 + here->B1cbdb);
335 cbsb = *(ckt->CKTstate0 + here->B1cbsb);
336 cdgb = *(ckt->CKTstate0 + here->B1cdgb);
337 cddb = *(ckt->CKTstate0 + here->B1cddb);
338 cdsb = *(ckt->CKTstate0 + here->B1cdsb);
339 capbs = *(ckt->CKTstate0 + here->B1capbs);
340 capbd = *(ckt->CKTstate0 + here->B1capbd);
350 if(*(ckt->CKTstate0 + here->B1vds) >=0) {
351 vgs =
DEVfetlim(vgs,*(ckt->CKTstate0 + here->B1vgs)
354 vds =
DEVlimvds(vds,*(ckt->CKTstate0 + here->B1vds));
359 vds = -
DEVlimvds(-vds,-(*(ckt->CKTstate0 + here->B1vds)));
364 vbs =
DEVpnjlim(vbs,*(ckt->CKTstate0 + here->B1vbs),
369 vbd =
DEVpnjlim(vbd,*(ckt->CKTstate0 + here->B1vbd),
387 cbs = SourceSatCurrent * (evbs-1) + ckt->
CKTgmin * vbs ;
395 cbd = DrainSatCurrent *(evbd-1)+ckt->
CKTgmin*vbd;
410 B1evaluate(vds,vbs,vgs,here,model,&gm,&gds,&gmbs,&qgate,
411 &qbulk,&qdrn,&cggb,&cgdb,&cgsb,&cbgb,&cbdb,&cbsb,&cdgb,
412 &cddb,&cdsb,&cdrain,&von,&vdsat,ckt);
414 B1evaluate(-vds,vbd,vgd,here,model,&gm,&gds,&gmbs,&qgate,
415 &qbulk,&qsrc,&cggb,&cgsb,&cgdb,&cbgb,&cbsb,&cbdb,&csgb,
416 &cssb,&csdb,&cdrain,&von,&vdsat,ckt);
427 cd=here->
B1mode * cdrain - cbd;
452 arg = 1 - vbs / PhiB;
453 argsw = 1 - vbs / PhiBSW;
454 sarg = exp(-MJ*log(arg));
455 sargsw = exp(-MJSW*log(argsw));
456 *(ckt->CKTstate0 + here->B1qbs) =
457 PhiB * czbs * (1-arg*sarg)/(1-MJ) + PhiBSW *
458 czbssw * (1-argsw*sargsw)/(1-MJSW);
459 capbs = czbs * sarg + czbssw * sargsw ;
461 *(ckt->CKTstate0+here->B1qbs) =
462 vbs*(czbs+czbssw)+ vbs*vbs*(czbs*MJ*0.5/PhiB
463 + czbssw * MJSW * 0.5/PhiBSW);
464 capbs = czbs + czbssw + vbs *(czbs*MJ/PhiB+
465 czbssw * MJSW / PhiBSW );
470 arg = 1 - vbd / PhiB;
471 argsw = 1 - vbd / PhiBSW;
472 sarg = exp(-MJ*log(arg));
473 sargsw = exp(-MJSW*log(argsw));
474 *(ckt->CKTstate0 + here->B1qbd) =
475 PhiB * czbd * (1-arg*sarg)/(1-MJ) + PhiBSW *
476 czbdsw * (1-argsw*sargsw)/(1-MJSW);
477 capbd = czbd * sarg + czbdsw * sargsw ;
479 *(ckt->CKTstate0+here->B1qbd) =
480 vbd*(czbd+czbdsw)+ vbd*vbd*(czbd*MJ*0.5/PhiB
481 + czbdsw * MJSW * 0.5/PhiBSW);
482 capbd = czbd + czbdsw + vbd *(czbd*MJ/PhiB+
483 czbdsw * MJSW / PhiBSW );
502 if (
FABS(cdhat-cd) >= tol) {
508 if (
FABS(cbhat-(cbs+cbd)) > tol) {
516 *(ckt->CKTstate0 + here->B1vbs) = vbs;
517 *(ckt->CKTstate0 + here->B1vbd) = vbd;
518 *(ckt->CKTstate0 + here->B1vgs) = vgs;
519 *(ckt->CKTstate0 + here->B1vds) = vds;
520 *(ckt->CKTstate0 + here->B1cd) = cd;
521 *(ckt->CKTstate0 + here->B1cbs) = cbs;
522 *(ckt->CKTstate0 + here->B1cbd) = cbd;
523 *(ckt->CKTstate0 + here->B1gm) = gm;
524 *(ckt->CKTstate0 + here->B1gds) = gds;
525 *(ckt->CKTstate0 + here->B1gmbs) = gmbs;
526 *(ckt->CKTstate0 + here->B1gbd) = gbd;
527 *(ckt->CKTstate0 + here->B1gbs) = gbs;
529 *(ckt->CKTstate0 + here->B1cggb) = cggb;
530 *(ckt->CKTstate0 + here->B1cgdb) = cgdb;
531 *(ckt->CKTstate0 + here->B1cgsb) = cgsb;
533 *(ckt->CKTstate0 + here->B1cbgb) = cbgb;
534 *(ckt->CKTstate0 + here->B1cbdb) = cbdb;
535 *(ckt->CKTstate0 + here->B1cbsb) = cbsb;
537 *(ckt->CKTstate0 + here->B1cdgb) = cdgb;
538 *(ckt->CKTstate0 + here->B1cddb) = cddb;
539 *(ckt->CKTstate0 + here->B1cdsb) = cdsb;
541 *(ckt->CKTstate0 + here->B1capbs) = capbs;
542 *(ckt->CKTstate0 + here->B1capbd) = capbd;
555 args[0] = GateDrainOverlapCap;
556 args[1] = GateSourceOverlapCap;
557 args[2] = GateBulkOverlapCap;
574 &gcggb,&gcgdb,&gcgsb,
575 &gcbgb,&gcbdb,&gcbsb,
576 &gcdgb,&gcddb,&gcdsb,&gcsgb,&gcsdb,&gcssb,
581 args[0] = GateSourceOverlapCap;
582 args[1] = GateDrainOverlapCap;
583 args[2] = GateBulkOverlapCap;
600 &gcggb,&gcgsb,&gcgdb,
601 &gcbgb,&gcbsb,&gcbdb,
602 &gcsgb,&gcssb,&gcsdb,&gcdgb,&gcdsb,&gcddb,
625 if(ByPass)
goto line860;
626 *(ckt->CKTstate0 + here->B1qg) = qgate;
627 *(ckt->CKTstate0 + here->B1qd) = qdrn -
628 *(ckt->CKTstate0 + here->B1qbd);
629 *(ckt->CKTstate0 + here->B1qb) = qbulk +
630 *(ckt->CKTstate0 + here->B1qbd) +
631 *(ckt->CKTstate0 + here->B1qbs);
638 *(ckt->CKTstate0+here->B1cggb) = cggb;
639 *(ckt->CKTstate0+here->B1cgdb) = cgdb;
640 *(ckt->CKTstate0+here->B1cgsb) = cgsb;
641 *(ckt->CKTstate0+here->B1cbgb) = cbgb;
642 *(ckt->CKTstate0+here->B1cbdb) = cbdb;
643 *(ckt->CKTstate0+here->B1cbsb) = cbsb;
644 *(ckt->CKTstate0+here->B1cdgb) = cdgb;
645 *(ckt->CKTstate0+here->B1cddb) = cddb;
646 *(ckt->CKTstate0+here->B1cdsb) = cdsb;
647 *(ckt->CKTstate0+here->B1capbd) = capbd;
648 *(ckt->CKTstate0+here->B1capbs) = capbs;
654 *(ckt->CKTstate1+here->B1qb) =
655 *(ckt->CKTstate0+here->B1qb) ;
656 *(ckt->CKTstate1+here->B1qg) =
657 *(ckt->CKTstate0+here->B1qg) ;
658 *(ckt->CKTstate1+here->B1qd) =
659 *(ckt->CKTstate0+here->B1qd) ;
663 NI_INTEG(ckt,geq,ceq,0.0,here->B1qb);
664 NI_INTEG(ckt,geq,ceq,0.0,here->B1qg);
665 NI_INTEG(ckt,geq,ceq,0.0,here->B1qd);
671 ceqqg = ceqqb = ceqqd = 0.0;
672 gcdgb = gcddb = gcdsb = 0.0;
673 gcsgb = gcsdb = gcssb = 0.0;
674 gcggb = gcgdb = gcgsb = 0.0;
675 gcbgb = gcbdb = gcbsb = 0.0;
680 cqgate = *(ckt->CKTstate0 + here->B1iqg);
681 cqbulk = *(ckt->CKTstate0 + here->B1iqb);
682 cqdrn = *(ckt->CKTstate0 + here->B1iqd);
683 ceqqg = cqgate - gcggb * vgb + gcgdb * vbd + gcgsb * vbs;
684 ceqqb = cqbulk - gcbgb * vgb + gcbdb * vbd + gcbsb * vbs;
685 ceqqd = cqdrn - gcdgb * vgb + gcddb * vbd + gcdsb * vbs;
688 *(ckt->CKTstate1 + here->B1iqb) =
689 *(ckt->CKTstate0 + here->B1iqb);
690 *(ckt->CKTstate1 + here->B1iqg) =
691 *(ckt->CKTstate0 + here->B1iqg);
692 *(ckt->CKTstate1 + here->B1iqd) =
693 *(ckt->CKTstate0 + here->B1iqd);
704 ceqqg = model->
B1type * ceqqg;
705 ceqqb = model->
B1type * ceqqb;
706 ceqqd = model->
B1type * ceqqd;
710 cdreq=model->
B1type*(cdrain-gds*vds-gm*vgs-gmbs*vbs);
714 cdreq = -(model->
B1type)*(cdrain+gds*vds-gm*vgd-gmbs*vbd);
722 (cdreq+ceqbs+ceqqg+ceqqb+ceqqd);
731 *(here->
B1BbPtr) += (gbd+gbs-gcbgb-gcbdb-gcbsb);
737 *(here->
B1GbPtr) += (-gcggb-gcgdb-gcgsb);
745 *(here->
B1DPgPtr) += ((xnrm-xrev)*gm+gcdgb);
746 *(here->
B1DPbPtr) += (-gbd+(xnrm-xrev)*gmbs-gcdgb-gcddb-gcdsb);
747 *(here->
B1DPspPtr) += (-gds-xnrm*(gm+gmbs)+gcdsb);
748 *(here->
B1SPgPtr) += (-(xnrm-xrev)*gm+gcsgb);
750 *(here->
B1SPbPtr) += (-gbs-(xnrm-xrev)*gmbs-gcsgb-gcsdb-gcssb);
751 *(here->
B1SPdpPtr) += (-gds-xrev*(gm+gmbs)+gcsdb);
double B1bulkJctPotential
GENinstance * CKTtroubleElt
double B1sourceConductance
double B1drainConductance
double B1unitLengthSidewallJctCap
double B1jctSatCurDensity
#define NI_INTEG(ckt, geq, ceq, cap, qcap)
double B1gateBulkOverlapCap
double B1sidewallJctPotential
struct sBSIM1model * B1nextModel
double B1bulkJctBotGradingCoeff
double B1bulkJctSideGradingCoeff
double B1gateDrainOverlapCap
struct sBSIM1instance * B1nextInstance
double B1gateSourceOverlapCap