49 #include <Xyce_config.h>
53 #include <N_UTL_Misc.h>
63 #include <N_LAS_Matrix.h>
64 #include <N_LAS_Vector.h>
68 namespace ADMSbsimcmg {
84 .setExpressionAccess(
NO_DOC)
87 .setDescription(
"Internal-use parameter for setting device instance temperature");
89 .setDescription(
"Designed Gate Length");
91 .setDescription(
"Diameter of the cylinder (GEOMOD=3)");
93 .setDescription(
"Body (Fin) thickness");
95 .setDescription(
"Fin pitch");
97 .setDescription(
"Number of fins per finger (real number enables optimization)");
99 .setDescription(
"number of gate contact (1 or 2 sided)");
101 .setDescription(
"Source to substrate overlap area through oxide");
103 .setDescription(
"Drain to substrate overlap area through oxide");
105 .setDescription(
"Perimeter of source to substrate overlap region through oxide");
107 .setDescription(
"Perimeter of drain to substrate overlap region through oxide");
109 .setDescription(
"Source junction area (BULKMOD=1)");
111 .setDescription(
"Drain junction area (BULKMOD=1)");
113 .setDescription(
"Source to substrate PN junction perimeter (BULKMOD=1)");
115 .setDescription(
"Drain to substrate PN junction perimeter (BULKMOD=1)");
117 .setDescription(
"Constant g/s overlap capacitance (CGEOMOD=1)");
119 .setDescription(
"Constant g/d overlap capacitance (CGEOMOD=1)");
121 .setDescription(
"Constant gate-to-source fringe capacitance (CGEOMOD=1)");
123 .setDescription(
"Constant gate-to-drain fringe capacitance (CGEOMOD=1)");
125 .setDescription(
"Constant drain-to-source fringe capacitance (All CGEOMOD)");
127 .setDescription(
"Number of source diffusion squares");
129 .setDescription(
"Number of source diffusion squares");
131 .setDescription(
"Length of the source/drain");
145 .setExpressionAccess(
NO_DOC)
148 .setDescription(
"Internal-use parameter for setting device model temperature");
150 .setDescription(
"Designed Gate Length");
152 .setDescription(
"Diameter of the cylinder (GEOMOD=3)");
154 .setDescription(
"Body (Fin) thickness");
156 .setDescription(
"Fin pitch");
158 .setDescription(
"Number of fingers");
160 .setDescription(
"Number of fins per finger (real number enables optimization)");
162 .setDescription(
"number of gate contact (1 or 2 sided)");
164 .setDescription(
"Source to substrate overlap area through oxide");
166 .setDescription(
"Drain to substrate overlap area through oxide");
168 .setDescription(
"Perimeter of source to substrate overlap region through oxide");
170 .setDescription(
"Perimeter of drain to substrate overlap region through oxide");
172 .setDescription(
"Source junction area (BULKMOD=1)");
174 .setDescription(
"Drain junction area (BULKMOD=1)");
176 .setDescription(
"Source to substrate PN junction perimeter (BULKMOD=1)");
178 .setDescription(
"Drain to substrate PN junction perimeter (BULKMOD=1)");
180 .setDescription(
"Constant g/s overlap capacitance (CGEOMOD=1)");
182 .setDescription(
"Constant g/d overlap capacitance (CGEOMOD=1)");
184 .setDescription(
"Constant gate-to-source fringe capacitance (CGEOMOD=1)");
186 .setDescription(
"Constant gate-to-drain fringe capacitance (CGEOMOD=1)");
188 .setDescription(
"Constant drain-to-source fringe capacitance (All CGEOMOD)");
190 .setDescription(
"Number of source diffusion squares");
192 .setDescription(
"Number of source diffusion squares");
194 .setDescription(
"Length of the source/drain");
196 .setDescription(
"L offset for channel length due to mask/etch effect");
198 .setDescription(
"Variability in Device Temperature ");
200 .setDescription(
"Variability in Vth");
202 .setDescription(
"Variability in carrier mobility");
204 .setDescription(
"Variability in Drain current for misc. reasons ");
207 .setDescription(
"Bulk model");
209 .setDescription(
"Surface potential algorithm");
211 .setDescription(
"Geometry mode selector");
214 .setDescription(
"Resistance model selector");
216 .setDescription(
"Asymmetric model selector");
218 .setDescription(
"model selector for Igc, Igs, and Igd");
220 .setDescription(
"model selector for Igb");
222 .setDescription(
"GIDL/GISL current switcher");
224 .setDescription(
"Impact ionization model switch");
227 .setDescription(
"Self heating and T node switcher --- NOT USED IN XYCE");
229 .setDescription(
"Gate electrode resistor and ge node switcher --- NOT USED IN XYCE");
231 .setDescription(
"Bias independent parasitic resistance model selector");
233 .setDescription(
"parasitic capacitance model selector");
235 .setDescription(
"Accumulation region capacitance model selector");
237 .setDescription(
"Length reduction parameter (dopant diffusion effect)");
239 .setDescription(
"Length reduction parameter (dopant diffusion effect)");
241 .setDescription(
"Length reduction parameter (dopant diffusion effect)");
243 .setDescription(
"Delta L for C-V model");
245 .setDescription(
"Delta L for C-V model in accumulation region (CAPMOD=1, BULKMOD=1)");
247 .setDescription(
"Delta L for Binning");
249 .setDescription(
"Length reduction parameter (dopant diffusion effect)");
251 .setDescription(
"equivalent oxide thickness in meters");
253 .setDescription(
"physical oxide thickness in meters");
255 .setDescription(
"equivalent oxide thickness of the buried oxide (SOI FinFET) or STI (bulk FinFET) in meters");
257 .setDescription(
"Fin height in meters");
259 .setDescription(
"End-channel factor, for different orientation/shape");
261 .setDescription(
"change of effective width due to shape of fin/cylinder");
263 .setDescription(
"CV end-channel factor, for different orientaion/shape");
265 .setDescription(
"CV change of effective width due to shape of fin/cylinder");
267 .setDescription(
"channel (body) doping");
269 .setDescription(
"NFIN dependence of channel (body) doping");
271 .setDescription(
"NFIN dependence of channel (body) doping");
273 .setDescription(
"Source/drain active doping concentration in m-3");
275 .setDescription(
"Gate workfunction, eV");
277 .setDescription(
"Length dependence of Gate workfunction, eV/m");
279 .setDescription(
"NFIN dependence of Gate workfunction");
281 .setDescription(
"NFIN dependence of Gate workfunction");
283 .setDescription(
"Relative dielectric constant of the gate dielectric");
285 .setDescription(
"Relative dielectric constant of the channel material");
287 .setDescription(
"Electron affinity of substrate, eV");
289 .setDescription(
"Intrinsic carrier constant at 300.15K, m-3");
291 .setDescription(
"Band gap of substrate at 300.15K, eV");
293 .setDescription(
"Conduction band density of states, m-3");
295 .setDescription(
"Parameter for Poly Gate Doping, for metal gate please set NGATE = 0");
297 .setDescription(
"Parameter for Vgs Clamping for inversion region calc. in accumulation");
299 .setDescription(
"parameter for interface trap");
301 .setDescription(
"coupling capacitance between S/D and channel");
303 .setDescription(
"NFIN dependence of CDSC");
305 .setDescription(
"NFIN dependence of CDSC");
307 .setDescription(
"drain-bias sensitivity of CDSC");
309 .setDescription(
"NFIN dependence of CDSCD");
311 .setDescription(
"NFIN dependence of CDSCD");
313 .setDescription(
"Reverse-mode drain-bais sensitivity of CDSC (Experimental)");
315 .setDescription(
"NFIN dependence of CDSCD");
317 .setDescription(
"NFIN dependence of CDSCD");
319 .setDescription(
"SCE coefficient");
321 .setDescription(
"SCE exponent coefficient, after binning should be in (0:inf)");
323 .setDescription(
"Subthreshold Swing exponent coefficient, after binning should be in (0:inf)");
325 .setDescription(
"Nonuniform vertical doping effect on surface potential, V");
327 .setDescription(
"DIBL coefficient");
329 .setDescription(
"NFIN dependence of ETA0");
331 .setDescription(
"NFIN dependence of ETA0");
333 .setDescription(
"Temperature dependence of DIBL coefficient, 1/K");
335 .setDescription(
"Reverse-mode DIBL coefficient (Experimental)");
337 .setDescription(
"Temperature dependence of Reverse-mode DIBL coefficient, 1/K");
339 .setDescription(
"DIBL exponent coefficient");
341 .setDescription(
"Coefficient for Drain-Induced Vth Shift (DITS)");
343 .setDescription(
"DITS exponent coefficient");
345 .setDescription(
"K1 for reverse short channel effect calculation ");
347 .setDescription(
"Equivalent length of pocket region at zero bias");
349 .setDescription(
"Vth shift handle");
351 .setDescription(
"Lateral NUD voltage parameter, V");
353 .setDescription(
"Temperature dependence of lateral NUD voltage parameter, V/K");
355 .setDescription(
"Correction factor for strong inversion, used in Mnud, after binnig should be from (0:inf)");
357 .setDescription(
"Temperature dependence of K0SI, 1/K");
359 .setDescription(
"Correction factor for strong inversion, used in Mob");
361 .setDescription(
"Temperature dependence of K1SI, 1/K");
363 .setDescription(
"Body effect voltage parameter, V, after binnig should be from [0.2:1.2]");
365 .setDescription(
"Body effect coefficient for sub-threshold region");
367 .setDescription(
"Temperature dependence of K1");
369 .setDescription(
"Correction factor for K1 in saturation (high Vds) ");
371 .setDescription(
"Temperature dependence of K1SAT1 ");
373 .setDescription(
"Prefactor + switch for QM Vth correction");
375 .setDescription(
"Prefactor + switch for QM Width correction for IV");
377 .setDescription(
"Prefactor + switch for QM Width and Toxeff correction for CV");
379 .setDescription(
"Prefactor + switch for QM Width and Toxeff correction for CV (accumulation region)");
381 .setDescription(
"Parameter for Geometric dependence of Tcen on R/TFIN/HFIN");
383 .setDescription(
"Parameter for Geometric dependence of Tcen on R/TFIN/HFIN");
385 .setDescription(
"Bulk charge coefficient for Tcen");
387 .setDescription(
"Knee-Point for Tcen in inversion (Charge normalized to Cox)");
389 .setDescription(
"Slope of normalized Tcen in inversion");
391 .setDescription(
"Knee-Point for Tcen in accumulation (Charge normalized to Cox)");
393 .setDescription(
"Slope of normalized Tcen in accumulation");
396 .setDescription(
"NFIN dependence of VSAT ");
398 .setDescription(
"NFIN dependence of VSAT ");
402 .setDescription(
"Velocity Saturation parameter for I_on degradation - forward mode");
404 .setDescription(
"NFIN dependence of VSAT1 ");
406 .setDescription(
"NFIN dependence of VSAT1 ");
408 .setDescription(
"Velocity Saturation parameter for I_on degradation - reverse mode");
410 .setDescription(
"NFIN dependence of VSAT1R ");
412 .setDescription(
"NFIN dependence of VSAT1R ");
417 .setDescription(
"Velocity saturation exponent, after binnig should be from [2.0:inf)");
422 .setDescription(
"Velocity Saturation parameter for CV");
427 .setDescription(
"Velocity saturation exponent for C-V");
437 .setDescription(
"Gmsat degradation parameter - forward mode ");
439 .setDescription(
"Gmsat degradation parameter - reverse mode");
448 .setDescription(
"NFIN dependence of U0 ");
450 .setDescription(
"NFIN dependence of U0 ");
458 .setDescription(
"Body effect for mobility degradation parameter - BULKMOD=1");
474 .setDescription(
"Average Channel Charge Weighting Factor, +1:source-side, 0:middle, -1:drain-side ");
488 .setDescription(
"Source side drift resistance parameter - forward mode");
490 .setDescription(
"Source side drift resistance parameter - reverse mode");
492 .setDescription(
"Drain side drift resistance parameter - forward mode");
494 .setDescription(
"Drain side drift resistance parameter - reverse mode");
496 .setDescription(
"Source side quasi-saturation parameter");
498 .setDescription(
"Drain side quasi-saturation parameter");
502 .setDescription(
"Gate bias dependence of source extension resistance");
506 .setDescription(
"Gate bias dependence of drain extension resistance");
512 .setDescription(
"DIBL Output Conductance parameter - forward mode");
514 .setDescription(
"DIBL Output Conductance parameter - reverse mode ");
516 .setDescription(
"DIBL Output Conductance parameter ");
524 .setDescription(
"CLM parameter for Short Channel CV ");
526 .setDescription(
"Non-saturation effect parameter for strong inversion region");
528 .setDescription(
"Temperature dependence of A1");
530 .setDescription(
"Non-saturation effect parameter for moderate inversion region");
532 .setDescription(
"Temperature dependence of A2");
534 .setDescription(
"Effective gate electrode external resistance");
536 .setDescription(
"Effective gate electrode per finger per fin resistance");
538 .setDescription(
"Source-side sheet resistance");
540 .setDescription(
"Drain-side sheet resistance");
542 .setDescription(
"Height of the raised source/drain on top of the fin");
544 .setDescription(
"Thickness of the silicide on top of the raised source/drain");
552 .setDescription(
"Relative dielectric constant of the spacer");
554 .setDescription(
"Gate height on top of the hard mask");
556 .setDescription(
"Height of hard mask on top of the fin");
561 .setDescription(
"Source/drain active doping concentration at Leff edge");
563 .setDescription(
"Fitting parameter for RGEOMOD=1");
565 .setDescription(
"Fitting parameter for RGEOMOD=1");
567 .setDescription(
"Fitting parameter for RGEOMOD=1");
569 .setDescription(
"Fitting parameter for RGEOMOD=1");
571 .setDescription(
"Fitting parameter for RGEOMOD=1");
573 .setDescription(
"Fitting parameter for CGEOMOD=2");
575 .setDescription(
"Fitting parameter for CGEOMOD=2");
577 .setDescription(
"Fitting parameter for CGEOMOD=2");
579 .setDescription(
"Fitting parameter for CGEOMOD=2");
581 .setDescription(
"Fitting parameter for CGEOMOD=2");
583 .setDescription(
"parameter for Igb in inversion");
585 .setDescription(
"parameter for Igb in inversion");
587 .setDescription(
"parameter for Igb in inversion");
589 .setDescription(
"parameter for Igb in inversion");
591 .setDescription(
"parameter for Igb in inversion");
593 .setDescription(
"parameter for Igb in inversion");
595 .setDescription(
"parameter for Igb in accumulation");
597 .setDescription(
"parameter for Igb in accumulation");
599 .setDescription(
"parameter for Igb in accumulation");
601 .setDescription(
"parameter for Igb in accumulation");
603 .setDescription(
"parameter for Igb in accumulation");
605 .setDescription(
"parameter for Igc in inversion");
607 .setDescription(
"parameter for Igc in inversion");
609 .setDescription(
"parameter for Igc in inversion");
611 .setDescription(
"parameter for Igc in inversion");
613 .setDescription(
"parameter for Igc partition");
615 .setDescription(
"Delta L for Igs model");
617 .setDescription(
"parameter for Igs in inversion");
619 .setDescription(
"parameter for Igs in inversion");
621 .setDescription(
"parameter for Igs in inversion");
623 .setDescription(
"parameter for Igs in inversion");
625 .setDescription(
"Delta L for Igd model");
627 .setDescription(
"parameter for Igd in inversion");
629 .setDescription(
"parameter for Igd in inversion");
631 .setDescription(
"parameter for Igd in inversion");
633 .setDescription(
"parameter for Igd in inversion");
635 .setDescription(
"Target tox value [m]");
639 .setDescription(
"oxide thickness for gate current model in meters, Introduced in BSIM-CMG106.1.0");
641 .setDescription(
"Exponent for Tox ratio");
643 .setDescription(
"Factor for the gate edge Tox");
645 .setDescription(
"pre-exponential coeff. for GISL in mho");
649 .setDescription(
"exponential coeff. for GISL");
653 .setDescription(
"parameter for body-effect of GISL");
657 .setDescription(
"band bending parameter for GISL");
659 .setDescription(
"parameter for body-bias effect on GISL");
661 .setDescription(
"pre-exponential coeff. for GIDL in mho");
665 .setDescription(
"exponential coeff. for GIDL");
669 .setDescription(
"parameter for body-effect of GIDL");
673 .setDescription(
"band bending parameter for GIDL");
675 .setDescription(
"parameter for body-bias effect on GIDL");
679 .setDescription(
"first parameter of Iii");
681 .setDescription(
"Temperature dependence of ALPHA0, m/V/degrees");
685 .setDescription(
"L scaling parameter of Iii");
687 .setDescription(
"Temperature dependence ALPHA1, 1/V/degree");
691 .setDescription(
"Vds dependent parameter of Iii");
693 .setDescription(
"first parameter of Iii for IIMOD=2, m/V ");
695 .setDescription(
"Temperature dependence of ALPHAII0, m/V/degrees");
699 .setDescription(
"L scaling parameter of Iii for IIMOD=2");
701 .setDescription(
"Temperature dependence of ALPHAII1, 1/V/degrees");
705 .setDescription(
"Vds dependent parameter of Iii");
707 .setDescription(
"Vds dependent parameter of Iii");
709 .setDescription(
"Vds dependent parameter of Iii, V");
713 .setDescription(
"Saturation channel E-Field for Iii");
717 .setDescription(
"Channel length dependent parameter of Iii");
721 .setDescription(
"Vgs dependent parameter of Iii");
725 .setDescription(
"1st Vgs dependent parameter of Iii");
727 .setDescription(
"2nd Vgs dependent parameter of Iii");
731 .setDescription(
"3rd Vds dependent parameter of Iii");
735 .setDescription(
"equivalent oxide thickness for accumulation region in meters");
737 .setDescription(
"Change in Flatband Voltage; Vfb_accumulation-Vfb_inversion");
739 .setDescription(
"Outer Fringe Cap (source side)");
741 .setDescription(
"Outer Fringe Cap (drain side)");
743 .setDescription(
"Non LDD region source-gate overlap capacitance per unit channel width");
745 .setDescription(
"Non LDD region drain-gate overlap capacitance per unit channel width");
751 .setDescription(
"Gate to substrate overlap cap per unit channel length per finger per NGCON ");
753 .setDescription(
"Gate to substrate overlap cap per unit channel length per fin per finger");
755 .setDescription(
"Bias dependent component of Gate to substrate overlap cap ");
758 .setDescription(
"Coefficient for source/drain to substrate sidewall cap");
760 .setDescription(
"Unit area source-side junction capacitance at zero bias");
762 .setDescription(
"Unit area drain-side junction capacitance at zero bias");
764 .setDescription(
"Unit length source-side sidewall junction capacitance at zero bias");
766 .setDescription(
"Unit length drain-side sidewall junction capacitance at zero bias");
768 .setDescription(
"Unit length source-side gate sidewall junction capacitance at zero bias");
770 .setDescription(
"Unit length drain-side gate sidewall junction capacitance at zero bias");
772 .setDescription(
"Source-side bulk junction built-in potential");
774 .setDescription(
"Drain-side bulk junction built-in potential");
776 .setDescription(
"Built-in potential for Source-side sidewall junction capacitance");
778 .setDescription(
"Built-in potential for Drain-side sidewall junction capacitance");
780 .setDescription(
"Built-in potential for Source-side gate sidewall junction capacitance");
782 .setDescription(
"Built-in potential for Drain-side gate sidewall junction capacitance");
784 .setDescription(
"Source bottom junction capacitance grading coefficient");
786 .setDescription(
"Drain bottom junction capacitance grading coefficient");
788 .setDescription(
"Source sidewall junction capacitance grading coefficient");
790 .setDescription(
"Drain sidewall junction capacitance grading coefficient");
792 .setDescription(
"Source-side gate sidewall junction capacitance grading coefficient");
794 .setDescription(
"Drain-side gate sidewall junction capacitance grading coefficient");
796 .setDescription(
"Constant for source-side two-step second junction");
798 .setDescription(
"Constant for drain-side two-step second junction");
800 .setDescription(
"Constant for source-side sidewall two-step second junction");
802 .setDescription(
"Constant for drain-side sidewall two-step second junction");
804 .setDescription(
"Constant for source-side gate sidewall two-step second junction");
806 .setDescription(
"Constant for source-side gate sidewall two-step second junction");
808 .setDescription(
"Source bottom two-step second junction capacitance grading coefficient");
810 .setDescription(
"Drain bottom two-step second junction capacitance grading coefficient ");
812 .setDescription(
"Source sidewall two-step second junction capacitance grading coefficient");
814 .setDescription(
"Drain sidewall two-step second junction capacitance grading coefficient");
816 .setDescription(
"Source-side gate sidewall two-step");
818 .setDescription(
"Drain-side gate sidewall two-step");
820 .setDescription(
"Bottom source junction reverse saturation current density");
822 .setDescription(
"Bottom drain junction reverse saturation current density");
824 .setDescription(
"Unit length reverse saturation current for sidewall source junction");
826 .setDescription(
"Unit length reverse saturation current for sidewall drain junction");
828 .setDescription(
"Unit length reverse saturation current for gate-edge sidewall source junction");
830 .setDescription(
"Unit length reverse saturation current for gate-edge sidewall drain junction");
832 .setDescription(
"Source junction emission coefficient");
834 .setDescription(
"Drain junction emission coefficient");
836 .setDescription(
"Forward source diode breakdown limiting current");
838 .setDescription(
"Forward drain diode breakdown limiting current");
840 .setDescription(
"Reverse source diode breakdown limiting current");
842 .setDescription(
"Reverse drain diode breakdown limiting current");
844 .setDescription(
"Source diode breakdown voltage");
846 .setDescription(
"Drain diode breakdown voltage");
848 .setDescription(
"Fitting parameter for source diode breakdown current");
850 .setDescription(
"Fitting parameter for drain diode breakdown current");
852 .setDescription(
"Bottom source junction trap-assisted saturation current density");
854 .setDescription(
"Bottom drain junction trap-assisted saturation current density");
856 .setDescription(
"Unit length trap-assisted saturation current for sidewall source junction");
858 .setDescription(
"Unit length trap-assisted saturation current for sidewall drain junction");
860 .setDescription(
"Unit length trap-assisted saturation current for gate-edge sidewall source junction");
862 .setDescription(
"Unit length trap-assisted saturation current for gate-edge sidewall drain junction");
864 .setDescription(
"Trap assisted tunneling current width dependence");
866 .setDescription(
"Non-ideality factor for JTSS");
868 .setDescription(
"Non-ideality factor for JTSD");
870 .setDescription(
"Non-ideality factor for JTSSWS");
872 .setDescription(
"Non-ideality factor for JTSSWD");
874 .setDescription(
"Non-ideality factor for JTSSWGS");
876 .setDescription(
"Non-ideality factor for JTSSWGD");
878 .setDescription(
"Bottom source junction trap-assisted current voltage dependent parameter");
880 .setDescription(
"Bottom drain junction trap-assisted current voltage dependent parameter");
882 .setDescription(
"Unit length trap-assisted current voltage dependent parameter for sidewall source junction ");
884 .setDescription(
"Unit length trap-assisted current voltage dependent parameter for sidewall drain junction");
886 .setDescription(
"Unit length trap-assisted current voltage dependent parameter for gate-edge sidewall source junction");
888 .setDescription(
"Unit length trap-assisted current voltage dependent parameter for gate-edge sidewall drain junction ");
890 .setDescription(
"Lint for Thermal Generation Current");
892 .setDescription(
"Thermal Generation Current Parameter");
894 .setDescription(
"Thermal Generation Current Parameter");
896 .setDescription(
"Thermal Generation Current Parameter");
900 .setDescription(
"Number of segments for NQSMOD=3 (3,5 and 10 supported)");
908 .setDescription(
"Temperature at which the model is extracted (degrees)");
910 .setDescription(
"Bandgap Temperature Coefficient (eV / degrees)");
912 .setDescription(
"Bandgap Temperature Coefficient (degrees)");
914 .setDescription(
"Vth Temperature Coefficient (V)");
916 .setDescription(
"Vth Temperature L Coefficient (m-V)");
918 .setDescription(
"SSwing Temperature Coefficient (/ degrees)");
920 .setDescription(
"Impact Ionization Temperature Dependence, IIMOD=1");
922 .setDescription(
"Impact Ionization Temperature Dependence, IIMOD=2");
924 .setDescription(
"GIDL/GISL Temperature Dependence");
926 .setDescription(
"Gate Current Temperature Dependence");
928 .setDescription(
"Temperature coefficient for CJS/CJD");
930 .setDescription(
"Temperature coefficient for CJSWS/CJSWD");
932 .setDescription(
"Temperature coefficient for CJSWGS/CJSWGD");
934 .setDescription(
"Temperature coefficient for PBS/PBD");
936 .setDescription(
"Temperature coefficient for PBSWS/PBSWD");
938 .setDescription(
"Temperature coefficient for PBSWGS/PBSWGD");
940 .setDescription(
"Source junction current temperature exponent");
942 .setDescription(
"Drain junction current temperature exponent");
944 .setDescription(
"Power dependence of JTSS on temperature");
946 .setDescription(
"Power dependence of JTSD on temperature");
948 .setDescription(
"Power dependence of JTSSWS on temperature");
950 .setDescription(
"Power dependence of JTSSWD on temperature");
952 .setDescription(
"Power dependence of JTSSWGS on temperature");
954 .setDescription(
"Power dependence of JTSSWGD on temperature");
956 .setDescription(
"Temperature coefficient for NJTS");
958 .setDescription(
"Temperature coefficient for NJTSD");
960 .setDescription(
"Temperature coefficient for NJTSSW");
962 .setDescription(
"NTemperature coefficient for NJTSSWD");
964 .setDescription(
"Temperature coefficient for NJTSSWG");
966 .setDescription(
"Temperature coefficient for NJTSSWGD");
968 .setDescription(
"Thermal resistance");
970 .setDescription(
"Thermal capacitance");
972 .setDescription(
"Width dependence coefficient for Rth and Cth");
1456 if ( (!((
L >=1*1.0e-9))) )
1458 UserError0(*
this) <<
"ADMSbsimcmg: Parameter L value " <<
L <<
" out of range [ 1*1.0e-9, (+inf) [";
1462 if ( (!((
D >=1*1.0e-9))) )
1464 UserError0(*
this) <<
"ADMSbsimcmg: Parameter D value " <<
D <<
" out of range [ 1*1.0e-9, (+inf) [";
1468 if ( (!((
TFIN >=1*1.0e-9))) )
1470 UserError0(*
this) <<
"ADMSbsimcmg: Parameter TFIN value " <<
TFIN <<
" out of range [ 1*1.0e-9, (+inf) [";
1476 UserError0(*
this) <<
"ADMSbsimcmg: Parameter FPITCH value " <<
FPITCH <<
" out of range [ TFIN, (+inf) [";
1480 if ( (!((
NFIN >0))) )
1482 UserError0(*
this) <<
"ADMSbsimcmg: Parameter NFIN value " <<
NFIN <<
" out of range ] 0, (+inf) [";
1488 UserError0(*
this) <<
"ADMSbsimcmg: Parameter NGCON value " <<
NGCON <<
" out of range [ 1, 2 ]";
1492 if ( (!((
ASEO >=0))) )
1494 UserError0(*
this) <<
"ADMSbsimcmg: Parameter ASEO value " <<
ASEO <<
" out of range [ 0, (+inf) [";
1498 if ( (!((
ADEO >=0))) )
1500 UserError0(*
this) <<
"ADMSbsimcmg: Parameter ADEO value " <<
ADEO <<
" out of range [ 0, (+inf) [";
1504 if ( (!((
PSEO >=0))) )
1506 UserError0(*
this) <<
"ADMSbsimcmg: Parameter PSEO value " <<
PSEO <<
" out of range [ 0, (+inf) [";
1510 if ( (!((
PDEO >=0))) )
1512 UserError0(*
this) <<
"ADMSbsimcmg: Parameter PDEO value " <<
PDEO <<
" out of range [ 0, (+inf) [";
1516 if ( (!((
ASEJ >=0))) )
1518 UserError0(*
this) <<
"ADMSbsimcmg: Parameter ASEJ value " <<
ASEJ <<
" out of range [ 0, (+inf) [";
1522 if ( (!((
ADEJ >=0))) )
1524 UserError0(*
this) <<
"ADMSbsimcmg: Parameter ADEJ value " <<
ADEJ <<
" out of range [ 0, (+inf) [";
1528 if ( (!((
PSEJ >=0))) )
1530 UserError0(*
this) <<
"ADMSbsimcmg: Parameter PSEJ value " <<
PSEJ <<
" out of range [ 0, (+inf) [";
1534 if ( (!((
PDEJ >=0))) )
1536 UserError0(*
this) <<
"ADMSbsimcmg: Parameter PDEJ value " <<
PDEJ <<
" out of range [ 0, (+inf) [";
1540 if ( (!((
COVS >=0))) )
1542 UserError0(*
this) <<
"ADMSbsimcmg: Parameter COVS value " <<
COVS <<
" out of range [ 0, (+inf) [";
1546 if ( (!((
COVD >=0))) )
1548 UserError0(*
this) <<
"ADMSbsimcmg: Parameter COVD value " <<
COVD <<
" out of range [ 0, (+inf) [";
1552 if ( (!((
CGSP >=0))) )
1554 UserError0(*
this) <<
"ADMSbsimcmg: Parameter CGSP value " <<
CGSP <<
" out of range [ 0, (+inf) [";
1558 if ( (!((
CGDP >=0))) )
1560 UserError0(*
this) <<
"ADMSbsimcmg: Parameter CGDP value " <<
CGDP <<
" out of range [ 0, (+inf) [";
1564 if ( (!((
CDSP >=0))) )
1566 UserError0(*
this) <<
"ADMSbsimcmg: Parameter CDSP value " <<
CDSP <<
" out of range [ 0, (+inf) [";
1570 if ( (!((
NRS >=0))) )
1572 UserError0(*
this) <<
"ADMSbsimcmg: Parameter NRS value " <<
NRS <<
" out of range [ 0, (+inf) [";
1576 if ( (!((
NRD >=0))) )
1578 UserError0(*
this) <<
"ADMSbsimcmg: Parameter NRD value " <<
NRD <<
" out of range [ 0, (+inf) [";
1582 if ( (!((
LRSD >0))) )
1584 UserError0(*
this) <<
"ADMSbsimcmg: Parameter LRSD value " <<
LRSD <<
" out of range ] 0, (+inf) [";
1615 :
DeviceInstance(instance_block, configuration.getInstanceParameters(), factory_block),
1645 f_di_Equ_g_Node_Ptr(0),
1646 f_di_Equ_di_Node_Ptr(0),
1647 f_si_Equ_g_Node_Ptr(0),
1648 f_si_Equ_di_Node_Ptr(0),
1649 f_di_Equ_si_Node_Ptr(0),
1650 f_si_Equ_si_Node_Ptr(0),
1651 f_di_Equ_e_Node_Ptr(0),
1652 f_si_Equ_e_Node_Ptr(0),
1653 f_g_Equ_g_Node_Ptr(0),
1654 f_g_Equ_di_Node_Ptr(0),
1655 f_g_Equ_si_Node_Ptr(0),
1656 f_g_Equ_e_Node_Ptr(0),
1657 f_g_Equ_s_Node_Ptr(0),
1658 f_si_Equ_s_Node_Ptr(0),
1659 f_g_Equ_d_Node_Ptr(0),
1660 f_si_Equ_d_Node_Ptr(0),
1661 f_di_Equ_s_Node_Ptr(0),
1662 f_di_Equ_d_Node_Ptr(0),
1663 f_e_Equ_g_Node_Ptr(0),
1664 f_e_Equ_e_Node_Ptr(0),
1665 f_e_Equ_di_Node_Ptr(0),
1666 f_e_Equ_si_Node_Ptr(0),
1667 f_e_Equ_s_Node_Ptr(0),
1668 f_e_Equ_d_Node_Ptr(0),
1669 f_d_Equ_d_Node_Ptr(0),
1670 f_d_Equ_s_Node_Ptr(0),
1671 f_s_Equ_d_Node_Ptr(0),
1672 f_s_Equ_s_Node_Ptr(0),
1673 f_s_Equ_di_Node_Ptr(0),
1674 f_s_Equ_si_Node_Ptr(0),
1675 f_s_Equ_g_Node_Ptr(0),
1676 f_s_Equ_e_Node_Ptr(0),
1677 f_d_Equ_di_Node_Ptr(0),
1678 f_d_Equ_si_Node_Ptr(0),
1679 f_d_Equ_g_Node_Ptr(0),
1680 f_d_Equ_e_Node_Ptr(0),
1681 q_di_Equ_g_Node_Ptr(0),
1682 q_di_Equ_di_Node_Ptr(0),
1683 q_si_Equ_g_Node_Ptr(0),
1684 q_si_Equ_di_Node_Ptr(0),
1685 q_di_Equ_si_Node_Ptr(0),
1686 q_si_Equ_si_Node_Ptr(0),
1687 q_di_Equ_e_Node_Ptr(0),
1688 q_si_Equ_e_Node_Ptr(0),
1689 q_g_Equ_g_Node_Ptr(0),
1690 q_g_Equ_di_Node_Ptr(0),
1691 q_g_Equ_si_Node_Ptr(0),
1692 q_g_Equ_e_Node_Ptr(0),
1693 q_g_Equ_s_Node_Ptr(0),
1694 q_si_Equ_s_Node_Ptr(0),
1695 q_g_Equ_d_Node_Ptr(0),
1696 q_si_Equ_d_Node_Ptr(0),
1697 q_di_Equ_s_Node_Ptr(0),
1698 q_di_Equ_d_Node_Ptr(0),
1699 q_e_Equ_g_Node_Ptr(0),
1700 q_e_Equ_e_Node_Ptr(0),
1701 q_e_Equ_di_Node_Ptr(0),
1702 q_e_Equ_si_Node_Ptr(0),
1703 q_e_Equ_s_Node_Ptr(0),
1704 q_e_Equ_d_Node_Ptr(0),
1705 q_d_Equ_d_Node_Ptr(0),
1706 q_d_Equ_s_Node_Ptr(0),
1707 q_s_Equ_d_Node_Ptr(0),
1708 q_s_Equ_s_Node_Ptr(0),
1709 q_s_Equ_di_Node_Ptr(0),
1710 q_s_Equ_si_Node_Ptr(0),
1711 q_s_Equ_g_Node_Ptr(0),
1712 q_s_Equ_e_Node_Ptr(0),
1713 q_d_Equ_di_Node_Ptr(0),
1714 q_d_Equ_si_Node_Ptr(0),
1715 q_d_Equ_g_Node_Ptr(0),
1716 q_d_Equ_e_Node_Ptr(0),
1717 admsTemperature(getDeviceOptions().temp.getImmutableValue<double>())
1787 for (
int i=0;i<mapSize;++i)
1792 for (
int j=0;j<rowSize;++j)
1815 if (!(
given(
"TFIN")))
1819 if (!(
given(
"FPITCH")))
1823 if (!(
given(
"NFIN")))
1827 if (!(
given(
"NGCON")))
1831 if (!(
given(
"ASEO")))
1835 if (!(
given(
"ADEO")))
1839 if (!(
given(
"PSEO")))
1843 if (!(
given(
"PDEO")))
1847 if (!(
given(
"ASEJ")))
1851 if (!(
given(
"ADEJ")))
1855 if (!(
given(
"PSEJ")))
1859 if (!(
given(
"PDEJ")))
1863 if (!(
given(
"COVS")))
1867 if (!(
given(
"COVD")))
1871 if (!(
given(
"CGSP")))
1875 if (!(
given(
"CGDP")))
1879 if (!(
given(
"CDSP")))
1883 if (!(
given(
"NRS")))
1887 if (!(
given(
"NRD")))
1891 if (!(
given(
"LRSD")))
1911 if (!
given(
"XYCEADMSINSTTEMP"))
1943 const std::vector<int> & extLIDVecRef)
1948 #ifdef Xyce_DEBUG_DEVICE
1952 Xyce::dout() << std::endl << section_divider << std::endl;
1953 Xyce::dout() <<
"In ADMSbsimcmg::Instance::register LIDs\n\n";
1954 Xyce::dout() <<
"name = " <<
getName() << std::endl;
1955 Xyce::dout() <<
"number of internal variables: " <<
numIntVars << std::endl;
1956 Xyce::dout() <<
"number of external variables: " <<
numExtVars << std::endl;
1967 li_d = extLIDVecRef[i++];
1968 li_g = extLIDVecRef[i++];
1969 li_s = extLIDVecRef[i++];
1970 li_e = extLIDVecRef[i++];
1974 li_di = intLIDVecRef[i++];
1975 li_si = intLIDVecRef[i++];
1978 #ifdef Xyce_DEBUG_DEVICE
1981 Xyce::dout() <<
"\nSolution and RHS variables:\n";
1982 Xyce::dout() <<
"\nli_d = " <<
li_d << std::endl;
1983 Xyce::dout() <<
"\nli_g = " <<
li_g << std::endl;
1984 Xyce::dout() <<
"\nli_s = " <<
li_s << std::endl;
1985 Xyce::dout() <<
"\nli_e = " <<
li_e << std::endl;
1986 Xyce::dout() <<
"\nli_di = " <<
li_di << std::endl;
1987 Xyce::dout() <<
"\nli_si = " <<
li_si << std::endl;
1991 #ifdef Xyce_DEBUG_DEVICE
1994 Xyce::dout() <<
"\nEnd of ADMSbsimcmg::Instance::register LIDs\n";
1995 Xyce::dout() << section_divider << std::endl;
2065 std::vector<int> & map=
jacMap;
2066 std::vector< std::vector<int> > & map2=
jacMap2;
2222 bool bsuccess =
true;
2243 bool bsuccess =
true;
2265 #ifdef Xyce_DEBUG_DEVICE
2268 Xyce::dout() << std::endl << subsection_divider << std::endl;
2269 Xyce::dout() <<
" In ADMSbsimcmg::Instance::updateIntermediateVars\n\n";
2270 Xyce::dout() <<
" name = " <<
getName() << std::endl;
2634 double Inv_r1pi_acc;
2710 double DELTAVSATCV_i;
2867 double WeffWRFactor;
2879 double Toxratioedge;
2894 for (
int i=0; i < 6+0 ; ++i)
3121 csi = (epssub/
TFIN);
3132 scl = (1.0/sqrt(((1.0/(scl*scl))+(0.25/(heff*heff)))));
3137 scl = (0.5/sqrt(((1.0/(scl*scl))+(0.25/(heff*heff)))));
3142 scl = sqrt(((((0.5*epsratio)*R)*(
model_.
EOT))*(1.0+(R/((2.0*epsratio)*(
model_.
EOT))))));
3148 mx = (0.916*9.11e-31);
3149 mxprime = (0.190*9.11e-31);
3150 md = (0.190*9.11e-31);
3151 mdprime = (0.417*9.11e-31);
3157 Leff = (Lg-(2.0*deltaL));
3158 LeffCV = (Lg-(2.0*deltaLCV));
3165 Inv_NFIN = (1.0/
NFIN);
3313 std::cerr <<
"[bsimcmg] Although the model selector NQSMOD is set to 1, the NQS gate resistance model is not activated in the Verilog-A code. Please uncomment `define __NQSMOD1__ in bsimcmg.va to activate it." << std::endl;
3317 std::cerr <<
"[bsimcmg] Although the model selector NQSMOD is set to 2, the NQS gate resistance model is not activated in the Verilog-A code. Please uncomment `define __NQSMOD2__ in bsimcmg.va to activate it." << std::endl;
3380 U0_i = (U0_i*(1-(UP_i*pow(Leff,(-(
model_.
LPA))))));
3384 U0_i = (U0_i*(1-UP_i));
3418 if ((((QMTCENIV_i>0.0)||(QMTCENCV_i>0.0))||(QMTCENCVA_i>0.0)))
3423 Tcen0 = (TFIN*MTcen);
3429 Tcen0 = (std::min(TFIN,(
model_.
HFIN))*MTcen);
3435 Tcen0 = (std::min(TFIN,(
model_.
HFIN))*MTcen);
3450 std::cerr <<
"Fatal: Leff = %e is not positive." << Leff << std::endl;
3456 std::cerr <<
"Warning: Leff = %e <= 1.0e-9." << Leff << std::endl;
3461 std::cerr <<
"Warning: LeffCV = %e <= 1.0e-9." << LeffCV << std::endl;
3465 if ((LeffCV_acc<=1e-9))
3467 std::cerr <<
"Warning: LeffCV_acc = %e <= 1.0e-9." << LeffCV_acc << std::endl;
3472 std::cerr <<
"Warning: Weff0 = %e <= 1.0e-9." << Weff0 << std::endl;
3474 if ((WeffCV0<=1e-9))
3476 std::cerr <<
"Warning: WeffCV0 = %e <= 1.0e-9." << WeffCV0 << std::endl;
3480 std::cerr <<
"Fatal: NBODY_i = %e is not positive." << NBODY_i << std::endl;
3484 if ((NBODY_i<=1e18))
3486 std::cerr <<
"Warning: NBODY_i = %e m^-3 may be too small." << NBODY_i << std::endl;
3491 std::cerr <<
"Fatal: NGATE_i = %e is negative." << NGATE_i << std::endl;
3495 if (((NGATE_i!=0)&&(NGATE_i<=1e24)))
3497 std::cerr <<
"Warning: NGATE_i = %e may be too small." << NGATE_i << std::endl;
3503 std::cerr <<
"Fatal: NGATE_i = %e is too high." << NGATE_i << std::endl;
3509 std::cerr <<
"Warning: DVT0_i = %e is negative." << DVT0_i << std::endl;
3513 std::cerr <<
"Fatal: DVT1_i = %e is not positive." << DVT1_i << std::endl;
3517 std::cerr <<
"Fatal: DVT1SS_i = %e is not positive." << DVT1SS_i << std::endl;
3521 std::cerr <<
"Warning: CDSC_i = %e is negative." << CDSC_i << std::endl;
3525 std::cerr <<
"Warning: CDSCD_i = %e is negative." << CDSCD_i << std::endl;
3529 std::cerr <<
"Fatal: DSUB_i = %e is not positive." << DSUB_i << std::endl;
3533 std::cerr <<
"Warning: ETA0_i = %e is negative." << ETA0_i << std::endl;
3535 if ((LPE0_i<(-Leff)))
3537 std::cerr <<
"Warning: LPE0_i = %e is less than -Leff. Clipping LPE0_i to 0" << LPE0_i << std::endl;
3542 std::cerr <<
"Warning: K0SI_i = %e is not positive, setting it to 0." << K0SI_i << std::endl;
3547 std::cerr <<
"Warning: K1SI_i = %e is not positive, setting it to 0." << K1SI_i << std::endl;
3552 std::cerr <<
"Warning: PHIBE_i = %e is less than 0.2, setting it to 0.2." << PHIBE_i << std::endl;
3557 std::cerr <<
"Warning: PHIBE_i = %e is larger than 1.2, setting it to 1.2." << PHIBE_i << std::endl;
3562 std::cerr <<
"Warning: PSAT_i = %e is less than 2.0, setting it to 2.0." << PSAT_i << std::endl;
3567 std::cerr <<
"Warning: PSATCV_i = %e is less than 2.0, setting it to 2.0." << PSATCV_i << std::endl;
3572 std::cerr <<
"Warning: U0_i = %e is negative, setting it to 0." << U0_i << std::endl;
3577 std::cerr <<
"Warning: UA_i = %e is negative, setting it to 0." << UA_i << std::endl;
3582 std::cerr <<
"Warning: EU_i = %e is negative, setting it to 0." << EU_i << std::endl;
3587 std::cerr <<
"Warning: UD_i = %e is negative, setting it to 0." << UD_i << std::endl;
3592 std::cerr <<
"Warning: UCS_i = %e is negative, setting it to 0." << UCS_i << std::endl;
3598 std::cerr <<
"Warning: RDSWMIN = %e is negative. Set to zero" << RDSWMIN_i << std::endl;
3603 std::cerr <<
"Warning: RDSW_i = %e is negative. Set to zero" << RDSW_i << std::endl;
3609 std::cerr <<
"Warning: RSWMIN = %e is negative. Set to zero" << RSWMIN_i << std::endl;
3614 std::cerr <<
"Warning: RSW_i = %e is negative. Set to zero" << RSW_i << std::endl;
3620 std::cerr <<
"Warning: RDWMIN = %e is negative. Set to zero" << RDWMIN_i << std::endl;
3625 std::cerr <<
"Warning: RDW_i = %e is negative. Set to zero" << RDW_i << std::endl;
3630 std::cerr <<
"Warning: PRWGD_i = %e is negative. Set to zero" << PRWGD_i << std::endl;
3635 std::cerr <<
"Warning: PRWGS_i = %e is negative. Set to zero" << PRWGS_i << std::endl;
3640 std::cerr <<
"Warning: PCLM_i = %e is negative." << PCLM_i << std::endl;
3644 std::cerr <<
"Warning: PDIBL1_i = %e is negative." << PDIBL1_i << std::endl;
3650 std::cerr <<
"Warning: PDIBL1R_i = %e is negative." << PDIBL1R_i << std::endl;
3655 std::cerr <<
"Fatal: PDIBL2_i = %e is negative." << PDIBL2_i << std::endl;
3659 std::cerr <<
"Fatal: DROUT_i = %e is non-positive." << DROUT_i << std::endl;
3663 std::cerr <<
"Warning: MEXP_i = %e < 2. Setting MEXP_i = 2." << MEXP_i << std::endl;
3670 std::cerr <<
"Warning: MEXPR_i = %e < 2. Setting MEXPR_i = 2." << MEXPR_i << std::endl;
3676 std::cerr <<
"Warning: PTWG_i = %e is negative, setting it to 0." << PTWG_i << std::endl;
3679 if (((QMTCENIV_i>0)||(QMTCENCV_i>0)))
3683 std::cerr <<
"Fatal: QM0 = %e is non-positive." << (
model_.
QM0) << std::endl;
3690 std::cerr <<
"Fatal: QM0ACC = %e is non-positive." << (
model_.
QM0ACC) << std::endl;
3695 std::cerr <<
"Warning: CGIDL_i = %e < 0. Setting CGIDL_i = 0." << CGIDL_i << std::endl;
3700 std::cerr <<
"Warning: CGISL_i = %e < 0. Setting CGISL_i = 0." << CGISL_i << std::endl;
3707 std::cerr <<
"Fatal: NIGBINV_i = %e is non-positive." << NIGBINV_i << std::endl;
3711 std::cerr <<
"Fatal: NIGBACC_i = %e is non-positive." << NIGBACC_i << std::endl;
3718 std::cerr <<
"Fatal: POXEDGE_i = %e is non-positive." << POXEDGE_i << std::endl;
3722 std::cerr <<
"Fatal: PIGCD_i = %e is non-positive." << PIGCD_i << std::endl;
3729 std::cerr <<
"Fatal: TOXREF = %e is non-positive." << (
model_.
TOXREF) << std::endl;
3734 std::cerr <<
"Warning: LINTIGEN = %e is too large - Leff for r/g current is negative. Re-setting LINTIGEN = 0." << (
model_.
LINTIGEN) << std::endl;
3743 std::cerr <<
"Fatal: NTGEN_i = %e is non-positive." << NTGEN_i << std::endl;
3747 if ((BETAII0_i<0.0))
3749 std::cerr <<
"Warning: BETAII0_i = %e is negative." << BETAII0_i << std::endl;
3751 if ((BETAII1_i<0.0))
3753 std::cerr <<
"Warning: BETAII1_i = %e is negative." << BETAII1_i << std::endl;
3755 if ((BETAII2_i<0.0))
3757 std::cerr <<
"Warning: BETAII2_i = %e is negative." << BETAII2_i << std::endl;
3761 std::cerr <<
"Warning: ESATII_i = %e is negative." << ESATII_i << std::endl;
3765 std::cerr <<
"Warning: LII_i = %e is negative." << LII_i << std::endl;
3769 std::cerr <<
"Warning: SII1_i = %e is negative." << (
model_.
SII1) << std::endl;
3773 std::cerr <<
"Warning: SII2_i = %e is negative." << SII2_i << std::endl;
3777 std::cerr <<
"Warning: SIID_i = %e is negative." << SIID_i << std::endl;
3782 std::cerr <<
"Fatal: EF = %e is non-positive." << (
model_.
EF) << std::endl;
3788 std::cerr <<
"Fatal: EF = %e > 2.0." << (
model_.
EF) << std::endl;
3793 std::cerr <<
"Warning: LINTNOI = %e is too large - Leff for noise is negative. Re-setting LINTNOI = 0." << (
model_.
LINTNOI) << std::endl;
3802 std::cerr <<
"Warning: NTNOI = %e is negative. Set to zero." << (
model_.
NTNOI) << std::endl;
3811 std::cerr <<
"[bsimcmg] Although the model selector SHMOD is set to 1, the self heating model is not activated in the Verilog-A code. Please uncomment `define __SHMOD__ in bsimcmg.va to activate it." << std::endl;
3815 std::cerr <<
"[bsimcmg] Although the model selector RGATEMOD is set to 1, the gate electrode resistance model is not activated in the Verilog-A code. Please uncomment `define __RGATEMOD__ in bsimcmg.va to activate it." << std::endl;
3849 mu_rsd = (((52.2+((mu_max-52.2)/(1+pow(((
model_.
NSD)/9.68e22),0.680))))-(43.4/(1.0+pow((3.43e26/(
model_.
NSD)),2))))*1.0e-4);
3853 mu_rsd = (((44.9+((mu_max-44.9)/(1+pow(((
model_.
NSD)/2.23e22),0.719))))-(29.0/(1.0+pow((6.10e26/(
model_.
NSD)),2))))*1.0e-4);
3855 rhorsd = (1/((1.60219e-19*(
model_.
NSD))*mu_rsd));
3857 thetarsp = ((55*3.14159265358979323846)/180);
3859 T1 = ((thetarsp>=(3.14159265358979323846/2))?0:((thetarsp<=((-3.14159265358979323846)/2))?0:(1.0/tan(thetarsp))));
3860 Rsp = (((rhorsd*T1.val())/(sqrt(3.14159265358979323846)*
NFIN))*(((1.0/sqrt(afin))-(2.0/sqrt(Arsd)))+sqrt((afin/(Arsd*Arsd)))));
3863 lt = sqrt((((
model_.
RHOC)*arsd_total)/(rhorsd*prsd_total)));
3869 T1 = (T0*(1.0+eta));
3870 T2 = ((T1+1.0)-eta);
3871 T3 = ((T1-1.0)+eta);
3878 RrsdTML = (((rhorsd*lt)*T2.val())/(arsd_total*T3.val()));
3882 Rrsd = (((RrsdTML+Rsp)*Rrsdside)/((RrsdTML+Rsp)+Rrsdside));
3886 Rrsd = (RrsdTML+Rsp);
3889 RSourceGeo = Rdsgeo;
3892 if ((RSourceGeo<=1.0e-3))
3894 RSourceGeo = 1.0e-3;
3896 if ((RDrainGeo<=1.0e-3))
3940 CGSO_i = std::max(0.0,(((
model_.
DLC)*cox)-CGSL_i));
3944 CGSO_i = ((0.3*
TFIN)*cox);
3955 CGDO_i = std::max(0.0,(((
model_.
DLC)*cox)-CGDL_i));
3959 CGDO_i = ((0.3*
TFIN)*cox);
3972 T1 = (((0.942*Hrsd)*epssp)/(
model_.
LSP));
4019 TT1 = (Cnon*CcgSat);
4029 Rcf = (Hgdelta*r1cf);
4030 Ccg2 = (((epssp*2)/3.14159265358979323846)*log((((
model_.
LSP)+((0.5*3.14159265358979323846)*Rcf))/(
model_.
LSP))));
4031 Ccg = (TFIN*(Ccg1+Ccg2));
4033 C1 = (4.0/(sqrt((2.0*(x+1)))*3.14159265358979323846));
4036 Cfglog = (epssp*((C1*log((C2/C3)))+12.27));
4038 TT0 = sqrt(((dcf*dcf)+1.0));
4041 Cfgsat = (((((((2.0*epssp)*sqrt(2.0))/3.14159265358979323846)*0.85)*dcf)/TT0)*log((TT1/TT2)));
4043 TT1 = ((Cfgsat-Cfglog)-delta);
4044 Cfg = (TFIN*(Cfgsat-(0.5*(TT1+sqrt(((TT1*TT1)+((4*delta)*Cfgsat)))))));
4045 Cgg_top = (Ccg+Cfg);
4093 TT1 = (Cnon*CcgSat);
4103 Rcf = (Hgdelta*r1cf);
4104 Ccg2 = (((epssp*2)/3.14159265358979323846)*log((((
model_.
LSP)+((0.5*3.14159265358979323846)*Rcf))/(
model_.
LSP))));
4107 C1 = (4.0/(sqrt((2.0*(x+1)))*3.14159265358979323846));
4110 Cfglog = (epssp*((C1*log((C2/C3)))+12.27));
4112 TT0 = sqrt(((dcf*dcf)+1.0));
4115 Cfgsat = (((((((2.0*epssp)*sqrt(2.0))/3.14159265358979323846)*0.70)*dcf)/TT0)*log((TT1/TT2)));
4117 TT1 = ((Cfgsat-Cfglog)-delta);
4118 Cfg = ((
model_.
HFIN)*(Cfgsat-(0.5*(TT1+sqrt(((TT1*TT1)+((4*delta)*Cfgsat)))))));
4119 Cgg_side = (Ccg+Cfg);
4167 TT1 = (Cnon*CcgSat);
4177 Rcf = (Hgdelta*r1cf);
4178 Ccg2 = (((epssp*2)/3.14159265358979323846)*log((((
model_.
LSP)+((0.5*3.14159265358979323846)*Rcf))/(
model_.
LSP))));
4181 C1 = (4.0/(sqrt((2.0*(x+1)))*3.14159265358979323846));
4184 Cfglog = (epssp*((C1*log((C2/C3)))+12.27));
4186 TT0 = sqrt(((dcf*dcf)+1.0));
4189 Cfgsat = (((((((2.0*epssp)*sqrt(2.0))/3.14159265358979323846)*0.85)*dcf)/TT0)*log((TT1/TT2)));
4191 TT1 = ((Cfgsat-Cfglog)-delta);
4192 Cfg = ((
model_.
HFIN)*(Cfgsat-(0.5*(TT1+sqrt(((TT1*TT1)+((4*delta)*Cfgsat)))))));
4193 Cgg_side = (Ccg+Cfg);
4217 csbox = ((cbox*
ASEO)+(T0.val()*std::max(0.0,(
PSEO-(
FPITCH*NFINtotal)))));
4218 cdbox = ((cbox*
ADEO)+(T0.val()*std::max(0.0,(
PDEO-(
FPITCH*NFINtotal)))));
4220 EeffFactor = (1.0e-8/(epsratio*(
model_.
EOT)));
4221 WeffWRFactor = (1.0/(pow((Weff0*1.0e6),WR_i)*NFINtotal));
4222 litl = sqrt((((epsratio*(
model_.
EOT))*0.5)*TFIN));
4223 tmp = (((DVT1_i*Leff)/scl)+1.0e-6);
4226 Theta_SCE = (0.5/(cosh(tmp)-1.0));
4230 Theta_SCE = exp((-tmp));
4232 tmp = (((DVT1SS_i*Leff)/scl)+1.0e-6);
4235 Theta_SW = (0.5/(cosh(tmp)-1.0));
4239 Theta_SW = exp((-tmp));
4241 tmp = (((DSUB_i*Leff)/scl)+1.0e-6);
4244 Theta_DIBL = (0.5/(cosh(tmp)-1.0));
4248 Theta_DIBL = exp((-tmp));
4250 Theta_RSCE = (sqrt((1.0+(LPE0_i/Leff)))-1.0);
4261 qbs = (((1.60219e-19*nbody)*TFIN)/(2*cox));
4265 qbs = (((1.60219e-19*nbody)*R)/(2*cox));
4269 phibulk = ((((1.60219e-19/(2*epssub))*nbody)*(TFIN/2))*(TFIN/2));
4276 Qbul = sqrt(((((2*1.60219e-19)*nbody)*epssub)*phibulk));
4282 r1 = ((2*epssub)/(R*cox));
4285 r1_acc = ((2.0*epssub)/(R*cox_acc.val()));
4290 Aechvb = 4.97232e-7;
4294 Aechvb = 3.42537e-7;
4298 Bechvb = 7.45669e11;
4302 Bechvb = 1.16645e12;
4309 igsd_mult0 = ((Weff0*Aechvb)*Toxratioedge);
4312 std::cerr <<
"Warning: (TNOM=%e) < -`P_CELSIUS0. Set to 27 C." << (
model_.
TNOM) << std::endl;
4324 TRatio = (DevTemp/Tnom);
4325 delTemp = (DevTemp-Tnom);
4326 Vtm = (8.617087e-5*DevTemp);
4327 Vtm0 = (8.617087e-5*Tnom);
4330 T1 = ((DevTemp/300.15)*sqrt((DevTemp/300.15)));
4336 kT = (Vtm*1.60219e-19);
4337 T0 = ((1.05457e-34*3.14159265358979323846)/
TFIN);
4338 E0 = ((T0.val()*T0.val())/(2.0*mx));
4339 E0prime = ((T0.val()*T0.val())/(2.0*mxprime));
4341 E1prime = (4.0*E0prime);
4342 T1 = ((gprime*mdprime)/(gfactor*md));
4346 dvch_qm = (QMFACTOR_i*((E0/1.60219e-19)+T2.val()));
4350 T0 = ((1.05457e-34*2.4048)/R);
4351 E0 = ((T0.val()*T0.val())/(2.0*mx));
4352 dvch_qm = ((QMFACTOR_i*E0)/1.60219e-19);
4356 T1 = (U0_i*pow(TRatio,UTE_i));
4365 UD_t = (UD_i*pow(TRatio,UD1_i));
4366 UCS_t = (UCS_i*pow(TRatio,UCSTE_i));
4381 std::cerr <<
"Warning: VSAT(%f) = %e is less than 1K, setting it to 1K." << DevTemp << VSAT_t << std::endl;
4387 std::cerr <<
"Warning: VSAT1(%f) = %e is less than 1K, setting it to 1K." << DevTemp << VSAT1_t << std::endl;
4393 if ((VSAT1R_t<1000))
4395 std::cerr <<
"Warning: VSAT1R(%f) = %e is less than 1K, setting it to 1K." << DevTemp << VSAT1R_t << std::endl;
4400 if ((VSATCV_t<1000))
4402 std::cerr <<
"Warning: VSATCV(%f) = %e is less than 1K, setting it to 1K." << DevTemp << VSATCV_t << std::endl;
4415 dvth_temp = ((KT1_i+((
model_.
KT1L)/Leff))*(TRatio-1.0));
4416 BETA0_t = (BETA0_i*pow(TRatio,IIT_i));
4418 K0_t = (K0_i+(K01_i*delTemp));
4422 K1SAT_t = (K1SAT_i+(K1SAT1_i*delTemp));
4423 A1_t = (A1_i+(A11_i*delTemp));
4424 A2_t = (A2_i+(A21_i*delTemp));
4437 igsd_mult = (igsd_mult0*igtemp);
4452 T0 = ((Eg0/Vtm0)-(Eg/Vtm));
4475 beta0 = (((u0*cox)*Weff0)/Leff);
4491 vpoly0 = (((1.60219e-19*NGATE_i)*epssub)/((2.0*cox)*cox));
4492 cpoly = (1.0/(4.0*vpoly0));
4497 vpoly0 = (((((1.60219e-19*NGATE_i)*epssub)*T0.val())*T0.val())/((2.0*cox)*cox));
4498 cpoly = (1.0/(4.0*vpoly0));
4500 kpoly = (1.0+((2.0*cpoly)*qbs));
4510 deltaPhi = (devsign*(PHIG_i-((
model_.
EASUB)+Eg)));
4518 r1 = ((2.0*epssub)/(cox*
TFIN));
4521 Inv_r1pi = (1.0/(r1*3.14159265358979323846));
4524 r1_acc = ((2.0*epssub)/(cox_acc.val()*
TFIN));
4525 Inv_r1pi_acc = (1.0/(r1_acc*3.14159265358979323846));
4537 r2 = (((4.0*Vtm)*epssub)/(((1.60219e-19*
TFIN)*
TFIN)*NGATE_i));
4541 r2 = ((((2.0*cpoly)*r1)*r1)*Vtm);
4548 eta_mu = (0.5*ETAMOB_t);
4552 eta_mu = ((1.0/3.0)*ETAMOB_t);
4553 eta_mu_cv = (1.0/3.0);
4557 Isbs = (((
ASEJ*JSS_t)+(
PSEJ*JSWS_t))+((Weff0*NFINtotal)*JSWGS_t));
4563 Tb = ((1.0+T2)-XExpBVS);
4566 IVjsmFwd = (Isbs*(((T0.val()-(XExpBVS/T0.val()))+XExpBVS)-1.0));
4567 SslpFwd = ((Isbs*(T0.val()+(XExpBVS/T0.val())))/Nvtms);
4571 IVjsmRev = (Isbs*(1.0+T1.val()));
4572 SslpRev = (((-Isbs)*T1.val())/Nvtms);
4574 Isbd = (((
ADEJ*JSD_t)+(
PDEJ*JSWD_t))+((Weff0*NFINtotal)*JSWGD_t));
4580 Tb = ((1.0+T2)-XExpBVD);
4583 IVjdmFwd = (Isbd*(((T0.val()-(XExpBVD/T0.val()))+XExpBVD)-1.0));
4584 DslpFwd = ((Isbd*(T0.val()+(XExpBVD/T0.val())))/Nvtmd);
4588 IVjdmRev = (Isbd*(1.0+T1.val()));
4589 DslpRev = (((-Isbd)*T1.val())/Nvtmd);
4591 Czbs = (CJS_t*
ASEJ);
4592 Czbssw = (CJSWS_t*
PSEJ);
4593 Czbsswg = ((CJSWGS_t*Weff0)*NFINtotal);
4594 Czbd = (CJD_t*
ADEJ);
4595 Czbdsw = (CJSWD_t*
PDEJ);
4596 Czbdswg = ((CJSWGD_t*Weff0)*NFINtotal);
4598 T0 = ((Eg/Vtm)*(TRatio-1.0));
4605 std::cerr <<
"Warning: initial_step is not triggered at the first execution of this code. As a result, bias-independent variables may not be initialized. Check your simulator for Verilog-A language compatibility." << std::endl;
4616 if ((vds_noswap<0.0))
4619 vgs = (vgs_noswap-vds_noswap);
4620 vds = ((-1.0)*vds_noswap);
4621 vgd = (vgd_noswap+vds_noswap);
4631 vgsfb = (vgs-deltaPhi);
4638 vdsx = (sqrt(((vds*vds)+0.01))-0.1);
4641 vesx = (ves-(0.5*(vds-vdsx)));
4642 vesmax = (0.95*PHIBE_i);
4643 T2 = ((vesmax-vesx)-1.0E-3);
4644 veseff = (vesmax-(0.5*(T2+sqrt(((T2*T2)+(0.004*vesmax))))));
4646 T0 = tanh(((0.6*vds_noswap)/Vtm));
4647 wf = (0.5+(0.5*T0));
4651 CDSCD_a = ((CDSCDR_i*wr)+(CDSCD_i*wf));
4652 ETA0_a = ((ETA0R_t*wr)+(ETA0_t*wf));
4653 PDIBL1_a = ((PDIBL1R_i*wr)+(PDIBL1_i*wf));
4654 MEXP_a = ((MEXPR_t*wr)+(MEXP_t*wf));
4655 PTWG_a = ((PTWGR_t*wr)+(PTWG_t*wf));
4656 VSAT1_a = ((VSAT1R_t*wr)+(VSAT1_t*wf));
4657 RSDR_a = ((RSDRR_t*wr)+(RSDR_t*wf));
4658 RDDR_a = ((RDDRR_t*wr)+(RDDR_t*wf));
4664 PDIBL1_a = PDIBL1_i;
4671 inv_MEXP = (1.0/MEXP_a);
4672 phist = ((0.4+phib)+PHIN_i);
4675 T1 = (((2*cox)*csi)/((2*csi)+cox));
4681 cdsc = (Theta_SW*(CDSC_i+(CDSCD_a*vdsx)));
4682 nVtm = ((Vtm*ThetaSS)*(1.0+(((CIT_i/TRatio)+cdsc)/T1)));
4683 dvth_vtroll = (((-DVT0_i)*Theta_SCE)*(vbi-phist));
4685 dvth_rsce = ((K1RSCE_i*Theta_RSCE)*sqrt(phist));
4686 dvth_all = ((((dvth_vtroll+dvth_dibl)+dvth_rsce)+dvth_temp)+DVTSHIFT_i);
4687 vgsfb = (vgsfb-dvth_all);
4693 vgsfb = (vgsfb-((((0.5*1.60219e-19)*nbody)*
TFIN)/cox));
4697 q0 = ((((5.0*nVtm)*(epssub/
TFIN))+(2.0*Qbul))/cox);
4707 q0 = ((2.0*nVtm)*r1);
4708 T0 = (((1.60219e-19*nbody)*R)/cox);
4714 q0_acc = ((2.0*Vtm)*r1_acc);
4715 T0 = (((1.60219e-19*ni)*R)/cox_acc);
4750 aab = (phibulk/(nVtm*nVtm));
4752 T11 = (((r1*phibulk)/nVtm)+(r2*T0));
4761 F0 = ((vgsfbeff_acc/(2.0*Vtm))-F1_acc);
4772 z2 = atan(((2*T0)*Inv_r1pi_acc));
4773 g0 = min(z1,max(z2,1e-15));
4774 if (((g0>g0max)||(g0<g0min)))
4787 secg0sq = ((tang0*tang0)+1.0);
4791 e0 = (((lng0-lncosg0)+(r1_acc*T0))-F0);
4792 e1 = ((inv_g0+((secg0sq*g0)*r1_acc))+(tang0*(1.0+r1_acc)));
4793 e2 = ((secg0sq*(1.0+(2.0*(r1_acc+(T0*r1_acc)))))-(inv_g0*inv_g0));
4794 e3 = (((((2.0*inv_g0)*inv_g0)*inv_g0)+((((2.0*g0)*secg0sq)*secg0sq)*r1_acc))+(((2.0*secg0sq)*tang0)*((1.0+(3.0*r1_acc))+((2.0*r1_acc)*T0))));
4795 g0 = (g0-((e0/e1)*((1.0+((e0*e2)/((2.0*e1)*e1)))+(((e0*e0)*(((3.0*e2)*e2)-(e1*e3)))/((((6.0*e1)*e1)*e1)*e1)))));
4796 if (((g0>g0max)||(g0<g0min)))
4809 secg0sq = ((tang0*tang0)+1.0);
4813 e0 = (((lng0-lncosg0)+(r1_acc*T0))-F0);
4814 e1 = ((inv_g0+((secg0sq*g0)*r1_acc))+(tang0*(1.0+r1_acc)));
4815 e2 = ((secg0sq*(1.0+(2.0*(r1_acc+(T0*r1_acc)))))-(inv_g0*inv_g0));
4816 e3 = (((((2.0*inv_g0)*inv_g0)*inv_g0)+((((2.0*g0)*secg0sq)*secg0sq)*r1_acc))+(((2.0*secg0sq)*tang0)*((1.0+(3.0*r1_acc))+((2.0*r1_acc)*T0))));
4817 g0 = (g0-((e0/e1)*((1.0+((e0*e2)/((2.0*e1)*e1)))+(((e0*e0)*(((3.0*e2)*e2)-(e1*e3)))/((((6.0*e1)*e1)*e1)*e1)))));
4818 if (((g0>g0max)||(g0<g0min)))
4835 F0 = (vgsfbeff_acc/(2.0*Vtm));
4856 g0 = ((sqrt((0.25+(((r1_acc*r1_acc)*T0)*T0)))-0.5)/(r1_acc*r1_acc));
4859 if (((g0>g0max)||(g0<g0min)))
4877 inv_g0sq = (inv_g0*inv_g0);
4878 T0 = (1+(cdop_acc*g0));
4882 e1 = (((0.5*inv_g0)+(0.5*T1))+r1_acc);
4883 e2 = (((-0.5)*inv_g0sq)-(0.5*T2));
4884 e3 = ((inv_g0*inv_g0sq)+(T2*T1));
4885 g0 = (g0-((e0/e1)*((1.0+((e0*e2)/((2.0*e1)*e1)))+(((e0*e0)*(((3.0*e2)*e2)-(e1*e3)))/((((6.0*e1)*e1)*e1)*e1)))));
4886 if (((g0>g0max)||(g0<g0min)))
4898 inv_g0sq = (inv_g0*inv_g0);
4899 T0 = (1+(cdop_acc*g0));
4903 e1 = (((0.5*inv_g0)+(0.5*T1))+r1_acc);
4904 e2 = (((-0.5)*inv_g0sq)-(0.5*T2));
4905 e3 = ((inv_g0*inv_g0sq)+(T2*T1));
4906 g0 = (g0-((e0/e1)*((1.0+((e0*e2)/((2.0*e1)*e1)))+(((e0*e0)*(((3.0*e2)*e2)-(e1*e3)))/((((6.0*e1)*e1)*e1)*e1)))));
4907 if (((g0>g0max)||(g0<g0min)))
4920 qi_acc = (q0_acc*g0a);
4928 F0 = (((vgsfbeff-vch)/(2.0*nVtm))-F1);
4939 z2 = atan(((2*T0)*Inv_r1pi));
4940 g0 = min(z1,max(z2,1e-15));
4941 if (((g0>g0max)||(g0<g0min)))
4954 secg0sq = ((tang0*tang0)+1.0);
4959 e0 = ((((lng0-lncosg0)+(r1*T0))+(r2*T1))-F0);
4960 e1 = ((inv_g0+((secg0sq*g0)*(r1+((2.0*r2)*T0))))+(tang0*(1.0+(r1+((2.0*r2)*T0)))));
4961 e2 = ((secg0sq*(1.0+(2.0*(((r1+(((r2*g0)*g0)*secg0sq))+(T0*r1))+((2.0*r2)*(T1+(2.0*T0)))))))+((inv_g0*inv_g0)*(((2.0*T1)*r2)-1.0)));
4962 e3 = (((((2.0*inv_g0)*inv_g0)*inv_g0)+((((2.0*g0)*secg0sq)*secg0sq)*(r1+((2.0*r2)*(3.0+(4.0*T0))))))+(((2.0*secg0sq)*tang0)*(((1.0+(3.0*r1))+((2.0*r1)*T0))+((2.0*r2)*((3.0*(1+(2.0*T0)))+(2.0*T1))))));
4963 g0 = (g0-((e0/e1)*((1.0+((e0*e2)/((2.0*e1)*e1)))+(((e0*e0)*(((3.0*e2)*e2)-(e1*e3)))/((((6.0*e1)*e1)*e1)*e1)))));
4964 if (((g0>g0max)||(g0<g0min)))
4977 secg0sq = ((tang0*tang0)+1.0);
4982 e0 = ((((lng0-lncosg0)+(r1*T0))+(r2*T1))-F0);
4983 e1 = ((inv_g0+((secg0sq*g0)*(r1+((2.0*r2)*T0))))+(tang0*(1.0+(r1+((2.0*r2)*T0)))));
4984 e2 = ((secg0sq*(1.0+(2.0*(((r1+(((r2*g0)*g0)*secg0sq))+(T0*r1))+((2.0*r2)*(T1+(2.0*T0)))))))+((inv_g0*inv_g0)*(((2.0*T1)*r2)-1.0)));
4985 e3 = (((((2.0*inv_g0)*inv_g0)*inv_g0)+((((2.0*g0)*secg0sq)*secg0sq)*(r1+((2.0*r2)*(3.0+(4.0*T0))))))+(((2.0*secg0sq)*tang0)*(((1.0+(3.0*r1))+((2.0*r1)*T0))+((2.0*r2)*((3.0*(1+(2.0*T0)))+(2.0*T1))))));
4986 g0 = (g0-((e0/e1)*((1.0+((e0*e2)/((2.0*e1)*e1)))+(((e0*e0)*(((3.0*e2)*e2)-(e1*e3)))/((((6.0*e1)*e1)*e1)*e1)))));
4987 if (((g0>g0max)||(g0<g0min)))
5004 F0 = ((((vgsfbeff-phibulk)-vch)/T14)-F1);
5007 z1 = ((((2.0*r1)-1.0)*T1)+(r2*T0));
5008 guessA = ((2.0*r1)*T1);
5009 guessA = (guessA/(1.0-exp((-guessA))));
5010 z2 = (z1+log((sqrt(guessA)/r1)));
5011 if (((F0-z2)>((-0.3)/T14)))
5015 T2 = (((0.5/guessA)*log((1.0+exp((2.0*(F0-z2))))))+1.0);
5019 T2 = (((0.5/guessA)*(2.0*(F0-z2)))+1.0);
5022 guessB = (((guessA/r1)*sqrt((T3-1.0)))*exp((-T1)));
5026 guessB = exp(((F0-z1)-T1));
5031 g0 = (1.0/((1.0/g0)+(1.0/(0.5*3.14159265358979323846))));
5034 secg0 = (1.0/cosg0);
5035 secg0sq = (secg0*secg0);
5036 lng0 = (-log((1.0/g0)));
5037 T0 = (1.0+(g0*tang0));
5040 T3 = ((((-2.0)*g0)+((aab*T14)*tang0))+((((2.0*T13)*g0)*secg0sq)*T0));
5041 T4 = (((-2.0)+(((((2.0*T13)*g0)*g0)*secg0sq)*secg0sq))+(secg0sq*((((2*T13)+(aab*T14))+(((8.0*T13)*g0)*tang0))+(((((4.0*T13)*g0)*g0)*tang0)*tang0))));
5042 T5 = (((2.0*tang0)*T4)+(4.0*(((((((3.0*T13)*g0)*secg0sq)*secg0sq)*T0)+tang0)+((((2.0*T13)*secg0sq)*T0)*tang0))));
5044 T8 = ((((1.0/g0)+tang0)+(r2*T3))+((r1*T3)/(2.0*T2)));
5045 T9 = ((((((-1.0)/(g0*g0))+secg0sq)-(((r1*T3)*T3)/(((4*T2)*T2)*T2)))+((r1*T4)/(2.0*T2)))+(r2*T4));
5046 TA = (((((2.0/((g0*g0)*g0))+((2.0*secg0sq)*tang0))+((((3.0*r1)*T3)/(4.0*pow(T2,3)))*(((T3*T3)/((2.0*T2)*T2))-T4)))+((r1*T5)/(2.0*T2)))+(r2*T5));
5047 g0 = (g0-((T7/T8)*((1.0+((T7*T9)/((2.0*T8)*T8)))+(((T7*T7)*(((3.0*T9)*T9)-(T8*TA)))/(6.0*pow(T8,4))))));
5050 secg0 = (1.0/cosg0);
5051 secg0sq = (secg0*secg0);
5052 lng0 = (-log((1.0/g0)));
5053 T0 = (1.0+(g0*tang0));
5056 T3 = ((((-2.0)*g0)+((aab*T14)*tang0))+((((2.0*T13)*g0)*secg0sq)*T0));
5057 T4 = (((-2.0)+(((((2.0*T13)*g0)*g0)*secg0sq)*secg0sq))+(secg0sq*((((2*T13)+(aab*T14))+(((8.0*T13)*g0)*tang0))+(((((4.0*T13)*g0)*g0)*tang0)*tang0))));
5058 T5 = (((2.0*tang0)*T4)+(4.0*(((((((3.0*T13)*g0)*secg0sq)*secg0sq)*T0)+tang0)+((((2.0*T13)*secg0sq)*T0)*tang0))));
5060 T8 = ((((1.0/g0)+tang0)+(r2*T3))+((r1*T3)/(2.0*T2)));
5061 T9 = ((((((-1.0)/(g0*g0))+secg0sq)-(((r1*T3)*T3)/(((4*T2)*T2)*T2)))+((r1*T4)/(2.0*T2)))+(r2*T4));
5062 TA = (((((2.0/((g0*g0)*g0))+((2.0*secg0sq)*tang0))+((((3.0*r1)*T3)/(4.0*pow(T2,3)))*(((T3*T3)/((2.0*T2)*T2))-T4)))+((r1*T5)/(2.0*T2)))+(r2*T5));
5063 g0 = (g0-((T7/T8)*((1.0+((T7*T9)/((2.0*T8)*T8)))+(((T7*T7)*(((3.0*T9)*T9)-(T8*TA)))/(6.0*pow(T8,4))))));
5064 lng0 = (-log((1.0/g0)));
5070 lng0 = (-log((1.0/g0)));
5074 if (((F0-z2)>((-0.3)/T14)))
5076 lng0 = ((-log((1.0/((guessA/r1)*sqrt((T3-1.0))))))-T1);
5080 lng0 = ((F0-z1)-T1);
5089 F0 = ((vgsfbeff-vch)/(2.0*nVtm));
5103 g0 = ((sqrt((0.25+(((r1*r1)*T0)*T0)))-0.5)/(r1*r1));
5106 if (((g0>g0max)||(g0<g0min)))
5124 inv_g0sq = (inv_g0*inv_g0);
5129 e1 = ((((0.5*inv_g0)+(0.5*T1))+r1)+((2*r2)*g0));
5130 e2 = ((((-0.5)*inv_g0sq)-(0.5*T2))+(2*r2));
5131 e3 = ((inv_g0*inv_g0sq)+(T2*T1));
5132 g0 = (g0-((e0/e1)*((1.0+((e0*e2)/((2.0*e1)*e1)))+(((e0*e0)*(((3.0*e2)*e2)-(e1*e3)))/((((6.0*e1)*e1)*e1)*e1)))));
5133 if (((g0>g0max)||(g0<g0min)))
5145 inv_g0sq = (inv_g0*inv_g0);
5150 e1 = ((((0.5*inv_g0)+(0.5*T1))+r1)+((2*r2)*g0));
5151 e2 = ((((-0.5)*inv_g0sq)-(0.5*T2))+(2.0*r2));
5152 e3 = ((inv_g0*inv_g0sq)+(T2*T1));
5153 g0 = (g0-((e0/e1)*((1.0+((e0*e2)/((2.0*e1)*e1)))+(((e0*e0)*(((3.0*e2)*e2)-(e1*e3)))/((((6.0*e1)*e1)*e1)*e1)))));
5154 if (((g0>g0max)||(g0<g0min)))
5167 vpolys = ((((2.0*nVtm)*r2)*g0s)*g0s);
5168 phis = ((vgsfbeff-(((2.0*nVtm)*r1)*g0s))-vpolys);
5175 T0 = (sqrt((1.0+((vgsfbeff-phis)/vpoly0)))-1.0);
5176 vpolys = ((vpoly0*T0)*T0);
5184 qis = ((vgsfbeff-phis)-vpolys);
5188 qis = (((vgsfbeff-phis)-qbs)-vpolys);
5191 Eeffs = (EeffFactor*(qbs+(eta_mu*qis)));
5193 T2 = pow((0.5*(1.0+fabs((qis/qb0)))),UCS_t);
5196 T3 = (((UA_t+(UC_t*veseff))*pow(fabs(Eeffs),EU_i))+(UD_t/T2));
5200 T3 = ((UA_t*pow(fabs(Eeffs),EU_i))+(UD_t/T2));
5210 T4 = (1.0+(PRWGS_i*qis));
5212 T0 = (0.5*(T1+sqrt(((T1*T1)+0.01))));
5213 Rdss = ((((RDSWMIN_i+(RDSW_i*T0))*WeffWRFactor)*NFINtotal)*rdstemp);
5215 Esat = (((2*VSAT_t)/u0)*Dmobs);
5216 EsatL = (Esat*Leff);
5217 T6 = (KSATIV_i*((vgsfbeff-phis)+(2*Vtm)));
5220 Vdsat = ((EsatL*T6)/(EsatL+T6));
5224 WVCox = ((Weff0*VSAT_t)*cox);
5227 Tb = ((T6+EsatL)+((3*T6)*T0));
5228 Tc = (T6*(EsatL+((2*T6)*T0)));
5229 Vdsat = ((Tb-sqrt(((Tb*Tb)-((2*Ta)*Tc))))/Ta);
5232 T7 = pow((vds/Vdsat),MEXP_a);
5233 T8 = pow((1.0+T7),inv_MEXP);
5239 vch = (Vdseff+dvch_qm);
5244 F0 = (((vgsfbeff-vch)/(2.0*nVtm))-F1);
5255 z2 = atan(((2*T0)*Inv_r1pi));
5256 g0 = min(z1,max(z2,1e-15));
5257 if (((g0>g0max)||(g0<g0min)))
5270 secg0sq = ((tang0*tang0)+1.0);
5275 e0 = ((((lng0-lncosg0)+(r1*T0))+(r2*T1))-F0);
5276 e1 = ((inv_g0+((secg0sq*g0)*(r1+((2.0*r2)*T0))))+(tang0*(1.0+(r1+((2.0*r2)*T0)))));
5277 e2 = ((secg0sq*(1.0+(2.0*(((r1+(((r2*g0)*g0)*secg0sq))+(T0*r1))+((2.0*r2)*(T1+(2.0*T0)))))))+((inv_g0*inv_g0)*(((2.0*T1)*r2)-1.0)));
5278 e3 = (((((2.0*inv_g0)*inv_g0)*inv_g0)+((((2.0*g0)*secg0sq)*secg0sq)*(r1+((2.0*r2)*(3.0+(4.0*T0))))))+(((2.0*secg0sq)*tang0)*(((1.0+(3.0*r1))+((2.0*r1)*T0))+((2.0*r2)*((3.0*(1+(2.0*T0)))+(2.0*T1))))));
5279 g0 = (g0-((e0/e1)*((1.0+((e0*e2)/((2.0*e1)*e1)))+(((e0*e0)*(((3.0*e2)*e2)-(e1*e3)))/((((6.0*e1)*e1)*e1)*e1)))));
5280 if (((g0>g0max)||(g0<g0min)))
5293 secg0sq = ((tang0*tang0)+1.0);
5298 e0 = ((((lng0-lncosg0)+(r1*T0))+(r2*T1))-F0);
5299 e1 = ((inv_g0+((secg0sq*g0)*(r1+((2.0*r2)*T0))))+(tang0*(1.0+(r1+((2.0*r2)*T0)))));
5300 e2 = ((secg0sq*(1.0+(2.0*(((r1+(((r2*g0)*g0)*secg0sq))+(T0*r1))+((2.0*r2)*(T1+(2.0*T0)))))))+((inv_g0*inv_g0)*(((2.0*T1)*r2)-1.0)));
5301 e3 = (((((2.0*inv_g0)*inv_g0)*inv_g0)+((((2.0*g0)*secg0sq)*secg0sq)*(r1+((2.0*r2)*(3.0+(4.0*T0))))))+(((2.0*secg0sq)*tang0)*(((1.0+(3.0*r1))+((2.0*r1)*T0))+((2.0*r2)*((3.0*(1+(2.0*T0)))+(2.0*T1))))));
5302 g0 = (g0-((e0/e1)*((1.0+((e0*e2)/((2.0*e1)*e1)))+(((e0*e0)*(((3.0*e2)*e2)-(e1*e3)))/((((6.0*e1)*e1)*e1)*e1)))));
5303 if (((g0>g0max)||(g0<g0min)))
5320 F0 = ((((vgsfbeff-phibulk)-vch)/T14)-F1);
5323 z1 = ((((2.0*r1)-1.0)*T1)+(r2*T0));
5324 guessA = ((2.0*r1)*T1);
5325 guessA = (guessA/(1.0-exp((-guessA))));
5326 z2 = (z1+log((sqrt(guessA)/r1)));
5327 if (((F0-z2)>((-0.3)/T14)))
5331 T2 = (((0.5/guessA)*log((1.0+exp((2.0*(F0-z2))))))+1.0);
5335 T2 = (((0.5/guessA)*(2.0*(F0-z2)))+1.0);
5338 guessB = (((guessA/r1)*sqrt((T3-1.0)))*exp((-T1)));
5342 guessB = exp(((F0-z1)-T1));
5347 g0 = (1.0/((1.0/g0)+(1.0/(0.5*3.14159265358979323846))));
5350 secg0 = (1.0/cosg0);
5351 secg0sq = (secg0*secg0);
5352 lng0 = (-log((1.0/g0)));
5353 T0 = (1.0+(g0*tang0));
5356 T3 = ((((-2.0)*g0)+((aab*T14)*tang0))+((((2.0*T13)*g0)*secg0sq)*T0));
5357 T4 = (((-2.0)+(((((2.0*T13)*g0)*g0)*secg0sq)*secg0sq))+(secg0sq*((((2*T13)+(aab*T14))+(((8.0*T13)*g0)*tang0))+(((((4.0*T13)*g0)*g0)*tang0)*tang0))));
5358 T5 = (((2.0*tang0)*T4)+(4.0*(((((((3.0*T13)*g0)*secg0sq)*secg0sq)*T0)+tang0)+((((2.0*T13)*secg0sq)*T0)*tang0))));
5360 T8 = ((((1.0/g0)+tang0)+(r2*T3))+((r1*T3)/(2.0*T2)));
5361 T9 = ((((((-1.0)/(g0*g0))+secg0sq)-(((r1*T3)*T3)/(((4*T2)*T2)*T2)))+((r1*T4)/(2.0*T2)))+(r2*T4));
5362 TA = (((((2.0/((g0*g0)*g0))+((2.0*secg0sq)*tang0))+((((3.0*r1)*T3)/(4.0*pow(T2,3)))*(((T3*T3)/((2.0*T2)*T2))-T4)))+((r1*T5)/(2.0*T2)))+(r2*T5));
5363 g0 = (g0-((T7/T8)*((1.0+((T7*T9)/((2.0*T8)*T8)))+(((T7*T7)*(((3.0*T9)*T9)-(T8*TA)))/(6.0*pow(T8,4))))));
5366 secg0 = (1.0/cosg0);
5367 secg0sq = (secg0*secg0);
5368 lng0 = (-log((1.0/g0)));
5369 T0 = (1.0+(g0*tang0));
5372 T3 = ((((-2.0)*g0)+((aab*T14)*tang0))+((((2.0*T13)*g0)*secg0sq)*T0));
5373 T4 = (((-2.0)+(((((2.0*T13)*g0)*g0)*secg0sq)*secg0sq))+(secg0sq*((((2*T13)+(aab*T14))+(((8.0*T13)*g0)*tang0))+(((((4.0*T13)*g0)*g0)*tang0)*tang0))));
5374 T5 = (((2.0*tang0)*T4)+(4.0*(((((((3.0*T13)*g0)*secg0sq)*secg0sq)*T0)+tang0)+((((2.0*T13)*secg0sq)*T0)*tang0))));
5376 T8 = ((((1.0/g0)+tang0)+(r2*T3))+((r1*T3)/(2.0*T2)));
5377 T9 = ((((((-1.0)/(g0*g0))+secg0sq)-(((r1*T3)*T3)/(((4*T2)*T2)*T2)))+((r1*T4)/(2.0*T2)))+(r2*T4));
5378 TA = (((((2.0/((g0*g0)*g0))+((2.0*secg0sq)*tang0))+((((3.0*r1)*T3)/(4.0*pow(T2,3)))*(((T3*T3)/((2.0*T2)*T2))-T4)))+((r1*T5)/(2.0*T2)))+(r2*T5));
5379 g0 = (g0-((T7/T8)*((1.0+((T7*T9)/((2.0*T8)*T8)))+(((T7*T7)*(((3.0*T9)*T9)-(T8*TA)))/(6.0*pow(T8,4))))));
5380 lng0 = (-log((1.0/g0)));
5386 lng0 = (-log((1.0/g0)));
5390 if (((F0-z2)>((-0.3)/T14)))
5392 lng0 = ((-log((1.0/((guessA/r1)*sqrt((T3-1.0))))))-T1);
5396 lng0 = ((F0-z1)-T1);
5405 F0 = ((vgsfbeff-vch)/(2.0*nVtm));
5419 g0 = ((sqrt((0.25+(((r1*r1)*T0)*T0)))-0.5)/(r1*r1));
5422 if (((g0>g0max)||(g0<g0min)))
5440 inv_g0sq = (inv_g0*inv_g0);
5445 e1 = ((((0.5*inv_g0)+(0.5*T1))+r1)+((2*r2)*g0));
5446 e2 = ((((-0.5)*inv_g0sq)-(0.5*T2))+(2*r2));
5447 e3 = ((inv_g0*inv_g0sq)+(T2*T1));
5448 g0 = (g0-((e0/e1)*((1.0+((e0*e2)/((2.0*e1)*e1)))+(((e0*e0)*(((3.0*e2)*e2)-(e1*e3)))/((((6.0*e1)*e1)*e1)*e1)))));
5449 if (((g0>g0max)||(g0<g0min)))
5461 inv_g0sq = (inv_g0*inv_g0);
5466 e1 = ((((0.5*inv_g0)+(0.5*T1))+r1)+((2*r2)*g0));
5467 e2 = ((((-0.5)*inv_g0sq)-(0.5*T2))+(2*r2));
5468 e3 = ((inv_g0*inv_g0sq)+(T2*T1));
5469 g0 = (g0-((e0/e1)*((1.0+((e0*e2)/((2.0*e1)*e1)))+(((e0*e0)*(((3.0*e2)*e2)-(e1*e3)))/((((6.0*e1)*e1)*e1)*e1)))));
5470 if (((g0>g0max)||(g0<g0min)))
5483 vpolyd = ((((2*nVtm)*r2)*g0d)*g0d);
5484 phid = ((vgsfbeff-(((2*nVtm)*r1)*g0d))-vpolyd);
5492 T0 = (sqrt((1+((vgsfbeff-phid)/vpoly0)))-1);
5493 vpolyd = ((vpoly0*T0)*T0);
5501 qid = ((vgsfbeff-phid)-vpolyd);
5505 qid = (((vgsfbeff-phid)-qbs)-vpolyd);
5508 qia = (0.5*(qis+qid));
5510 T0 = (pow(Vdseff,2.0)/6.25e-4);
5517 qia2 = (0.5*(qis+qid));
5519 if (((QMTCENIV_i>0.0)||(QMTCENCV_i>0.0)))
5532 Weff = (Weff0-((4.0*QMTCENIV_i)*Tcen));
5533 WeffCV = (WeffCV0-((4.0*QMTCENCV_i)*Tcen));
5538 Weff = (Weff0-((8.0*QMTCENIV_i)*Tcen));
5539 WeffCV = (WeffCV0-((8.0*QMTCENCV_i)*Tcen));
5544 Weff = (Weff0-(((2.0*3.14159265358979323846)*QMTCENIV_i)*Tcen));
5545 WeffCV = (WeffCV0-(((2.0*3.14159265358979323846)*QMTCENCV_i)*Tcen));
5579 beta = (((u0*cox)*Weff)/Leff);
5580 Eeffm = (EeffFactor*(qba+(eta_mu*qia2)));
5581 T2 = pow((0.5*(1.0+fabs((qia2/qb0)))),UCS_t);
5584 T3 = (((UA_t+(UC_t*veseff))*pow(fabs(Eeffm),EU_i))+(UD_t/T2));
5588 T3 = ((UA_t*pow(fabs(Eeffm),EU_i))+(UD_t/T2));
5593 Eeffm_cv = (EeffFactor*(qba+(eta_mu_cv*qia2)));
5594 T3 = ((UA_t*pow(fabs(Eeffm_cv),EU_i))+(UD_t/T2));
5597 tmp = (((DROUT_i*Leff)/scl)+1.0e-6);
5600 DIBLfactor = (((0.5*PDIBL1_a)/(cosh(tmp)-1.0))+PDIBL2_i);
5604 DIBLfactor = ((PDIBL1_a*exp((-tmp)))+PDIBL2_i);
5608 PVAGfactor = (1.0+((PVAG_i*qia)/EsatL));
5612 PVAGfactor = (1.0/(1.0-((PVAG_i*qia)/EsatL)));
5618 diffVds = (vds-Vdseff);
5619 Vgst2Vtm = (qia+(2.0*Vtm));
5623 T3 = (T1/(Vdsat+T1));
5624 VaDIBL = (((T1/DIBLfactor)*T3)*PVAGfactor);
5625 Moc = (1.0+(diffVds/VaDIBL));
5635 T1 = (1.0/((1.0/PCLM_i)-(PCLMG_i*qia)));
5639 T1 = (PCLM_i+(PCLMG_i*qia));
5648 Esat1 = ((2.0*VSAT1_a)/ueff);
5649 Esat1L = (Esat1*Leff);
5653 Dvsat = (Dvsat+((((0.5*PTWG_a)*qia)*dqi)*dqi));
5654 T0 = (A1_t+(A2_t/(qia+(2.0*nVtm))));
5655 T1 = ((T0*dqi)*dqi);
5656 T2 = ((T1+1.0)-0.001);
5657 T3 = ((-1.0)+(0.5*(T2+sqrt(((T2*T2)+0.004)))));
5658 Nsat = (0.5*(1.0+sqrt((1.0+T3))));
5659 Dvsat = (Dvsat*Nsat);
5662 T1 = (K0_t/((K0SI_t*qia)+(2.0*nVtm)));
5672 T1 = (T0/((K1SI_t*qia)+(2.0*nVtm)));
5673 T3 = (sqrt((PHIBE_i-veseff))-sqrt(PHIBE_i));
5680 EsatCV = (((2.0*VSATCV_t)*Dmob_cv)/u0);
5681 EsatCVL = (EsatCV*LeffCV);
5699 qb = ((((((-1.60219e-19)*nbody)*3.14159265358979323846)*R)*R)*LeffCV);
5703 T0 = ((2.0*csi)/cox);
5708 T3 = ((((4.0*r2)*(((T1*T1)+(T1*T2))+(T2*T2)))/3.0)+(T0*(T1+T2)));
5714 T6 = ((g0s*g0s)-(g0d*g0d));
5715 ids0 = ((((2.0*T0)*nVtm)*nVtm)*(((T3+2.0)*(T1-T2))-T6));
5716 ids0_ov_dqi = ((0.5*nVtm)*(T3+1.0));
5721 T2 = (vgs_noswap-vfbsd);
5722 T3 = sqrt(((T2*T2)+1.0e-1));
5723 vgs_eff = (0.5*(T2+T3));
5724 T4 = (1.0+(PRWGS_i*vgs_eff));
5726 T0 = (0.5*(T1+sqrt(((T1*T1)+0.01))));
5728 Rsource = (rdstemp*(RSourceGeo+((RSWMIN_i+(T5*T0))*WeffWRFactor)));
5729 T2 = (vgd_noswap-vfbsd);
5730 T3 = sqrt(((T2*T2)+1.0e-1));
5731 vgd_eff = (0.5*(T2+T3));
5732 T4 = (1.0+(PRWGD_i*vgd_eff));
5734 T0 = (0.5*(T1+sqrt(((T1*T1)+0.01))));
5736 Rdrain = (rdstemp*(RDrainGeo+((RDWMIN_i+(T5*T0))*WeffWRFactor)));
5740 Rsource = RSourceGeo;
5742 T4 = (1.0+(PRWGS_i*qia));
5744 T0 = (0.5*(T1+sqrt(((T1*T1)+0.01))));
5745 Rdsi = ((rdstemp*(RDSWMIN_i+(RDSW_i*T0)))*WeffWRFactor);
5746 Dr = (1.0+((((NFINtotal*beta)*ids0_ov_dqi)/(Dmob*Dvsat))*Rdsi));
5748 ids = ((((((NFINtotal*beta)*ids0)*Moc)*Mob)*Mnud)/((Dmob*Dvsat)*Dr));
5752 Tcom = (((qis*qis)+(qis*qid))+(qid*qid));
5760 idscv = (((((2.0*cpoly)*Tcom)/3.0)+(kpoly*qia))+((2.0-etaiv)*nVtm));
5764 idscv = (qia+((2.0-etaiv)*nVtm));
5766 idscv = (idscv/DvsatCV);
5767 beta_cv = (((u0*coxeff)*WeffCV)/LeffCV);
5768 dqi_idscv = (dqi/idscv);
5771 T1 = (kpoly+((4.0*cpoly)*qia));
5777 qg = (qia+(((T1*dqi)*dqi_idscv)/12.0));
5780 T1 = ((15.0*kpoly)+(cpoly*((32.0*qid)+(28.0*qis))));
5781 T2 = ((((63.0*kpoly)*kpoly)+(((126.0*cpoly)*kpoly)*qia))+((cpoly*cpoly)*((256.0*Tcom)+((240.0*qis)*qid))));
5788 qd = ((0.5*qia)-((dqi*((1.0-((T1*dqi_idscv)/30.0))-(((T2*dqi_idscv)*dqi_idscv)/1260.0)))/12.0));
5789 inv_MclmCV = (1.0/MclmCV);
5790 qg = ((inv_MclmCV*qg)+((MclmCV-1.0)*qid));
5791 qd = (((inv_MclmCV*inv_MclmCV)*qd)+((0.5*(MclmCV-inv_MclmCV))*qid));
5792 T1 = ((WeffCV*LeffCV)*coxeff);
5793 qinv = ((NFINtotal*qg)*T1);
5794 qd = ((NFINtotal*qd)*T1);
5795 qg = (qinv-(NFINtotal*qb));
5797 qb = ((+NFINtotal)*qb);
5798 qs = (((-qg)-qd)-qb);
5810 std::cerr <<
"[bsimcmg] Although the model selector NQSMOD is set to 3, the NQS charge segmentation model is not activated in the Verilog-A code. Please uncomment `define __NQSMOD3__ in bsimcmg.va to activate it. Quasi-static calculations being performed instead" << std::endl;
5814 Tcom = (((qis*qis)+(qis*qid))+(qid*qid));
5822 T0 = (((2.0*cpoly)*Tcom)/3);
5830 etaiv = (q0/(q0+(cdop*qia)));
5831 T2 = ((2.0-etaiv)*nVtm);
5832 ids0_ov_dqi = ((T0+T1)+T2);
5833 ids0 = (ids0_ov_dqi*dqi);
5838 T2 = (vgs_noswap-vfbsd);
5839 T3 = sqrt(((T2*T2)+1.0e-1));
5840 vgs_eff = (0.5*(T2+T3));
5841 T4 = (1.0+(PRWGS_i*vgs_eff));
5843 T0 = (0.5*(T1+sqrt(((T1*T1)+0.01))));
5845 Rsource = (rdstemp*(RSourceGeo+((RSWMIN_i+(T5*T0))*WeffWRFactor)));
5846 T2 = (vgd_noswap-vfbsd);
5847 T3 = sqrt(((T2*T2)+1.0e-1));
5848 vgd_eff = (0.5*(T2+T3));
5849 T4 = (1.0+(PRWGD_i*vgd_eff));
5851 T0 = (0.5*(T1+sqrt(((T1*T1)+0.01))));
5853 Rdrain = (rdstemp*(RDrainGeo+((RDWMIN_i+(T5*T0))*WeffWRFactor)));
5857 Rsource = RSourceGeo;
5859 T4 = (1.0+(PRWGS_i*qia));
5861 T0 = (0.5*(T1+sqrt(((T1*T1)+0.01))));
5862 Rdsi = ((rdstemp*(RDSWMIN_i+(RDSW_i*T0)))*WeffWRFactor);
5863 Dr = (1.0+((((NFINtotal*beta)*ids0_ov_dqi)/(Dmob*Dvsat))*Rdsi));
5865 ids = ((((((NFINtotal*beta)*ids0)*Moc)*Mob)*Mnud)/((Dmob*Dvsat)*Dr));
5869 idscv = (((((2.0*cpoly)*Tcom)/3.0)+(kpoly*qia))+((2.0-etaiv)*nVtm));
5873 idscv = (qia+((2.0-etaiv)*nVtm));
5875 idscv = (idscv/DvsatCV);
5876 beta_cv = (((u0*coxeff)*WeffCV)/LeffCV);
5877 dqi_idscv = (dqi/idscv);
5880 T1 = (kpoly+((4.0*cpoly)*qia));
5886 qg = (qia+(((T1*dqi)*dqi_idscv)/12.0));
5889 T1 = ((15.0*kpoly)+(cpoly*((32.0*qid)+(28.0*qis))));
5890 T2 = ((((63.0*kpoly)*kpoly)+(((126.0*cpoly)*kpoly)*qia))+((cpoly*cpoly)*((256.0*Tcom)+((240.0*qis)*qid))));
5897 qd = ((0.5*qia)-((dqi*((1.0-((T1*dqi_idscv)/30.0))-(((T2*dqi_idscv)*dqi_idscv)/1260.0)))/12.0));
5898 inv_MclmCV = (1.0/MclmCV);
5899 qg = ((inv_MclmCV*qg)+((MclmCV-1.0)*qid));
5900 qd = (((inv_MclmCV*inv_MclmCV)*qd)+((0.5*(MclmCV-inv_MclmCV))*qid));
5901 T1 = ((WeffCV*LeffCV)*coxeff);
5902 qinv = ((NFINtotal*qg)*T1);
5903 qd = ((NFINtotal*qd)*T1);
5904 qg = (qinv-(NFINtotal*qb));
5906 qb = ((+NFINtotal)*qb);
5907 qs = (((-qg)-qd)-qb);
5917 T1 = (((NFINtotal*WeffCV0)*LeffCV_acc)*cox_acc);
5918 qg_acc = ((-qi_acc)*T1);
5919 qb_acc = ((+qi_acc)*T1);
5925 T1 = ((NFINtotal*WeffCV)*devsign);
5927 T0 = ((T2-vfbsd)+0.02);
5928 vgs_overlap = (0.5*(T0-sqrt(((T0*T0)+(4.0*0.02)))));
5929 qgs_ov = (T1*((CGSL_i*(((T2-vfbsd)-vgs_overlap)-((0.5*CKAPPAS_i)*(sqrt((1.0-((4.0*vgs_overlap)/CKAPPAS_i)))-1.0))))+(CGSO_i*T2)));
5931 T0 = ((T2-vfbsd)+0.02);
5932 vgd_overlap = (0.5*(T0-sqrt(((T0*T0)+(4.0*0.02)))));
5933 qgd_ov = (T1*((CGDL_i*(((T2-vfbsd)-vgd_overlap)-((0.5*CKAPPAD_i)*(sqrt((1.0-((4.0*vgd_overlap)/CKAPPAD_i)))-1.0))))+(CGDO_i*T2)));
5937 T1 = (NFINtotal*WeffCV0);
5940 qgs_parasitic = (qgs_ov+qgs_fr);
5941 qgd_parasitic = (qgd_ov+qgd_fr);
5949 T0 = (NFINtotal*WeffCV0);
5950 COVS_i = (T0*COVS_i);
5951 COVD_i = (T0*COVD_i);
5962 qgs_parasitic = qgs_ov;
5963 qgd_parasitic = qgd_ov;
5971 qgs_parasitic = (qgs_ov+qgs_fr);
5972 qgd_parasitic = (qgd_ov+qgd_fr);
5979 T0 = ((ALPHA0_t+(ALPHA1_t*Leff))/Leff);
5980 if (((T0<=0.0)||(BETA0_t<=0.0)))
5986 T1 = ((-BETA0_t)/(diffVds+1.0e-30));
5994 ALPHAII = ((ALPHAII0_t+(ALPHAII1_t*Leff))/Leff);
6001 T0 = (ESATII_i*Leff);
6002 T1 = ((SII0_t*T0)/(1.0+T0));
6006 T3 = (1.0/(1.0+(SIID_i*vds)));
6007 VgsStep = ((T1*T2)*T3);
6008 Vdsatii = (VgsStep*(1.0-(LII_i/Leff)));
6009 Vdiff = (vds-Vdsatii);
6010 T0 = ((BETAII2_i+(BETAII1_i*Vdiff))+((BETAII0_i*Vdiff)*Vdiff));
6011 T1 = sqrt(((T0*T0)+1.0E-10));
6013 Ratio = (10.0-(0.5*(T2+sqrt(((T2*T2)+((4.0*10.0)*0.01))))));
6026 T1 = (((qia-EIGBINV_i)/NIGBINV_i)/Vtm);
6028 T2 = (AIGBINV_t-(BIGBINV_i*qia));
6029 T3 = (1+(CIGBINV_i*qia));
6030 T4 = ((((-9.82222e11)*(
model_.
TOXG))*T2)*T3);
6033 igbinv = ((((((Weff0*Leff)*T6)*Toxratio)*vge)*Vaux_Igbinv)*T5);
6034 igbinv = (igbinv*igtemp);
6035 vfbzb = ((deltaPhi-(Eg/2.0))-phib);
6037 T1 = ((T0/NIGBACC_i)/Vtm);
6047 Voxacc = (0.5*((T0-0.02)+sqrt((((T0-0.02)*(T0-0.02))-(0.08*vfbzb)))));
6051 Voxacc = (0.5*((T0-0.02)+sqrt((((T0-0.02)*(T0-0.02))+(0.08*vfbzb)))));
6054 T2 = (AIGBACC_t-(BIGBACC_i*Voxacc));
6055 T3 = (1+(CIGBACC_i*Voxacc));
6056 T4 = ((((-7.45669e11)*(
model_.
TOXG))*T2)*T3);
6059 igbacc = ((((((Weff0*Leff)*T6)*Toxratio)*vge)*Vaux_Igbacc)*T5);
6060 igbacc = (igbacc*igtemp);
6064 T1 = (AIGC_t-(BIGC_i*qia));
6065 T2 = (1.0+(CIGC_i*qia));
6068 T5 = ((vge+(0.5*vdsx))+(0.5*(ves_jct+ved_jct)));
6069 igc0 = ((((((Weff0*Leff)*Aechvb)*Toxratio)*T4)*T5)*igtemp);
6070 Vdseffx = (sqrt(((Vdseff*Vdseff)+0.01))-0.1);
6071 T1 = (PIGCD_i*Vdseffx);
6073 T3 = (((T1+T1_exp)-1.0)+1.0E-4);
6074 T4 = ((1.0-((T1+1.0)*T1_exp))+1.0E-4);
6075 T5 = ((T1*T1)+2.0E-4);
6076 igcd = ((igc0*T4)/T5);
6077 igcs = ((igc0*T3)/T5);
6079 vgs_eff = sqrt(((T0*T0)+1.0e-4));
6080 T1 = (AIGS_t-(BIGS_i*vgs_eff));
6081 T2 = (1.0+(CIGS_i*vgs_eff));
6082 T3 = (((((-Bechvb)*(
model_.
TOXG))*POXEDGE_i)*T1)*T2);
6086 igs = ((((igsd_mult*(
model_.
DLCIGS))*vgs_noswap)*vgs_eff)*T4);
6090 igd = ((((igsd_mult*(
model_.
DLCIGS))*vgs_noswap)*vgs_eff)*T4);
6093 vgd_eff = sqrt(((T0*T0)+1.0e-4));
6094 T1 = (AIGD_t-(BIGD_i*vgd_eff));
6095 T2 = (1.0+(CIGD_i*vgd_eff));
6096 T3 = (((((-Bechvb)*(
model_.
TOXG))*POXEDGE_i)*T1)*T2);
6100 igd = ((((igsd_mult*(
model_.
DLCIGD))*vgd_noswap)*vgd_eff)*T4);
6104 igs = ((((igsd_mult*(
model_.
DLCIGD))*vgd_noswap)*vgd_eff)*T4);
6112 if (((AGIDL_i<=0.0)||(BGIDL_t<=0.0)))
6118 T1 = ((((-vgd_noswap)-EGIDL_i)+vfbsd)/T0);
6120 T2 = (BGIDL_t/(T1+1.0E-3));
6124 T4 = (((-ved_jct)*ved_jct)*ved_jct);
6125 T4a = ((CGIDL_i+fabs(T4))+1.0E-9);
6142 if (((AGISL_i<=0.0)||(BGISL_t<=0.0)))
6148 T1 = ((((-vgs_noswap)-EGISL_i)+vfbsd)/T0);
6150 T2 = (BGISL_t/(T1+1.0E-3));
6154 T4 = (((-ves_jct)*ves_jct)*ves_jct);
6155 T4a = ((CGISL_i+fabs(T4))+1.0E-9);
6177 if ((ves_jct<VjsmRev))
6179 T0 = (ves_jct/Nvtms);
6181 T2 = (IVjsmRev+(SslpRev*(ves_jct-VjsmRev)));
6186 if ((ves_jct<=VjsmFwd))
6188 T0 = (ves_jct/Nvtms);
6195 Ies = (IVjsmFwd+(SslpFwd*(ves_jct-VjsmFwd)));
6207 T0 = (((-ves_jct)/Vtm0)/NJTS_t);
6209 Ies = (Ies-((
ASEJ*JTSS_t)*T1));
6213 T0 = (((-ves_jct)/Vtm0)/NJTS_t);
6215 Ies = (Ies-((
ASEJ*JTSS_t)*T1));
6222 T0 = (((-ves_jct)/Vtm0)/NJTSSW_t);
6224 Ies = (Ies-((
PSEJ*JTSSWS_t)*T1));
6228 T0 = (((-ves_jct)/Vtm0)/NJTSSW_t);
6230 Ies = (Ies-((
PSEJ*JTSSWS_t)*T1));
6233 if ((JTSSWGS_t>0.0))
6237 T0 = (((-ves_jct)/Vtm0)/NJTSSWG_t);
6239 Ies = (Ies-(((Weff0*NFINtotal)*JTSSWGS_t)*T1));
6243 T0 = (((-ves_jct)/Vtm0)/NJTSSWG_t);
6245 Ies = (Ies-(((Weff0*NFINtotal)*JTSSWGS_t)*T1));
6250 if ((ved_jct<VjdmRev))
6252 T0 = (ved_jct/Nvtmd);
6254 T2 = (IVjdmRev+(DslpRev*(ved_jct-VjdmRev)));
6259 if ((ved_jct<=VjdmFwd))
6261 T0 = (ved_jct/Nvtmd);
6268 Ied = (IVjdmFwd+(DslpFwd*(ved_jct-VjdmFwd)));
6280 T0 = (((-ved_jct)/Vtm0)/NJTSD_t);
6282 Ied = (Ied-((
ADEJ*JTSD_t)*T1));
6286 T0 = (((-ved_jct)/Vtm0)/NJTSD_t);
6288 Ied = (Ied-((
ADEJ*JTSD_t)*T1));
6295 T0 = (((-ved_jct)/Vtm0)/NJTSSWD_t);
6297 Ied = (Ied-((
PDEJ*JTSSWD_t)*T1));
6301 T0 = (((-ved_jct)/Vtm0)/NJTSSWD_t);
6303 Ied = (Ied-((
PDEJ*JTSSWD_t)*T1));
6306 if ((JTSSWGD_t>0.0))
6310 T0 = (((-ved_jct)/Vtm0)/NJTSSWGD_t);
6312 Ied = (Ied-(((Weff0*NFINtotal)*JTSSWGD_t)*T1));
6316 T0 = (((-ved_jct)/Vtm0)/NJTSSWGD_t);
6318 Ied = (Ied-(((Weff0*NFINtotal)*JTSSWGD_t)*T1));
6324 T1 = (ves_jct/PBS_t);
6336 sarg = (1.0/sqrt(arg));
6342 Qesj1 = (((PBS_t*Czbs)*(1.0-(arg*sarg)))/(1.0-(
model_.
MJS)));
6346 arg = (1.0-(vec/PBS_t));
6349 sarg = (1.0/sqrt(arg));
6355 Qec = (((PBS_t*Czbs)*(1.0-(arg*sarg)))/(1.0-(
model_.
MJS)));
6356 arg = (1.0-((ves_jct-vec)/pb2));
6359 sarg = (1.0/sqrt(arg));
6373 sarg = (1.0/sqrt(arg));
6379 Qesj1 = (((PBS_t*Czbs)*(1.0-(arg*sarg)))/(1.0-(
model_.
MJS)));
6388 Qesj1 = ((PBS_t*Czbs)*(T4+T5));
6399 T1 = (ves_jct/PBSWS_t);
6411 sarg = (1.0/sqrt(arg));
6417 Qesj2 = (((PBSWS_t*Czbssw)*(1.0-(arg*sarg)))/(1.0-(
model_.
MJSWS)));
6421 arg = (1.0-(vec/PBSWS_t));
6424 sarg = (1.0/sqrt(arg));
6430 Qec = (((PBSWS_t*Czbssw)*(1.0-(arg*sarg)))/(1.0-(
model_.
MJSWS)));
6431 arg = (1.0-((ves_jct-vec)/pb2));
6434 sarg = (1.0/sqrt(arg));
6448 sarg = (1.0/sqrt(arg));
6454 Qesj2 = (((PBSWS_t*Czbssw)*(1.0-(arg*sarg)))/(1.0-(
model_.
MJSWS)));
6463 Qesj2 = ((PBSWS_t*Czbssw)*(T4+T5));
6474 T1 = (ves_jct/PBSWGS_t);
6486 sarg = (1.0/sqrt(arg));
6492 Qesj3 = (((PBSWGS_t*Czbsswg)*(1.0-(arg*sarg)))/(1.0-(
model_.
MJSWGS)));
6496 arg = (1.0-(vec/PBSWGS_t));
6499 sarg = (1.0/sqrt(arg));
6505 Qec = (((PBSWGS_t*Czbsswg)*(1.0-(arg*sarg)))/(1.0-(
model_.
MJSWGS)));
6506 arg = (1.0-((ves_jct-vec)/pb2));
6509 sarg = (1.0/sqrt(arg));
6523 sarg = (1.0/sqrt(arg));
6529 Qesj3 = (((PBSWGS_t*Czbsswg)*(1.0-(arg*sarg)))/(1.0-(
model_.
MJSWGS)));
6538 Qesj3 = ((PBSWGS_t*Czbsswg)*(T4+T5));
6546 Qesj = ((Qesj1+Qesj2)+Qesj3);
6550 T1 = (ved_jct/PBD_t);
6562 sarg = (1.0/sqrt(arg));
6568 Qedj1 = (((PBD_t*Czbd)*(1.0-(arg*sarg)))/(1.0-(
model_.
MJD)));
6572 arg = (1.0-(vec/PBD_t));
6575 sarg = (1.0/sqrt(arg));
6581 Qec = (((PBD_t*Czbd)*(1.0-(arg*sarg)))/(1.0-(
model_.
MJD)));
6582 arg = (1.0-((ved_jct-vec)/pb2));
6585 sarg = (1.0/sqrt(arg));
6599 sarg = (1.0/sqrt(arg));
6605 Qedj1 = (((PBD_t*Czbd)*(1.0-(arg*sarg)))/(1.0-(
model_.
MJD)));
6614 Qedj1 = ((PBD_t*Czbd)*(T4+T5));
6625 T1 = (ved_jct/PBSWD_t);
6637 sarg = (1.0/sqrt(arg));
6643 Qedj2 = (((PBSWD_t*Czbdsw)*(1.0-(arg*sarg)))/(1.0-(
model_.
MJSWD)));
6647 arg = (1.0-(vec/PBSWD_t));
6650 sarg = (1.0/sqrt(arg));
6656 Qec = (((PBSWD_t*Czbdsw)*(1.0-(arg*sarg)))/(1.0-(
model_.
MJSWD)));
6657 arg = (1.0-((ved_jct-vec)/pb2));
6660 sarg = (1.0/sqrt(arg));
6674 sarg = (1.0/sqrt(arg));
6680 Qedj2 = (((PBSWD_t*Czbdsw)*(1.0-(arg*sarg)))/(1.0-(
model_.
MJSWD)));
6689 Qedj2 = ((PBSWD_t*Czbdsw)*(T4+T5));
6700 T1 = (ved_jct/PBSWGD_t);
6712 sarg = (1.0/sqrt(arg));
6718 Qedj3 = (((PBSWGD_t*Czbdswg)*(1.0-(arg*sarg)))/(1.0-(
model_.
MJSWGD)));
6722 arg = (1.0-(vec/PBSWGD_t));
6725 sarg = (1.0/sqrt(arg));
6731 Qec = (((PBSWGD_t*Czbdswg)*(1.0-(arg*sarg)))/(1.0-(
model_.
MJSWGD)));
6732 arg = (1.0-((ved_jct-vec)/pb2));
6735 sarg = (1.0/sqrt(arg));
6749 sarg = (1.0/sqrt(arg));
6755 Qedj3 = (((PBSWGD_t*Czbdswg)*(1.0-(arg*sarg)))/(1.0-(
model_.
MJSWGD)));
6764 Qedj3 = ((PBSWGD_t*Czbdswg)*(T4+T5));
6772 Qedj = ((Qedj1+Qedj2)+Qedj3);
6774 Qes = (Qesj+(csbox*ves_jct));
6775 Qed = (Qedj+(cdbox*ved_jct));
6782 vge_overlap = (0.5*(T0+sqrt(((T0*T0)+(4.0*0.02)))));
6783 Qeg = (Qeg-((NFINtotal*LeffCV)*(CGBL_i*((T3-vge_overlap)+((0.5*CKAPPAB_i)*(sqrt((1.0+((4.0*vge_overlap)/CKAPPAB_i)))-1.0))))));
6786 T1 = (T0*(AIGEN_i+((BIGEN_i*T0)*T0)));
6787 idsgen = (((((
model_.
HFIN)*
TFIN)*(Leff-(2.0*LINTIGEN_i)))*igentemp)*T1);
6788 IdovVds = (((beta*ids0_ov_dqi)*Moc)/((Dmob*Dvsat)*Dr));
6789 T0 = (((ueff*coxeff)*Weff)/Leff);
6790 igidl = (NFINtotal*igidl);
6791 igisl = (NFINtotal*igisl);
6792 igcd = (NFINtotal*igcd);
6793 igcs = (NFINtotal*igcs);
6794 igs = (NFINtotal*igs);
6795 igd = (NFINtotal*igd);
6796 igbinv = (NFINtotal*igbinv);
6797 igbacc = (NFINtotal*igbacc);
6798 idsgen = (NFINtotal*idsgen);
6799 Iii = (NFINtotal*Iii);
6804 igbs = ((igbinv+igbacc)*wf);
6805 igbd = ((igbinv+igbacc)*wr);
6807 Esatnoi = ((2.0*VSAT_t)/ueff);
6810 Leffnoi = (Leff-(2.0*LINTNOI_i));
6811 Leffnoisq = (Leffnoi*Leffnoi);
6818 T0 = (((diffVds/litl)+(
model_.
EM))/Esatnoi);
6825 T1 = (((((1.60219e-19*1.60219e-19)*1.60219e-19)*Vtm)*fabs(ids))*ueff);
6826 T2 = ((1.0e10*coxeff)*Leffnoisq);
6827 N0 = ((coxeff*qis)/1.60219e-19);
6828 Nl = ((coxeff*qid)/1.60219e-19);
6829 Nstar = ((Vtm/1.60219e-19)*(coxeff+CIT_i));
6832 T5 = ((0.5*(
model_.
NOIC))*((N0*N0)-(Nl*Nl)));
6833 T6 = (((1.60219e-19*Vtm)*ids)*ids);
6834 T7 = (((1.0e10*Leffnoisq)*Weff)*NFINtotal);
6836 T9 = ((Nl+Nstar)*(Nl+Nstar));
6837 Ssi = (((T1/T2)*((T3+T4)+T5))+((((T6/T7)*DelClm)*T8)/T9));
6839 T11 = (((((Weff*NFINtotal)*Leffnoi)*1.0e10)*Nstar)*Nstar);
6840 Swi = (((T10/T11)*ids)*ids);
6844 FNPowerAt1Hz = ((Ssi*Swi)/T1);
6856 T1 = ((T0*Rdsi)+(Leff*Leff));
6857 Gtnoi = ((T0/T1)*NTNOI_i);
6858 sid = (((4*Vtm)*1.60219e-19)*Gtnoi);
6867 std::cerr <<
"uninitialized" << std::endl;
7045 #ifdef Xyce_DEBUG_DEVICE
7048 Xyce::dout() <<
" probeVars[admsProbeID_V_s_si] = "
7050 Xyce::dout() <<
" probeVars[admsProbeID_V_d_di] = "
7052 Xyce::dout() <<
" probeVars[admsProbeID_V_e_g] = "
7054 Xyce::dout() <<
" probeVars[admsProbeID_V_d_s] = "
7056 Xyce::dout() <<
" probeVars[admsProbeID_V_g_d] = "
7058 Xyce::dout() <<
" probeVars[admsProbeID_V_g_s] = "
7060 Xyce::dout() <<
" probeVars[admsProbeID_V_di_d] = "
7062 Xyce::dout() <<
" probeVars[admsProbeID_V_si_s] = "
7064 Xyce::dout() <<
" probeVars[admsProbeID_V_g_e] = "
7066 Xyce::dout() <<
" probeVars[admsProbeID_V_e_di] = "
7068 Xyce::dout() <<
" probeVars[admsProbeID_V_e_si] = "
7070 Xyce::dout() <<
" probeVars[admsProbeID_V_g_di] = "
7072 Xyce::dout() <<
" probeVars[admsProbeID_V_di_si] = "
7074 Xyce::dout() <<
" probeVars[admsProbeID_V_g_si] = "
7076 Xyce::dout() <<
" staticContributions[admsNodeID_d] = "
7092 Xyce::dout() <<
" dynamicContributions[admsNodeID_d] = "
7108 Xyce::dout() <<
" staticContributions[admsNodeID_g] = "
7124 Xyce::dout() <<
" dynamicContributions[admsNodeID_g] = "
7140 Xyce::dout() <<
" staticContributions[admsNodeID_s] = "
7156 Xyce::dout() <<
" dynamicContributions[admsNodeID_s] = "
7172 Xyce::dout() <<
" staticContributions[admsNodeID_e] = "
7188 Xyce::dout() <<
" dynamicContributions[admsNodeID_e] = "
7204 Xyce::dout() <<
" staticContributions[admsNodeID_di] = "
7220 Xyce::dout() <<
" dynamicContributions[admsNodeID_di] = "
7236 Xyce::dout() <<
" staticContributions[admsNodeID_si] = "
7252 Xyce::dout() <<
" dynamicContributions[admsNodeID_si] = "
7270 Xyce::dout() <<
"This step was limited by this device." << std::endl;
7272 #endif // Xyce_DEBUG_DEVICE
7286 bool bsuccess =
true;
7289 #ifdef Xyce_DEBUG_DEVICE
7292 Xyce::dout() << subsection_divider << std::endl;
7293 Xyce::dout() <<
"ADMSbsimcmg::Instance::loadDAEdFdx (" <<
getName() <<
"):" << std::endl;
7299 #ifdef Xyce_DEBUG_DEVICE
7308 #ifdef Xyce_DEBUG_DEVICE
7317 #ifdef Xyce_DEBUG_DEVICE
7326 #ifdef Xyce_DEBUG_DEVICE
7335 #ifdef Xyce_DEBUG_DEVICE
7344 #ifdef Xyce_DEBUG_DEVICE
7353 #ifdef Xyce_DEBUG_DEVICE
7362 #ifdef Xyce_DEBUG_DEVICE
7371 #ifdef Xyce_DEBUG_DEVICE
7380 #ifdef Xyce_DEBUG_DEVICE
7389 #ifdef Xyce_DEBUG_DEVICE
7398 #ifdef Xyce_DEBUG_DEVICE
7407 #ifdef Xyce_DEBUG_DEVICE
7416 #ifdef Xyce_DEBUG_DEVICE
7425 #ifdef Xyce_DEBUG_DEVICE
7434 #ifdef Xyce_DEBUG_DEVICE
7443 #ifdef Xyce_DEBUG_DEVICE
7452 #ifdef Xyce_DEBUG_DEVICE
7461 #ifdef Xyce_DEBUG_DEVICE
7470 #ifdef Xyce_DEBUG_DEVICE
7479 #ifdef Xyce_DEBUG_DEVICE
7488 #ifdef Xyce_DEBUG_DEVICE
7497 #ifdef Xyce_DEBUG_DEVICE
7506 #ifdef Xyce_DEBUG_DEVICE
7515 #ifdef Xyce_DEBUG_DEVICE
7524 #ifdef Xyce_DEBUG_DEVICE
7533 #ifdef Xyce_DEBUG_DEVICE
7542 #ifdef Xyce_DEBUG_DEVICE
7551 #ifdef Xyce_DEBUG_DEVICE
7560 #ifdef Xyce_DEBUG_DEVICE
7569 #ifdef Xyce_DEBUG_DEVICE
7578 #ifdef Xyce_DEBUG_DEVICE
7587 #ifdef Xyce_DEBUG_DEVICE
7596 #ifdef Xyce_DEBUG_DEVICE
7605 #ifdef Xyce_DEBUG_DEVICE
7614 #ifdef Xyce_DEBUG_DEVICE
7636 bool bsuccess =
true;
7639 #ifdef Xyce_DEBUG_DEVICE
7642 Xyce::dout() << subsection_divider << std::endl;
7643 Xyce::dout() <<
"ADMSbsimcmg::Instance::loadDAEdQdx (" <<
getName() <<
"):" << std::endl;
7649 #ifdef Xyce_DEBUG_DEVICE
7658 #ifdef Xyce_DEBUG_DEVICE
7667 #ifdef Xyce_DEBUG_DEVICE
7676 #ifdef Xyce_DEBUG_DEVICE
7685 #ifdef Xyce_DEBUG_DEVICE
7694 #ifdef Xyce_DEBUG_DEVICE
7703 #ifdef Xyce_DEBUG_DEVICE
7712 #ifdef Xyce_DEBUG_DEVICE
7721 #ifdef Xyce_DEBUG_DEVICE
7730 #ifdef Xyce_DEBUG_DEVICE
7739 #ifdef Xyce_DEBUG_DEVICE
7748 #ifdef Xyce_DEBUG_DEVICE
7757 #ifdef Xyce_DEBUG_DEVICE
7766 #ifdef Xyce_DEBUG_DEVICE
7775 #ifdef Xyce_DEBUG_DEVICE
7784 #ifdef Xyce_DEBUG_DEVICE
7793 #ifdef Xyce_DEBUG_DEVICE
7802 #ifdef Xyce_DEBUG_DEVICE
7811 #ifdef Xyce_DEBUG_DEVICE
7820 #ifdef Xyce_DEBUG_DEVICE
7829 #ifdef Xyce_DEBUG_DEVICE
7838 #ifdef Xyce_DEBUG_DEVICE
7847 #ifdef Xyce_DEBUG_DEVICE
7856 #ifdef Xyce_DEBUG_DEVICE
7865 #ifdef Xyce_DEBUG_DEVICE
7874 #ifdef Xyce_DEBUG_DEVICE
7883 #ifdef Xyce_DEBUG_DEVICE
7892 #ifdef Xyce_DEBUG_DEVICE
7901 #ifdef Xyce_DEBUG_DEVICE
7910 #ifdef Xyce_DEBUG_DEVICE
7919 #ifdef Xyce_DEBUG_DEVICE
7928 #ifdef Xyce_DEBUG_DEVICE
7937 #ifdef Xyce_DEBUG_DEVICE
7946 #ifdef Xyce_DEBUG_DEVICE
7955 #ifdef Xyce_DEBUG_DEVICE
7964 #ifdef Xyce_DEBUG_DEVICE
8010 if ( (!((
NF >=1))) )
8012 UserError0(*
this) <<
"ADMSbsimcmg: Parameter NF value " <<
NF <<
" out of range [ 1, (+inf) [";
8018 UserError0(*
this) <<
"ADMSbsimcmg: Parameter U0MULT value " <<
U0MULT <<
" out of range [ 0, (+inf) [";
8024 UserError0(*
this) <<
"ADMSbsimcmg: Parameter IDS0MULT value " <<
IDS0MULT <<
" out of range [ 0, (+inf) [";
8030 UserError0(*
this) <<
"ADMSbsimcmg: Parameter DEVTYPE value " <<
DEVTYPE <<
" out of range [ 0, 1 ]";
8036 UserError0(*
this) <<
"ADMSbsimcmg: Parameter BULKMOD value " <<
BULKMOD <<
" out of range [ 0, 1 ]";
8042 UserError0(*
this) <<
"ADMSbsimcmg: Parameter COREMOD value " <<
COREMOD <<
" out of range [ 0, 1 ]";
8048 UserError0(*
this) <<
"ADMSbsimcmg: Parameter GEOMOD value " <<
GEOMOD <<
" out of range [ 0, 3 ]";
8054 UserError0(*
this) <<
"ADMSbsimcmg: Parameter CGEO1SW value " <<
CGEO1SW <<
" out of range [ 0, 1 ]";
8060 UserError0(*
this) <<
"ADMSbsimcmg: Parameter RDSMOD value " <<
RDSMOD <<
" out of range [ 0, 1 ]";
8066 UserError0(*
this) <<
"ADMSbsimcmg: Parameter ASYMMOD value " <<
ASYMMOD <<
" out of range [ 0, 1 ]";
8072 UserError0(*
this) <<
"ADMSbsimcmg: Parameter IGCMOD value " <<
IGCMOD <<
" out of range [ 0, 1 ]";
8078 UserError0(*
this) <<
"ADMSbsimcmg: Parameter IGBMOD value " <<
IGBMOD <<
" out of range [ 0, 1 ]";
8084 UserError0(*
this) <<
"ADMSbsimcmg: Parameter GIDLMOD value " <<
GIDLMOD <<
" out of range [ 0, 1 ]";
8090 UserError0(*
this) <<
"ADMSbsimcmg: Parameter IIMOD value " <<
IIMOD <<
" out of range [ 0, 2 ]";
8096 UserError0(*
this) <<
"ADMSbsimcmg: Parameter NQSMOD value " <<
NQSMOD <<
" out of range [ 0, 2 ]";
8102 UserError0(*
this) <<
"ADMSbsimcmg: Parameter SHMOD value " <<
SHMOD <<
" out of range [ 0, 1 ]";
8108 UserError0(*
this) <<
"ADMSbsimcmg: Parameter RGATEMOD value " <<
RGATEMOD <<
" out of range [ 0, 1 ]";
8114 UserError0(*
this) <<
"ADMSbsimcmg: Parameter RGEOMOD value " <<
RGEOMOD <<
" out of range [ 0, 1 ]";
8120 UserError0(*
this) <<
"ADMSbsimcmg: Parameter CGEOMOD value " <<
CGEOMOD <<
" out of range [ 0, 2 ]";
8126 UserError0(*
this) <<
"ADMSbsimcmg: Parameter CAPMOD value " <<
CAPMOD <<
" out of range [ 0, 1 ]";
8130 if ( (!((
EOT >=0.1*1.0e-9))) )
8132 UserError0(*
this) <<
"ADMSbsimcmg: Parameter EOT value " <<
EOT <<
" out of range [ 0.1*1.0e-9, (+inf) [";
8136 if ( (!((
TOXP >=0.1*1.0e-9))) )
8138 UserError0(*
this) <<
"ADMSbsimcmg: Parameter TOXP value " <<
TOXP <<
" out of range [ 0.1*1.0e-9, (+inf) [";
8142 if ( (!((
EOTBOX >=1*1.0e-9))) )
8144 UserError0(*
this) <<
"ADMSbsimcmg: Parameter EOTBOX value " <<
EOTBOX <<
" out of range [ 1*1.0e-9, (+inf) [";
8148 if ( (!((
HFIN >=1*1.0e-9))) )
8150 UserError0(*
this) <<
"ADMSbsimcmg: Parameter HFIN value " <<
HFIN <<
" out of range [ 1*1.0e-9, (+inf) [";
8154 if ( (!((
FECH >=0))) )
8156 UserError0(*
this) <<
"ADMSbsimcmg: Parameter FECH value " <<
FECH <<
" out of range [ 0, (+inf) [";
8162 UserError0(*
this) <<
"ADMSbsimcmg: Parameter FECHCV value " <<
FECHCV <<
" out of range [ 0, (+inf) [";
8168 UserError0(*
this) <<
"ADMSbsimcmg: Parameter NBODY value " <<
NBODY <<
" out of range [ 1e18, 5e24 ]";
8172 if ( (!((
NBODYN1 >=(-0.08)))) )
8174 UserError0(*
this) <<
"ADMSbsimcmg: Parameter NBODYN1 value " <<
NBODYN1 <<
" out of range [ (-0.08), (+inf) [";
8178 if ( (!((
NBODYN2 >=1.0e-5))) )
8180 UserError0(*
this) <<
"ADMSbsimcmg: Parameter NBODYN2 value " <<
NBODYN2 <<
" out of range [ 1.0e-5, (+inf) [";
8184 if ( (!((
NSD >=2e25 &&
NSD <=1e27 ))) )
8186 UserError0(*
this) <<
"ADMSbsimcmg: Parameter NSD value " <<
NSD <<
" out of range [ 2e25, 1e27 ]";
8190 if ( (!((
PHIG >=0))) )
8192 UserError0(*
this) <<
"ADMSbsimcmg: Parameter PHIG value " <<
PHIG <<
" out of range [ 0, (+inf) [";
8196 if ( (!((
PHIGN1 >=(-0.08)))) )
8198 UserError0(*
this) <<
"ADMSbsimcmg: Parameter PHIGN1 value " <<
PHIGN1 <<
" out of range [ (-0.08), (+inf) [";
8202 if ( (!((
PHIGN2 >=1.0e-5))) )
8204 UserError0(*
this) <<
"ADMSbsimcmg: Parameter PHIGN2 value " <<
PHIGN2 <<
" out of range [ 1.0e-5, (+inf) [";
8210 UserError0(*
this) <<
"ADMSbsimcmg: Parameter EPSROX value " <<
EPSROX <<
" out of range [ 1, (+inf) [";
8216 UserError0(*
this) <<
"ADMSbsimcmg: Parameter EPSRSUB value " <<
EPSRSUB <<
" out of range [ 1, (+inf) [";
8220 if ( (!((
EASUB >=0))) )
8222 UserError0(*
this) <<
"ADMSbsimcmg: Parameter EASUB value " <<
EASUB <<
" out of range [ 0, (+inf) [";
8226 if ( (!((
CDSCN1 >=(-0.08)))) )
8228 UserError0(*
this) <<
"ADMSbsimcmg: Parameter CDSCN1 value " <<
CDSCN1 <<
" out of range [ (-0.08), (+inf) [";
8232 if ( (!((
CDSCN2 >=1.0e-5))) )
8234 UserError0(*
this) <<
"ADMSbsimcmg: Parameter CDSCN2 value " <<
CDSCN2 <<
" out of range [ 1.0e-5, (+inf) [";
8238 if ( (!((
CDSCDN1 >=(-0.08)))) )
8240 UserError0(*
this) <<
"ADMSbsimcmg: Parameter CDSCDN1 value " <<
CDSCDN1 <<
" out of range [ (-0.08), (+inf) [";
8244 if ( (!((
CDSCDN2 >=1.0e-5))) )
8246 UserError0(*
this) <<
"ADMSbsimcmg: Parameter CDSCDN2 value " <<
CDSCDN2 <<
" out of range [ 1.0e-5, (+inf) [";
8252 UserError0(*
this) <<
"ADMSbsimcmg: Parameter CDSCDRN1 value " <<
CDSCDRN1 <<
" out of range [ (-0.08), (+inf) [";
8258 UserError0(*
this) <<
"ADMSbsimcmg: Parameter CDSCDRN2 value " <<
CDSCDRN2 <<
" out of range [ 1.0e-5, (+inf) [";
8262 if ( (!((
ETA0N1 >=(-0.08)))) )
8264 UserError0(*
this) <<
"ADMSbsimcmg: Parameter ETA0N1 value " <<
ETA0N1 <<
" out of range [ (-0.08), (+inf) [";
8268 if ( (!((
ETA0N2 >=1.0e-5))) )
8270 UserError0(*
this) <<
"ADMSbsimcmg: Parameter ETA0N2 value " <<
ETA0N2 <<
" out of range [ 1.0e-5, (+inf) [";
8274 if ( (!((
VSATN1 >=(-0.08)))) )
8276 UserError0(*
this) <<
"ADMSbsimcmg: Parameter VSATN1 value " <<
VSATN1 <<
" out of range [ (-0.08), (+inf) [";
8280 if ( (!((
VSATN2 >=1.0e-5))) )
8282 UserError0(*
this) <<
"ADMSbsimcmg: Parameter VSATN2 value " <<
VSATN2 <<
" out of range [ 1.0e-5, (+inf) [";
8286 if ( (!((
VSAT1N1 >=(-0.08)))) )
8288 UserError0(*
this) <<
"ADMSbsimcmg: Parameter VSAT1N1 value " <<
VSAT1N1 <<
" out of range [ (-0.08), (+inf) [";
8292 if ( (!((
VSAT1N2 >=1.0e-5))) )
8294 UserError0(*
this) <<
"ADMSbsimcmg: Parameter VSAT1N2 value " <<
VSAT1N2 <<
" out of range [ 1.0e-5, (+inf) [";
8300 UserError0(*
this) <<
"ADMSbsimcmg: Parameter VSAT1RN1 value " <<
VSAT1RN1 <<
" out of range [ (-0.08), (+inf) [";
8306 UserError0(*
this) <<
"ADMSbsimcmg: Parameter VSAT1RN2 value " <<
VSAT1RN2 <<
" out of range [ 1.0e-5, (+inf) [";
8310 if ( (!((
U0N1 >=(-0.08)))) )
8312 UserError0(*
this) <<
"ADMSbsimcmg: Parameter U0N1 value " <<
U0N1 <<
" out of range [ (-0.08), (+inf) [";
8316 if ( (!((
U0N2 >=1.0e-5))) )
8318 UserError0(*
this) <<
"ADMSbsimcmg: Parameter U0N2 value " <<
U0N2 <<
" out of range [ 1.0e-5, (+inf) [";
8324 UserError0(*
this) <<
"ADMSbsimcmg: Parameter CHARGEWF value " <<
CHARGEWF <<
" out of range [ (-1), 1 ]";
8328 if ( (!((
RSDR >=0))) )
8330 UserError0(*
this) <<
"ADMSbsimcmg: Parameter RSDR value " <<
RSDR <<
" out of range [ 0, (+inf) [";
8334 if ( (!((
RSDRR >=0))) )
8336 UserError0(*
this) <<
"ADMSbsimcmg: Parameter RSDRR value " <<
RSDRR <<
" out of range [ 0, (+inf) [";
8340 if ( (!((
RDDR >=0))) )
8342 UserError0(*
this) <<
"ADMSbsimcmg: Parameter RDDR value " <<
RDDR <<
" out of range [ 0, (+inf) [";
8346 if ( (!((
RDDRR >=0))) )
8348 UserError0(*
this) <<
"ADMSbsimcmg: Parameter RDDRR value " <<
RDDRR <<
" out of range [ 0, (+inf) [";
8352 if ( (!((
RGEXT >=0))) )
8354 UserError0(*
this) <<
"ADMSbsimcmg: Parameter RGEXT value " <<
RGEXT <<
" out of range [ 0, (+inf) [";
8358 if ( (!((
RGFIN >=1.0e-3))) )
8360 UserError0(*
this) <<
"ADMSbsimcmg: Parameter RGFIN value " <<
RGFIN <<
" out of range [ 1.0e-3, (+inf) [";
8364 if ( (!((
RHOC >=1.0e-18 &&
RHOC <=1.0e-9 ))) )
8366 UserError0(*
this) <<
"ADMSbsimcmg: Parameter RHOC value " <<
RHOC <<
" out of range [ 1.0e-18, 1.0e-9 ]";
8372 UserError0(*
this) <<
"ADMSbsimcmg: Parameter RHORSD value " <<
RHORSD <<
" out of range ] 0, (+inf) [";
8378 UserError0(*
this) <<
"ADMSbsimcmg: Parameter CRATIO value " <<
CRATIO <<
" out of range [ 0, 1 ]";
8384 UserError0(*
this) <<
"ADMSbsimcmg: Parameter DELTAPRSD value " <<
DELTAPRSD <<
" out of range ] (-FPITCH), (+inf) [";
8390 UserError0(*
this) <<
"ADMSbsimcmg: Parameter SDTERM value " <<
SDTERM <<
" out of range [ 0, 1 ]";
8394 if ( (!((
LSP >0))) )
8396 UserError0(*
this) <<
"ADMSbsimcmg: Parameter LSP value " <<
LSP <<
" out of range ] 0, (+inf) [";
8402 UserError0(*
this) <<
"ADMSbsimcmg: Parameter EPSRSP value " <<
EPSRSP <<
" out of range [ 1, (+inf) [";
8406 if ( (!((
TGATE >0))) )
8408 UserError0(*
this) <<
"ADMSbsimcmg: Parameter TGATE value " <<
TGATE <<
" out of range ] 0, (+inf) [";
8412 if ( (!((
TMASK >=0))) )
8414 UserError0(*
this) <<
"ADMSbsimcmg: Parameter TMASK value " <<
TMASK <<
" out of range [ 0, (+inf) [";
8420 UserError0(*
this) <<
"ADMSbsimcmg: Parameter ASILIEND value " <<
ASILIEND <<
" out of range [ 0, (+inf) [";
8426 UserError0(*
this) <<
"ADMSbsimcmg: Parameter ARSDEND value " <<
ARSDEND <<
" out of range [ 0, (+inf) [";
8432 UserError0(*
this) <<
"ADMSbsimcmg: Parameter PRSDEND value " <<
PRSDEND <<
" out of range [ 0, (+inf) [";
8436 if ( (!((
NSDE >=1e25 &&
NSDE <=1e26 ))) )
8438 UserError0(*
this) <<
"ADMSbsimcmg: Parameter NSDE value " <<
NSDE <<
" out of range [ 1e25, 1e26 ]";
8442 if ( (!((
CGEOE >=0))) )
8444 UserError0(*
this) <<
"ADMSbsimcmg: Parameter CGEOE value " <<
CGEOE <<
" out of range [ 0, (+inf) [";
8450 UserError0(*
this) <<
"ADMSbsimcmg: Parameter TOXREF value " <<
TOXREF <<
" out of range ] 0, (+inf) [";
8454 if ( (!((
EOTACC >=0.1*1.0e-9))) )
8456 UserError0(*
this) <<
"ADMSbsimcmg: Parameter EOTACC value " <<
EOTACC <<
" out of range [ 0.1*1.0e-9, (+inf) [";
8460 if ( (!((
CFS >=0))) )
8462 UserError0(*
this) <<
"ADMSbsimcmg: Parameter CFS value " <<
CFS <<
" out of range [ 0, (+inf) [";
8466 if ( (!((
CFD >=0))) )
8468 UserError0(*
this) <<
"ADMSbsimcmg: Parameter CFD value " <<
CFD <<
" out of range [ 0, (+inf) [";
8472 if ( (!((
CGSO >=0))) )
8474 UserError0(*
this) <<
"ADMSbsimcmg: Parameter CGSO value " <<
CGSO <<
" out of range [ 0, (+inf) [";
8478 if ( (!((
CGDO >=0))) )
8480 UserError0(*
this) <<
"ADMSbsimcmg: Parameter CGDO value " <<
CGDO <<
" out of range [ 0, (+inf) [";
8484 if ( (!((
CGSL >=0))) )
8486 UserError0(*
this) <<
"ADMSbsimcmg: Parameter CGSL value " <<
CGSL <<
" out of range [ 0, (+inf) [";
8490 if ( (!((
CGDL >=0))) )
8492 UserError0(*
this) <<
"ADMSbsimcmg: Parameter CGDL value " <<
CGDL <<
" out of range [ 0, (+inf) [";
8498 UserError0(*
this) <<
"ADMSbsimcmg: Parameter CKAPPAS value " <<
CKAPPAS <<
" out of range [ 0.02, (+inf) [";
8504 UserError0(*
this) <<
"ADMSbsimcmg: Parameter CKAPPAD value " <<
CKAPPAD <<
" out of range [ 0.02, (+inf) [";
8508 if ( (!((
CGBO >=0))) )
8510 UserError0(*
this) <<
"ADMSbsimcmg: Parameter CGBO value " <<
CGBO <<
" out of range [ 0, (+inf) [";
8514 if ( (!((
CGBN >=0))) )
8516 UserError0(*
this) <<
"ADMSbsimcmg: Parameter CGBN value " <<
CGBN <<
" out of range [ 0, (+inf) [";
8520 if ( (!((
CGBL >=0))) )
8522 UserError0(*
this) <<
"ADMSbsimcmg: Parameter CGBL value " <<
CGBL <<
" out of range [ 0, (+inf) [";
8528 UserError0(*
this) <<
"ADMSbsimcmg: Parameter CKAPPAB value " <<
CKAPPAB <<
" out of range [ 0.02, (+inf) [";
8534 UserError0(*
this) <<
"ADMSbsimcmg: Parameter CSDESW value " <<
CSDESW <<
" out of range [ 0, (+inf) [";
8538 if ( (!((
SJS >=0))) )
8540 UserError0(*
this) <<
"ADMSbsimcmg: Parameter SJS value " <<
SJS <<
" out of range [ 0, (+inf) [";
8544 if ( (!((
SJD >=0))) )
8546 UserError0(*
this) <<
"ADMSbsimcmg: Parameter SJD value " <<
SJD <<
" out of range [ 0, (+inf) [";
8550 if ( (!((
SJSWS >=0))) )
8552 UserError0(*
this) <<
"ADMSbsimcmg: Parameter SJSWS value " <<
SJSWS <<
" out of range [ 0, (+inf) [";
8556 if ( (!((
SJSWD >=0))) )
8558 UserError0(*
this) <<
"ADMSbsimcmg: Parameter SJSWD value " <<
SJSWD <<
" out of range [ 0, (+inf) [";
8564 UserError0(*
this) <<
"ADMSbsimcmg: Parameter SJSWGS value " <<
SJSWGS <<
" out of range [ 0, (+inf) [";
8570 UserError0(*
this) <<
"ADMSbsimcmg: Parameter SJSWGD value " <<
SJSWGD <<
" out of range [ 0, (+inf) [";
8574 if ( (!((
NSEG >=4 &&
NSEG <=10 ))) )
8576 UserError0(*
this) <<
"ADMSbsimcmg: Parameter NSEG value " <<
NSEG <<
" out of range [ 4, 10 ]";
8580 if ( (!((
NTNOI >=0))) )
8582 UserError0(*
this) <<
"ADMSbsimcmg: Parameter NTNOI value " <<
NTNOI <<
" out of range [ 0, (+inf) [";
8586 if ( (!((
TNOM >=(-273.15)))) )
8588 UserError0(*
this) <<
"ADMSbsimcmg: Parameter TNOM value " <<
TNOM <<
" out of range [ (-273.15), (+inf) [";
8592 if ( (!((
RTH0 >=0))) )
8594 UserError0(*
this) <<
"ADMSbsimcmg: Parameter RTH0 value " <<
RTH0 <<
" out of range [ 0, (+inf) [";
8598 if ( (!((
CTH0 >=0))) )
8600 UserError0(*
this) <<
"ADMSbsimcmg: Parameter CTH0 value " <<
CTH0 <<
" out of range [ 0, (+inf) [";
8604 if ( (!((
WTH0 >=0))) )
8606 UserError0(*
this) <<
"ADMSbsimcmg: Parameter WTH0 value " <<
WTH0 <<
" out of range [ 0, (+inf) [";
8627 std::vector<Instance*>::iterator iter;
8631 for (iter=first; iter!=last; ++iter)
8633 (*iter)->processParams();
8651 :
DeviceModel(model_block, configuration.getModelParameters(), factory_block),
8915 AGISL(6.055*1.0e-12),
9545 if (!
given(
"CDSCDR"))
9549 if (!
given(
"CDSCDRN1"))
9553 if (!
given(
"CDSCDRN2"))
9557 if (!
given(
"DVT1SS"))
9561 if (!
given(
"ETA0R"))
9565 if (!
given(
"TETA0R"))
9573 if (!
given(
"K1SI1"))
9577 if (!
given(
"VSAT1"))
9581 if (!
given(
"VSAT1N1"))
9585 if (!
given(
"VSAT1N2"))
9589 if (!
given(
"VSAT1R"))
9593 if (!
given(
"VSAT1RN1"))
9597 if (!
given(
"VSAT1RN2"))
9601 if (!
given(
"AVSAT1"))
9605 if (!
given(
"BVSAT1"))
9609 if (!
given(
"VSATCV"))
9613 if (!
given(
"AVSATCV"))
9617 if (!
given(
"BVSATCV"))
9621 if (!
given(
"DELTAVSATCV"))
9625 if (!
given(
"PSATCV"))
9629 if (!
given(
"APSATCV"))
9633 if (!
given(
"BPSATCV"))
9637 if (!
given(
"MEXPR"))
9641 if (!
given(
"AMEXPR"))
9645 if (!
given(
"BMEXPR"))
9649 if (!
given(
"PTWGR"))
9653 if (!
given(
"TMEXPR"))
9657 if (!
given(
"RSDRR"))
9665 if (!
given(
"RDDRR"))
9669 if (!
given(
"PRDDR"))
9673 if (!
given(
"PRWGD"))
9677 if (!
given(
"TRDDR"))
9681 if (!
given(
"PDIBL1R"))
9685 if (!
given(
"PCLMCV"))
9697 if (!
given(
"DLCIGD"))
9705 if (!
given(
"AIGD1"))
9721 if (!
given(
"AGIDL"))
9725 if (!
given(
"BGIDL"))
9729 if (!
given(
"CGIDL"))
9733 if (!
given(
"EGIDL"))
9737 if (!
given(
"PGIDL"))
9741 if (!
given(
"EOTACC"))
9757 if (!
given(
"CKAPPAD"))
9765 if (!
given(
"CJSWD"))
9769 if (!
given(
"CJSWGD"))
9777 if (!
given(
"PBSWD"))
9781 if (!
given(
"PBSWGS"))
9785 if (!
given(
"PBSWGD"))
9793 if (!
given(
"MJSWD"))
9797 if (!
given(
"MJSWGS"))
9801 if (!
given(
"MJSWGD"))
9809 if (!
given(
"SJSWD"))
9813 if (!
given(
"SJSWGD"))
9821 if (!
given(
"MJSWD2"))
9825 if (!
given(
"MJSWGS2"))
9829 if (!
given(
"MJSWGD2"))
9841 if (!
given(
"JSWGD"))
9849 if (!
given(
"IJTHDFWD"))
9853 if (!
given(
"IJTHDREV"))
9861 if (!
given(
"XJBVD"))
9869 if (!
given(
"JTSSWD"))
9873 if (!
given(
"JTSSWGD"))
9877 if (!
given(
"NJTSD"))
9881 if (!
given(
"NJTSSWD"))
9885 if (!
given(
"NJTSSWGD"))
9893 if (!
given(
"VTSSWD"))
9897 if (!
given(
"VTSSWGD"))
9909 if (!
given(
"XTSSWD"))
9913 if (!
given(
"XTSSWGD"))
9917 if (!
given(
"TNJTSD"))
9921 if (!
given(
"TNJTSSWD"))
9925 if (!
given(
"TNJTSSWGD"))
9929 if (!
given(
"LCDSCDR"))
9933 if (!
given(
"NCDSCDR"))
9937 if (!
given(
"PCDSCDR"))
9941 if (!
given(
"LETA0R"))
9945 if (!
given(
"NETA0R"))
9949 if (!
given(
"PETA0R"))
9953 if (!
given(
"LVSAT1"))
9957 if (!
given(
"NVSAT1"))
9961 if (!
given(
"PVSAT1"))
9965 if (!
given(
"LVSAT1R"))
9969 if (!
given(
"NVSAT1R"))
9973 if (!
given(
"PVSAT1R"))
9977 if (!
given(
"LPTWGR"))
9981 if (!
given(
"NPTWGR"))
9985 if (!
given(
"PPTWGR"))
9989 if (!
given(
"LPDIBL1R"))
9993 if (!
given(
"NPDIBL1R"))
9997 if (!
given(
"PPDIBL1R"))
10001 if (!
given(
"LAIGD"))
10005 if (!
given(
"NAIGD"))
10009 if (!
given(
"PAIGD"))
10013 if (!
given(
"LAIGD1"))
10017 if (!
given(
"NAIGD1"))
10021 if (!
given(
"PAIGD1"))
10025 if (!
given(
"LBIGD"))
10029 if (!
given(
"NBIGD"))
10033 if (!
given(
"PBIGD"))
10037 if (!
given(
"LCIGD"))
10041 if (!
given(
"NCIGD"))
10045 if (!
given(
"PCIGD"))
10049 if (!
given(
"LAGIDL"))
10053 if (!
given(
"NAGIDL"))
10057 if (!
given(
"PAGIDL"))
10061 if (!
given(
"LBGIDL"))
10065 if (!
given(
"NBGIDL"))
10069 if (!
given(
"PBGIDL"))
10073 if (!
given(
"LCGIDL"))
10077 if (!
given(
"NCGIDL"))
10081 if (!
given(
"PCGIDL"))
10085 if (!
given(
"LEGIDL"))
10089 if (!
given(
"NEGIDL"))
10093 if (!
given(
"PEGIDL"))
10097 if (!
given(
"LPGIDL"))
10101 if (!
given(
"NPGIDL"))
10105 if (!
given(
"PPGIDL"))
10109 if (!
given(
"LCFD"))
10113 if (!
given(
"NCFD"))
10117 if (!
given(
"PCFD"))
10121 if (!
given(
"LCOVD"))
10125 if (!
given(
"NCOVD"))
10129 if (!
given(
"PCOVD"))
10133 if (!
given(
"LCGDL"))
10137 if (!
given(
"NCGDL"))
10141 if (!
given(
"PCGDL"))
10145 if (!
given(
"LCKAPPAD"))
10149 if (!
given(
"NCKAPPAD"))
10153 if (!
given(
"PCKAPPAD"))
10159 if (!
given(
"XYCEADMSMODTEMP"))
10186 std::vector<Instance*>::iterator iterI;
10191 for (iterI = firstI; iterI != lastI; ++iterI)
10207 std::vector<Instance*>::const_iterator iter;
10213 os <<
" name model name Parameters" << std::endl;
10214 for (i=0, iter=first; iter!=last; ++iter, ++i)
10216 os <<
" " << i <<
": " << (*iter)->getName() <<
" ";
10220 os <<
"L = " << (*iter)->L << std::endl;
10221 os <<
"D = " << (*iter)->D << std::endl;
10222 os <<
"TFIN = " << (*iter)->TFIN << std::endl;
10223 os <<
"FPITCH = " << (*iter)->FPITCH << std::endl;
10224 os <<
"NFIN = " << (*iter)->NFIN << std::endl;
10225 os <<
"NGCON = " << (*iter)->NGCON << std::endl;
10226 os <<
"ASEO = " << (*iter)->ASEO << std::endl;
10227 os <<
"ADEO = " << (*iter)->ADEO << std::endl;
10228 os <<
"PSEO = " << (*iter)->PSEO << std::endl;
10229 os <<
"PDEO = " << (*iter)->PDEO << std::endl;
10230 os <<
"ASEJ = " << (*iter)->ASEJ << std::endl;
10231 os <<
"ADEJ = " << (*iter)->ADEJ << std::endl;
10232 os <<
"PSEJ = " << (*iter)->PSEJ << std::endl;
10233 os <<
"PDEJ = " << (*iter)->PDEJ << std::endl;
10234 os <<
"COVS = " << (*iter)->COVS << std::endl;
10235 os <<
"COVD = " << (*iter)->COVD << std::endl;
10236 os <<
"CGSP = " << (*iter)->CGSP << std::endl;
10237 os <<
"CGDP = " << (*iter)->CGDP << std::endl;
10238 os <<
"CDSP = " << (*iter)->CDSP << std::endl;
10239 os <<
"NRS = " << (*iter)->NRS << std::endl;
10240 os <<
"NRD = " << (*iter)->NRD << std::endl;
10241 os <<
"LRSD = " << (*iter)->LRSD << std::endl;
10266 for (std::vector<Instance *>::const_iterator it = instanceContainer.begin(); it != instanceContainer.end(); ++it)
10278 .registerDevice(
"m", 107)
10279 .registerModelType(
"nmos", 107)
10280 .registerModelType(
"pmos", 107);