Branch data Line data Source code
1 : : /*
2 : : * bsim3v34nMOS.core.h - device class definitions for bsim3v34nMOS 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 : : #ifndef __bsim3v34nMOS_H__
12 : : #define __bsim3v34nMOS_H__
13 : :
14 [ # # ]: 0 : class bsim3v34nMOS : public qucs::circuit
15 : : {
16 : : public:
17 [ # # ]: 208 : CREATOR (bsim3v34nMOS);
18 : :
19 : : void initDC (void);
20 : : void restartDC (void);
21 : : void calcDC (void);
22 : : void saveOperatingPoints (void);
23 : : void loadOperatingPoints (void);
24 : : void calcOperatingPoints (void);
25 : : void initAC (void);
26 : : void calcAC (nr_double_t);
27 : : void initSP (void);
28 : : void calcSP (nr_double_t);
29 : : void calcNoiseAC (nr_double_t);
30 : : void calcNoiseSP (nr_double_t);
31 : : void initTR (void);
32 : : void calcTR (nr_double_t);
33 : : void initHB (int);
34 : : void calcHB (int);
35 : :
36 : : private:
37 : : void initVerilog (void);
38 : : void calcVerilog (void);
39 : : void initModel (void);
40 : : void loadVariables (void);
41 : : void initializeModel (void);
42 : : void initializeInstance (void);
43 : : void initialStep (void);
44 : : void finalStep (void);
45 : : qucs::matrix calcMatrixY (nr_double_t);
46 : : qucs::matrix calcMatrixCy (nr_double_t);
47 : :
48 : : private:
49 : : int doHB;
50 : : int doAC;
51 : : int doTR;
52 : :
53 : : nr_double_t _freq;
54 : : nr_double_t _rhs[6];
55 : : nr_double_t _qhs[6];
56 : : nr_double_t _ghs[6];
57 : : nr_double_t _chs[6];
58 : : nr_double_t _jstat[6][6];
59 : : nr_double_t _jdyna[6][6];
60 : : nr_double_t _white_pwr[6][6];
61 : : nr_double_t _flicker_pwr[6][6];
62 : : nr_double_t _flicker_exp[6][6];
63 : : nr_double_t _charges[6][6];
64 : : nr_double_t _caps[6][6][6][6];
65 : :
66 : : // device model parameters
67 : : nr_double_t L;
68 : : nr_double_t W;
69 : : nr_double_t PS;
70 : : nr_double_t PD;
71 : : nr_double_t AS;
72 : : nr_double_t AD;
73 : : nr_double_t NRS;
74 : : nr_double_t NRD;
75 : : nr_double_t NQSMOD;
76 : : nr_double_t GMIN;
77 : : nr_double_t VERSION;
78 : : nr_double_t PARAMCHK;
79 : : nr_double_t MOBMOD;
80 : : nr_double_t CAPMOD;
81 : : nr_double_t NOIMOD;
82 : : nr_double_t BINUNIT;
83 : : nr_double_t TOX;
84 : : nr_double_t TOXM;
85 : : nr_double_t CDSC;
86 : : nr_double_t CDSCB;
87 : : nr_double_t CDSCD;
88 : : nr_double_t CIT;
89 : : nr_double_t NFACTOR;
90 : : nr_double_t XJ;
91 : : nr_double_t VSAT;
92 : : nr_double_t AT;
93 : : nr_double_t A0;
94 : : nr_double_t AGS;
95 : : nr_double_t A1;
96 : : nr_double_t A2;
97 : : nr_double_t KETA;
98 : : nr_double_t NSUB;
99 : : nr_double_t NCH;
100 : : nr_double_t NGATE;
101 : : nr_double_t GAMMA1;
102 : : nr_double_t GAMMA2;
103 : : nr_double_t VBX;
104 : : nr_double_t VBM;
105 : : nr_double_t XT;
106 : : nr_double_t K1;
107 : : nr_double_t KT1;
108 : : nr_double_t KT1L;
109 : : nr_double_t KT2;
110 : : nr_double_t K2;
111 : : nr_double_t K3;
112 : : nr_double_t K3B;
113 : : nr_double_t W0;
114 : : nr_double_t NLX;
115 : : nr_double_t DVT0;
116 : : nr_double_t DVT1;
117 : : nr_double_t DVT2;
118 : : nr_double_t DVT0W;
119 : : nr_double_t DVT1W;
120 : : nr_double_t DVT2W;
121 : : nr_double_t DROUT;
122 : : nr_double_t DSUB;
123 : : nr_double_t VTHO;
124 : : nr_double_t VTH0;
125 : : nr_double_t UA;
126 : : nr_double_t UA1;
127 : : nr_double_t UB;
128 : : nr_double_t UB1;
129 : : nr_double_t UC;
130 : : nr_double_t UC1;
131 : : nr_double_t U0;
132 : : nr_double_t UTE;
133 : : nr_double_t VOFF;
134 : : nr_double_t TNOM;
135 : : nr_double_t CGSO;
136 : : nr_double_t CGDO;
137 : : nr_double_t CGBO;
138 : : nr_double_t XPART;
139 : : nr_double_t ELM;
140 : : nr_double_t DELTA;
141 : : nr_double_t RSH;
142 : : nr_double_t RDSW;
143 : : nr_double_t PRWG;
144 : : nr_double_t PRWB;
145 : : nr_double_t PRT;
146 : : nr_double_t ETA0;
147 : : nr_double_t ETAB;
148 : : nr_double_t PCLM;
149 : : nr_double_t PDIBLC1;
150 : : nr_double_t PDIBLC2;
151 : : nr_double_t PDIBLCB;
152 : : nr_double_t PSCBE1;
153 : : nr_double_t PSCBE2;
154 : : nr_double_t PVAG;
155 : : nr_double_t JS;
156 : : nr_double_t JSW;
157 : : nr_double_t PB;
158 : : nr_double_t NJ;
159 : : nr_double_t XTI;
160 : : nr_double_t MJ;
161 : : nr_double_t PBSW;
162 : : nr_double_t MJSW;
163 : : nr_double_t PBSWG;
164 : : nr_double_t MJSWG;
165 : : nr_double_t CJ;
166 : : nr_double_t VFBCV;
167 : : nr_double_t VFB;
168 : : nr_double_t CJSW;
169 : : nr_double_t CJSWG;
170 : : nr_double_t TPB;
171 : : nr_double_t TCJ;
172 : : nr_double_t TPBSW;
173 : : nr_double_t TCJSW;
174 : : nr_double_t TPBSWG;
175 : : nr_double_t TCJSWG;
176 : : nr_double_t ACDE;
177 : : nr_double_t MOIN;
178 : : nr_double_t NOFF;
179 : : nr_double_t VOFFCV;
180 : : nr_double_t LINT;
181 : : nr_double_t LL;
182 : : nr_double_t LLC;
183 : : nr_double_t LLN;
184 : : nr_double_t LW;
185 : : nr_double_t LWC;
186 : : nr_double_t LWN;
187 : : nr_double_t LWL;
188 : : nr_double_t LWLC;
189 : : nr_double_t LMIN;
190 : : nr_double_t LMAX;
191 : : nr_double_t WR;
192 : : nr_double_t WINT;
193 : : nr_double_t DWG;
194 : : nr_double_t DWB;
195 : : nr_double_t WL;
196 : : nr_double_t WLC;
197 : : nr_double_t WLN;
198 : : nr_double_t WW;
199 : : nr_double_t WWC;
200 : : nr_double_t WWN;
201 : : nr_double_t WWL;
202 : : nr_double_t WWLC;
203 : : nr_double_t WMIN;
204 : : nr_double_t WMAX;
205 : : nr_double_t B0;
206 : : nr_double_t B1;
207 : : nr_double_t CGSL;
208 : : nr_double_t CGDL;
209 : : nr_double_t CKAPPA;
210 : : nr_double_t CF;
211 : : nr_double_t CLC;
212 : : nr_double_t CLE;
213 : : nr_double_t DWC;
214 : : nr_double_t DLC;
215 : : nr_double_t ALPHA0;
216 : : nr_double_t ALPHA1;
217 : : nr_double_t BETA0;
218 : : nr_double_t IJTH;
219 : : nr_double_t LCDSC;
220 : : nr_double_t LCDSCB;
221 : : nr_double_t LCDSCD;
222 : : nr_double_t LCIT;
223 : : nr_double_t LNFACTOR;
224 : : nr_double_t LXJ;
225 : : nr_double_t LVSAT;
226 : : nr_double_t LAT;
227 : : nr_double_t LA0;
228 : : nr_double_t LAGS;
229 : : nr_double_t LA1;
230 : : nr_double_t LA2;
231 : : nr_double_t LKETA;
232 : : nr_double_t LNSUB;
233 : : nr_double_t LNCH;
234 : : nr_double_t LNGATE;
235 : : nr_double_t LGAMMA1;
236 : : nr_double_t LGAMMA2;
237 : : nr_double_t LVBX;
238 : : nr_double_t LVBM;
239 : : nr_double_t LXT;
240 : : nr_double_t LK1;
241 : : nr_double_t LKT1;
242 : : nr_double_t LKT1L;
243 : : nr_double_t LKT2;
244 : : nr_double_t LK2;
245 : : nr_double_t LK3;
246 : : nr_double_t LK3B;
247 : : nr_double_t LW0;
248 : : nr_double_t LNLX;
249 : : nr_double_t LDVT0;
250 : : nr_double_t LDVT1;
251 : : nr_double_t LDVT2;
252 : : nr_double_t LDVT0W;
253 : : nr_double_t LDVT1W;
254 : : nr_double_t LDVT2W;
255 : : nr_double_t LDROUT;
256 : : nr_double_t LDSUB;
257 : : nr_double_t LVTH0;
258 : : nr_double_t LVTHO;
259 : : nr_double_t LUA;
260 : : nr_double_t LUA1;
261 : : nr_double_t LUB;
262 : : nr_double_t LUB1;
263 : : nr_double_t LUC;
264 : : nr_double_t LUC1;
265 : : nr_double_t LU0;
266 : : nr_double_t LUTE;
267 : : nr_double_t LVOFF;
268 : : nr_double_t LELM;
269 : : nr_double_t LDELTA;
270 : : nr_double_t LRDSW;
271 : : nr_double_t LPRWG;
272 : : nr_double_t LPRWB;
273 : : nr_double_t LPRT;
274 : : nr_double_t LETA0;
275 : : nr_double_t LETAB;
276 : : nr_double_t LPCLM;
277 : : nr_double_t LPDIBLC1;
278 : : nr_double_t LPDIBLC2;
279 : : nr_double_t LPDIBLCB;
280 : : nr_double_t LPSCBE1;
281 : : nr_double_t LPSCBE2;
282 : : nr_double_t LPVAG;
283 : : nr_double_t LWR;
284 : : nr_double_t LDWG;
285 : : nr_double_t LDWB;
286 : : nr_double_t LB0;
287 : : nr_double_t LB1;
288 : : nr_double_t LCGSL;
289 : : nr_double_t LCGDL;
290 : : nr_double_t LCKAPPA;
291 : : nr_double_t LCF;
292 : : nr_double_t LCLC;
293 : : nr_double_t LCLE;
294 : : nr_double_t LALPHA0;
295 : : nr_double_t LALPHA1;
296 : : nr_double_t LBETA0;
297 : : nr_double_t LVFBCV;
298 : : nr_double_t LVFB;
299 : : nr_double_t LACDE;
300 : : nr_double_t LMOIN;
301 : : nr_double_t LNOFF;
302 : : nr_double_t LVOFFCV;
303 : : nr_double_t WCDSC;
304 : : nr_double_t WCDSCB;
305 : : nr_double_t WCDSCD;
306 : : nr_double_t WCIT;
307 : : nr_double_t WNFACTOR;
308 : : nr_double_t WXJ;
309 : : nr_double_t WVSAT;
310 : : nr_double_t WAT;
311 : : nr_double_t WA0;
312 : : nr_double_t WAGS;
313 : : nr_double_t WA1;
314 : : nr_double_t WA2;
315 : : nr_double_t WKETA;
316 : : nr_double_t WNSUB;
317 : : nr_double_t WNCH;
318 : : nr_double_t WNGATE;
319 : : nr_double_t WGAMMA1;
320 : : nr_double_t WGAMMA2;
321 : : nr_double_t WVBX;
322 : : nr_double_t WVBM;
323 : : nr_double_t WXT;
324 : : nr_double_t WK1;
325 : : nr_double_t WKT1;
326 : : nr_double_t WKT1L;
327 : : nr_double_t WKT2;
328 : : nr_double_t WK2;
329 : : nr_double_t WK3;
330 : : nr_double_t WK3B;
331 : : nr_double_t WW0;
332 : : nr_double_t WNLX;
333 : : nr_double_t WDVT0;
334 : : nr_double_t WDVT1;
335 : : nr_double_t WDVT2;
336 : : nr_double_t WDVT0W;
337 : : nr_double_t WDVT1W;
338 : : nr_double_t WDVT2W;
339 : : nr_double_t WDROUT;
340 : : nr_double_t WDSUB;
341 : : nr_double_t WVTH0;
342 : : nr_double_t WVTHO;
343 : : nr_double_t WUA;
344 : : nr_double_t WUA1;
345 : : nr_double_t WUB;
346 : : nr_double_t WUB1;
347 : : nr_double_t WUC;
348 : : nr_double_t WUC1;
349 : : nr_double_t WU0;
350 : : nr_double_t WUTE;
351 : : nr_double_t WVOFF;
352 : : nr_double_t WELM;
353 : : nr_double_t WDELTA;
354 : : nr_double_t WRDSW;
355 : : nr_double_t WPRWG;
356 : : nr_double_t WPRWB;
357 : : nr_double_t WPRT;
358 : : nr_double_t WETA0;
359 : : nr_double_t WETAB;
360 : : nr_double_t WPCLM;
361 : : nr_double_t WPDIBLC1;
362 : : nr_double_t WPDIBLC2;
363 : : nr_double_t WPDIBLCB;
364 : : nr_double_t WPSCBE1;
365 : : nr_double_t WPSCBE2;
366 : : nr_double_t WPVAG;
367 : : nr_double_t WWR;
368 : : nr_double_t WDWG;
369 : : nr_double_t WDWB;
370 : : nr_double_t WB0;
371 : : nr_double_t WB1;
372 : : nr_double_t WCGSL;
373 : : nr_double_t WCGDL;
374 : : nr_double_t WCKAPPA;
375 : : nr_double_t WCF;
376 : : nr_double_t WCLC;
377 : : nr_double_t WCLE;
378 : : nr_double_t WALPHA0;
379 : : nr_double_t WALPHA1;
380 : : nr_double_t WBETA0;
381 : : nr_double_t WVFBCV;
382 : : nr_double_t WVFB;
383 : : nr_double_t WACDE;
384 : : nr_double_t WMOIN;
385 : : nr_double_t WNOFF;
386 : : nr_double_t WVOFFCV;
387 : : nr_double_t PCDSC;
388 : : nr_double_t PCDSCB;
389 : : nr_double_t PCDSCD;
390 : : nr_double_t PCIT;
391 : : nr_double_t PNFACTOR;
392 : : nr_double_t PXJ;
393 : : nr_double_t PVSAT;
394 : : nr_double_t PAT;
395 : : nr_double_t PA0;
396 : : nr_double_t PAGS;
397 : : nr_double_t PA1;
398 : : nr_double_t PA2;
399 : : nr_double_t PKETA;
400 : : nr_double_t PNSUB;
401 : : nr_double_t PNCH;
402 : : nr_double_t PNGATE;
403 : : nr_double_t PGAMMA1;
404 : : nr_double_t PGAMMA2;
405 : : nr_double_t PVBX;
406 : : nr_double_t PVBM;
407 : : nr_double_t PXT;
408 : : nr_double_t PK1;
409 : : nr_double_t PKT1;
410 : : nr_double_t PKT1L;
411 : : nr_double_t PKT2;
412 : : nr_double_t PK2;
413 : : nr_double_t PK3;
414 : : nr_double_t PK3B;
415 : : nr_double_t PW0;
416 : : nr_double_t PNLX;
417 : : nr_double_t PDVT0;
418 : : nr_double_t PDVT1;
419 : : nr_double_t PDVT2;
420 : : nr_double_t PDVT0W;
421 : : nr_double_t PDVT1W;
422 : : nr_double_t PDVT2W;
423 : : nr_double_t PDROUT;
424 : : nr_double_t PDSUB;
425 : : nr_double_t PVTH0;
426 : : nr_double_t PVTHO;
427 : : nr_double_t PUA;
428 : : nr_double_t PUA1;
429 : : nr_double_t PUB;
430 : : nr_double_t PUB1;
431 : : nr_double_t PUC;
432 : : nr_double_t PUC1;
433 : : nr_double_t PU0;
434 : : nr_double_t PUTE;
435 : : nr_double_t PVOFF;
436 : : nr_double_t PELM;
437 : : nr_double_t PDELTA;
438 : : nr_double_t PRDSW;
439 : : nr_double_t PPRWG;
440 : : nr_double_t PPRWB;
441 : : nr_double_t PPRT;
442 : : nr_double_t PETA0;
443 : : nr_double_t PETAB;
444 : : nr_double_t PPCLM;
445 : : nr_double_t PPDIBLC1;
446 : : nr_double_t PPDIBLC2;
447 : : nr_double_t PPDIBLCB;
448 : : nr_double_t PPSCBE1;
449 : : nr_double_t PPSCBE2;
450 : : nr_double_t PPVAG;
451 : : nr_double_t PWR;
452 : : nr_double_t PDWG;
453 : : nr_double_t PDWB;
454 : : nr_double_t PB0;
455 : : nr_double_t PB1;
456 : : nr_double_t PCGSL;
457 : : nr_double_t PCGDL;
458 : : nr_double_t PCKAPPA;
459 : : nr_double_t PCF;
460 : : nr_double_t PCLC;
461 : : nr_double_t PCLE;
462 : : nr_double_t PALPHA0;
463 : : nr_double_t PALPHA1;
464 : : nr_double_t PBETA0;
465 : : nr_double_t PVFBCV;
466 : : nr_double_t PVFB;
467 : : nr_double_t PACDE;
468 : : nr_double_t PMOIN;
469 : : nr_double_t PNOFF;
470 : : nr_double_t PVOFFCV;
471 : : nr_double_t KF;
472 : : nr_double_t AF;
473 : : nr_double_t EF;
474 : :
475 : : // global model variables
476 : :
477 : : //
478 : : double TYPE;
479 : : //
480 : : double tox;
481 : : //
482 : : double cox;
483 : : //
484 : : double vth0;
485 : : //
486 : : double ngate;
487 : : //
488 : : double uc;
489 : : //
490 : : double tnom;
491 : : //
492 : : double pdiblb;
493 : : //
494 : : double bulkJctBotGradingCoeff;
495 : : //
496 : : double bulkJctSideGradingCoeff;
497 : : //
498 : : double bulkJctGateSideGradingCoeff;
499 : : //
500 : : double unitAreaJctCap;
501 : : //
502 : : double unitAreaTempJctCap;
503 : : //
504 : : double unitLengthSidewallJctCap;
505 : : //
506 : : double unitLengthSidewallTempJctCap;
507 : : //
508 : : double unitLengthGateSidewallJctCap;
509 : : //
510 : : double unitLengthGateSidewallTempJctCap;
511 : : //
512 : : double Temp;
513 : : //
514 : : double factor1;
515 : : //
516 : : double vtm;
517 : : //
518 : : double T_0;
519 : : //
520 : : double T1;
521 : : //
522 : : double T2;
523 : : //
524 : : double T3;
525 : : //
526 : : double T4;
527 : : //
528 : : double T5;
529 : : //
530 : : double PhiB;
531 : : //
532 : : double PhiBSW;
533 : : //
534 : : double PhiBSWG;
535 : : //
536 : : double tmp;
537 : : //
538 : : double tmp1;
539 : : //
540 : : double tmp2;
541 : : //
542 : : double tmp3;
543 : : //
544 : : double leff;
545 : : //
546 : : double weff;
547 : : //
548 : : double leffCV;
549 : : //
550 : : double weffCV;
551 : : //
552 : : double cdsc;
553 : : //
554 : : double cdscb;
555 : : //
556 : : double cdscd;
557 : : //
558 : : double cit;
559 : : //
560 : : double nfactor;
561 : : //
562 : : double xj;
563 : : //
564 : : double a0;
565 : : //
566 : : double ags;
567 : : //
568 : : double a1;
569 : : //
570 : : double a2;
571 : : //
572 : : double keta;
573 : : //
574 : : double vfb;
575 : : //
576 : : double k1;
577 : : //
578 : : double kt1;
579 : : //
580 : : double kt1l;
581 : : //
582 : : double kt2;
583 : : //
584 : : double k3;
585 : : //
586 : : double k3b;
587 : : //
588 : : double w0;
589 : : //
590 : : double nlx;
591 : : //
592 : : double dvt0;
593 : : //
594 : : double dvt1;
595 : : //
596 : : double dvt2;
597 : : //
598 : : double dvt0w;
599 : : //
600 : : double dvt1w;
601 : : //
602 : : double dvt2w;
603 : : //
604 : : double ua;
605 : : //
606 : : double ub;
607 : : //
608 : : double voff;
609 : : //
610 : : double delta;
611 : : //
612 : : double prwg;
613 : : //
614 : : double prwb;
615 : : //
616 : : double eta0;
617 : : //
618 : : double etab;
619 : : //
620 : : double pclm;
621 : : //
622 : : double pscbe1;
623 : : //
624 : : double pscbe2;
625 : : //
626 : : double pvag;
627 : : //
628 : : double dwg;
629 : : //
630 : : double dwb;
631 : : //
632 : : double b0;
633 : : //
634 : : double b1;
635 : : //
636 : : double alpha0;
637 : : //
638 : : double alpha1;
639 : : //
640 : : double beta0;
641 : : //
642 : : double cgsl;
643 : : //
644 : : double cgdl;
645 : : //
646 : : double ckappa;
647 : : //
648 : : double vfbcv;
649 : : //
650 : : double acde;
651 : : //
652 : : double moin;
653 : : //
654 : : double noff_param;
655 : : //
656 : : double voffcv_param;
657 : : //
658 : : double abulkCVfactor;
659 : : //
660 : : double u0temp;
661 : : //
662 : : double vsattemp;
663 : : //
664 : : double rds0;
665 : : //
666 : : double phi;
667 : : //
668 : : double sqrtPhi;
669 : : //
670 : : double phis3;
671 : : //
672 : : double Xdep0;
673 : : //
674 : : double litl;
675 : : //
676 : : double vbi;
677 : : //
678 : : double cdep0;
679 : : //
680 : : double ldeb;
681 : : //
682 : : double vbsc;
683 : : //
684 : : double k1ox;
685 : : //
686 : : double k2ox;
687 : : //
688 : : double theta0vb0;
689 : : //
690 : : double thetaRout;
691 : : //
692 : : double vfbzb;
693 : : //
694 : : double sourceArea;
695 : : //
696 : : double drainArea;
697 : : //
698 : : double sourcePerimeter;
699 : : //
700 : : double drainPerimeter;
701 : : //
702 : : double SourceSatCurrent;
703 : : //
704 : : double DrainSatCurrent;
705 : : //
706 : : double sourceConductance;
707 : : //
708 : : double drainConductance;
709 : : //
710 : : double Nvtm;
711 : : //
712 : : double vjsm;
713 : : //
714 : : double vjdm;
715 : : //
716 : : double IsEvjsm;
717 : : //
718 : : double IsEvjdm;
719 : : //
720 : : double cgso_param;
721 : : //
722 : : double cgdo_param;
723 : : //
724 : : double cgbo_param;
725 : :
726 : :
727 : : };
728 : :
729 : : #endif /* __bsim3v34nMOS_H__ */
|