Jspice3
b1temp.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 Hong J. Park, Thomas L. Quarles
5  1993 Stephen R. Whiteley
6 ****************************************************************************/
7 
8 #include "spice.h"
9 #include <stdio.h>
10 #include <math.h>
11 #include "bsim1def.h"
12 #include "const.h"
13 #include "sperror.h"
14 #include "util.h"
15 
16 
17 /* ARGSUSED */
18 int
19 B1temp(inModel,ckt)
20  GENmodel *inModel;
21  CKTcircuit *ckt;
22  /* load the B1 device structure with those pointers needed later
23  * for fast matrix loading
24  */
25 
26 {
27  register B1model *model = (B1model*) inModel;
28  register B1instance *here;
29  double EffChanLength;
30  double EffChanWidth;
31  double Cox;
32  double CoxWoverL ;
33  double Leff; /* effective channel length im micron */
34  double Weff; /* effective channel width in micron */
35 
36  /* loop through all the B1 device models */
37  for( ; model != NULL; model = model->B1nextModel ) {
38 
39 /* Default value Processing for B1 MOSFET Models */
40  /* Some Limiting for Model Parameters */
41  if( model->B1bulkJctPotential < 0.1) {
42  model->B1bulkJctPotential = 0.1;
43  }
44  if( model->B1sidewallJctPotential < 0.1) {
45  model->B1sidewallJctPotential = 0.1;
46  }
47 
48  Cox = 3.453e-13/(model->B1oxideThickness * 1.0e-4);/*in F/cm**2 */
49  model->B1Cox = Cox; /* unit: F/cm**2 */
50 
51  /* loop through all the instances of the model */
52  for (here = model->B1instances; here != NULL ;
53  here=here->B1nextInstance) {
54 
55  if( (EffChanLength = here->B1l - model->B1deltaL *1e-6 )<=0) {
56  IFuid namarray[2];
57  namarray[0] = model->B1modName;
58  namarray[1] = here->B1name;
59  (*(SPfrontEnd->IFerror))(ERR_FATAL,
60  "B1: mosfet %s, model %s: Effective channel length <=0",
61  namarray);
62  return(E_BADPARM);
63  }
64  if( (EffChanWidth = here->B1w - model->B1deltaW *1e-6 ) <= 0 ) {
65  IFuid namarray[2];
66  namarray[0] = model->B1modName;
67  namarray[1] = here->B1name;
68  (*(SPfrontEnd->IFerror))(ERR_FATAL,
69  "B1: mosfet %s, model %s: Effective channel width <=0",
70  namarray);
71  return(E_BADPARM);
72  }
73  here->B1GDoverlapCap=EffChanWidth *model->B1gateDrainOverlapCap;
74  here->B1GSoverlapCap=EffChanWidth*model->B1gateSourceOverlapCap;
75  here->B1GBoverlapCap=here->B1l * model->B1gateBulkOverlapCap;
76 
77  /* process drain series resistance */
78  if( (here->B1drainConductance=model->B1sheetResistance *
79  here->B1drainSquares) != 0.0 ) {
80  here->B1drainConductance = 1. / here->B1drainConductance ;
81  }
82 
83  /* process source series resistance */
84  if( (here->B1sourceConductance=model->B1sheetResistance *
85  here->B1sourceSquares) != 0.0 ) {
86  here->B1sourceConductance = 1. / here->B1sourceConductance ;
87  }
88 
89  Leff = EffChanLength * 1.e6; /* convert into micron */
90  Weff = EffChanWidth * 1.e6; /* convert into micron */
91  CoxWoverL = Cox * Weff / Leff ; /* F/cm**2 */
92 
93  here->B1vfb = model->B1vfb0 +
94  model->B1vfbL / Leff + model->B1vfbW / Weff;
95  here->B1phi = model->B1phi0 +
96  model->B1phiL / Leff + model->B1phiW / Weff;
97  here->B1K1 = model->B1K10 +
98  model->B1K1L / Leff + model->B1K1W / Weff;
99  here->B1K2 = model->B1K20 +
100  model->B1K2L / Leff + model->B1K2W / Weff;
101  here->B1eta = model->B1eta0 +
102  model->B1etaL / Leff + model->B1etaW / Weff;
103  here->B1etaB = model->B1etaB0 +
104  model->B1etaBl / Leff + model->B1etaBw / Weff;
105  here->B1etaD = model->B1etaD0 +
106  model->B1etaDl / Leff + model->B1etaDw / Weff;
107  here->B1betaZero = model->B1mobZero;
108  here->B1betaZeroB = model->B1mobZeroB0 +
109  model->B1mobZeroBl / Leff + model->B1mobZeroBw / Weff;
110  here->B1ugs = model->B1ugs0 +
111  model->B1ugsL / Leff + model->B1ugsW / Weff;
112  here->B1ugsB = model->B1ugsB0 +
113  model->B1ugsBL / Leff + model->B1ugsBW / Weff;
114  here->B1uds = model->B1uds0 +
115  model->B1udsL / Leff + model->B1udsW / Weff;
116  here->B1udsB = model->B1udsB0 +
117  model->B1udsBL / Leff + model->B1udsBW / Weff;
118  here->B1udsD = model->B1udsD0 +
119  model->B1udsDL / Leff + model->B1udsDW / Weff;
120  here->B1betaVdd = model->B1mobVdd0 +
121  model->B1mobVddl / Leff + model->B1mobVddw / Weff;
122  here->B1betaVddB = model->B1mobVddB0 +
123  model->B1mobVddBl / Leff + model->B1mobVddBw / Weff;
124  here->B1betaVddD = model->B1mobVddD0 +
125  model->B1mobVddDl / Leff + model->B1mobVddDw / Weff;
126  here->B1subthSlope = model->B1subthSlope0 +
127  model->B1subthSlopeL / Leff + model->B1subthSlopeW / Weff;
128  here->B1subthSlopeB = model->B1subthSlopeB0 +
129  model->B1subthSlopeBL / Leff + model->B1subthSlopeBW / Weff;
130  here->B1subthSlopeD = model->B1subthSlopeD0 +
131  model->B1subthSlopeDL / Leff + model->B1subthSlopeDW / Weff;
132 
133  if(here->B1phi < 0.1 ) here->B1phi = 0.1;
134  if(here->B1K1 < 0.0) here->B1K1 = 0.0;
135  if(here->B1K2 < 0.0) here->B1K2 = 0.0;
136 
137  here->B1vt0 = here->B1vfb + here->B1phi + here->B1K1 *
138  sqrt(here->B1phi) - here->B1K2 * here->B1phi;
139 
140  here->B1von = here->B1vt0; /* added for initialization*/
141 
142  /* process Beta Parameters (unit: A/V**2) */
143 
144  here->B1betaZero = here->B1betaZero * CoxWoverL;
145  here->B1betaZeroB = here->B1betaZeroB * CoxWoverL;
146  here->B1betaVdd = here->B1betaVdd * CoxWoverL;
147  here->B1betaVddB = here->B1betaVddB * CoxWoverL;
148  here->B1betaVddD = MAX(here->B1betaVddD * CoxWoverL,0.0);
149 
150  }
151  }
152  return(OK);
153 }
154 
155 
double B1mobZeroBl
Definition: bsim1def.h:333
double B1betaVddD
Definition: bsim1def.h:64
double B1udsB
Definition: bsim1def.h:68
double B1udsBL
Definition: bsim1def.h:354
double B1von
Definition: bsim1def.h:48
int B1temp(GENmodel *inModel, CKTcircuit *ckt)
Definition: b1temp.c:19
double B1bulkJctPotential
Definition: bsim1def.h:379
double B1phi0
Definition: bsim1def.h:311
double B1subthSlopeL
Definition: bsim1def.h:360
double B1mobZero
Definition: bsim1def.h:331
double B1eta0
Definition: bsim1def.h:320
double B1oxideThickness
Definition: bsim1def.h:368
double B1betaZero
Definition: bsim1def.h:60
double B1phiW
Definition: bsim1def.h:313
double B1vfb0
Definition: bsim1def.h:308
double B1mobVddl
Definition: bsim1def.h:336
double B1betaZeroB
Definition: bsim1def.h:61
#define MAX(a, b)
Definition: spdefs.h:135
double B1K2
Definition: bsim1def.h:56
double B1K20
Definition: bsim1def.h:317
double B1subthSlopeD0
Definition: bsim1def.h:365
double B1etaB0
Definition: bsim1def.h:323
double B1mobVdd0
Definition: bsim1def.h:335
#define ERR_FATAL
Definition: ifsim.h:518
double B1etaL
Definition: bsim1def.h:321
double B1uds
Definition: bsim1def.h:67
double B1ugsL
Definition: bsim1def.h:345
double B1deltaL
Definition: bsim1def.h:329
double B1etaW
Definition: bsim1def.h:322
double B1subthSlopeBW
Definition: bsim1def.h:364
double B1subthSlopeDW
Definition: bsim1def.h:367
static double e
Definition: vectors.c:17
IFfrontEnd * SPfrontEnd
Definition: main.c:917
double B1subthSlopeD
Definition: bsim1def.h:72
#define E_BADPARM
Definition: iferrmsg.h:26
double B1ugsBL
Definition: bsim1def.h:348
double B1K2W
Definition: bsim1def.h:319
double B1K1W
Definition: bsim1def.h:316
double B1sourceConductance
Definition: bsim1def.h:42
double B1GBoverlapCap
Definition: bsim1def.h:75
double B1betaVdd
Definition: bsim1def.h:62
double B1uds0
Definition: bsim1def.h:350
double B1vt0
Definition: bsim1def.h:76
double B1mobVddBl
Definition: bsim1def.h:339
double B1udsBW
Definition: bsim1def.h:355
double B1subthSlopeDL
Definition: bsim1def.h:366
IFuid B1name
Definition: bsim1def.h:24
double B1K2L
Definition: bsim1def.h:318
double B1drainConductance
Definition: bsim1def.h:43
double B1mobVddDw
Definition: bsim1def.h:343
#define OK
Definition: iferrmsg.h:17
double B1etaBl
Definition: bsim1def.h:324
double B1etaDw
Definition: bsim1def.h:328
GENERIC * IFuid
Definition: ifsim.h:72
double B1mobVddDl
Definition: bsim1def.h:342
double B1ugsBW
Definition: bsim1def.h:349
double B1ugs0
Definition: bsim1def.h:344
double B1etaDl
Definition: bsim1def.h:327
double B1vfb
Definition: bsim1def.h:53
#define NULL
Definition: spdefs.h:121
double B1K1
Definition: bsim1def.h:55
double B1Cox
Definition: bsim1def.h:369
double B1udsW
Definition: bsim1def.h:352
B1instance * B1instances
Definition: bsim1def.h:303
double B1subthSlope
Definition: bsim1def.h:70
double B1mobVddw
Definition: bsim1def.h:337
double B1vfbL
Definition: bsim1def.h:309
double B1mobVddBw
Definition: bsim1def.h:340
double B1w
Definition: bsim1def.h:35
double B1mobZeroBw
Definition: bsim1def.h:334
double B1eta
Definition: bsim1def.h:57
double B1subthSlopeB0
Definition: bsim1def.h:362
double B1udsL
Definition: bsim1def.h:351
double B1ugsB0
Definition: bsim1def.h:347
double B1etaBw
Definition: bsim1def.h:325
double B1etaD0
Definition: bsim1def.h:326
double B1gateBulkOverlapCap
Definition: bsim1def.h:374
double B1GSoverlapCap
Definition: bsim1def.h:74
static char model[32]
Definition: subckt.c:76
double B1sidewallJctPotential
Definition: bsim1def.h:382
double B1subthSlope0
Definition: bsim1def.h:359
double B1udsB0
Definition: bsim1def.h:353
double B1mobZeroB0
Definition: bsim1def.h:332
struct sBSIM1model * B1nextModel
Definition: bsim1def.h:301
double B1K10
Definition: bsim1def.h:314
double B1gateDrainOverlapCap
Definition: bsim1def.h:373
double B1vfbW
Definition: bsim1def.h:310
struct sBSIM1instance * B1nextInstance
Definition: bsim1def.h:22
double B1udsD
Definition: bsim1def.h:69
double B1phi
Definition: bsim1def.h:54
double B1phiL
Definition: bsim1def.h:312
double B1udsD0
Definition: bsim1def.h:356
double B1l
Definition: bsim1def.h:34
double B1ugsB
Definition: bsim1def.h:66
double B1subthSlopeB
Definition: bsim1def.h:71
double B1udsDL
Definition: bsim1def.h:357
double B1subthSlopeBL
Definition: bsim1def.h:363
double B1etaB
Definition: bsim1def.h:58
IFuid B1modName
Definition: bsim1def.h:305
double B1K1L
Definition: bsim1def.h:315
double B1ugsW
Definition: bsim1def.h:346
double B1deltaW
Definition: bsim1def.h:330
double B1etaD
Definition: bsim1def.h:59
double B1betaVddB
Definition: bsim1def.h:63
double B1mobVddB0
Definition: bsim1def.h:338
double B1udsDW
Definition: bsim1def.h:358
double B1ugs
Definition: bsim1def.h:65
double B1drainSquares
Definition: bsim1def.h:38
double B1gateSourceOverlapCap
Definition: bsim1def.h:372
double B1sourceSquares
Definition: bsim1def.h:39
double B1mobVddD0
Definition: bsim1def.h:341
double B1subthSlopeW
Definition: bsim1def.h:361
double B1sheetResistance
Definition: bsim1def.h:377
double B1GDoverlapCap
Definition: bsim1def.h:73