My Project  0.0.16
QUCS Mapping
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
EKV26MOS.core.cpp
Go to the documentation of this file.
1 /*
2  * EKV26MOS.core.cpp - device implementations for EKV26MOS module
3  *
4  * This is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation; either version 2, or (at your option)
7  * any later version.
8  *
9  */
10 
11 #if HAVE_CONFIG_H
12 #include <config.h>
13 #endif
14 
16 #include "component.h"
17 #include "device.h"
18 #include "EKV26MOS.core.h"
19 
20 #ifndef CIR_EKV26MOS
21 #define CIR_EKV26MOS -1
22 #endif
23 
24 // external nodes
25 #define Drain 0
26 #define Gate 1
27 #define Source 2
28 #define Bulk 3
29 // internal nodes
30 #define Drain_int 4
31 #define Source_int 5
32 
33 // useful macro definitions
34 #define NP(node) real (getV (node))
35 #define BP(pnode,nnode) (NP(pnode) - NP(nnode))
36 #define _load_static_residual2(pnode,nnode,current)\
37  _rhs[pnode] -= current;\
38  _rhs[nnode] += current;
39 #define _load_static_augmented_residual2(pnode,nnode,current)\
40  _rhs[pnode] -= current;\
41  _rhs[nnode] += current;
42 #define _load_static_residual1(node,current)\
43  _rhs[node] -= current;
44 #define _load_static_augmented_residual1(node,current)\
45  _rhs[node] -= current;
46 #define _load_static_jacobian4(pnode,nnode,vpnode,vnnode,conductance)\
47  _jstat[pnode][vpnode] += conductance;\
48  _jstat[nnode][vnnode] += conductance;\
49  _jstat[pnode][vnnode] -= conductance;\
50  _jstat[nnode][vpnode] -= conductance;\
51  if (doHB) {\
52  _ghs[pnode] += conductance * BP(vpnode,vnnode);\
53  _ghs[nnode] -= conductance * BP(vpnode,vnnode);\
54  } else {\
55  _rhs[pnode] += conductance * BP(vpnode,vnnode);\
56  _rhs[nnode] -= conductance * BP(vpnode,vnnode);\
57  }
58 #define _load_static_jacobian2p(node,vpnode,vnnode,conductance)\
59  _jstat[node][vpnode] += conductance;\
60  _jstat[node][vnnode] -= conductance;\
61  if (doHB) {\
62  _ghs[node] += conductance * BP(vpnode,vnnode);\
63  } else {\
64  _rhs[node] += conductance * BP(vpnode,vnnode);\
65  }
66 #define _load_static_jacobian2s(pnode,nnode,node,conductance)\
67  _jstat[pnode][node] += conductance;\
68  _jstat[nnode][node] -= conductance;\
69  if (doHB) {\
70  _ghs[pnode] += conductance * NP(node);\
71  _ghs[nnode] -= conductance * NP(node);\
72  } else {\
73  _rhs[pnode] += conductance * NP(node);\
74  _rhs[nnode] -= conductance * NP(node);\
75  }
76 #define _load_static_jacobian1(node,vnode,conductance)\
77  _jstat[node][vnode] += conductance;\
78  if (doHB) {\
79  _ghs[node] += conductance * NP(vnode);\
80  } else {\
81  _rhs[node] += conductance * NP(vnode);\
82  }
83 #define _load_dynamic_residual2(pnode,nnode,charge)\
84  if (doTR) _charges[pnode][nnode] += charge;\
85  if (doHB) {\
86  _qhs[pnode] -= charge;\
87  _qhs[nnode] += charge;\
88  }
89 #define _load_dynamic_residual1(node,charge)\
90  if (doTR) _charges[node][node] += charge;\
91  if (doHB) {\
92  _qhs[node] -= charge;\
93  }
94 #define _load_dynamic_jacobian4(pnode,nnode,vpnode,vnnode,capacitance)\
95  if (doAC) {\
96  _jdyna[pnode][vpnode] += capacitance;\
97  _jdyna[nnode][vnnode] += capacitance;\
98  _jdyna[pnode][vnnode] -= capacitance;\
99  _jdyna[nnode][vpnode] -= capacitance;\
100  }\
101  if (doTR) {\
102  _caps[pnode][nnode][vpnode][vnnode] += capacitance;\
103  }\
104  if (doHB) {\
105  _chs[pnode] += capacitance * BP(vpnode,vnnode);\
106  _chs[nnode] -= capacitance * BP(vpnode,vnnode);\
107  }
108 #define _load_dynamic_jacobian2s(pnode,nnode,vnode,capacitance)\
109  if (doAC) {\
110  _jdyna[pnode][vnode] += capacitance;\
111  _jdyna[nnode][vnode] -= capacitance;\
112  }\
113  if (doTR) {\
114  _caps[pnode][nnode][vnode][vnode] += capacitance;\
115  }\
116  if (doHB) {\
117  _chs[pnode] += capacitance * NP(vnode);\
118  _chs[nnode] -= capacitance * NP(vnode);\
119  }
120 #define _load_dynamic_jacobian2p(node,vpnode,vnnode,capacitance)\
121  if (doAC) {\
122  _jdyna[node][vpnode] += capacitance;\
123  _jdyna[node][vnnode] -= capacitance;\
124  }\
125  if (doTR) {\
126  _caps[node][node][vpnode][vnnode] += capacitance;\
127  }\
128  if (doHB) {\
129  _chs[node] += capacitance * BP(vpnode,vnnode);\
130  }
131 #define _load_dynamic_jacobian1(node,vnode,capacitance)\
132  if (doAC) {\
133  _jdyna[node][vnode] += capacitance;\
134  }\
135  if (doTR) {\
136  _caps[node][node][vnode][vnode] += capacitance;\
137  }\
138  if (doHB) {\
139  _chs[node] += capacitance * NP(vnode);\
140  }
141 
142 #define _save_whitenoise1(n1,pwr,type)\
143  _white_pwr[n1][n1] += pwr;
144 #define _save_whitenoise2(n1,n2,pwr,type)\
145  _white_pwr[n1][n2] += pwr;
146 #define _save_flickernoise1(n1,pwr,exp,type)\
147  _flicker_pwr[n1][n1] += pwr;\
148  _flicker_exp[n1][n1] += exp;
149 #define _save_flickernoise2(n1,n2,pwr,exp,type)\
150  _flicker_pwr[n1][n2] += pwr;\
151  _flicker_exp[n1][n2] += exp;
152 #define _load_whitenoise2(n1,n2,pwr)\
153  cy (n1,n2) -= pwr/kB/T0; cy (n2,n1) -= pwr/kB/T0;\
154  cy (n1,n1) += pwr/kB/T0; cy (n2,n2) += pwr/kB/T0;
155 #define _load_whitenoise1(n1,pwr)\
156  cy (n1,n1) += pwr/kB/T0;
157 #define _load_flickernoise2(n1,n2,pwr,exp)\
158  cy (n1,n2) -= pwr*pow(_freq,-exp)/kB/T0;\
159  cy (n2,n1) -= pwr*pow(_freq,-exp)/kB/T0;\
160  cy (n1,n1) += pwr*pow(_freq,-exp)/kB/T0;\
161  cy (n2,n2) += pwr*pow(_freq,-exp)/kB/T0;
162 #define _load_flickernoise1(n1,pwr,exp)\
163  cy (n1,n1) += pwr*pow(_freq,-exp)/kB/T0;
164 
165 // derivative helper macros
166 #define m00_hypot(v00,x,y) v00 = xhypot(x,y);
167 #define m10_hypot(v10,v00,x,y) v10 = (x)/(v00);
168 #define m11_hypot(v11,v00,x,y) v11 = (y)/(v00);
169 #define m00_max(v00,x,y) v00 = ((x)>(y))?(x):(y);
170 #define m10_max(v10,v00,x,y) v10 = ((x)>(y))?1.0:0.0;
171 #define m11_max(v11,v00,x,y) v11 = ((x)>(y))?0.0:1.0;
172 #define m00_min(v00,x,y) v00 = ((x)<(y))?(x):(y);
173 #define m10_min(v10,v00,x,y) v10 = ((x)<(y))?1.0:0.0;
174 #define m11_min(v11,v00,x,y) v11 = ((x)<(y))?0.0:1.0;
175 #define m00_pow(v00,x,y) v00 = pow(x,y);
176 #define m10_pow(v10,v00,x,y) v10 = (x==0.0)?0.0:(v00)*(y)/(x);
177 #define m11_pow(v11,v00,x,y) v11 = (x==0.0)?0.0:(log(x)*(v00));
178 
179 #define m00_div(v00,v10,x,y) double v10=1/(y); double v00=(x)*v10;
180 #define m10_div(v10,v00,vv,x,y)
181 #define m11_div(v11,v00,vv,x,y) double v11 = -v00*vv;
182 
183 #define m00_mult(v00,v10,v11,x,y) double v10=(x); double v11=(y); double v00=v10*v11;
184 #define m00_add(v00,x,y) double v00=(x)+(y);
185 
186 #define m00_cos(v00,x) v00 = cos(x);
187 #define m10_cos(v10,v00,x) v10 = (-sin(x));
188 #define m00_sin(v00,x) v00 = sin(x);
189 #define m10_sin(v10,v00,x) v10 = (cos(x));
190 #define m00_tan(v00,x) v00 = tan(x);
191 #define m10_tan(v10,v00,x) v10 = (1.0/cos(x)/cos(x));
192 #define m00_cosh(v00,x) v00 = cosh(x);
193 #define m10_cosh(v10,v00,x) v10 = (sinh(x));
194 #define m00_sinh(v00,x) v00 = sinh(x);
195 #define m10_sinh(v10,v00,x) v10 = (cosh(x));
196 #define m00_tanh(v00,x) v00 = tanh(x);
197 #define m10_tanh(v10,v00,x) v10 = (1.0/cosh(x)/cosh(x));
198 #define m00_acos(v00,x) v00 = acos(x);
199 #define m10_acos(v10,v00,x) v10 = (-1.0/sqrt(1-x*x));
200 #define m00_asin(v00,x) v00 = asin(x);
201 #define m10_asin(v10,v00,x) v10 = (+1.0/sqrt(1-x*x));
202 #define m00_atan(v00,x) v00 = atan(x);
203 #define m10_atan(v10,v00,x) v10 = (+1.0/(1+x*x));
204 #define m00_atanh(v00,x) v00 = atanh(x);
205 #define m10_atanh(v10,v00,x) v10 = (+1.0/(1-x*x));
206 #define m00_logE(v00,x) v00 = log(x);
207 #define m10_logE(v10,v00,x) v10 = (1.0/x);
208 #define m00_log10(v00,x) v00 = log10(x);
209 #define m10_log10(v10,v00,x) v10 = (1.0/x/M_LN10);
210 #define m00_sqrt(v00,x) v00 = sqrt(x);
211 #define m10_sqrt(v10,v00,x) v10 = (0.5/v00);
212 #define m00_fabs(v00,x) v00 = fabs(x);
213 #define m10_fabs(v10,v00,x) v10 = (((x)>=0)?(+1.0):(-1.0));
214 
215 #define m00_exp(v00,x) v00 = exp(x);
216 #define m10_exp(v10,v00,x) v10 = v00;
217 
218 #define m00_abs(v00) ((v00)<(0)?(-(v00)):(v00))
219 #define m00_floor(v00,x) v00 = floor(x);
220 #define m00_limexp(v00,x) v00 = ((x)<80.0?exp(x):exp(80.0)*(x-79.0));
221 #define m10_limexp(v10,v00,x) v10 = ((x)<80.0?(v00):exp(80.0));
222 
223 #define m20_logE(v00) (-1.0/v00/v00)
224 #define m20_exp(v00) exp(v00)
225 #define m20_limexp(v00) ((v00)<80.0?exp(v00):0.0)
226 #define m20_sqrt(v00) (-0.25/(v00)/sqrt(v00))
227 #define m20_fabs(v00) 0.0
228 #define m20_pow(x,y) ((y)*((y)-1.0)*pow(x,y)/(x)/(x))
229 #define m00_vt(x) (kBoverQ*(x))
230 #define m10_vt(x) (kBoverQ)
231 
232 // simulator specific definitions
233 #define _modelname "EKV26MOS"
234 #define _instancename getName()
235 #define _circuit_temp (getPropertyDouble("Temp")+273.15)
236 #define _param_given(p) (isPropertyGiven(p)?1:0)
237 
238 
239 // $vt and $vt() functions
240 #define _vt_nom (kBoverQ*_circuit_temp)
241 
242 using namespace device;
243 
244 /* Device constructor. */
246 {
247  type = CIR_EKV26MOS;
248 }
249 
250 /* Initialization of model. */
251 void EKV26MOS::initModel (void)
252 {
253  // create internal nodes
254  setInternalNode (Drain_int, "Drain_int");
255  setInternalNode (Source_int, "Source_int");
256 
257  // get device model parameters
258  loadVariables ();
259  // evaluate global model equations
260  initializeModel ();
261  // evaluate initial step equations
262  initialStep ();
263  // evaluate global instance equations
264  initializeInstance ();
265 }
266 
267 /* Initialization of DC analysis. */
268 void EKV26MOS::initDC (void)
269 {
270  allocMatrixMNA ();
271  initModel ();
272  pol = 1;
273  restartDC ();
274  doAC = 1;
275  doTR = 0;
276  doHB = 0;
277 }
278 
279 /* Run when DC is restarted (fallback algorithms). */
281 {
282 }
283 
284 /* Initialize Verilog-AMS code. */
285 void EKV26MOS::initVerilog (void)
286 {
287  // initialization of noise variables
288  _white_pwr[Drain_int][Drain] = 0.0;
289  _white_pwr[Source_int][Source] = 0.0;
290  _white_pwr[Source_int][Drain_int] = 0.0;
291  _white_pwr[Drain_int][Source_int] = 0.0;
292  _white_pwr[Source][Source_int] = 0.0;
293  _white_pwr[Drain][Drain_int] = 0.0;
294  _flicker_pwr[Source_int][Drain_int] = 0.0;
295  _flicker_exp[Source_int][Drain_int] = 0.0;
296  _flicker_pwr[Drain_int][Source_int] = 0.0;
297  _flicker_exp[Drain_int][Source_int] = 0.0;
298 
299  int i1, i2, i3, i4;
300 
301  // zero charges
302  for (i1 = 0; i1 < 6; i1++) {
303  for (i2 = 0; i2 < 6; i2++) {
304  _charges[i1][i2] = 0.0;
305  } }
306 
307  // zero capacitances
308  for (i1 = 0; i1 < 6; i1++) {
309  for (i2 = 0; i2 < 6; i2++) {
310  for (i3 = 0; i3 < 6; i3++) {
311  for (i4 = 0; i4 < 6; i4++) {
312  _caps[i1][i2][i3][i4] = 0.0;
313  } } } }
314 
315  // zero right hand side, static and dynamic jacobian
316  for (i1 = 0; i1 < 6; i1++) {
317  _rhs[i1] = 0.0;
318  _qhs[i1] = 0.0;
319  _chs[i1] = 0.0;
320  _ghs[i1] = 0.0;
321  for (i2 = 0; i2 < 6; i2++) {
322  _jstat[i1][i2] = 0.0;
323  _jdyna[i1][i2] = 0.0;
324  }
325  }
326 }
327 
328 /* Load device model input parameters. */
329 void EKV26MOS::loadVariables (void)
330 {
331  LEVEL = getPropertyDouble ("LEVEL");
332  L = getPropertyDouble ("L");
333  W = getPropertyDouble ("W");
334  Np = getPropertyDouble ("Np");
335  Ns = getPropertyDouble ("Ns");
336  Cox = getPropertyDouble ("Cox");
337  Xj = getPropertyDouble ("Xj");
338  Dw = getPropertyDouble ("Dw");
339  Dl = getPropertyDouble ("Dl");
340  Vto = getPropertyDouble ("Vto");
341  Gamma = getPropertyDouble ("Gamma");
342  Phi = getPropertyDouble ("Phi");
343  Kp = getPropertyDouble ("Kp");
344  Theta = getPropertyDouble ("Theta");
345  EO = getPropertyDouble ("EO");
346  Ucrit = getPropertyDouble ("Ucrit");
347  Lambda = getPropertyDouble ("Lambda");
348  Weta = getPropertyDouble ("Weta");
349  Leta = getPropertyDouble ("Leta");
350  Q0 = getPropertyDouble ("Q0");
351  Lk = getPropertyDouble ("Lk");
352  Tcv = getPropertyDouble ("Tcv");
353  Bex = getPropertyDouble ("Bex");
354  Ucex = getPropertyDouble ("Ucex");
355  Ibbt = getPropertyDouble ("Ibbt");
356  Hdif = getPropertyDouble ("Hdif");
357  Rsh = getPropertyDouble ("Rsh");
358  Rsc = getPropertyDouble ("Rsc");
359  Rdc = getPropertyDouble ("Rdc");
360  Cgso = getPropertyDouble ("Cgso");
361  Cgdo = getPropertyDouble ("Cgdo");
362  Cgbo = getPropertyDouble ("Cgbo");
363  Iba = getPropertyDouble ("Iba");
364  Ibb = getPropertyDouble ("Ibb");
365  Ibn = getPropertyDouble ("Ibn");
366  Kf = getPropertyDouble ("Kf");
367  Af = getPropertyDouble ("Af");
368  Avto = getPropertyDouble ("Avto");
369  Akp = getPropertyDouble ("Akp");
370  Agamma = getPropertyDouble ("Agamma");
371  N = getPropertyDouble ("N");
372  Is = getPropertyDouble ("Is");
373  Bv = getPropertyDouble ("Bv");
374  Ibv = getPropertyDouble ("Ibv");
375  Vj = getPropertyDouble ("Vj");
376  Cj0 = getPropertyDouble ("Cj0");
377  M = getPropertyDouble ("M");
378  Area = getPropertyDouble ("Area");
379  Fc = getPropertyDouble ("Fc");
380  Tt = getPropertyDouble ("Tt");
381  Xti = getPropertyDouble ("Xti");
382  Xpart = getPropertyDouble ("Xpart");
383  Tnom = getPropertyDouble ("Tnom");
384  nmos = getPropertyInteger ("nmos");
385  pmos = getPropertyInteger ("pmos");
386 }
387 
388 /* #define's for translated code */
389 #undef _DDT
390 #define _DDT(q) q
391 #define _DYNAMIC
392 #define _DERIVATE
393 #define _DDX
394 #define _DERIVATEFORDDX
395 
396 /* Evaluate Verilog-AMS equations in model initialization. */
397 void EKV26MOS::initializeModel (void)
398 {
399 double Qb0;
400 double deltaV_RSCE;
401 double nnn;
402 double xi;
403 double C_epsilon;
404 double Kpa;
405 double Vtoa;
406 #if defined(_DYNAMIC)
407 #endif
408 #if defined(_DYNAMIC)
409 #endif
410 #if defined(_DYNAMIC)
411 #endif
412 #if defined(_DYNAMIC)
413 #endif
414 #if defined(_DYNAMIC)
415 #endif
416 #if defined(_DYNAMIC)
417 #endif
418 #if defined(_DYNAMIC)
419 #endif
420 #if defined(_DYNAMIC)
421 #endif
422 #if defined(_DYNAMIC)
423 #endif
424 #if defined(_DYNAMIC)
425 #endif
426 #if defined(_DYNAMIC)
427 #endif
428 #if defined(_DYNAMIC)
429 #endif
430 double con2;
431 double Is_T2;
432 #if defined(_DYNAMIC)
433 #endif
434 #if defined(_DYNAMIC)
435 double F2;
436 #endif
437 #if defined(_DYNAMIC)
438 double F1;
439 #endif
440 #if defined(_DYNAMIC)
441 double Cj0_T2;
442 #endif
443 #if defined(_DYNAMIC)
444 #endif
445 #if defined(_DYNAMIC)
446 double Eg_T2;
447 #endif
448 double Eg_T1;
449 double Vt_T2;
450 double con1;
451 double Leff;
452 double Eg;
453 double Egnom;
454 double Vto_T;
455 double Tratio;
456 double T2;
457 double Tnomk;
458 double epsilonox;
459 double epsilonsi;
460 double B;
461 double A;
462 {
463 if
464 (_param_given("nmos"))
465 {
466 p_n_MOS=(+1);
467 }
468 else
469 {
470 if
471 (_param_given("pmos"))
472 {
473 p_n_MOS=(-1);
474 }
475 else
476 {
477 p_n_MOS=(+1);
478 }
479 }
480 A=7.02e-4;
481 B=1108.0;
482 epsilonsi=1.0359e-10;
483 #if defined(_DYNAMIC)
484 epsilonox=3.453143e-11;
485 #endif
486 Tnomk=(Tnom+273.15);
487 T2=_circuit_temp;
488 Tratio=(T2/Tnomk);
489 Vto_T=(p_n_MOS*(Vto-(Tcv*(T2-Tnomk))));
490 Egnom=(1.16-(((0.000702*Tnomk)*Tnomk)/(Tnomk+1108)));
491 Eg=(1.16-(((0.000702*T2)*T2)/(T2+1108)));
492 {
493 double m00_logE(d00_logE0,Tratio)
494 Phi_T=((((Phi*Tratio)-((3.0*_vt_nom)*d00_logE0))-(Egnom*Tratio))+Eg);
495 }
496 Ibb_T=(Ibb*(1.0+(Ibbt*(T2-Tnomk))));
497 Weff=(W+Dw);
498 Leff=(L+Dl);
499 RDeff=(((((Hdif*Rsh)/Weff)/Np)+Rdc)+1e-9);
500 RSeff=(((((Hdif*Rsh)/Weff)/Np)+Rsc)+1e-9);
501 {
502 double m00_sqrt(d00_sqrt0,(((Np*Weff)*Ns)*Leff))
503 con1=d00_sqrt0;
504 }
505 Vt_T2=((1.3806503e-23*T2)/1.602176462e-19);
506 Eg_T1=(Eg-(((A*Tnomk)*Tnomk)/(B+Tnomk)));
507 #if defined(_DYNAMIC)
508 Eg_T2=(Eg-(((A*T2)*T2)/(B+T2)));
509 #endif
510 #if defined(_DYNAMIC)
511 {
512 double m00_pow(d00_pow0,(T2/Tnomk),1.5)
513 double m00_logE(d00_logE1,d00_pow0)
514 Vj_T2=((((T2/Tnomk)*Vj)-((2*Vt_T2)*d00_logE1))-(((T2/Tnomk)*Eg_T1)-Eg_T2));
515 }
516 #endif
517 #if defined(_DYNAMIC)
518 Cj0_T2=(Cj0*(1+(M*((400e-6*(T2-Tnomk))-((Vj_T2-Vj)/Vj)))));
519 #endif
520 #if defined(_DYNAMIC)
521 {
522 double m00_pow(d00_pow0,(1-Fc),(1-M))
523 F1=((Vj/(1-M))*(1-d00_pow0));
524 }
525 #endif
526 #if defined(_DYNAMIC)
527 {
528 double m00_pow(d00_pow0,(1-Fc),(1+M))
529 F2=d00_pow0;
530 }
531 #endif
532 #if defined(_DYNAMIC)
533 F3=(1-(Fc*(1+M)));
534 #endif
535 {
536 double m00_pow(d00_pow0,(T2/Tnomk),(Xti/N))
537 double m00_limexp(d00_limexp1,(((-Eg_T1)/Vt_T2)*(1-(T2/Tnomk))))
538 Is_T2=((Is*d00_pow0)*d00_limexp1);
539 }
540 GMIN=1e-12;
541 con2=((((Cox*Ns)*Np)*Weff)*Leff);
542 fourkt=((4.0*1.3806503e-23)*T2);
543 #if defined(_DYNAMIC)
544 Area1=(Area*((Cj0_T2*Vj_T2)/(1-M)));
545 #endif
546 Area2=(Area*Is_T2);
547 #if defined(_DYNAMIC)
548 Area3=(Area*Cj0_T2);
549 #endif
550 #if defined(_DYNAMIC)
551 DP1=(((Fc*Fc)*Vj_T2)*Vj_T2);
552 #endif
553 #if defined(_DYNAMIC)
554 DP2=(M/(2.0*Vj_T2));
555 #endif
556 #if defined(_DYNAMIC)
557 DP3=(Fc*Vj_T2);
558 #endif
559 #if defined(_DYNAMIC)
560 DP4=(F1+(1/F2));
561 #endif
562 con4=((-Vto_T)+Phi_T);
563 con7=(Gamma/2.0);
564 con8=(con7*con7);
565 con9=((16.0*_vt_nom)*_vt_nom);
566 con10=(epsilonsi/Cox);
567 con12=(0.1*_vt_nom);
568 con14=(4.0*_vt_nom);
569 con22=(Kp*(Weff/Leff));
570 con23=(Kf/con2);
571 #if defined(_DYNAMIC)
572 con24=(con2*_vt_nom);
573 #endif
574 #if defined(_DYNAMIC)
575 Spart=(1.0-Xpart);
576 #endif
577 con25=(fourkt/RDeff);
578 con26=(fourkt/RSeff);
579 #if defined(_DYNAMIC)
580 con27=((Cgso*Weff)*Np);
581 #endif
582 #if defined(_DYNAMIC)
583 con28=((Cgdo*Weff)*Np);
584 #endif
585 #if defined(_DYNAMIC)
586 con29=((Cgbo*Leff)*Np);
587 #endif
588 con30=(4.0/3.0);
589 con31=(1.0/(N*Vt_T2));
590 con32=((5.0*N)*_vt_nom);
591 #if defined(_DYNAMIC)
592 con33=(Fc*Vj);
593 #endif
594 if
595 ((LEVEL==2))
596 {
597 {
598 double m00_pow(d00_pow0,Tratio,Ucex)
599 Ucrit_T=(Ucrit*d00_pow0);
600 }
601 #if defined(_DYNAMIC)
602 Vtoa=((p_n_MOS*Vto)+(Avto/con1));
603 #endif
604 Kpa=(Kp*(1.0+(Akp/con1)));
605 {
606 double m00_pow(d00_pow0,Tratio,Bex)
607 Kpa_T=(Kpa*d00_pow0);
608 }
609 Gammaa=(Gamma+(Agamma/con1));
610 {
611 double m00_pow(d00_pow0,22e-3,2)
612 C_epsilon=(4.0*d00_pow0);
613 }
614 xi=(0.028*((10.0*(Leff/Lk))-1.0));
615 {
616 double m00_pow(d00_pow0,xi,2)
617 double m00_sqrt(d00_sqrt1,(d00_pow0+C_epsilon))
618 nnn=(1.0+(0.5*(xi+d00_sqrt1)));
619 }
620 {
621 double m00_pow(d00_pow0,nnn,2)
622 deltaV_RSCE=(((2.0*Q0)/Cox)*(1.0/d00_pow0));
623 }
624 con3=(((-Vto_T)-deltaV_RSCE)+Phi_T);
625 con5=(Gammaa/2.0);
626 con6=(con5*con5);
627 con11=(Leta/Leff);
628 con13=((3.0*Weta)/Weff);
629 Vc=((Ucrit_T*Ns)*Leff);
630 {
631 double m00_logE(d00_logE0,(Vc/(2.0*_vt_nom)))
632 con15=(_vt_nom*(d00_logE0-0.6));
633 }
634 con16=(1.0/64.0);
635 {
636 double m00_sqrt(d00_sqrt0,((epsilonsi/Cox)*Xj))
637 Lc=d00_sqrt0;
638 }
639 Lmin=((Ns*Leff)/10.0);
640 eta=((p_n_MOS==(+1))?0.5:(1/3));
641 {
642 double m00_sqrt(d00_sqrt0,Phi_T)
643 Qb0=(Gammaa*d00_sqrt0);
644 }
645 con17=(1.0+((Cox/(EO*epsilonsi))*Qb0));
646 con18=(Lambda*Lc);
647 con19=(1.0/(Lc*Ucrit_T));
648 con20=(Ns*Leff);
649 con21=((Cox/(EO*epsilonsi))*_vt_nom);
650 }
651 }
652 }
653 
654 /* Evaluate Verilog-AMS equations in instance initialization. */
655 void EKV26MOS::initializeInstance (void)
656 {
657 }
658 
659 /* Evaluate Verilog-AMS equations in initial step. */
660 void EKV26MOS::initialStep (void)
661 {
662 }
663 
664 /* Evaluate Verilog-AMS equations in final step. */
665 void EKV26MOS::finalStep (void)
666 {
667 }
668 
669 /* Evaluate Verilog-AMS equations in analog block. */
670 void EKV26MOS::calcVerilog (void)
671 {
672 
673 /* ----------------- evaluate verilog analog equations -------------------- */
674 #if defined(_DYNAMIC)
675 double Qs2;
676 #if defined(_DERIVATE)
677 double Qs2_VBulk_Drain_int;
678 double Qs2_VBulk_Source_int;
679 #endif
680 #endif
681 double Is2;
682 #if defined(_DERIVATE)
683 double Is2_VBulk_Drain_int;
684 double Is2_VBulk_Source_int;
685 #endif
686 #if defined(_DYNAMIC)
687 double Qs1;
688 #if defined(_DERIVATE)
689 double Qs1_VBulk_Drain_int;
690 double Qs1_VBulk_Source_int;
691 #endif
692 #endif
693 double Is1;
694 #if defined(_DERIVATE)
695 double Is1_VBulk_Drain_int;
696 double Is1_VBulk_Source_int;
697 #endif
698 #if defined(_DYNAMIC)
699 double Qd2;
700 #if defined(_DERIVATE)
701 double Qd2_VBulk_Source_int;
702 double Qd2_VBulk_Drain_int;
703 #endif
704 #endif
705 double Id2;
706 #if defined(_DERIVATE)
707 double Id2_VBulk_Source_int;
708 double Id2_VBulk_Drain_int;
709 #endif
710 #if defined(_DYNAMIC)
711 double Qd1;
712 #if defined(_DERIVATE)
713 double Qd1_VBulk_Source_int;
714 double Qd1_VBulk_Drain_int;
715 #endif
716 #endif
717 double Id1;
718 #if defined(_DERIVATE)
719 double Id1_VBulk_Source_int;
720 double Id1_VBulk_Drain_int;
721 #endif
722 double V2;
723 #if defined(_DERIVATE)
724 double V2_VBulk_Drain_int;
725 double V2_VBulk_Source_int;
726 #endif
727 double V1;
728 #if defined(_DERIVATE)
729 double V1_VBulk_Source_int;
730 double V1_VBulk_Drain_int;
731 #endif
732 #if defined(_DYNAMIC)
733 double qgbo;
734 #if defined(_DERIVATE)
735 double qgbo_VGate_Bulk;
736 #endif
737 #endif
738 #if defined(_DYNAMIC)
739 double qgdo;
740 #if defined(_DERIVATE)
741 double qgdo_VGate_Bulk;
742 double qgdo_VSource_int_Bulk;
743 double qgdo_VDrain_int_Bulk;
744 #endif
745 #endif
746 #if defined(_DYNAMIC)
747 double qgso;
748 #if defined(_DERIVATE)
749 double qgso_VGate_Bulk;
750 double qgso_VDrain_int_Bulk;
751 double qgso_VSource_int_Bulk;
752 #endif
753 #endif
754 #if defined(_DYNAMIC)
755 double qg;
756 #if defined(_DERIVATE)
757 double qg_VGate_Bulk;
758 double qg_VDrain_int_Bulk;
759 double qg_VSource_int_Bulk;
760 #endif
761 #endif
762 #if defined(_DYNAMIC)
763 double qb;
764 #if defined(_DERIVATE)
765 double qb_VGate_Bulk;
766 double qb_VDrain_int_Bulk;
767 double qb_VSource_int_Bulk;
768 #endif
769 #endif
770 double Sflicker;
771 #if defined(_DERIVATE)
772 double Sflicker_VSource_int_Bulk;
773 double Sflicker_VDrain_int_Bulk;
774 double Sflicker_VGate_Bulk;
775 #endif
776 double gm;
777 #if defined(_DERIVATE)
778 double gm_VSource_int_Bulk;
779 double gm_VDrain_int_Bulk;
780 double gm_VGate_Bulk;
781 #endif
782 double Sthermal;
783 #if defined(_DERIVATE)
784 double Sthermal_VSource_int_Bulk;
785 double Sthermal_VDrain_int_Bulk;
786 double Sthermal_VGate_Bulk;
787 #endif
788 double Idb;
789 #if defined(_DERIVATE)
790 double Idb_VGate_Bulk;
791 double Idb_VDrain_int_Bulk;
792 double Idb_VSource_int_Bulk;
793 #endif
794 double Vib;
795 #if defined(_DERIVATE)
796 double Vib_VSource_int_Bulk;
797 double Vib_VDrain_int_Bulk;
798 double Vib_VGate_Bulk;
799 #endif
800 double Ids;
801 #if defined(_DERIVATE)
802 double Ids_VGate_Bulk;
803 double Ids_VDrain_int_Bulk;
804 double Ids_VSource_int_Bulk;
805 #endif
806 double Ispecific;
807 #if defined(_DERIVATE)
808 double Ispecific_VGate_Bulk;
809 double Ispecific_VDrain_int_Bulk;
810 double Ispecific_VSource_int_Bulk;
811 #endif
812 double Beta;
813 #if defined(_DERIVATE)
814 double Beta_VSource_int_Bulk;
815 double Beta_VDrain_int_Bulk;
816 double Beta_VGate_Bulk;
817 #endif
818 double qB;
819 #if defined(_DERIVATE)
820 double qB_VGate_Bulk;
821 double qB_VDrain_int_Bulk;
822 double qB_VSource_int_Bulk;
823 #endif
824 double qI;
825 #if defined(_DERIVATE)
826 double qI_VGate_Bulk;
827 double qI_VDrain_int_Bulk;
828 double qI_VSource_int_Bulk;
829 #endif
830 double Xr;
831 #if defined(_DERIVATE)
832 double Xr_VGate_Bulk;
833 double Xr_VDrain_int_Bulk;
834 double Xr_VSource_int_Bulk;
835 #endif
836 double Xf;
837 #if defined(_DERIVATE)
838 double Xf_VGate_Bulk;
839 double Xf_VDrain_int_Bulk;
840 double Xf_VSource_int_Bulk;
841 #endif
842 double nq;
843 #if defined(_DERIVATE)
844 double nq_VGate_Bulk;
845 double nq_VDrain_int_Bulk;
846 double nq_VSource_int_Bulk;
847 #endif
848 double Beta0prime;
849 #if defined(_DERIVATE)
850 double Beta0prime_VSource_int_Bulk;
851 double Beta0prime_VDrain_int_Bulk;
852 double Beta0prime_VGate_Bulk;
853 #endif
854 double Beta0;
855 #if defined(_DERIVATE)
856 double Beta0_VSource_int_Bulk;
857 double Beta0_VDrain_int_Bulk;
858 double Beta0_VGate_Bulk;
859 #endif
860 double irprime;
861 #if defined(_DERIVATE)
862 double irprime_VGate_Bulk;
863 double irprime_VDrain_int_Bulk;
864 double irprime_VSource_int_Bulk;
865 #endif
866 double X3;
867 #if defined(_DERIVATE)
868 double X3_VGate_Bulk;
869 double X3_VDrain_int_Bulk;
870 double X3_VSource_int_Bulk;
871 #endif
872 double Leq;
873 #if defined(_DERIVATE)
874 double Leq_VSource_int_Bulk;
875 double Leq_VDrain_int_Bulk;
876 double Leq_VGate_Bulk;
877 #endif
878 double Lprime;
879 #if defined(_DERIVATE)
880 double Lprime_VSource_int_Bulk;
881 double Lprime_VDrain_int_Bulk;
882 double Lprime_VGate_Bulk;
883 #endif
884 double DeltaL;
885 #if defined(_DERIVATE)
886 double DeltaL_VSource_int_Bulk;
887 double DeltaL_VDrain_int_Bulk;
888 double DeltaL_VGate_Bulk;
889 #endif
890 double Vip;
891 #if defined(_DERIVATE)
892 double Vip_VGate_Bulk;
893 double Vip_VDrain_int_Bulk;
894 double Vip_VSource_int_Bulk;
895 #endif
896 double Vdso2;
897 #if defined(_DERIVATE)
898 double Vdso2_VSource_int_Bulk;
899 double Vdso2_VDrain_int_Bulk;
900 #endif
901 double deltaV;
902 #if defined(_DERIVATE)
903 double deltaV_VGate_Bulk;
904 double deltaV_VDrain_int_Bulk;
905 double deltaV_VSource_int_Bulk;
906 #endif
907 double Vdssprime;
908 #if defined(_DERIVATE)
909 double Vdssprime_VGate_Bulk;
910 double Vdssprime_VDrain_int_Bulk;
911 double Vdssprime_VSource_int_Bulk;
912 #endif
913 double Vdss;
914 #if defined(_DERIVATE)
915 double Vdss_VGate_Bulk;
916 double Vdss_VDrain_int_Bulk;
917 double Vdss_VSource_int_Bulk;
918 #endif
919 double ir;
920 #if defined(_DERIVATE)
921 double ir_VGate_Bulk;
922 double ir_VDrain_int_Bulk;
923 double ir_VSource_int_Bulk;
924 #endif
925 double X2;
926 #if defined(_DERIVATE)
927 double X2_VGate_Bulk;
928 double X2_VDrain_int_Bulk;
929 double X2_VSource_int_Bulk;
930 #endif
931 double iff;
932 #if defined(_DERIVATE)
933 double iff_VGate_Bulk;
934 double iff_VDrain_int_Bulk;
935 double iff_VSource_int_Bulk;
936 #endif
937 double T_1;
938 #if defined(_DERIVATE)
939 double T_1_VGate_Bulk;
940 double T_1_VDrain_int_Bulk;
941 double T_1_VSource_int_Bulk;
942 #endif
943 double X1;
944 #if defined(_DERIVATE)
945 double X1_VGate_Bulk;
946 double X1_VDrain_int_Bulk;
947 double X1_VSource_int_Bulk;
948 #endif
949 double n;
950 #if defined(_DERIVATE)
951 double n_VGate_Bulk;
952 double n_VDrain_int_Bulk;
953 double n_VSource_int_Bulk;
954 #endif
955 double Vp;
956 #if defined(_DERIVATE)
957 double Vp_VGate_Bulk;
958 double Vp_VDrain_int_Bulk;
959 double Vp_VSource_int_Bulk;
960 #endif
961 double Gammaprime;
962 #if defined(_DERIVATE)
963 double Gammaprime_VDrain_int_Bulk;
964 double Gammaprime_VSource_int_Bulk;
965 double Gammaprime_VGate_Bulk;
966 #endif
967 double Gamma0;
968 #if defined(_DERIVATE)
969 double Gamma0_VDrain_int_Bulk;
970 double Gamma0_VSource_int_Bulk;
971 double Gamma0_VGate_Bulk;
972 #endif
973 double VDprime;
974 #if defined(_DERIVATE)
975 double VDprime_VSource_int_Bulk;
976 double VDprime_VDrain_int_Bulk;
977 #endif
978 double VSprime;
979 #if defined(_DERIVATE)
980 double VSprime_VDrain_int_Bulk;
981 double VSprime_VSource_int_Bulk;
982 #endif
983 double VP0;
984 #if defined(_DERIVATE)
985 double VP0_VGate_Bulk;
986 #endif
987 double VGprime;
988 #if defined(_DERIVATE)
989 double VGprime_VGate_Bulk;
990 #endif
991 double VD;
992 #if defined(_DERIVATE)
993 double VD_VSource_int_Bulk;
994 double VD_VDrain_int_Bulk;
995 #endif
996 double VS;
997 #if defined(_DERIVATE)
998 double VS_VDrain_int_Bulk;
999 double VS_VSource_int_Bulk;
1000 #endif
1001 double StoDswap;
1002 double VG;
1003 #if defined(_DERIVATE)
1004 double VG_VGate_Bulk;
1005 #endif
1006 double Vd;
1007 #if defined(_DERIVATE)
1008 double Vd_VDrain_int_Bulk;
1009 #endif
1010 double Vs;
1011 #if defined(_DERIVATE)
1012 double Vs_VSource_int_Bulk;
1013 #endif
1014 double Vg;
1015 #if defined(_DERIVATE)
1016 double Vg_VGate_Bulk;
1017 #endif
1018 #if defined(_DERIVATE)
1019 Vg_VGate_Bulk=(p_n_MOS);
1020 #endif
1021 Vg=(p_n_MOS*BP(Gate,Bulk));
1022 #if defined(_DERIVATE)
1023 Vs_VSource_int_Bulk=(p_n_MOS);
1024 #endif
1025 Vs=(p_n_MOS*BP(Source_int,Bulk));
1026 #if defined(_DERIVATE)
1027 Vd_VDrain_int_Bulk=(p_n_MOS);
1028 #endif
1029 Vd=(p_n_MOS*BP(Drain_int,Bulk));
1030 #if defined(_DERIVATE)
1031 VG_VGate_Bulk=Vg_VGate_Bulk;
1032 #endif
1033 VG=Vg;
1034 if
1035 (((Vd-Vs)>=0.0))
1036 {
1037 StoDswap=1.0;
1038 #if defined(_DERIVATE)
1039 VS_VDrain_int_Bulk=0.0;
1040 VS_VSource_int_Bulk=Vs_VSource_int_Bulk;
1041 #endif
1042 VS=Vs;
1043 #if defined(_DERIVATE)
1044 VD_VSource_int_Bulk=0.0;
1045 VD_VDrain_int_Bulk=Vd_VDrain_int_Bulk;
1046 #endif
1047 VD=Vd;
1048 }
1049 else
1050 {
1051 StoDswap=(-1.0);
1052 #if defined(_DERIVATE)
1053 VD_VSource_int_Bulk=Vs_VSource_int_Bulk;
1054 VD_VDrain_int_Bulk=0.0;
1055 #endif
1056 VD=Vs;
1057 #if defined(_DERIVATE)
1058 VS_VDrain_int_Bulk=Vd_VDrain_int_Bulk;
1059 VS_VSource_int_Bulk=0.0;
1060 #endif
1061 VS=Vd;
1062 }
1063 if
1064 ((LEVEL==2))
1065 {
1066 {
1067 double m00_sqrt(d00_sqrt0,Phi_T)
1068 #if defined(_DERIVATE)
1069 VGprime_VGate_Bulk=VG_VGate_Bulk;
1070 #endif
1071 VGprime=((VG+con3)+(Gammaa*d00_sqrt0));
1072 }
1073 }
1074 else
1075 {
1076 {
1077 double m00_sqrt(d00_sqrt0,Phi_T)
1078 #if defined(_DERIVATE)
1079 VGprime_VGate_Bulk=VG_VGate_Bulk;
1080 #endif
1081 VGprime=((VG+con4)+(Gamma*d00_sqrt0));
1082 }
1083 }
1084 if
1085 ((LEVEL==2))
1086 {
1087 if
1088 ((VGprime>0))
1089 {
1090 {
1091 double m00_sqrt(d00_sqrt0,(VGprime+con6))
1092 #if defined(_DERIVATE)
1093 double m10_sqrt(d10_sqrt0,d00_sqrt0,(VGprime+con6))
1094 #endif
1095 #if defined(_DERIVATE)
1096 VP0_VGate_Bulk=(VGprime_VGate_Bulk-(Gammaa*VGprime_VGate_Bulk*d10_sqrt0));
1097 #endif
1098 VP0=((VGprime-Phi_T)-(Gammaa*(d00_sqrt0-con5)));
1099 }
1100 }
1101 else
1102 {
1103 #if defined(_DERIVATE)
1104 VP0_VGate_Bulk=0.0;
1105 #endif
1106 VP0=(-Phi_T);
1107 }
1108 {
1109 double m00_sqrt(d00_sqrt0,(((VS+Phi_T)*(VS+Phi_T))+con9))
1110 #if defined(_DERIVATE)
1111 double m10_sqrt(d10_sqrt0,d00_sqrt0,(((VS+Phi_T)*(VS+Phi_T))+con9))
1112 #endif
1113 #if defined(_DERIVATE)
1114 VSprime_VDrain_int_Bulk=(0.5*(VS_VDrain_int_Bulk+((VS_VDrain_int_Bulk*(VS+Phi_T))+((VS+Phi_T)*VS_VDrain_int_Bulk))*d10_sqrt0));
1115 VSprime_VSource_int_Bulk=(0.5*(VS_VSource_int_Bulk+((VS_VSource_int_Bulk*(VS+Phi_T))+((VS+Phi_T)*VS_VSource_int_Bulk))*d10_sqrt0));
1116 #endif
1117 VSprime=(0.5*((VS+Phi_T)+d00_sqrt0));
1118 }
1119 {
1120 double m00_sqrt(d00_sqrt0,(((VD+Phi_T)*(VD+Phi_T))+con9))
1121 #if defined(_DERIVATE)
1122 double m10_sqrt(d10_sqrt0,d00_sqrt0,(((VD+Phi_T)*(VD+Phi_T))+con9))
1123 #endif
1124 #if defined(_DERIVATE)
1125 VDprime_VSource_int_Bulk=(0.5*(VD_VSource_int_Bulk+((VD_VSource_int_Bulk*(VD+Phi_T))+((VD+Phi_T)*VD_VSource_int_Bulk))*d10_sqrt0));
1126 VDprime_VDrain_int_Bulk=(0.5*(VD_VDrain_int_Bulk+((VD_VDrain_int_Bulk*(VD+Phi_T))+((VD+Phi_T)*VD_VDrain_int_Bulk))*d10_sqrt0));
1127 #endif
1128 VDprime=(0.5*((VD+Phi_T)+d00_sqrt0));
1129 }
1130 {
1131 double m00_sqrt(d00_sqrt0,VSprime)
1132 double m00_sqrt(d00_sqrt1,VDprime)
1133 double m00_sqrt(d00_sqrt2,(VP0+Phi_T))
1134 #if defined(_DERIVATE)
1135 double m10_sqrt(d10_sqrt0,d00_sqrt0,VSprime)
1136 double m10_sqrt(d10_sqrt1,d00_sqrt1,VDprime)
1137 double m10_sqrt(d10_sqrt2,d00_sqrt2,(VP0+Phi_T))
1138 #endif
1139 #if defined(_DERIVATE)
1140 Gamma0_VDrain_int_Bulk=(-(con10*(con11*(VSprime_VDrain_int_Bulk*d10_sqrt0+VDprime_VDrain_int_Bulk*d10_sqrt1))));
1141 Gamma0_VSource_int_Bulk=(-(con10*(con11*(VSprime_VSource_int_Bulk*d10_sqrt0+VDprime_VSource_int_Bulk*d10_sqrt1))));
1142 Gamma0_VGate_Bulk=(-(con10*(-(con13*VP0_VGate_Bulk*d10_sqrt2))));
1143 #endif
1144 Gamma0=(Gammaa-(con10*((con11*(d00_sqrt0+d00_sqrt1))-(con13*d00_sqrt2))));
1145 }
1146 {
1147 double m00_sqrt(d00_sqrt0,((Gamma0*Gamma0)+con12))
1148 #if defined(_DERIVATE)
1149 double m10_sqrt(d10_sqrt0,d00_sqrt0,((Gamma0*Gamma0)+con12))
1150 #endif
1151 #if defined(_DERIVATE)
1152 Gammaprime_VDrain_int_Bulk=(0.5*(Gamma0_VDrain_int_Bulk+((Gamma0_VDrain_int_Bulk*Gamma0)+(Gamma0*Gamma0_VDrain_int_Bulk))*d10_sqrt0));
1153 Gammaprime_VSource_int_Bulk=(0.5*(Gamma0_VSource_int_Bulk+((Gamma0_VSource_int_Bulk*Gamma0)+(Gamma0*Gamma0_VSource_int_Bulk))*d10_sqrt0));
1154 Gammaprime_VGate_Bulk=(0.5*(Gamma0_VGate_Bulk+((Gamma0_VGate_Bulk*Gamma0)+(Gamma0*Gamma0_VGate_Bulk))*d10_sqrt0));
1155 #endif
1156 Gammaprime=(0.5*(Gamma0+d00_sqrt0));
1157 }
1158 if
1159 ((VGprime>0.0))
1160 {
1161 {
1162 double m00_sqrt(d00_sqrt0,(VGprime+((0.25*Gammaprime)*Gammaprime)))
1163 #if defined(_DERIVATE)
1164 double m10_sqrt(d10_sqrt0,d00_sqrt0,(VGprime+((0.25*Gammaprime)*Gammaprime)))
1165 #endif
1166 #if defined(_DERIVATE)
1167 Vp_VGate_Bulk=(VGprime_VGate_Bulk-((Gammaprime_VGate_Bulk*(d00_sqrt0-(0.5*Gammaprime)))+(Gammaprime*((VGprime_VGate_Bulk+(((0.25*Gammaprime_VGate_Bulk)*Gammaprime)+((0.25*Gammaprime)*Gammaprime_VGate_Bulk)))*d10_sqrt0-(0.5*Gammaprime_VGate_Bulk)))));
1168 Vp_VDrain_int_Bulk=(-((Gammaprime_VDrain_int_Bulk*(d00_sqrt0-(0.5*Gammaprime)))+(Gammaprime*((((0.25*Gammaprime_VDrain_int_Bulk)*Gammaprime)+((0.25*Gammaprime)*Gammaprime_VDrain_int_Bulk))*d10_sqrt0-(0.5*Gammaprime_VDrain_int_Bulk)))));
1169 Vp_VSource_int_Bulk=(-((Gammaprime_VSource_int_Bulk*(d00_sqrt0-(0.5*Gammaprime)))+(Gammaprime*((((0.25*Gammaprime_VSource_int_Bulk)*Gammaprime)+((0.25*Gammaprime)*Gammaprime_VSource_int_Bulk))*d10_sqrt0-(0.5*Gammaprime_VSource_int_Bulk)))));
1170 #endif
1171 Vp=((VGprime-Phi_T)-(Gammaprime*(d00_sqrt0-(0.5*Gammaprime))));
1172 }
1173 }
1174 else
1175 {
1176 #if defined(_DERIVATE)
1177 Vp_VGate_Bulk=0.0;
1178 Vp_VDrain_int_Bulk=0.0;
1179 Vp_VSource_int_Bulk=0.0;
1180 #endif
1181 Vp=(-Phi_T);
1182 }
1183 {
1184 double m00_sqrt(d00_sqrt0,((Vp+Phi_T)+con14))
1185 #if defined(_DERIVATE)
1186 double m10_sqrt(d10_sqrt0,d00_sqrt0,((Vp+Phi_T)+con14))
1187 #endif
1188 #if defined(_DERIVATE)
1189 n_VGate_Bulk=(-Gammaa*(2.0*Vp_VGate_Bulk*d10_sqrt0)/(2.0*d00_sqrt0)/(2.0*d00_sqrt0));
1190 n_VDrain_int_Bulk=(-Gammaa*(2.0*Vp_VDrain_int_Bulk*d10_sqrt0)/(2.0*d00_sqrt0)/(2.0*d00_sqrt0));
1191 n_VSource_int_Bulk=(-Gammaa*(2.0*Vp_VSource_int_Bulk*d10_sqrt0)/(2.0*d00_sqrt0)/(2.0*d00_sqrt0));
1192 #endif
1193 n=(1.0+(Gammaa/(2.0*d00_sqrt0)));
1194 }
1195 }
1196 else
1197 {
1198 if
1199 ((VGprime>0))
1200 {
1201 {
1202 double m00_sqrt(d00_sqrt0,(VGprime+con8))
1203 #if defined(_DERIVATE)
1204 double m10_sqrt(d10_sqrt0,d00_sqrt0,(VGprime+con8))
1205 #endif
1206 #if defined(_DERIVATE)
1207 Vp_VGate_Bulk=(VGprime_VGate_Bulk-(Gamma*VGprime_VGate_Bulk*d10_sqrt0));
1208 Vp_VDrain_int_Bulk=0.0;
1209 Vp_VSource_int_Bulk=0.0;
1210 #endif
1211 Vp=((VGprime-Phi_T)-(Gamma*(d00_sqrt0-con7)));
1212 }
1213 }
1214 else
1215 {
1216 #if defined(_DERIVATE)
1217 Vp_VGate_Bulk=0.0;
1218 Vp_VDrain_int_Bulk=0.0;
1219 Vp_VSource_int_Bulk=0.0;
1220 #endif
1221 Vp=(-Phi_T);
1222 }
1223 {
1224 double m00_sqrt(d00_sqrt0,((Vp+Phi_T)+con14))
1225 #if defined(_DERIVATE)
1226 double m10_sqrt(d10_sqrt0,d00_sqrt0,((Vp+Phi_T)+con14))
1227 #endif
1228 #if defined(_DERIVATE)
1229 n_VGate_Bulk=(-Gamma*(2.0*Vp_VGate_Bulk*d10_sqrt0)/(2.0*d00_sqrt0)/(2.0*d00_sqrt0));
1230 n_VDrain_int_Bulk=(-Gamma*(2.0*Vp_VDrain_int_Bulk*d10_sqrt0)/(2.0*d00_sqrt0)/(2.0*d00_sqrt0));
1231 n_VSource_int_Bulk=(-Gamma*(2.0*Vp_VSource_int_Bulk*d10_sqrt0)/(2.0*d00_sqrt0)/(2.0*d00_sqrt0));
1232 #endif
1233 n=(1.0+(Gamma/(2.0*d00_sqrt0)));
1234 }
1235 }
1236 #if defined(_DERIVATE)
1237 X1_VGate_Bulk=(Vp_VGate_Bulk/_vt_nom);
1238 X1_VDrain_int_Bulk=((Vp_VDrain_int_Bulk-VS_VDrain_int_Bulk)/_vt_nom);
1239 X1_VSource_int_Bulk=((Vp_VSource_int_Bulk-VS_VSource_int_Bulk)/_vt_nom);
1240 #endif
1241 X1=((Vp-VS)/_vt_nom);
1242 {
1243 double m00_limexp(d00_limexp0,(X1/2.0))
1244 double m00_logE(d00_logE1,(1.0+d00_limexp0))
1245 #if defined(_DERIVATE)
1246 double m10_limexp(d10_limexp0,d00_limexp0,(X1/2.0))
1247 double m10_logE(d10_logE1,d00_logE1,(1.0+d00_limexp0))
1248 #endif
1249 #if defined(_DERIVATE)
1250 T_1_VGate_Bulk=(X1_VGate_Bulk/2.0)*d10_limexp0*d10_logE1;
1251 T_1_VDrain_int_Bulk=(X1_VDrain_int_Bulk/2.0)*d10_limexp0*d10_logE1;
1252 T_1_VSource_int_Bulk=(X1_VSource_int_Bulk/2.0)*d10_limexp0*d10_logE1;
1253 #endif
1254 T_1=d00_logE1;
1255 }
1256 #if defined(_DERIVATE)
1257 iff_VGate_Bulk=((T_1_VGate_Bulk*T_1)+(T_1*T_1_VGate_Bulk));
1258 iff_VDrain_int_Bulk=((T_1_VDrain_int_Bulk*T_1)+(T_1*T_1_VDrain_int_Bulk));
1259 iff_VSource_int_Bulk=((T_1_VSource_int_Bulk*T_1)+(T_1*T_1_VSource_int_Bulk));
1260 #endif
1261 iff=(T_1*T_1);
1262 #if defined(_DERIVATE)
1263 X2_VGate_Bulk=(Vp_VGate_Bulk/_vt_nom);
1264 X2_VDrain_int_Bulk=((Vp_VDrain_int_Bulk-VD_VDrain_int_Bulk)/_vt_nom);
1265 X2_VSource_int_Bulk=((Vp_VSource_int_Bulk-VD_VSource_int_Bulk)/_vt_nom);
1266 #endif
1267 X2=((Vp-VD)/_vt_nom);
1268 {
1269 double m00_limexp(d00_limexp0,(X2/2.0))
1270 double m00_logE(d00_logE1,(1.0+d00_limexp0))
1271 #if defined(_DERIVATE)
1272 double m10_limexp(d10_limexp0,d00_limexp0,(X2/2.0))
1273 double m10_logE(d10_logE1,d00_logE1,(1.0+d00_limexp0))
1274 #endif
1275 #if defined(_DERIVATE)
1276 T_1_VGate_Bulk=(X2_VGate_Bulk/2.0)*d10_limexp0*d10_logE1;
1277 T_1_VDrain_int_Bulk=(X2_VDrain_int_Bulk/2.0)*d10_limexp0*d10_logE1;
1278 T_1_VSource_int_Bulk=(X2_VSource_int_Bulk/2.0)*d10_limexp0*d10_logE1;
1279 #endif
1280 T_1=d00_logE1;
1281 }
1282 #if defined(_DERIVATE)
1283 ir_VGate_Bulk=((T_1_VGate_Bulk*T_1)+(T_1*T_1_VGate_Bulk));
1284 ir_VDrain_int_Bulk=((T_1_VDrain_int_Bulk*T_1)+(T_1*T_1_VDrain_int_Bulk));
1285 ir_VSource_int_Bulk=((T_1_VSource_int_Bulk*T_1)+(T_1*T_1_VSource_int_Bulk));
1286 #endif
1287 ir=(T_1*T_1);
1288 if
1289 ((LEVEL==2))
1290 {
1291 {
1292 double m00_sqrt(d00_sqrt0,iff)
1293 double m00_sqrt(d00_sqrt1,(0.25+((_vt_nom/Vc)*d00_sqrt0)))
1294 #if defined(_DERIVATE)
1295 double m10_sqrt(d10_sqrt0,d00_sqrt0,iff)
1296 double m10_sqrt(d10_sqrt1,d00_sqrt1,(0.25+((_vt_nom/Vc)*d00_sqrt0)))
1297 #endif
1298 #if defined(_DERIVATE)
1299 Vdss_VGate_Bulk=(Vc*((_vt_nom/Vc)*iff_VGate_Bulk*d10_sqrt0)*d10_sqrt1);
1300 Vdss_VDrain_int_Bulk=(Vc*((_vt_nom/Vc)*iff_VDrain_int_Bulk*d10_sqrt0)*d10_sqrt1);
1301 Vdss_VSource_int_Bulk=(Vc*((_vt_nom/Vc)*iff_VSource_int_Bulk*d10_sqrt0)*d10_sqrt1);
1302 #endif
1303 Vdss=(Vc*(d00_sqrt1-0.5));
1304 }
1305 {
1306 double m00_sqrt(d00_sqrt0,iff)
1307 double m00_logE(d00_logE1,iff)
1308 double m00_sqrt(d00_sqrt2,(0.25+((_vt_nom/Vc)*(d00_sqrt0-(0.75*d00_logE1)))))
1309 #if defined(_DERIVATE)
1310 double m10_sqrt(d10_sqrt0,d00_sqrt0,iff)
1311 double m10_logE(d10_logE1,d00_logE1,iff)
1312 double m10_sqrt(d10_sqrt2,d00_sqrt2,(0.25+((_vt_nom/Vc)*(d00_sqrt0-(0.75*d00_logE1)))))
1313 #endif
1314 #if defined(_DERIVATE)
1315 Vdssprime_VGate_Bulk=(Vc*((_vt_nom/Vc)*(iff_VGate_Bulk*d10_sqrt0-(0.75*iff_VGate_Bulk*d10_logE1)))*d10_sqrt2);
1316 Vdssprime_VDrain_int_Bulk=(Vc*((_vt_nom/Vc)*(iff_VDrain_int_Bulk*d10_sqrt0-(0.75*iff_VDrain_int_Bulk*d10_logE1)))*d10_sqrt2);
1317 Vdssprime_VSource_int_Bulk=(Vc*((_vt_nom/Vc)*(iff_VSource_int_Bulk*d10_sqrt0-(0.75*iff_VSource_int_Bulk*d10_logE1)))*d10_sqrt2);
1318 #endif
1319 Vdssprime=((Vc*(d00_sqrt2-0.5))+con15);
1320 }
1321 {
1322 double m00_sqrt(d00_sqrt0,iff)
1323 if
1324 ((Lambda*(d00_sqrt0>(Vdss/_vt_nom))))
1325 {
1326 {
1327 double m00_sqrt(d00_sqrt0,iff)
1328 double m00_sqrt(d00_sqrt1,((Lambda*(d00_sqrt0-(Vdss/_vt_nom)))+con16))
1329 #if defined(_DERIVATE)
1330 double m10_sqrt(d10_sqrt0,d00_sqrt0,iff)
1331 double m10_sqrt(d10_sqrt1,d00_sqrt1,((Lambda*(d00_sqrt0-(Vdss/_vt_nom)))+con16))
1332 #endif
1333 #if defined(_DERIVATE)
1334 deltaV_VGate_Bulk=(con14*(Lambda*(iff_VGate_Bulk*d10_sqrt0-(Vdss_VGate_Bulk/_vt_nom)))*d10_sqrt1);
1335 deltaV_VDrain_int_Bulk=(con14*(Lambda*(iff_VDrain_int_Bulk*d10_sqrt0-(Vdss_VDrain_int_Bulk/_vt_nom)))*d10_sqrt1);
1336 deltaV_VSource_int_Bulk=(con14*(Lambda*(iff_VSource_int_Bulk*d10_sqrt0-(Vdss_VSource_int_Bulk/_vt_nom)))*d10_sqrt1);
1337 #endif
1338 deltaV=(con14*d00_sqrt1);
1339 }
1340 }
1341 else
1342 {
1343 #if defined(_DERIVATE)
1344 deltaV_VGate_Bulk=0.0;
1345 deltaV_VDrain_int_Bulk=0.0;
1346 deltaV_VSource_int_Bulk=0.0;
1347 #endif
1348 deltaV=con16;
1349 }
1350 }
1351 #if defined(_DERIVATE)
1352 Vdso2_VSource_int_Bulk=(0.5*(VD_VSource_int_Bulk-VS_VSource_int_Bulk));
1353 Vdso2_VDrain_int_Bulk=(0.5*(VD_VDrain_int_Bulk-VS_VDrain_int_Bulk));
1354 #endif
1355 Vdso2=(0.5*(VD-VS));
1356 {
1357 double m00_sqrt(d00_sqrt0,((Vdss*Vdss)+(deltaV*deltaV)))
1358 double m00_sqrt(d00_sqrt1,(((Vdso2-Vdss)*(Vdso2-Vdss))+(deltaV*deltaV)))
1359 #if defined(_DERIVATE)
1360 double m10_sqrt(d10_sqrt0,d00_sqrt0,((Vdss*Vdss)+(deltaV*deltaV)))
1361 double m10_sqrt(d10_sqrt1,d00_sqrt1,(((Vdso2-Vdss)*(Vdso2-Vdss))+(deltaV*deltaV)))
1362 #endif
1363 #if defined(_DERIVATE)
1364 Vip_VGate_Bulk=((((Vdss_VGate_Bulk*Vdss)+(Vdss*Vdss_VGate_Bulk))+((deltaV_VGate_Bulk*deltaV)+(deltaV*deltaV_VGate_Bulk)))*d10_sqrt0-((((-Vdss_VGate_Bulk)*(Vdso2-Vdss))+((Vdso2-Vdss)*(-Vdss_VGate_Bulk)))+((deltaV_VGate_Bulk*deltaV)+(deltaV*deltaV_VGate_Bulk)))*d10_sqrt1);
1365 Vip_VDrain_int_Bulk=((((Vdss_VDrain_int_Bulk*Vdss)+(Vdss*Vdss_VDrain_int_Bulk))+((deltaV_VDrain_int_Bulk*deltaV)+(deltaV*deltaV_VDrain_int_Bulk)))*d10_sqrt0-((((Vdso2_VDrain_int_Bulk-Vdss_VDrain_int_Bulk)*(Vdso2-Vdss))+((Vdso2-Vdss)*(Vdso2_VDrain_int_Bulk-Vdss_VDrain_int_Bulk)))+((deltaV_VDrain_int_Bulk*deltaV)+(deltaV*deltaV_VDrain_int_Bulk)))*d10_sqrt1);
1366 Vip_VSource_int_Bulk=((((Vdss_VSource_int_Bulk*Vdss)+(Vdss*Vdss_VSource_int_Bulk))+((deltaV_VSource_int_Bulk*deltaV)+(deltaV*deltaV_VSource_int_Bulk)))*d10_sqrt0-((((Vdso2_VSource_int_Bulk-Vdss_VSource_int_Bulk)*(Vdso2-Vdss))+((Vdso2-Vdss)*(Vdso2_VSource_int_Bulk-Vdss_VSource_int_Bulk)))+((deltaV_VSource_int_Bulk*deltaV)+(deltaV*deltaV_VSource_int_Bulk)))*d10_sqrt1);
1367 #endif
1368 Vip=(d00_sqrt0-d00_sqrt1);
1369 }
1370 {
1371 double m00_logE(d00_logE0,(1.0+((Vdso2-Vip)*con19)))
1372 #if defined(_DERIVATE)
1373 double m10_logE(d10_logE0,d00_logE0,(1.0+((Vdso2-Vip)*con19)))
1374 #endif
1375 #if defined(_DERIVATE)
1376 DeltaL_VSource_int_Bulk=(con18*(Vdso2_VSource_int_Bulk-Vip_VSource_int_Bulk)*con19*d10_logE0);
1377 DeltaL_VDrain_int_Bulk=(con18*(Vdso2_VDrain_int_Bulk-Vip_VDrain_int_Bulk)*con19*d10_logE0);
1378 DeltaL_VGate_Bulk=(con18*(-Vip_VGate_Bulk)*con19*d10_logE0);
1379 #endif
1380 DeltaL=(con18*d00_logE0);
1381 }
1382 #if defined(_DERIVATE)
1383 Lprime_VSource_int_Bulk=((-DeltaL_VSource_int_Bulk)+((Vdso2_VSource_int_Bulk+Vip_VSource_int_Bulk)/Ucrit_T));
1384 Lprime_VDrain_int_Bulk=((-DeltaL_VDrain_int_Bulk)+((Vdso2_VDrain_int_Bulk+Vip_VDrain_int_Bulk)/Ucrit_T));
1385 Lprime_VGate_Bulk=((-DeltaL_VGate_Bulk)+(Vip_VGate_Bulk/Ucrit_T));
1386 #endif
1387 Lprime=((con20-DeltaL)+((Vdso2+Vip)/Ucrit_T));
1388 {
1389 double m00_sqrt(d00_sqrt0,((Lprime*Lprime)+(Lmin*Lmin)))
1390 #if defined(_DERIVATE)
1391 double m10_sqrt(d10_sqrt0,d00_sqrt0,((Lprime*Lprime)+(Lmin*Lmin)))
1392 #endif
1393 #if defined(_DERIVATE)
1394 Leq_VSource_int_Bulk=(0.5*(Lprime_VSource_int_Bulk+((Lprime_VSource_int_Bulk*Lprime)+(Lprime*Lprime_VSource_int_Bulk))*d10_sqrt0));
1395 Leq_VDrain_int_Bulk=(0.5*(Lprime_VDrain_int_Bulk+((Lprime_VDrain_int_Bulk*Lprime)+(Lprime*Lprime_VDrain_int_Bulk))*d10_sqrt0));
1396 Leq_VGate_Bulk=(0.5*(Lprime_VGate_Bulk+((Lprime_VGate_Bulk*Lprime)+(Lprime*Lprime_VGate_Bulk))*d10_sqrt0));
1397 #endif
1398 Leq=(0.5*(Lprime+d00_sqrt0));
1399 }
1400 {
1401 double m00_sqrt(d00_sqrt0,((Vdssprime*Vdssprime)+(deltaV*deltaV)))
1402 double m00_sqrt(d00_sqrt1,(((Vdso2-Vdssprime)*(Vdso2-Vdssprime))+(deltaV*deltaV)))
1403 #if defined(_DERIVATE)
1404 double m10_sqrt(d10_sqrt0,d00_sqrt0,((Vdssprime*Vdssprime)+(deltaV*deltaV)))
1405 double m10_sqrt(d10_sqrt1,d00_sqrt1,(((Vdso2-Vdssprime)*(Vdso2-Vdssprime))+(deltaV*deltaV)))
1406 #endif
1407 #if defined(_DERIVATE)
1408 X3_VGate_Bulk=(((Vp_VGate_Bulk-(((Vdssprime_VGate_Bulk*Vdssprime)+(Vdssprime*Vdssprime_VGate_Bulk))+((deltaV_VGate_Bulk*deltaV)+(deltaV*deltaV_VGate_Bulk)))*d10_sqrt0)+((((-Vdssprime_VGate_Bulk)*(Vdso2-Vdssprime))+((Vdso2-Vdssprime)*(-Vdssprime_VGate_Bulk)))+((deltaV_VGate_Bulk*deltaV)+(deltaV*deltaV_VGate_Bulk)))*d10_sqrt1)/_vt_nom);
1409 X3_VDrain_int_Bulk=(((((Vp_VDrain_int_Bulk-Vdso2_VDrain_int_Bulk)-VS_VDrain_int_Bulk)-(((Vdssprime_VDrain_int_Bulk*Vdssprime)+(Vdssprime*Vdssprime_VDrain_int_Bulk))+((deltaV_VDrain_int_Bulk*deltaV)+(deltaV*deltaV_VDrain_int_Bulk)))*d10_sqrt0)+((((Vdso2_VDrain_int_Bulk-Vdssprime_VDrain_int_Bulk)*(Vdso2-Vdssprime))+((Vdso2-Vdssprime)*(Vdso2_VDrain_int_Bulk-Vdssprime_VDrain_int_Bulk)))+((deltaV_VDrain_int_Bulk*deltaV)+(deltaV*deltaV_VDrain_int_Bulk)))*d10_sqrt1)/_vt_nom);
1410 X3_VSource_int_Bulk=(((((Vp_VSource_int_Bulk-Vdso2_VSource_int_Bulk)-VS_VSource_int_Bulk)-(((Vdssprime_VSource_int_Bulk*Vdssprime)+(Vdssprime*Vdssprime_VSource_int_Bulk))+((deltaV_VSource_int_Bulk*deltaV)+(deltaV*deltaV_VSource_int_Bulk)))*d10_sqrt0)+((((Vdso2_VSource_int_Bulk-Vdssprime_VSource_int_Bulk)*(Vdso2-Vdssprime))+((Vdso2-Vdssprime)*(Vdso2_VSource_int_Bulk-Vdssprime_VSource_int_Bulk)))+((deltaV_VSource_int_Bulk*deltaV)+(deltaV*deltaV_VSource_int_Bulk)))*d10_sqrt1)/_vt_nom);
1411 #endif
1412 X3=(((((Vp-Vdso2)-VS)-d00_sqrt0)+d00_sqrt1)/_vt_nom);
1413 }
1414 {
1415 double m00_limexp(d00_limexp0,(X3/2.0))
1416 double m00_logE(d00_logE1,(1.0+d00_limexp0))
1417 #if defined(_DERIVATE)
1418 double m10_limexp(d10_limexp0,d00_limexp0,(X3/2.0))
1419 double m10_logE(d10_logE1,d00_logE1,(1.0+d00_limexp0))
1420 #endif
1421 #if defined(_DERIVATE)
1422 T_1_VGate_Bulk=(X3_VGate_Bulk/2.0)*d10_limexp0*d10_logE1;
1423 T_1_VDrain_int_Bulk=(X3_VDrain_int_Bulk/2.0)*d10_limexp0*d10_logE1;
1424 T_1_VSource_int_Bulk=(X3_VSource_int_Bulk/2.0)*d10_limexp0*d10_logE1;
1425 #endif
1426 T_1=d00_logE1;
1427 }
1428 #if defined(_DERIVATE)
1429 irprime_VGate_Bulk=((T_1_VGate_Bulk*T_1)+(T_1*T_1_VGate_Bulk));
1430 irprime_VDrain_int_Bulk=((T_1_VDrain_int_Bulk*T_1)+(T_1*T_1_VDrain_int_Bulk));
1431 irprime_VSource_int_Bulk=((T_1_VSource_int_Bulk*T_1)+(T_1*T_1_VSource_int_Bulk));
1432 #endif
1433 irprime=(T_1*T_1);
1434 #if defined(_DERIVATE)
1435 Beta0_VSource_int_Bulk=(Kpa_T*(-(Np*Weff)*Leq_VSource_int_Bulk/Leq/Leq));
1436 Beta0_VDrain_int_Bulk=(Kpa_T*(-(Np*Weff)*Leq_VDrain_int_Bulk/Leq/Leq));
1437 Beta0_VGate_Bulk=(Kpa_T*(-(Np*Weff)*Leq_VGate_Bulk/Leq/Leq));
1438 #endif
1439 Beta0=(Kpa_T*((Np*Weff)/Leq));
1440 #if defined(_DERIVATE)
1441 Beta0prime_VSource_int_Bulk=Beta0_VSource_int_Bulk*con17;
1442 Beta0prime_VDrain_int_Bulk=Beta0_VDrain_int_Bulk*con17;
1443 Beta0prime_VGate_Bulk=Beta0_VGate_Bulk*con17;
1444 #endif
1445 Beta0prime=(Beta0*con17);
1446 {
1447 double m00_sqrt(d00_sqrt0,((Vp+Phi_T)+1e-6))
1448 #if defined(_DERIVATE)
1449 double m10_sqrt(d10_sqrt0,d00_sqrt0,((Vp+Phi_T)+1e-6))
1450 #endif
1451 #if defined(_DERIVATE)
1452 nq_VGate_Bulk=(-Gammaa*(2.0*Vp_VGate_Bulk*d10_sqrt0)/(2.0*d00_sqrt0)/(2.0*d00_sqrt0));
1453 nq_VDrain_int_Bulk=(-Gammaa*(2.0*Vp_VDrain_int_Bulk*d10_sqrt0)/(2.0*d00_sqrt0)/(2.0*d00_sqrt0));
1454 nq_VSource_int_Bulk=(-Gammaa*(2.0*Vp_VSource_int_Bulk*d10_sqrt0)/(2.0*d00_sqrt0)/(2.0*d00_sqrt0));
1455 #endif
1456 nq=(1.0+(Gammaa/(2.0*d00_sqrt0)));
1457 }
1458 }
1459 else
1460 {
1461 {
1462 double m00_sqrt(d00_sqrt0,((Vp+Phi_T)+1e-6))
1463 #if defined(_DERIVATE)
1464 double m10_sqrt(d10_sqrt0,d00_sqrt0,((Vp+Phi_T)+1e-6))
1465 #endif
1466 #if defined(_DERIVATE)
1467 nq_VGate_Bulk=(-Gamma*(2.0*Vp_VGate_Bulk*d10_sqrt0)/(2.0*d00_sqrt0)/(2.0*d00_sqrt0));
1468 nq_VDrain_int_Bulk=(-Gamma*(2.0*Vp_VDrain_int_Bulk*d10_sqrt0)/(2.0*d00_sqrt0)/(2.0*d00_sqrt0));
1469 nq_VSource_int_Bulk=(-Gamma*(2.0*Vp_VSource_int_Bulk*d10_sqrt0)/(2.0*d00_sqrt0)/(2.0*d00_sqrt0));
1470 #endif
1471 nq=(1.0+(Gamma/(2.0*d00_sqrt0)));
1472 }
1473 }
1474 {
1475 double m00_sqrt(d00_sqrt0,(0.25+iff))
1476 #if defined(_DERIVATE)
1477 double m10_sqrt(d10_sqrt0,d00_sqrt0,(0.25+iff))
1478 #endif
1479 #if defined(_DERIVATE)
1480 Xf_VGate_Bulk=iff_VGate_Bulk*d10_sqrt0;
1481 Xf_VDrain_int_Bulk=iff_VDrain_int_Bulk*d10_sqrt0;
1482 Xf_VSource_int_Bulk=iff_VSource_int_Bulk*d10_sqrt0;
1483 #endif
1484 Xf=d00_sqrt0;
1485 }
1486 {
1487 double m00_sqrt(d00_sqrt0,(0.25+ir))
1488 #if defined(_DERIVATE)
1489 double m10_sqrt(d10_sqrt0,d00_sqrt0,(0.25+ir))
1490 #endif
1491 #if defined(_DERIVATE)
1492 Xr_VGate_Bulk=ir_VGate_Bulk*d10_sqrt0;
1493 Xr_VDrain_int_Bulk=ir_VDrain_int_Bulk*d10_sqrt0;
1494 Xr_VSource_int_Bulk=ir_VSource_int_Bulk*d10_sqrt0;
1495 #endif
1496 Xr=d00_sqrt0;
1497 }
1498 #if defined(_DERIVATE)
1499 qI_VGate_Bulk=(((-nq_VGate_Bulk)*(((con30*(((Xf*Xf)+(Xf*Xr))+(Xr*Xr)))/(Xf+Xr))-1.0))+((-nq)*(((con30*((((Xf_VGate_Bulk*Xf)+(Xf*Xf_VGate_Bulk))+((Xf_VGate_Bulk*Xr)+(Xf*Xr_VGate_Bulk)))+((Xr_VGate_Bulk*Xr)+(Xr*Xr_VGate_Bulk))))*(Xf+Xr)-(con30*(((Xf*Xf)+(Xf*Xr))+(Xr*Xr)))*(Xf_VGate_Bulk+Xr_VGate_Bulk))/(Xf+Xr)/(Xf+Xr))));
1500 qI_VDrain_int_Bulk=(((-nq_VDrain_int_Bulk)*(((con30*(((Xf*Xf)+(Xf*Xr))+(Xr*Xr)))/(Xf+Xr))-1.0))+((-nq)*(((con30*((((Xf_VDrain_int_Bulk*Xf)+(Xf*Xf_VDrain_int_Bulk))+((Xf_VDrain_int_Bulk*Xr)+(Xf*Xr_VDrain_int_Bulk)))+((Xr_VDrain_int_Bulk*Xr)+(Xr*Xr_VDrain_int_Bulk))))*(Xf+Xr)-(con30*(((Xf*Xf)+(Xf*Xr))+(Xr*Xr)))*(Xf_VDrain_int_Bulk+Xr_VDrain_int_Bulk))/(Xf+Xr)/(Xf+Xr))));
1501 qI_VSource_int_Bulk=(((-nq_VSource_int_Bulk)*(((con30*(((Xf*Xf)+(Xf*Xr))+(Xr*Xr)))/(Xf+Xr))-1.0))+((-nq)*(((con30*((((Xf_VSource_int_Bulk*Xf)+(Xf*Xf_VSource_int_Bulk))+((Xf_VSource_int_Bulk*Xr)+(Xf*Xr_VSource_int_Bulk)))+((Xr_VSource_int_Bulk*Xr)+(Xr*Xr_VSource_int_Bulk))))*(Xf+Xr)-(con30*(((Xf*Xf)+(Xf*Xr))+(Xr*Xr)))*(Xf_VSource_int_Bulk+Xr_VSource_int_Bulk))/(Xf+Xr)/(Xf+Xr))));
1502 #endif
1503 qI=((-nq)*(((con30*(((Xf*Xf)+(Xf*Xr))+(Xr*Xr)))/(Xf+Xr))-1.0));
1504 if
1505 ((LEVEL==2))
1506 {
1507 if
1508 ((VGprime>0))
1509 {
1510 {
1511 double m00_sqrt(d00_sqrt0,((Vp+Phi_T)+1e-6))
1512 #if defined(_DERIVATE)
1513 double m10_sqrt(d10_sqrt0,d00_sqrt0,((Vp+Phi_T)+1e-6))
1514 #endif
1515 #if defined(_DERIVATE)
1516 qB_VGate_Bulk=((((-Gammaa)*Vp_VGate_Bulk*d10_sqrt0)/_vt_nom)-((((qI_VGate_Bulk*(nq-1.0))+(qI*nq_VGate_Bulk))*nq-(qI*(nq-1.0))*nq_VGate_Bulk)/nq/nq));
1517 qB_VDrain_int_Bulk=((((-Gammaa)*Vp_VDrain_int_Bulk*d10_sqrt0)/_vt_nom)-((((qI_VDrain_int_Bulk*(nq-1.0))+(qI*nq_VDrain_int_Bulk))*nq-(qI*(nq-1.0))*nq_VDrain_int_Bulk)/nq/nq));
1518 qB_VSource_int_Bulk=((((-Gammaa)*Vp_VSource_int_Bulk*d10_sqrt0)/_vt_nom)-((((qI_VSource_int_Bulk*(nq-1.0))+(qI*nq_VSource_int_Bulk))*nq-(qI*(nq-1.0))*nq_VSource_int_Bulk)/nq/nq));
1519 #endif
1520 qB=((((-Gammaa)*d00_sqrt0)/_vt_nom)-((qI*(nq-1.0))/nq));
1521 }
1522 }
1523 else
1524 {
1525 #if defined(_DERIVATE)
1526 qB_VGate_Bulk=((-VGprime_VGate_Bulk)/_vt_nom);
1527 qB_VDrain_int_Bulk=0.0;
1528 qB_VSource_int_Bulk=0.0;
1529 #endif
1530 qB=((-VGprime)/_vt_nom);
1531 }
1532 }
1533 else
1534 {
1535 if
1536 ((VGprime>0))
1537 {
1538 {
1539 double m00_sqrt(d00_sqrt0,((Vp+Phi_T)+1e-6))
1540 #if defined(_DERIVATE)
1541 double m10_sqrt(d10_sqrt0,d00_sqrt0,((Vp+Phi_T)+1e-6))
1542 #endif
1543 #if defined(_DERIVATE)
1544 qB_VGate_Bulk=((((-Gamma)*Vp_VGate_Bulk*d10_sqrt0)/_vt_nom)-((((qI_VGate_Bulk*(nq-1.0))+(qI*nq_VGate_Bulk))*nq-(qI*(nq-1.0))*nq_VGate_Bulk)/nq/nq));
1545 qB_VDrain_int_Bulk=((((-Gamma)*Vp_VDrain_int_Bulk*d10_sqrt0)/_vt_nom)-((((qI_VDrain_int_Bulk*(nq-1.0))+(qI*nq_VDrain_int_Bulk))*nq-(qI*(nq-1.0))*nq_VDrain_int_Bulk)/nq/nq));
1546 qB_VSource_int_Bulk=((((-Gamma)*Vp_VSource_int_Bulk*d10_sqrt0)/_vt_nom)-((((qI_VSource_int_Bulk*(nq-1.0))+(qI*nq_VSource_int_Bulk))*nq-(qI*(nq-1.0))*nq_VSource_int_Bulk)/nq/nq));
1547 #endif
1548 qB=((((-Gamma)*d00_sqrt0)/_vt_nom)-((qI*(nq-1.0))/nq));
1549 }
1550 }
1551 else
1552 {
1553 #if defined(_DERIVATE)
1554 qB_VGate_Bulk=((-VGprime_VGate_Bulk)/_vt_nom);
1555 qB_VDrain_int_Bulk=0.0;
1556 qB_VSource_int_Bulk=0.0;
1557 #endif
1558 qB=((-VGprime)/_vt_nom);
1559 }
1560 }
1561 if
1562 ((LEVEL==2))
1563 {
1564 {
1565 double m00_fabs(d00_fabs0,(qB+(eta*qI)))
1566 #if defined(_DERIVATE)
1567 double m10_fabs(d10_fabs0,d00_fabs0,(qB+(eta*qI)))
1568 #endif
1569 #if defined(_DERIVATE)
1570 Beta_VSource_int_Bulk=((Beta0prime_VSource_int_Bulk*(1.0+(con21*d00_fabs0))-Beta0prime*(con21*(qB_VSource_int_Bulk+(eta*qI_VSource_int_Bulk))*d10_fabs0))/(1.0+(con21*d00_fabs0))/(1.0+(con21*d00_fabs0)));
1571 Beta_VDrain_int_Bulk=((Beta0prime_VDrain_int_Bulk*(1.0+(con21*d00_fabs0))-Beta0prime*(con21*(qB_VDrain_int_Bulk+(eta*qI_VDrain_int_Bulk))*d10_fabs0))/(1.0+(con21*d00_fabs0))/(1.0+(con21*d00_fabs0)));
1572 Beta_VGate_Bulk=((Beta0prime_VGate_Bulk*(1.0+(con21*d00_fabs0))-Beta0prime*(con21*(qB_VGate_Bulk+(eta*qI_VGate_Bulk))*d10_fabs0))/(1.0+(con21*d00_fabs0))/(1.0+(con21*d00_fabs0)));
1573 #endif
1574 Beta=(Beta0prime/(1.0+(con21*d00_fabs0)));
1575 }
1576 }
1577 else
1578 {
1579 #if defined(_DERIVATE)
1580 Beta_VSource_int_Bulk=(-con22*(Theta*Vp_VSource_int_Bulk)/(1+(Theta*Vp))/(1+(Theta*Vp)));
1581 Beta_VDrain_int_Bulk=(-con22*(Theta*Vp_VDrain_int_Bulk)/(1+(Theta*Vp))/(1+(Theta*Vp)));
1582 Beta_VGate_Bulk=(-con22*(Theta*Vp_VGate_Bulk)/(1+(Theta*Vp))/(1+(Theta*Vp)));
1583 #endif
1584 Beta=(con22/(1+(Theta*Vp)));
1585 }
1586 #if defined(_DERIVATE)
1587 Ispecific_VGate_Bulk=(((2.0*n_VGate_Bulk)*Beta)+((2.0*n)*Beta_VGate_Bulk))*_vt_nom*_vt_nom;
1588 Ispecific_VDrain_int_Bulk=(((2.0*n_VDrain_int_Bulk)*Beta)+((2.0*n)*Beta_VDrain_int_Bulk))*_vt_nom*_vt_nom;
1589 Ispecific_VSource_int_Bulk=(((2.0*n_VSource_int_Bulk)*Beta)+((2.0*n)*Beta_VSource_int_Bulk))*_vt_nom*_vt_nom;
1590 #endif
1591 Ispecific=((((2.0*n)*Beta)*_vt_nom)*_vt_nom);
1592 if
1593 ((LEVEL==2))
1594 {
1595 #if defined(_DERIVATE)
1596 Ids_VGate_Bulk=((Ispecific_VGate_Bulk*(iff-irprime))+(Ispecific*(iff_VGate_Bulk-irprime_VGate_Bulk)));
1597 Ids_VDrain_int_Bulk=((Ispecific_VDrain_int_Bulk*(iff-irprime))+(Ispecific*(iff_VDrain_int_Bulk-irprime_VDrain_int_Bulk)));
1598 Ids_VSource_int_Bulk=((Ispecific_VSource_int_Bulk*(iff-irprime))+(Ispecific*(iff_VSource_int_Bulk-irprime_VSource_int_Bulk)));
1599 #endif
1600 Ids=(Ispecific*(iff-irprime));
1601 #if defined(_DERIVATE)
1602 Vib_VSource_int_Bulk=((VD_VSource_int_Bulk-VS_VSource_int_Bulk)-((Ibn*2.0)*Vdss_VSource_int_Bulk));
1603 Vib_VDrain_int_Bulk=((VD_VDrain_int_Bulk-VS_VDrain_int_Bulk)-((Ibn*2.0)*Vdss_VDrain_int_Bulk));
1604 Vib_VGate_Bulk=(-((Ibn*2.0)*Vdss_VGate_Bulk));
1605 #endif
1606 Vib=((VD-VS)-((Ibn*2.0)*Vdss));
1607 if
1608 ((Vib>0.0))
1609 {
1610 {
1611 double m00_exp(d00_exp0,(((-Ibb_T)*Lc)/Vib))
1612 #if defined(_DERIVATE)
1613 #define d10_exp0 d00_exp0
1614 #endif
1615 #if defined(_DERIVATE)
1616 Idb_VGate_Bulk=((((Ids_VGate_Bulk*(Iba/Ibb_T)*Vib)+((Ids*(Iba/Ibb_T))*Vib_VGate_Bulk))*d00_exp0)+(((Ids*(Iba/Ibb_T))*Vib)*(-((-Ibb_T)*Lc)*Vib_VGate_Bulk/Vib/Vib)*d10_exp0));
1617 Idb_VDrain_int_Bulk=((((Ids_VDrain_int_Bulk*(Iba/Ibb_T)*Vib)+((Ids*(Iba/Ibb_T))*Vib_VDrain_int_Bulk))*d00_exp0)+(((Ids*(Iba/Ibb_T))*Vib)*(-((-Ibb_T)*Lc)*Vib_VDrain_int_Bulk/Vib/Vib)*d10_exp0));
1618 Idb_VSource_int_Bulk=((((Ids_VSource_int_Bulk*(Iba/Ibb_T)*Vib)+((Ids*(Iba/Ibb_T))*Vib_VSource_int_Bulk))*d00_exp0)+(((Ids*(Iba/Ibb_T))*Vib)*(-((-Ibb_T)*Lc)*Vib_VSource_int_Bulk/Vib/Vib)*d10_exp0));
1619 #endif
1620 Idb=(((Ids*(Iba/Ibb_T))*Vib)*d00_exp0);
1621 }
1622 }
1623 else
1624 {
1625 #if defined(_DERIVATE)
1626 Idb_VGate_Bulk=0.0;
1627 Idb_VDrain_int_Bulk=0.0;
1628 Idb_VSource_int_Bulk=0.0;
1629 #endif
1630 Idb=0.0;
1631 }
1632 }
1633 else
1634 {
1635 #if defined(_DERIVATE)
1636 Ids_VGate_Bulk=((Ispecific_VGate_Bulk*(iff-ir))+(Ispecific*(iff_VGate_Bulk-ir_VGate_Bulk)));
1637 Ids_VDrain_int_Bulk=((Ispecific_VDrain_int_Bulk*(iff-ir))+(Ispecific*(iff_VDrain_int_Bulk-ir_VDrain_int_Bulk)));
1638 Ids_VSource_int_Bulk=((Ispecific_VSource_int_Bulk*(iff-ir))+(Ispecific*(iff_VSource_int_Bulk-ir_VSource_int_Bulk)));
1639 #endif
1640 Ids=(Ispecific*(iff-ir));
1641 }
1642 {
1643 double m00_fabs(d00_fabs0,qI)
1644 #if defined(_DERIVATE)
1645 double m10_fabs(d10_fabs0,d00_fabs0,qI)
1646 #endif
1647 #if defined(_DERIVATE)
1648 Sthermal_VSource_int_Bulk=(((fourkt*Beta_VSource_int_Bulk)*d00_fabs0)+((fourkt*Beta)*qI_VSource_int_Bulk*d10_fabs0));
1649 Sthermal_VDrain_int_Bulk=(((fourkt*Beta_VDrain_int_Bulk)*d00_fabs0)+((fourkt*Beta)*qI_VDrain_int_Bulk*d10_fabs0));
1650 Sthermal_VGate_Bulk=(((fourkt*Beta_VGate_Bulk)*d00_fabs0)+((fourkt*Beta)*qI_VGate_Bulk*d10_fabs0));
1651 #endif
1652 Sthermal=((fourkt*Beta)*d00_fabs0);
1653 }
1654 #if defined(_DERIVATE)
1655 T_1_VGate_Bulk=(-4.0*Ispecific_VGate_Bulk/Ispecific/Ispecific);
1656 T_1_VDrain_int_Bulk=(-4.0*Ispecific_VDrain_int_Bulk/Ispecific/Ispecific);
1657 T_1_VSource_int_Bulk=(-4.0*Ispecific_VSource_int_Bulk/Ispecific/Ispecific);
1658 #endif
1659 T_1=(4.0/Ispecific);
1660 {
1661 double m00_sqrt(d00_sqrt0,((T_1*iff)+1.0))
1662 double m00_sqrt(d00_sqrt1,((T_1*ir)+1.0))
1663 #if defined(_DERIVATE)
1664 double m10_sqrt(d10_sqrt0,d00_sqrt0,((T_1*iff)+1.0))
1665 double m10_sqrt(d10_sqrt1,d00_sqrt1,((T_1*ir)+1.0))
1666 #endif
1667 #if defined(_DERIVATE)
1668 gm_VSource_int_Bulk=((Beta_VSource_int_Bulk*_vt_nom*(d00_sqrt0-d00_sqrt1))+((Beta*_vt_nom)*(((T_1_VSource_int_Bulk*iff)+(T_1*iff_VSource_int_Bulk))*d10_sqrt0-((T_1_VSource_int_Bulk*ir)+(T_1*ir_VSource_int_Bulk))*d10_sqrt1)));
1669 gm_VDrain_int_Bulk=((Beta_VDrain_int_Bulk*_vt_nom*(d00_sqrt0-d00_sqrt1))+((Beta*_vt_nom)*(((T_1_VDrain_int_Bulk*iff)+(T_1*iff_VDrain_int_Bulk))*d10_sqrt0-((T_1_VDrain_int_Bulk*ir)+(T_1*ir_VDrain_int_Bulk))*d10_sqrt1)));
1670 gm_VGate_Bulk=((Beta_VGate_Bulk*_vt_nom*(d00_sqrt0-d00_sqrt1))+((Beta*_vt_nom)*(((T_1_VGate_Bulk*iff)+(T_1*iff_VGate_Bulk))*d10_sqrt0-((T_1_VGate_Bulk*ir)+(T_1*ir_VGate_Bulk))*d10_sqrt1)));
1671 #endif
1672 gm=((Beta*_vt_nom)*(d00_sqrt0-d00_sqrt1));
1673 }
1674 #if defined(_DERIVATE)
1675 Sflicker_VSource_int_Bulk=(((con23*gm_VSource_int_Bulk)*gm)+((con23*gm)*gm_VSource_int_Bulk));
1676 Sflicker_VDrain_int_Bulk=(((con23*gm_VDrain_int_Bulk)*gm)+((con23*gm)*gm_VDrain_int_Bulk));
1677 Sflicker_VGate_Bulk=(((con23*gm_VGate_Bulk)*gm)+((con23*gm)*gm_VGate_Bulk));
1678 #endif
1679 Sflicker=((con23*gm)*gm);
1680 #if defined(_DYNAMIC)
1681 #if defined(_DERIVATE)
1682 qb_VGate_Bulk=(con24*qB_VGate_Bulk);
1683 qb_VDrain_int_Bulk=(con24*qB_VDrain_int_Bulk);
1684 qb_VSource_int_Bulk=(con24*qB_VSource_int_Bulk);
1685 #endif
1686 qb=(con24*qB);
1687 #endif
1688 #if defined(_DYNAMIC)
1689 #if defined(_DERIVATE)
1690 qg_VGate_Bulk=(con24*((-qI_VGate_Bulk)-qB_VGate_Bulk));
1691 qg_VDrain_int_Bulk=(con24*((-qI_VDrain_int_Bulk)-qB_VDrain_int_Bulk));
1692 qg_VSource_int_Bulk=(con24*((-qI_VSource_int_Bulk)-qB_VSource_int_Bulk));
1693 #endif
1694 qg=(con24*((-qI)-qB));
1695 #endif
1696 #if defined(_DYNAMIC)
1697 #if defined(_DERIVATE)
1698 qgso_VGate_Bulk=(con27*VG_VGate_Bulk);
1699 qgso_VDrain_int_Bulk=(con27*(-VS_VDrain_int_Bulk));
1700 qgso_VSource_int_Bulk=(con27*(-VS_VSource_int_Bulk));
1701 #endif
1702 qgso=(con27*(VG-VS));
1703 #endif
1704 #if defined(_DYNAMIC)
1705 #if defined(_DERIVATE)
1706 qgdo_VGate_Bulk=(con28*VG_VGate_Bulk);
1707 qgdo_VSource_int_Bulk=(con28*(-VD_VSource_int_Bulk));
1708 qgdo_VDrain_int_Bulk=(con28*(-VD_VDrain_int_Bulk));
1709 #endif
1710 qgdo=(con28*(VG-VD));
1711 #endif
1712 #if defined(_DYNAMIC)
1713 #if defined(_DERIVATE)
1714 qgbo_VGate_Bulk=(con29*VG_VGate_Bulk);
1715 #endif
1716 qgbo=(con29*VG);
1717 #endif
1718 if
1719 ((StoDswap>0.0))
1720 {
1721 #if defined(_DERIVATE)
1722 V1_VBulk_Source_int=0.0;
1723 V1_VBulk_Drain_int=(p_n_MOS);
1724 #endif
1725 V1=(p_n_MOS*BP(Bulk,Drain_int));
1726 #if defined(_DERIVATE)
1727 V2_VBulk_Drain_int=0.0;
1728 V2_VBulk_Source_int=(p_n_MOS);
1729 #endif
1730 V2=(p_n_MOS*BP(Bulk,Source_int));
1731 }
1732 else
1733 {
1734 #if defined(_DERIVATE)
1735 V2_VBulk_Drain_int=(p_n_MOS);
1736 V2_VBulk_Source_int=0.0;
1737 #endif
1738 V2=(p_n_MOS*BP(Bulk,Drain_int));
1739 #if defined(_DERIVATE)
1740 V1_VBulk_Source_int=(p_n_MOS);
1741 V1_VBulk_Drain_int=0.0;
1742 #endif
1743 V1=(p_n_MOS*BP(Bulk,Source_int));
1744 }
1745 {
1746 double m00_limexp(d00_limexp0,(V1*con31))
1747 #if defined(_DERIVATE)
1748 double m10_limexp(d10_limexp0,d00_limexp0,(V1*con31))
1749 #endif
1750 #if defined(_DERIVATE)
1751 Id1_VBulk_Source_int=((V1>(-con32))?((Area2*V1_VBulk_Source_int*con31*d10_limexp0)+(GMIN*V1_VBulk_Source_int)):0.0);
1752 Id1_VBulk_Drain_int=((V1>(-con32))?((Area2*V1_VBulk_Drain_int*con31*d10_limexp0)+(GMIN*V1_VBulk_Drain_int)):0.0);
1753 #endif
1754 Id1=((V1>(-con32))?((Area2*(d00_limexp0-1.0))+(GMIN*V1)):0);
1755 }
1756 #if defined(_DYNAMIC)
1757 {
1758 double m00_pow(d00_pow0,(1-(V1/Vj_T2)),(1-M))
1759 #if defined(_DERIVATE)
1760 double m10_pow(d10_pow0,d00_pow0,(1-(V1/Vj_T2)),(1-M))
1761 #endif
1762 #if defined(_DERIVATE)
1763 Qd1_VBulk_Source_int=((V1<con33)?((Tt*Id1_VBulk_Source_int)+(Area1*(-(d10_pow0*(-(V1_VBulk_Source_int/Vj_T2)))))):0.0);
1764 Qd1_VBulk_Drain_int=((V1<con33)?((Tt*Id1_VBulk_Drain_int)+(Area1*(-(d10_pow0*(-(V1_VBulk_Drain_int/Vj_T2)))))):0.0);
1765 #endif
1766 Qd1=((V1<con33)?((Tt*Id1)+(Area1*(1-d00_pow0))):0);
1767 }
1768 #endif
1769 #if defined(_DERIVATE)
1770 Id2_VBulk_Source_int=((V1<=(-con32))?(GMIN*V1_VBulk_Source_int):0.0);
1771 Id2_VBulk_Drain_int=((V1<=(-con32))?(GMIN*V1_VBulk_Drain_int):0.0);
1772 #endif
1773 Id2=((V1<=(-con32))?((-Area2)+(GMIN*V1)):0);
1774 #if defined(_DYNAMIC)
1775 #if defined(_DERIVATE)
1776 Qd2_VBulk_Source_int=((V1>=con33)?((Tt*Id1_VBulk_Source_int)+(Area3*(DP4*((F3*V1_VBulk_Source_int)+(DP2*((V1_VBulk_Source_int*V1)+(V1*V1_VBulk_Source_int))))))):0.0);
1777 Qd2_VBulk_Drain_int=((V1>=con33)?((Tt*Id1_VBulk_Drain_int)+(Area3*(DP4*((F3*V1_VBulk_Drain_int)+(DP2*((V1_VBulk_Drain_int*V1)+(V1*V1_VBulk_Drain_int))))))):0.0);
1778 #endif
1779 Qd2=((V1>=con33)?((Tt*Id1)+(Area3*(DP4*((F3*(V1-DP3))+(DP2*((V1*V1)-DP1)))))):0);
1780 #endif
1781 {
1782 double m00_limexp(d00_limexp0,(V2*con31))
1783 #if defined(_DERIVATE)
1784 double m10_limexp(d10_limexp0,d00_limexp0,(V2*con31))
1785 #endif
1786 #if defined(_DERIVATE)
1787 Is1_VBulk_Drain_int=((V2>(-con32))?((Area2*V2_VBulk_Drain_int*con31*d10_limexp0)+(GMIN*V2_VBulk_Drain_int)):0.0);
1788 Is1_VBulk_Source_int=((V2>(-con32))?((Area2*V2_VBulk_Source_int*con31*d10_limexp0)+(GMIN*V2_VBulk_Source_int)):0.0);
1789 #endif
1790 Is1=((V2>(-con32))?((Area2*(d00_limexp0-1.0))+(GMIN*V2)):0);
1791 }
1792 #if defined(_DYNAMIC)
1793 {
1794 double m00_pow(d00_pow0,(1-(V2/Vj_T2)),(1-M))
1795 #if defined(_DERIVATE)
1796 double m10_pow(d10_pow0,d00_pow0,(1-(V2/Vj_T2)),(1-M))
1797 #endif
1798 #if defined(_DERIVATE)
1799 Qs1_VBulk_Drain_int=((V2<con33)?((Tt*Is1_VBulk_Drain_int)+(Area1*(-(d10_pow0*(-(V2_VBulk_Drain_int/Vj_T2)))))):0.0);
1800 Qs1_VBulk_Source_int=((V2<con33)?((Tt*Is1_VBulk_Source_int)+(Area1*(-(d10_pow0*(-(V2_VBulk_Source_int/Vj_T2)))))):0.0);
1801 #endif
1802 Qs1=((V2<con33)?((Tt*Is1)+(Area1*(1-d00_pow0))):0);
1803 }
1804 #endif
1805 #if defined(_DERIVATE)
1806 Is2_VBulk_Drain_int=((V2<=(-con32))?(GMIN*V2_VBulk_Drain_int):0.0);
1807 Is2_VBulk_Source_int=((V2<=(-con32))?(GMIN*V2_VBulk_Source_int):0.0);
1808 #endif
1809 Is2=((V2<=(-con32))?((-Area2)+(GMIN*V2)):0);
1810 #if defined(_DYNAMIC)
1811 #if defined(_DERIVATE)
1812 Qs2_VBulk_Drain_int=((V2>=con33)?((Tt*Is1_VBulk_Drain_int)+(Area3*(DP4*((F3*V2_VBulk_Drain_int)+(DP2*((V2_VBulk_Drain_int*V2)+(V2*V2_VBulk_Drain_int))))))):0.0);
1813 Qs2_VBulk_Source_int=((V2>=con33)?((Tt*Is1_VBulk_Source_int)+(Area3*(DP4*((F3*V2_VBulk_Source_int)+(DP2*((V2_VBulk_Source_int*V2)+(V2*V2_VBulk_Source_int))))))):0.0);
1814 #endif
1815 Qs2=((V2>=con33)?((Tt*Is1)+(Area3*(DP4*((F3*(V2-DP3))+(DP2*((V2*V2)-DP1)))))):0);
1816 #endif
1817 if
1818 ((StoDswap>0.0))
1819 {
1821 #if defined(_DERIVATE)
1823 #endif
1825 #if defined(_DERIVATE)
1827 #endif
1829 #if defined(_DERIVATE)
1830 _load_static_jacobian4(Drain_int,Source_int,Source_int,Bulk,(p_n_MOS*Ids_VSource_int_Bulk));
1831 _load_static_jacobian4(Drain_int,Source_int,Drain_int,Bulk,(p_n_MOS*Ids_VDrain_int_Bulk));
1832 _load_static_jacobian4(Drain_int,Source_int,Gate,Bulk,(p_n_MOS*Ids_VGate_Bulk));
1833 #endif
1834 if
1835 ((LEVEL==2))
1836 {
1837 _load_static_residual2(Drain_int,Bulk,(p_n_MOS*Idb));
1838 #if defined(_DERIVATE)
1839 _load_static_jacobian4(Drain_int,Bulk,Source_int,Bulk,(p_n_MOS*Idb_VSource_int_Bulk));
1840 _load_static_jacobian4(Drain_int,Bulk,Drain_int,Bulk,(p_n_MOS*Idb_VDrain_int_Bulk));
1841 _load_static_jacobian4(Drain_int,Bulk,Gate,Bulk,(p_n_MOS*Idb_VGate_Bulk));
1842 #endif
1843 }
1844 #if defined(_DYNAMIC)
1845 _load_dynamic_residual2(Gate,Drain_int,((p_n_MOS*Xpart)*_DDT(qg)));
1846 #if defined(_DERIVATE)
1847 _load_dynamic_jacobian4(Gate,Drain_int,Source_int,Bulk,((p_n_MOS*Xpart)*qg_VSource_int_Bulk));
1848 _load_dynamic_jacobian4(Gate,Drain_int,Drain_int,Bulk,((p_n_MOS*Xpart)*qg_VDrain_int_Bulk));
1849 _load_dynamic_jacobian4(Gate,Drain_int,Gate,Bulk,((p_n_MOS*Xpart)*qg_VGate_Bulk));
1850 #endif
1851 #endif
1852 #if defined(_DYNAMIC)
1853 _load_dynamic_residual2(Gate,Source_int,((p_n_MOS*Spart)*_DDT(qg)));
1854 #if defined(_DERIVATE)
1855 _load_dynamic_jacobian4(Gate,Source_int,Source_int,Bulk,((p_n_MOS*Spart)*qg_VSource_int_Bulk));
1856 _load_dynamic_jacobian4(Gate,Source_int,Drain_int,Bulk,((p_n_MOS*Spart)*qg_VDrain_int_Bulk));
1857 _load_dynamic_jacobian4(Gate,Source_int,Gate,Bulk,((p_n_MOS*Spart)*qg_VGate_Bulk));
1858 #endif
1859 #endif
1860 #if defined(_DYNAMIC)
1861 _load_dynamic_residual2(Drain_int,Bulk,((p_n_MOS*Xpart)*_DDT(qb)));
1862 #if defined(_DERIVATE)
1863 _load_dynamic_jacobian4(Drain_int,Bulk,Source_int,Bulk,((p_n_MOS*Xpart)*qb_VSource_int_Bulk));
1864 _load_dynamic_jacobian4(Drain_int,Bulk,Drain_int,Bulk,((p_n_MOS*Xpart)*qb_VDrain_int_Bulk));
1865 _load_dynamic_jacobian4(Drain_int,Bulk,Gate,Bulk,((p_n_MOS*Xpart)*qb_VGate_Bulk));
1866 #endif
1867 #endif
1868 #if defined(_DYNAMIC)
1869 _load_dynamic_residual2(Source_int,Bulk,((p_n_MOS*Spart)*_DDT(qb)));
1870 #if defined(_DERIVATE)
1871 _load_dynamic_jacobian4(Source_int,Bulk,Source_int,Bulk,((p_n_MOS*Spart)*qb_VSource_int_Bulk));
1872 _load_dynamic_jacobian4(Source_int,Bulk,Drain_int,Bulk,((p_n_MOS*Spart)*qb_VDrain_int_Bulk));
1873 _load_dynamic_jacobian4(Source_int,Bulk,Gate,Bulk,((p_n_MOS*Spart)*qb_VGate_Bulk));
1874 #endif
1875 #endif
1876 #if defined(_DYNAMIC)
1877 _load_dynamic_residual2(Gate,Source_int,(p_n_MOS*_DDT(qgso)));
1878 #if defined(_DERIVATE)
1879 _load_dynamic_jacobian4(Gate,Source_int,Source_int,Bulk,(p_n_MOS*qgso_VSource_int_Bulk));
1880 _load_dynamic_jacobian4(Gate,Source_int,Drain_int,Bulk,(p_n_MOS*qgso_VDrain_int_Bulk));
1881 _load_dynamic_jacobian4(Gate,Source_int,Gate,Bulk,(p_n_MOS*qgso_VGate_Bulk));
1882 #endif
1883 #endif
1884 #if defined(_DYNAMIC)
1885 _load_dynamic_residual2(Gate,Drain_int,(p_n_MOS*_DDT(qgdo)));
1886 #if defined(_DERIVATE)
1887 _load_dynamic_jacobian4(Gate,Drain_int,Drain_int,Bulk,(p_n_MOS*qgdo_VDrain_int_Bulk));
1888 _load_dynamic_jacobian4(Gate,Drain_int,Source_int,Bulk,(p_n_MOS*qgdo_VSource_int_Bulk));
1889 _load_dynamic_jacobian4(Gate,Drain_int,Gate,Bulk,(p_n_MOS*qgdo_VGate_Bulk));
1890 #endif
1891 #endif
1892 #if defined(_DYNAMIC)
1893 _load_dynamic_residual2(Gate,Bulk,(p_n_MOS*_DDT(qgbo)));
1894 #if defined(_DERIVATE)
1895 _load_dynamic_jacobian4(Gate,Bulk,Gate,Bulk,(p_n_MOS*qgbo_VGate_Bulk));
1896 #endif
1897 #endif
1898 _load_static_residual2(Bulk,Drain_int,(p_n_MOS*(Id1+Id2)));
1899 #if defined(_DERIVATE)
1900 _load_static_jacobian4(Bulk,Drain_int,Bulk,Drain_int,(p_n_MOS*(Id1_VBulk_Drain_int+Id2_VBulk_Drain_int)));
1901 _load_static_jacobian4(Bulk,Drain_int,Bulk,Source_int,(p_n_MOS*(Id1_VBulk_Source_int+Id2_VBulk_Source_int)));
1902 #endif
1903 #if defined(_DYNAMIC)
1904 _load_dynamic_residual2(Bulk,Drain_int,(p_n_MOS*_DDT((Qd1+Qd2))));
1905 #if defined(_DERIVATE)
1906 _load_dynamic_jacobian4(Bulk,Drain_int,Bulk,Drain_int,(p_n_MOS*(Qd1_VBulk_Drain_int+Qd2_VBulk_Drain_int)));
1907 _load_dynamic_jacobian4(Bulk,Drain_int,Bulk,Source_int,(p_n_MOS*(Qd1_VBulk_Source_int+Qd2_VBulk_Source_int)));
1908 #endif
1909 #endif
1910 _load_static_residual2(Bulk,Source_int,(p_n_MOS*(Is1+Is2)));
1911 #if defined(_DERIVATE)
1912 _load_static_jacobian4(Bulk,Source_int,Bulk,Source_int,(p_n_MOS*(Is1_VBulk_Source_int+Is2_VBulk_Source_int)));
1913 _load_static_jacobian4(Bulk,Source_int,Bulk,Drain_int,(p_n_MOS*(Is1_VBulk_Drain_int+Is2_VBulk_Drain_int)));
1914 #endif
1915 #if defined(_DYNAMIC)
1916 _load_dynamic_residual2(Bulk,Source_int,(p_n_MOS*_DDT((Qs1+Qs2))));
1917 #if defined(_DERIVATE)
1918 _load_dynamic_jacobian4(Bulk,Source_int,Bulk,Source_int,(p_n_MOS*(Qs1_VBulk_Source_int+Qs2_VBulk_Source_int)));
1919 _load_dynamic_jacobian4(Bulk,Source_int,Bulk,Drain_int,(p_n_MOS*(Qs1_VBulk_Drain_int+Qs2_VBulk_Drain_int)));
1920 #endif
1921 #endif
1922 _save_whitenoise2(Drain_int,Source_int,Sthermal,"thermal");
1923 _save_flickernoise2(Drain_int,Source_int,Sflicker,Af,"flicker");
1924 _save_whitenoise2(Drain,Drain_int,con25,"thermal");
1925 _save_whitenoise2(Source,Source_int,con26,"thermal");
1926 }
1927 else
1928 {
1930 #if defined(_DERIVATE)
1932 #endif
1934 #if defined(_DERIVATE)
1936 #endif
1938 #if defined(_DERIVATE)
1939 _load_static_jacobian4(Source_int,Drain_int,Source_int,Bulk,(p_n_MOS*Ids_VSource_int_Bulk));
1940 _load_static_jacobian4(Source_int,Drain_int,Drain_int,Bulk,(p_n_MOS*Ids_VDrain_int_Bulk));
1941 _load_static_jacobian4(Source_int,Drain_int,Gate,Bulk,(p_n_MOS*Ids_VGate_Bulk));
1942 #endif
1943 if
1944 ((LEVEL==2))
1945 {
1946 _load_static_residual2(Source_int,Bulk,(p_n_MOS*Idb));
1947 #if defined(_DERIVATE)
1948 _load_static_jacobian4(Source_int,Bulk,Source_int,Bulk,(p_n_MOS*Idb_VSource_int_Bulk));
1949 _load_static_jacobian4(Source_int,Bulk,Drain_int,Bulk,(p_n_MOS*Idb_VDrain_int_Bulk));
1950 _load_static_jacobian4(Source_int,Bulk,Gate,Bulk,(p_n_MOS*Idb_VGate_Bulk));
1951 #endif
1952 }
1953 #if defined(_DYNAMIC)
1954 _load_dynamic_residual2(Gate,Source_int,((p_n_MOS*Xpart)*_DDT(qg)));
1955 #if defined(_DERIVATE)
1956 _load_dynamic_jacobian4(Gate,Source_int,Source_int,Bulk,((p_n_MOS*Xpart)*qg_VSource_int_Bulk));
1957 _load_dynamic_jacobian4(Gate,Source_int,Drain_int,Bulk,((p_n_MOS*Xpart)*qg_VDrain_int_Bulk));
1958 _load_dynamic_jacobian4(Gate,Source_int,Gate,Bulk,((p_n_MOS*Xpart)*qg_VGate_Bulk));
1959 #endif
1960 #endif
1961 #if defined(_DYNAMIC)
1962 _load_dynamic_residual2(Gate,Drain_int,((p_n_MOS*Spart)*_DDT(qg)));
1963 #if defined(_DERIVATE)
1964 _load_dynamic_jacobian4(Gate,Drain_int,Source_int,Bulk,((p_n_MOS*Spart)*qg_VSource_int_Bulk));
1965 _load_dynamic_jacobian4(Gate,Drain_int,Drain_int,Bulk,((p_n_MOS*Spart)*qg_VDrain_int_Bulk));
1966 _load_dynamic_jacobian4(Gate,Drain_int,Gate,Bulk,((p_n_MOS*Spart)*qg_VGate_Bulk));
1967 #endif
1968 #endif
1969 #if defined(_DYNAMIC)
1970 _load_dynamic_residual2(Source_int,Bulk,((p_n_MOS*Xpart)*_DDT(qb)));
1971 #if defined(_DERIVATE)
1972 _load_dynamic_jacobian4(Source_int,Bulk,Source_int,Bulk,((p_n_MOS*Xpart)*qb_VSource_int_Bulk));
1973 _load_dynamic_jacobian4(Source_int,Bulk,Drain_int,Bulk,((p_n_MOS*Xpart)*qb_VDrain_int_Bulk));
1974 _load_dynamic_jacobian4(Source_int,Bulk,Gate,Bulk,((p_n_MOS*Xpart)*qb_VGate_Bulk));
1975 #endif
1976 #endif
1977 #if defined(_DYNAMIC)
1978 _load_dynamic_residual2(Drain_int,Bulk,((p_n_MOS*Spart)*_DDT(qb)));
1979 #if defined(_DERIVATE)
1980 _load_dynamic_jacobian4(Drain_int,Bulk,Source_int,Bulk,((p_n_MOS*Spart)*qb_VSource_int_Bulk));
1981 _load_dynamic_jacobian4(Drain_int,Bulk,Drain_int,Bulk,((p_n_MOS*Spart)*qb_VDrain_int_Bulk));
1982 _load_dynamic_jacobian4(Drain_int,Bulk,Gate,Bulk,((p_n_MOS*Spart)*qb_VGate_Bulk));
1983 #endif
1984 #endif
1985 #if defined(_DYNAMIC)
1986 _load_dynamic_residual2(Gate,Drain_int,(p_n_MOS*_DDT(qgso)));
1987 #if defined(_DERIVATE)
1988 _load_dynamic_jacobian4(Gate,Drain_int,Source_int,Bulk,(p_n_MOS*qgso_VSource_int_Bulk));
1989 _load_dynamic_jacobian4(Gate,Drain_int,Drain_int,Bulk,(p_n_MOS*qgso_VDrain_int_Bulk));
1990 _load_dynamic_jacobian4(Gate,Drain_int,Gate,Bulk,(p_n_MOS*qgso_VGate_Bulk));
1991 #endif
1992 #endif
1993 #if defined(_DYNAMIC)
1994 _load_dynamic_residual2(Gate,Source_int,(p_n_MOS*_DDT(qgdo)));
1995 #if defined(_DERIVATE)
1996 _load_dynamic_jacobian4(Gate,Source_int,Drain_int,Bulk,(p_n_MOS*qgdo_VDrain_int_Bulk));
1997 _load_dynamic_jacobian4(Gate,Source_int,Source_int,Bulk,(p_n_MOS*qgdo_VSource_int_Bulk));
1998 _load_dynamic_jacobian4(Gate,Source_int,Gate,Bulk,(p_n_MOS*qgdo_VGate_Bulk));
1999 #endif
2000 #endif
2001 #if defined(_DYNAMIC)
2002 _load_dynamic_residual2(Gate,Bulk,(p_n_MOS*_DDT(qgbo)));
2003 #if defined(_DERIVATE)
2004 _load_dynamic_jacobian4(Gate,Bulk,Gate,Bulk,(p_n_MOS*qgbo_VGate_Bulk));
2005 #endif
2006 #endif
2007 _load_static_residual2(Bulk,Source_int,(p_n_MOS*(Id1+Id2)));
2008 #if defined(_DERIVATE)
2009 _load_static_jacobian4(Bulk,Source_int,Bulk,Drain_int,(p_n_MOS*(Id1_VBulk_Drain_int+Id2_VBulk_Drain_int)));
2010 _load_static_jacobian4(Bulk,Source_int,Bulk,Source_int,(p_n_MOS*(Id1_VBulk_Source_int+Id2_VBulk_Source_int)));
2011 #endif
2012 #if defined(_DYNAMIC)
2013 _load_dynamic_residual2(Bulk,Source_int,(p_n_MOS*_DDT((Qd1+Qd2))));
2014 #if defined(_DERIVATE)
2015 _load_dynamic_jacobian4(Bulk,Source_int,Bulk,Drain_int,(p_n_MOS*(Qd1_VBulk_Drain_int+Qd2_VBulk_Drain_int)));
2016 _load_dynamic_jacobian4(Bulk,Source_int,Bulk,Source_int,(p_n_MOS*(Qd1_VBulk_Source_int+Qd2_VBulk_Source_int)));
2017 #endif
2018 #endif
2019 _load_static_residual2(Bulk,Drain_int,(p_n_MOS*(Is1+Is2)));
2020 #if defined(_DERIVATE)
2021 _load_static_jacobian4(Bulk,Drain_int,Bulk,Source_int,(p_n_MOS*(Is1_VBulk_Source_int+Is2_VBulk_Source_int)));
2022 _load_static_jacobian4(Bulk,Drain_int,Bulk,Drain_int,(p_n_MOS*(Is1_VBulk_Drain_int+Is2_VBulk_Drain_int)));
2023 #endif
2024 #if defined(_DYNAMIC)
2025 _load_dynamic_residual2(Bulk,Drain_int,(p_n_MOS*_DDT((Qs1+Qs2))));
2026 #if defined(_DERIVATE)
2027 _load_dynamic_jacobian4(Bulk,Drain_int,Bulk,Source_int,(p_n_MOS*(Qs1_VBulk_Source_int+Qs2_VBulk_Source_int)));
2028 _load_dynamic_jacobian4(Bulk,Drain_int,Bulk,Drain_int,(p_n_MOS*(Qs1_VBulk_Drain_int+Qs2_VBulk_Drain_int)));
2029 #endif
2030 #endif
2031 _save_whitenoise2(Source_int,Drain_int,Sthermal,"thermal");
2032 _save_flickernoise2(Source_int,Drain_int,Sflicker,Af,"flicker");
2033 _save_whitenoise2(Source_int,Source,con25,"thermal");
2034 _save_whitenoise2(Drain_int,Drain,con26,"thermal");
2035 }
2036 
2037 /* ------------------ end of verilog analog equations --------------------- */
2038 
2039 /* ------------------ evaluate verilog noise equations -------------------- */
2040 
2041 /* ------------------- end of verilog noise equations --------------------- */
2042 }
2043 
2044 /* Perform DC iteration. */
2045 void EKV26MOS::calcDC (void)
2046 {
2047  // evaluate Verilog code
2048  initVerilog ();
2049  calcVerilog ();
2050 
2051  // fill right hand side and static jacobian
2052  for (int i1 = 0; i1 < 6; i1++) {
2053  setI (i1, _rhs[i1]);
2054  for (int i2 = 0; i2 < 6; i2++) {
2055  setY (i1, i2, _jstat[i1][i2]);
2056  }
2057  }
2058 }
2059 
2060 /* Save operating points. */
2062 {
2063  // save global instance operating points
2064 }
2065 
2066 /* Load operating points. */
2068 {
2069 }
2070 
2071 /* Calculate operating points. */
2073 {
2074 }
2075 
2076 /* Initialization of AC analysis. */
2077 void EKV26MOS::initAC (void)
2078 {
2079  allocMatrixMNA ();
2080 }
2081 
2082 /* Perform AC calculations. */
2083 void EKV26MOS::calcAC (nr_double_t frequency)
2084 {
2085  setMatrixY (calcMatrixY (frequency));
2086 }
2087 
2088 /* Compute Y-matrix for AC analysis. */
2089 matrix EKV26MOS::calcMatrixY (nr_double_t frequency)
2090 {
2091  _freq = frequency;
2093  matrix y (6);
2094 
2095  for (int i1 = 0; i1 < 6; i1++) {
2096  for (int i2 = 0; i2 < 6; i2++) {
2097  y (i1,i2) = rect (_jstat[i1][i2], _jdyna[i1][i2] * 2 * M_PI * _freq);
2098  }
2099  }
2100 
2101  return y;
2102 }
2103 
2104 /* Initialization of S-parameter analysis. */
2105 void EKV26MOS::initSP (void)
2106 {
2107  allocMatrixS ();
2108 }
2109 
2110 /* Perform S-parameter calculations. */
2111 void EKV26MOS::calcSP (nr_double_t frequency)
2112 {
2113  setMatrixS (ytos (calcMatrixY (frequency)));
2114 }
2115 
2116 /* Initialization of transient analysis. */
2117 void EKV26MOS::initTR (void)
2118 {
2119  setStates (2 * 6 * 6);
2120  initDC ();
2121 }
2122 
2123 /* Perform transient analysis iteration step. */
2124 void EKV26MOS::calcTR (nr_double_t)
2125 {
2126  doHB = 0;
2127  doAC = 1;
2128  doTR = 1;
2129  calcDC ();
2130 
2131  int i1, i2, i3, i4, state;
2132 
2133  // 2-node charge integrations
2134  for (i1 = 0; i1 < 6; i1++) {
2135  for (i2 = 0; i2 < 6; i2++) {
2136  state = 2 * (i2 + 6 * i1);
2137  if (i1 != i2)
2138  if (_charges[i1][i2] != 0.0)
2139  transientCapacitanceQ (state, i1, i2, _charges[i1][i2]);
2140  } }
2141 
2142  // 1-node charge integrations
2143  for (i1 = 0; i1 < 6; i1++) {
2144  state = 2 * (i1 + 6 * i1);
2145  if (_charges[i1][i1] != 0.0)
2146  transientCapacitanceQ (state, i1, _charges[i1][i1]);
2147  }
2148 
2149  // charge: 2-node, voltage: 2-node
2150  for (i1 = 0; i1 < 6; i1++) {
2151  for (i2 = 0; i2 < 6; i2++) {
2152  if (i1 != i2)
2153  for (i3 = 0; i3 < 6; i3++) {
2154  for (i4 = 0; i4 < 6; i4++) {
2155  if (i3 != i4)
2156  if (_caps[i1][i2][i3][i4] != 0.0)
2157  transientCapacitanceC (i1, i2, i3, i4, _caps[i1][i2][i3][i4], BP(i3,i4));
2158  } } } }
2159 
2160  // charge: 2-node, voltage: 1-node
2161  for (i1 = 0; i1 < 6; i1++) {
2162  for (i2 = 0; i2 < 6; i2++) {
2163  if (i1 != i2)
2164  for (i3 = 0; i3 < 6; i3++) {
2165  if (_caps[i1][i2][i3][i3] != 0.0)
2166  transientCapacitanceC2Q (i1, i2, i3, _caps[i1][i2][i3][i3], NP(i3));
2167  } } }
2168 
2169  // charge: 1-node, voltage: 2-node
2170  for (i1 = 0; i1 < 6; i1++) {
2171  for (i3 = 0; i3 < 6; i3++) {
2172  for (i4 = 0; i4 < 6; i4++) {
2173  if (i3 != i4)
2174  if (_caps[i1][i1][i3][i4] != 0.0)
2175  transientCapacitanceC2V (i1, i3, i4, _caps[i1][i1][i3][i4], BP(i3,i4));
2176  } } }
2177 
2178  // charge: 1-node, voltage: 1-node
2179  for (i1 = 0; i1 < 6; i1++) {
2180  for (i3 = 0; i3 < 6; i3++) {
2181  if (_caps[i1][i1][i3][i3] != 0.0)
2182  transientCapacitanceC (i1, i3, _caps[i1][i1][i3][i3], NP(i3));
2183  } }
2184 }
2185 
2186 /* Compute Cy-matrix for AC noise analysis. */
2187 matrix EKV26MOS::calcMatrixCy (nr_double_t frequency)
2188 {
2189  _freq = frequency;
2190  matrix cy (6);
2191 
2192  _load_flickernoise2 (Source_int,Drain_int,_flicker_pwr[Source_int][Drain_int],_flicker_exp[Source_int][Drain_int]);
2193  _load_flickernoise2 (Drain_int,Source_int,_flicker_pwr[Drain_int][Source_int],_flicker_exp[Drain_int][Source_int]);
2200 
2201  return cy;
2202 }
2203 
2204 /* Perform AC noise computations. */
2205 void EKV26MOS::calcNoiseAC (nr_double_t frequency)
2206 {
2207  setMatrixN (calcMatrixCy (frequency));
2208 }
2209 
2210 /* Perform S-parameter noise computations. */
2211 void EKV26MOS::calcNoiseSP (nr_double_t frequency)
2212 {
2213  setMatrixN (cytocs (calcMatrixCy (frequency) * z0, getMatrixS ()));
2214 }
2215 
2216 /* Initialization of HB analysis. */
2218 {
2219  initDC ();
2220  allocMatrixHB ();
2221 }
2222 
2223 /* Perform HB analysis. */
2225 {
2226  doHB = 1;
2227  doAC = 1;
2228  doTR = 0;
2229 
2230  // jacobian dI/dV and currents get filled
2231  calcDC ();
2233 
2234  // fill in HB matrices
2235  for (int i1 = 0; i1 < 6; i1++) {
2236  setQ (i1, _qhs[i1]); // charges
2237  setCV (i1, _chs[i1]); // jacobian dQ/dV * V
2238  setGV (i1, _ghs[i1]); // jacobian dI/dV * V
2239  for (int i2 = 0; i2 < 6; i2++) {
2240  setQV (i1, i2, _jdyna[i1][i2]); // jacobian dQ/dV
2241  }
2242  }
2243 }
2244 
2245 #include "EKV26MOS.defs.h"