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;
2056 std::vector<int> & map=
jacMap;
2057 std::vector< std::vector<int> > & map2=
jacMap2;
2213 bool bsuccess =
true;
2234 bool bsuccess =
true;
2256 #ifdef Xyce_DEBUG_DEVICE
2259 Xyce::dout() << std::endl << subsection_divider << std::endl;
2260 Xyce::dout() <<
" In ADMSbsimcmg::Instance::updateIntermediateVars\n\n";
2261 Xyce::dout() <<
" name = " <<
getName() << std::endl;
2625 double Inv_r1pi_acc;
2701 double DELTAVSATCV_i;
2858 double WeffWRFactor;
2870 double Toxratioedge;
2885 for (
int i=0; i < 6+0 ; ++i)
3112 csi = (epssub/
TFIN);
3123 scl = (1.0/sqrt(((1.0/(scl*scl))+(0.25/(heff*heff)))));
3128 scl = (0.5/sqrt(((1.0/(scl*scl))+(0.25/(heff*heff)))));
3133 scl = sqrt(((((0.5*epsratio)*R)*(
model_.
EOT))*(1.0+(R/((2.0*epsratio)*(
model_.
EOT))))));
3139 mx = (0.916*9.11e-31);
3140 mxprime = (0.190*9.11e-31);
3141 md = (0.190*9.11e-31);
3142 mdprime = (0.417*9.11e-31);
3148 Leff = (Lg-(2.0*deltaL));
3149 LeffCV = (Lg-(2.0*deltaLCV));
3156 Inv_NFIN = (1.0/
NFIN);
3304 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;
3308 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;
3371 U0_i = (U0_i*(1-(UP_i*pow(Leff,(-(
model_.
LPA))))));
3375 U0_i = (U0_i*(1-UP_i));
3409 if ((((QMTCENIV_i>0.0)||(QMTCENCV_i>0.0))||(QMTCENCVA_i>0.0)))
3414 Tcen0 = (TFIN*MTcen);
3420 Tcen0 = (std::min(TFIN,(
model_.
HFIN))*MTcen);
3426 Tcen0 = (std::min(TFIN,(
model_.
HFIN))*MTcen);
3441 std::cerr <<
"Fatal: Leff = %e is not positive." << Leff << std::endl;
3447 std::cerr <<
"Warning: Leff = %e <= 1.0e-9." << Leff << std::endl;
3452 std::cerr <<
"Warning: LeffCV = %e <= 1.0e-9." << LeffCV << std::endl;
3456 if ((LeffCV_acc<=1e-9))
3458 std::cerr <<
"Warning: LeffCV_acc = %e <= 1.0e-9." << LeffCV_acc << std::endl;
3463 std::cerr <<
"Warning: Weff0 = %e <= 1.0e-9." << Weff0 << std::endl;
3465 if ((WeffCV0<=1e-9))
3467 std::cerr <<
"Warning: WeffCV0 = %e <= 1.0e-9." << WeffCV0 << std::endl;
3471 std::cerr <<
"Fatal: NBODY_i = %e is not positive." << NBODY_i << std::endl;
3475 if ((NBODY_i<=1e18))
3477 std::cerr <<
"Warning: NBODY_i = %e m^-3 may be too small." << NBODY_i << std::endl;
3482 std::cerr <<
"Fatal: NGATE_i = %e is negative." << NGATE_i << std::endl;
3486 if (((NGATE_i!=0)&&(NGATE_i<=1e24)))
3488 std::cerr <<
"Warning: NGATE_i = %e may be too small." << NGATE_i << std::endl;
3494 std::cerr <<
"Fatal: NGATE_i = %e is too high." << NGATE_i << std::endl;
3500 std::cerr <<
"Warning: DVT0_i = %e is negative." << DVT0_i << std::endl;
3504 std::cerr <<
"Fatal: DVT1_i = %e is not positive." << DVT1_i << std::endl;
3508 std::cerr <<
"Fatal: DVT1SS_i = %e is not positive." << DVT1SS_i << std::endl;
3512 std::cerr <<
"Warning: CDSC_i = %e is negative." << CDSC_i << std::endl;
3516 std::cerr <<
"Warning: CDSCD_i = %e is negative." << CDSCD_i << std::endl;
3520 std::cerr <<
"Fatal: DSUB_i = %e is not positive." << DSUB_i << std::endl;
3524 std::cerr <<
"Warning: ETA0_i = %e is negative." << ETA0_i << std::endl;
3526 if ((LPE0_i<(-Leff)))
3528 std::cerr <<
"Warning: LPE0_i = %e is less than -Leff. Clipping LPE0_i to 0" << LPE0_i << std::endl;
3533 std::cerr <<
"Warning: K0SI_i = %e is not positive, setting it to 0." << K0SI_i << std::endl;
3538 std::cerr <<
"Warning: K1SI_i = %e is not positive, setting it to 0." << K1SI_i << std::endl;
3543 std::cerr <<
"Warning: PHIBE_i = %e is less than 0.2, setting it to 0.2." << PHIBE_i << std::endl;
3548 std::cerr <<
"Warning: PHIBE_i = %e is larger than 1.2, setting it to 1.2." << PHIBE_i << std::endl;
3553 std::cerr <<
"Warning: PSAT_i = %e is less than 2.0, setting it to 2.0." << PSAT_i << std::endl;
3558 std::cerr <<
"Warning: PSATCV_i = %e is less than 2.0, setting it to 2.0." << PSATCV_i << std::endl;
3563 std::cerr <<
"Warning: U0_i = %e is negative, setting it to 0." << U0_i << std::endl;
3568 std::cerr <<
"Warning: UA_i = %e is negative, setting it to 0." << UA_i << std::endl;
3573 std::cerr <<
"Warning: EU_i = %e is negative, setting it to 0." << EU_i << std::endl;
3578 std::cerr <<
"Warning: UD_i = %e is negative, setting it to 0." << UD_i << std::endl;
3583 std::cerr <<
"Warning: UCS_i = %e is negative, setting it to 0." << UCS_i << std::endl;
3589 std::cerr <<
"Warning: RDSWMIN = %e is negative. Set to zero" << RDSWMIN_i << std::endl;
3594 std::cerr <<
"Warning: RDSW_i = %e is negative. Set to zero" << RDSW_i << std::endl;
3600 std::cerr <<
"Warning: RSWMIN = %e is negative. Set to zero" << RSWMIN_i << std::endl;
3605 std::cerr <<
"Warning: RSW_i = %e is negative. Set to zero" << RSW_i << std::endl;
3611 std::cerr <<
"Warning: RDWMIN = %e is negative. Set to zero" << RDWMIN_i << std::endl;
3616 std::cerr <<
"Warning: RDW_i = %e is negative. Set to zero" << RDW_i << std::endl;
3621 std::cerr <<
"Warning: PRWGD_i = %e is negative. Set to zero" << PRWGD_i << std::endl;
3626 std::cerr <<
"Warning: PRWGS_i = %e is negative. Set to zero" << PRWGS_i << std::endl;
3631 std::cerr <<
"Warning: PCLM_i = %e is negative." << PCLM_i << std::endl;
3635 std::cerr <<
"Warning: PDIBL1_i = %e is negative." << PDIBL1_i << std::endl;
3641 std::cerr <<
"Warning: PDIBL1R_i = %e is negative." << PDIBL1R_i << std::endl;
3646 std::cerr <<
"Fatal: PDIBL2_i = %e is negative." << PDIBL2_i << std::endl;
3650 std::cerr <<
"Fatal: DROUT_i = %e is non-positive." << DROUT_i << std::endl;
3654 std::cerr <<
"Warning: MEXP_i = %e < 2. Setting MEXP_i = 2." << MEXP_i << std::endl;
3661 std::cerr <<
"Warning: MEXPR_i = %e < 2. Setting MEXPR_i = 2." << MEXPR_i << std::endl;
3667 std::cerr <<
"Warning: PTWG_i = %e is negative, setting it to 0." << PTWG_i << std::endl;
3670 if (((QMTCENIV_i>0)||(QMTCENCV_i>0)))
3674 std::cerr <<
"Fatal: QM0 = %e is non-positive." << (
model_.
QM0) << std::endl;
3681 std::cerr <<
"Fatal: QM0ACC = %e is non-positive." << (
model_.
QM0ACC) << std::endl;
3686 std::cerr <<
"Warning: CGIDL_i = %e < 0. Setting CGIDL_i = 0." << CGIDL_i << std::endl;
3691 std::cerr <<
"Warning: CGISL_i = %e < 0. Setting CGISL_i = 0." << CGISL_i << std::endl;
3698 std::cerr <<
"Fatal: NIGBINV_i = %e is non-positive." << NIGBINV_i << std::endl;
3702 std::cerr <<
"Fatal: NIGBACC_i = %e is non-positive." << NIGBACC_i << std::endl;
3709 std::cerr <<
"Fatal: POXEDGE_i = %e is non-positive." << POXEDGE_i << std::endl;
3713 std::cerr <<
"Fatal: PIGCD_i = %e is non-positive." << PIGCD_i << std::endl;
3720 std::cerr <<
"Fatal: TOXREF = %e is non-positive." << (
model_.
TOXREF) << std::endl;
3725 std::cerr <<
"Warning: LINTIGEN = %e is too large - Leff for r/g current is negative. Re-setting LINTIGEN = 0." << (
model_.
LINTIGEN) << std::endl;
3734 std::cerr <<
"Fatal: NTGEN_i = %e is non-positive." << NTGEN_i << std::endl;
3738 if ((BETAII0_i<0.0))
3740 std::cerr <<
"Warning: BETAII0_i = %e is negative." << BETAII0_i << std::endl;
3742 if ((BETAII1_i<0.0))
3744 std::cerr <<
"Warning: BETAII1_i = %e is negative." << BETAII1_i << std::endl;
3746 if ((BETAII2_i<0.0))
3748 std::cerr <<
"Warning: BETAII2_i = %e is negative." << BETAII2_i << std::endl;
3752 std::cerr <<
"Warning: ESATII_i = %e is negative." << ESATII_i << std::endl;
3756 std::cerr <<
"Warning: LII_i = %e is negative." << LII_i << std::endl;
3760 std::cerr <<
"Warning: SII1_i = %e is negative." << (
model_.
SII1) << std::endl;
3764 std::cerr <<
"Warning: SII2_i = %e is negative." << SII2_i << std::endl;
3768 std::cerr <<
"Warning: SIID_i = %e is negative." << SIID_i << std::endl;
3773 std::cerr <<
"Fatal: EF = %e is non-positive." << (
model_.
EF) << std::endl;
3779 std::cerr <<
"Fatal: EF = %e > 2.0." << (
model_.
EF) << std::endl;
3784 std::cerr <<
"Warning: LINTNOI = %e is too large - Leff for noise is negative. Re-setting LINTNOI = 0." << (
model_.
LINTNOI) << std::endl;
3793 std::cerr <<
"Warning: NTNOI = %e is negative. Set to zero." << (
model_.
NTNOI) << std::endl;
3802 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;
3806 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;
3840 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);
3844 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);
3846 rhorsd = (1/((1.60219e-19*(
model_.
NSD))*mu_rsd));
3848 thetarsp = ((55*3.14159265358979323846)/180);
3850 T1 = ((thetarsp>=(3.14159265358979323846/2))?0:((thetarsp<=((-3.14159265358979323846)/2))?0:(1.0/tan(thetarsp))));
3851 Rsp = (((rhorsd*T1.val())/(sqrt(3.14159265358979323846)*
NFIN))*(((1.0/sqrt(afin))-(2.0/sqrt(Arsd)))+sqrt((afin/(Arsd*Arsd)))));
3854 lt = sqrt((((
model_.
RHOC)*arsd_total)/(rhorsd*prsd_total)));
3860 T1 = (T0*(1.0+eta));
3861 T2 = ((T1+1.0)-eta);
3862 T3 = ((T1-1.0)+eta);
3869 RrsdTML = (((rhorsd*lt)*T2.val())/(arsd_total*T3.val()));
3873 Rrsd = (((RrsdTML+Rsp)*Rrsdside)/((RrsdTML+Rsp)+Rrsdside));
3877 Rrsd = (RrsdTML+Rsp);
3880 RSourceGeo = Rdsgeo;
3883 if ((RSourceGeo<=1.0e-3))
3885 RSourceGeo = 1.0e-3;
3887 if ((RDrainGeo<=1.0e-3))
3931 CGSO_i = std::max(0.0,(((
model_.
DLC)*cox)-CGSL_i));
3935 CGSO_i = ((0.3*
TFIN)*cox);
3946 CGDO_i = std::max(0.0,(((
model_.
DLC)*cox)-CGDL_i));
3950 CGDO_i = ((0.3*
TFIN)*cox);
3963 T1 = (((0.942*Hrsd)*epssp)/(
model_.
LSP));
4010 TT1 = (Cnon*CcgSat);
4020 Rcf = (Hgdelta*r1cf);
4021 Ccg2 = (((epssp*2)/3.14159265358979323846)*log((((
model_.
LSP)+((0.5*3.14159265358979323846)*Rcf))/(
model_.
LSP))));
4022 Ccg = (TFIN*(Ccg1+Ccg2));
4024 C1 = (4.0/(sqrt((2.0*(x+1)))*3.14159265358979323846));
4027 Cfglog = (epssp*((C1*log((C2/C3)))+12.27));
4029 TT0 = sqrt(((dcf*dcf)+1.0));
4032 Cfgsat = (((((((2.0*epssp)*sqrt(2.0))/3.14159265358979323846)*0.85)*dcf)/TT0)*log((TT1/TT2)));
4034 TT1 = ((Cfgsat-Cfglog)-delta);
4035 Cfg = (TFIN*(Cfgsat-(0.5*(TT1+sqrt(((TT1*TT1)+((4*delta)*Cfgsat)))))));
4036 Cgg_top = (Ccg+Cfg);
4084 TT1 = (Cnon*CcgSat);
4094 Rcf = (Hgdelta*r1cf);
4095 Ccg2 = (((epssp*2)/3.14159265358979323846)*log((((
model_.
LSP)+((0.5*3.14159265358979323846)*Rcf))/(
model_.
LSP))));
4098 C1 = (4.0/(sqrt((2.0*(x+1)))*3.14159265358979323846));
4101 Cfglog = (epssp*((C1*log((C2/C3)))+12.27));
4103 TT0 = sqrt(((dcf*dcf)+1.0));
4106 Cfgsat = (((((((2.0*epssp)*sqrt(2.0))/3.14159265358979323846)*0.70)*dcf)/TT0)*log((TT1/TT2)));
4108 TT1 = ((Cfgsat-Cfglog)-delta);
4109 Cfg = ((
model_.
HFIN)*(Cfgsat-(0.5*(TT1+sqrt(((TT1*TT1)+((4*delta)*Cfgsat)))))));
4110 Cgg_side = (Ccg+Cfg);
4158 TT1 = (Cnon*CcgSat);
4168 Rcf = (Hgdelta*r1cf);
4169 Ccg2 = (((epssp*2)/3.14159265358979323846)*log((((
model_.
LSP)+((0.5*3.14159265358979323846)*Rcf))/(
model_.
LSP))));
4172 C1 = (4.0/(sqrt((2.0*(x+1)))*3.14159265358979323846));
4175 Cfglog = (epssp*((C1*log((C2/C3)))+12.27));
4177 TT0 = sqrt(((dcf*dcf)+1.0));
4180 Cfgsat = (((((((2.0*epssp)*sqrt(2.0))/3.14159265358979323846)*0.85)*dcf)/TT0)*log((TT1/TT2)));
4182 TT1 = ((Cfgsat-Cfglog)-delta);
4183 Cfg = ((
model_.
HFIN)*(Cfgsat-(0.5*(TT1+sqrt(((TT1*TT1)+((4*delta)*Cfgsat)))))));
4184 Cgg_side = (Ccg+Cfg);
4208 csbox = ((cbox*
ASEO)+(T0.val()*std::max(0.0,(
PSEO-(
FPITCH*NFINtotal)))));
4209 cdbox = ((cbox*
ADEO)+(T0.val()*std::max(0.0,(
PDEO-(
FPITCH*NFINtotal)))));
4211 EeffFactor = (1.0e-8/(epsratio*(
model_.
EOT)));
4212 WeffWRFactor = (1.0/(pow((Weff0*1.0e6),WR_i)*NFINtotal));
4213 litl = sqrt((((epsratio*(
model_.
EOT))*0.5)*TFIN));
4214 tmp = (((DVT1_i*Leff)/scl)+1.0e-6);
4217 Theta_SCE = (0.5/(cosh(tmp)-1.0));
4221 Theta_SCE = exp((-tmp));
4223 tmp = (((DVT1SS_i*Leff)/scl)+1.0e-6);
4226 Theta_SW = (0.5/(cosh(tmp)-1.0));
4230 Theta_SW = exp((-tmp));
4232 tmp = (((DSUB_i*Leff)/scl)+1.0e-6);
4235 Theta_DIBL = (0.5/(cosh(tmp)-1.0));
4239 Theta_DIBL = exp((-tmp));
4241 Theta_RSCE = (sqrt((1.0+(LPE0_i/Leff)))-1.0);
4252 qbs = (((1.60219e-19*nbody)*TFIN)/(2*cox));
4256 qbs = (((1.60219e-19*nbody)*R)/(2*cox));
4260 phibulk = ((((1.60219e-19/(2*epssub))*nbody)*(TFIN/2))*(TFIN/2));
4267 Qbul = sqrt(((((2*1.60219e-19)*nbody)*epssub)*phibulk));
4273 r1 = ((2*epssub)/(R*cox));
4276 r1_acc = ((2.0*epssub)/(R*cox_acc.val()));
4281 Aechvb = 4.97232e-7;
4285 Aechvb = 3.42537e-7;
4289 Bechvb = 7.45669e11;
4293 Bechvb = 1.16645e12;
4300 igsd_mult0 = ((Weff0*Aechvb)*Toxratioedge);
4303 std::cerr <<
"Warning: (TNOM=%e) < -`P_CELSIUS0. Set to 27 C." << (
model_.
TNOM) << std::endl;
4315 TRatio = (DevTemp/Tnom);
4316 delTemp = (DevTemp-Tnom);
4317 Vtm = (8.617087e-5*DevTemp);
4318 Vtm0 = (8.617087e-5*Tnom);
4321 T1 = ((DevTemp/300.15)*sqrt((DevTemp/300.15)));
4327 kT = (Vtm*1.60219e-19);
4328 T0 = ((1.05457e-34*3.14159265358979323846)/
TFIN);
4329 E0 = ((T0.val()*T0.val())/(2.0*mx));
4330 E0prime = ((T0.val()*T0.val())/(2.0*mxprime));
4332 E1prime = (4.0*E0prime);
4333 T1 = ((gprime*mdprime)/(gfactor*md));
4337 dvch_qm = (QMFACTOR_i*((E0/1.60219e-19)+T2.val()));
4341 T0 = ((1.05457e-34*2.4048)/R);
4342 E0 = ((T0.val()*T0.val())/(2.0*mx));
4343 dvch_qm = ((QMFACTOR_i*E0)/1.60219e-19);
4347 T1 = (U0_i*pow(TRatio,UTE_i));
4356 UD_t = (UD_i*pow(TRatio,UD1_i));
4357 UCS_t = (UCS_i*pow(TRatio,UCSTE_i));
4372 std::cerr <<
"Warning: VSAT(%f) = %e is less than 1K, setting it to 1K." << DevTemp << VSAT_t << std::endl;
4378 std::cerr <<
"Warning: VSAT1(%f) = %e is less than 1K, setting it to 1K." << DevTemp << VSAT1_t << std::endl;
4384 if ((VSAT1R_t<1000))
4386 std::cerr <<
"Warning: VSAT1R(%f) = %e is less than 1K, setting it to 1K." << DevTemp << VSAT1R_t << std::endl;
4391 if ((VSATCV_t<1000))
4393 std::cerr <<
"Warning: VSATCV(%f) = %e is less than 1K, setting it to 1K." << DevTemp << VSATCV_t << std::endl;
4406 dvth_temp = ((KT1_i+((
model_.
KT1L)/Leff))*(TRatio-1.0));
4407 BETA0_t = (BETA0_i*pow(TRatio,IIT_i));
4409 K0_t = (K0_i+(K01_i*delTemp));
4413 K1SAT_t = (K1SAT_i+(K1SAT1_i*delTemp));
4414 A1_t = (A1_i+(A11_i*delTemp));
4415 A2_t = (A2_i+(A21_i*delTemp));
4428 igsd_mult = (igsd_mult0*igtemp);
4443 T0 = ((Eg0/Vtm0)-(Eg/Vtm));
4466 beta0 = (((u0*cox)*Weff0)/Leff);
4482 vpoly0 = (((1.60219e-19*NGATE_i)*epssub)/((2.0*cox)*cox));
4483 cpoly = (1.0/(4.0*vpoly0));
4488 vpoly0 = (((((1.60219e-19*NGATE_i)*epssub)*T0.val())*T0.val())/((2.0*cox)*cox));
4489 cpoly = (1.0/(4.0*vpoly0));
4491 kpoly = (1.0+((2.0*cpoly)*qbs));
4501 deltaPhi = (devsign*(PHIG_i-((
model_.
EASUB)+Eg)));
4509 r1 = ((2.0*epssub)/(cox*
TFIN));
4512 Inv_r1pi = (1.0/(r1*3.14159265358979323846));
4515 r1_acc = ((2.0*epssub)/(cox_acc.val()*
TFIN));
4516 Inv_r1pi_acc = (1.0/(r1_acc*3.14159265358979323846));
4528 r2 = (((4.0*Vtm)*epssub)/(((1.60219e-19*
TFIN)*
TFIN)*NGATE_i));
4532 r2 = ((((2.0*cpoly)*r1)*r1)*Vtm);
4539 eta_mu = (0.5*ETAMOB_t);
4543 eta_mu = ((1.0/3.0)*ETAMOB_t);
4544 eta_mu_cv = (1.0/3.0);
4548 Isbs = (((
ASEJ*JSS_t)+(
PSEJ*JSWS_t))+((Weff0*NFINtotal)*JSWGS_t));
4554 Tb = ((1.0+T2)-XExpBVS);
4557 IVjsmFwd = (Isbs*(((T0.val()-(XExpBVS/T0.val()))+XExpBVS)-1.0));
4558 SslpFwd = ((Isbs*(T0.val()+(XExpBVS/T0.val())))/Nvtms);
4562 IVjsmRev = (Isbs*(1.0+T1.val()));
4563 SslpRev = (((-Isbs)*T1.val())/Nvtms);
4565 Isbd = (((
ADEJ*JSD_t)+(
PDEJ*JSWD_t))+((Weff0*NFINtotal)*JSWGD_t));
4571 Tb = ((1.0+T2)-XExpBVD);
4574 IVjdmFwd = (Isbd*(((T0.val()-(XExpBVD/T0.val()))+XExpBVD)-1.0));
4575 DslpFwd = ((Isbd*(T0.val()+(XExpBVD/T0.val())))/Nvtmd);
4579 IVjdmRev = (Isbd*(1.0+T1.val()));
4580 DslpRev = (((-Isbd)*T1.val())/Nvtmd);
4582 Czbs = (CJS_t*
ASEJ);
4583 Czbssw = (CJSWS_t*
PSEJ);
4584 Czbsswg = ((CJSWGS_t*Weff0)*NFINtotal);
4585 Czbd = (CJD_t*
ADEJ);
4586 Czbdsw = (CJSWD_t*
PDEJ);
4587 Czbdswg = ((CJSWGD_t*Weff0)*NFINtotal);
4589 T0 = ((Eg/Vtm)*(TRatio-1.0));
4596 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;
4607 if ((vds_noswap<0.0))
4610 vgs = (vgs_noswap-vds_noswap);
4611 vds = ((-1.0)*vds_noswap);
4612 vgd = (vgd_noswap+vds_noswap);
4622 vgsfb = (vgs-deltaPhi);
4629 vdsx = (sqrt(((vds*vds)+0.01))-0.1);
4632 vesx = (ves-(0.5*(vds-vdsx)));
4633 vesmax = (0.95*PHIBE_i);
4634 T2 = ((vesmax-vesx)-1.0E-3);
4635 veseff = (vesmax-(0.5*(T2+sqrt(((T2*T2)+(0.004*vesmax))))));
4637 T0 = tanh(((0.6*vds_noswap)/Vtm));
4638 wf = (0.5+(0.5*T0));
4642 CDSCD_a = ((CDSCDR_i*wr)+(CDSCD_i*wf));
4643 ETA0_a = ((ETA0R_t*wr)+(ETA0_t*wf));
4644 PDIBL1_a = ((PDIBL1R_i*wr)+(PDIBL1_i*wf));
4645 MEXP_a = ((MEXPR_t*wr)+(MEXP_t*wf));
4646 PTWG_a = ((PTWGR_t*wr)+(PTWG_t*wf));
4647 VSAT1_a = ((VSAT1R_t*wr)+(VSAT1_t*wf));
4648 RSDR_a = ((RSDRR_t*wr)+(RSDR_t*wf));
4649 RDDR_a = ((RDDRR_t*wr)+(RDDR_t*wf));
4655 PDIBL1_a = PDIBL1_i;
4662 inv_MEXP = (1.0/MEXP_a);
4663 phist = ((0.4+phib)+PHIN_i);
4666 T1 = (((2*cox)*csi)/((2*csi)+cox));
4672 cdsc = (Theta_SW*(CDSC_i+(CDSCD_a*vdsx)));
4673 nVtm = ((Vtm*ThetaSS)*(1.0+(((CIT_i/TRatio)+cdsc)/T1)));
4674 dvth_vtroll = (((-DVT0_i)*Theta_SCE)*(vbi-phist));
4676 dvth_rsce = ((K1RSCE_i*Theta_RSCE)*sqrt(phist));
4677 dvth_all = ((((dvth_vtroll+dvth_dibl)+dvth_rsce)+dvth_temp)+DVTSHIFT_i);
4678 vgsfb = (vgsfb-dvth_all);
4684 vgsfb = (vgsfb-((((0.5*1.60219e-19)*nbody)*
TFIN)/cox));
4688 q0 = ((((5.0*nVtm)*(epssub/
TFIN))+(2.0*Qbul))/cox);
4698 q0 = ((2.0*nVtm)*r1);
4699 T0 = (((1.60219e-19*nbody)*R)/cox);
4705 q0_acc = ((2.0*Vtm)*r1_acc);
4706 T0 = (((1.60219e-19*ni)*R)/cox_acc);
4741 aab = (phibulk/(nVtm*nVtm));
4743 T11 = (((r1*phibulk)/nVtm)+(r2*T0));
4752 F0 = ((vgsfbeff_acc/(2.0*Vtm))-F1_acc);
4763 z2 = atan(((2*T0)*Inv_r1pi_acc));
4764 g0 = min(z1,max(z2,1e-15));
4765 if (((g0>g0max)||(g0<g0min)))
4778 secg0sq = ((tang0*tang0)+1.0);
4782 e0 = (((lng0-lncosg0)+(r1_acc*T0))-F0);
4783 e1 = ((inv_g0+((secg0sq*g0)*r1_acc))+(tang0*(1.0+r1_acc)));
4784 e2 = ((secg0sq*(1.0+(2.0*(r1_acc+(T0*r1_acc)))))-(inv_g0*inv_g0));
4785 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))));
4786 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)))));
4787 if (((g0>g0max)||(g0<g0min)))
4800 secg0sq = ((tang0*tang0)+1.0);
4804 e0 = (((lng0-lncosg0)+(r1_acc*T0))-F0);
4805 e1 = ((inv_g0+((secg0sq*g0)*r1_acc))+(tang0*(1.0+r1_acc)));
4806 e2 = ((secg0sq*(1.0+(2.0*(r1_acc+(T0*r1_acc)))))-(inv_g0*inv_g0));
4807 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))));
4808 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)))));
4809 if (((g0>g0max)||(g0<g0min)))
4826 F0 = (vgsfbeff_acc/(2.0*Vtm));
4847 g0 = ((sqrt((0.25+(((r1_acc*r1_acc)*T0)*T0)))-0.5)/(r1_acc*r1_acc));
4850 if (((g0>g0max)||(g0<g0min)))
4868 inv_g0sq = (inv_g0*inv_g0);
4869 T0 = (1+(cdop_acc*g0));
4873 e1 = (((0.5*inv_g0)+(0.5*T1))+r1_acc);
4874 e2 = (((-0.5)*inv_g0sq)-(0.5*T2));
4875 e3 = ((inv_g0*inv_g0sq)+(T2*T1));
4876 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)))));
4877 if (((g0>g0max)||(g0<g0min)))
4889 inv_g0sq = (inv_g0*inv_g0);
4890 T0 = (1+(cdop_acc*g0));
4894 e1 = (((0.5*inv_g0)+(0.5*T1))+r1_acc);
4895 e2 = (((-0.5)*inv_g0sq)-(0.5*T2));
4896 e3 = ((inv_g0*inv_g0sq)+(T2*T1));
4897 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)))));
4898 if (((g0>g0max)||(g0<g0min)))
4911 qi_acc = (q0_acc*g0a);
4919 F0 = (((vgsfbeff-vch)/(2.0*nVtm))-F1);
4930 z2 = atan(((2*T0)*Inv_r1pi));
4931 g0 = min(z1,max(z2,1e-15));
4932 if (((g0>g0max)||(g0<g0min)))
4945 secg0sq = ((tang0*tang0)+1.0);
4950 e0 = ((((lng0-lncosg0)+(r1*T0))+(r2*T1))-F0);
4951 e1 = ((inv_g0+((secg0sq*g0)*(r1+((2.0*r2)*T0))))+(tang0*(1.0+(r1+((2.0*r2)*T0)))));
4952 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)));
4953 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))))));
4954 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)))));
4955 if (((g0>g0max)||(g0<g0min)))
4968 secg0sq = ((tang0*tang0)+1.0);
4973 e0 = ((((lng0-lncosg0)+(r1*T0))+(r2*T1))-F0);
4974 e1 = ((inv_g0+((secg0sq*g0)*(r1+((2.0*r2)*T0))))+(tang0*(1.0+(r1+((2.0*r2)*T0)))));
4975 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)));
4976 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))))));
4977 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)))));
4978 if (((g0>g0max)||(g0<g0min)))
4995 F0 = ((((vgsfbeff-phibulk)-vch)/T14)-F1);
4998 z1 = ((((2.0*r1)-1.0)*T1)+(r2*T0));
4999 guessA = ((2.0*r1)*T1);
5000 guessA = (guessA/(1.0-exp((-guessA))));
5001 z2 = (z1+log((sqrt(guessA)/r1)));
5002 if (((F0-z2)>((-0.3)/T14)))
5006 T2 = (((0.5/guessA)*log((1.0+exp((2.0*(F0-z2))))))+1.0);
5010 T2 = (((0.5/guessA)*(2.0*(F0-z2)))+1.0);
5013 guessB = (((guessA/r1)*sqrt((T3-1.0)))*exp((-T1)));
5017 guessB = exp(((F0-z1)-T1));
5022 g0 = (1.0/((1.0/g0)+(1.0/(0.5*3.14159265358979323846))));
5025 secg0 = (1.0/cosg0);
5026 secg0sq = (secg0*secg0);
5027 lng0 = (-log((1.0/g0)));
5028 T0 = (1.0+(g0*tang0));
5031 T3 = ((((-2.0)*g0)+((aab*T14)*tang0))+((((2.0*T13)*g0)*secg0sq)*T0));
5032 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))));
5033 T5 = (((2.0*tang0)*T4)+(4.0*(((((((3.0*T13)*g0)*secg0sq)*secg0sq)*T0)+tang0)+((((2.0*T13)*secg0sq)*T0)*tang0))));
5035 T8 = ((((1.0/g0)+tang0)+(r2*T3))+((r1*T3)/(2.0*T2)));
5036 T9 = ((((((-1.0)/(g0*g0))+secg0sq)-(((r1*T3)*T3)/(((4*T2)*T2)*T2)))+((r1*T4)/(2.0*T2)))+(r2*T4));
5037 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));
5038 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))))));
5041 secg0 = (1.0/cosg0);
5042 secg0sq = (secg0*secg0);
5043 lng0 = (-log((1.0/g0)));
5044 T0 = (1.0+(g0*tang0));
5047 T3 = ((((-2.0)*g0)+((aab*T14)*tang0))+((((2.0*T13)*g0)*secg0sq)*T0));
5048 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))));
5049 T5 = (((2.0*tang0)*T4)+(4.0*(((((((3.0*T13)*g0)*secg0sq)*secg0sq)*T0)+tang0)+((((2.0*T13)*secg0sq)*T0)*tang0))));
5051 T8 = ((((1.0/g0)+tang0)+(r2*T3))+((r1*T3)/(2.0*T2)));
5052 T9 = ((((((-1.0)/(g0*g0))+secg0sq)-(((r1*T3)*T3)/(((4*T2)*T2)*T2)))+((r1*T4)/(2.0*T2)))+(r2*T4));
5053 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));
5054 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))))));
5055 lng0 = (-log((1.0/g0)));
5061 lng0 = (-log((1.0/g0)));
5065 if (((F0-z2)>((-0.3)/T14)))
5067 lng0 = ((-log((1.0/((guessA/r1)*sqrt((T3-1.0))))))-T1);
5071 lng0 = ((F0-z1)-T1);
5080 F0 = ((vgsfbeff-vch)/(2.0*nVtm));
5094 g0 = ((sqrt((0.25+(((r1*r1)*T0)*T0)))-0.5)/(r1*r1));
5097 if (((g0>g0max)||(g0<g0min)))
5115 inv_g0sq = (inv_g0*inv_g0);
5120 e1 = ((((0.5*inv_g0)+(0.5*T1))+r1)+((2*r2)*g0));
5121 e2 = ((((-0.5)*inv_g0sq)-(0.5*T2))+(2*r2));
5122 e3 = ((inv_g0*inv_g0sq)+(T2*T1));
5123 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)))));
5124 if (((g0>g0max)||(g0<g0min)))
5136 inv_g0sq = (inv_g0*inv_g0);
5141 e1 = ((((0.5*inv_g0)+(0.5*T1))+r1)+((2*r2)*g0));
5142 e2 = ((((-0.5)*inv_g0sq)-(0.5*T2))+(2.0*r2));
5143 e3 = ((inv_g0*inv_g0sq)+(T2*T1));
5144 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)))));
5145 if (((g0>g0max)||(g0<g0min)))
5158 vpolys = ((((2.0*nVtm)*r2)*g0s)*g0s);
5159 phis = ((vgsfbeff-(((2.0*nVtm)*r1)*g0s))-vpolys);
5166 T0 = (sqrt((1.0+((vgsfbeff-phis)/vpoly0)))-1.0);
5167 vpolys = ((vpoly0*T0)*T0);
5175 qis = ((vgsfbeff-phis)-vpolys);
5179 qis = (((vgsfbeff-phis)-qbs)-vpolys);
5182 Eeffs = (EeffFactor*(qbs+(eta_mu*qis)));
5184 T2 = pow((0.5*(1.0+fabs((qis/qb0)))),UCS_t);
5187 T3 = (((UA_t+(UC_t*veseff))*pow(fabs(Eeffs),EU_i))+(UD_t/T2));
5191 T3 = ((UA_t*pow(fabs(Eeffs),EU_i))+(UD_t/T2));
5201 T4 = (1.0+(PRWGS_i*qis));
5203 T0 = (0.5*(T1+sqrt(((T1*T1)+0.01))));
5204 Rdss = ((((RDSWMIN_i+(RDSW_i*T0))*WeffWRFactor)*NFINtotal)*rdstemp);
5206 Esat = (((2*VSAT_t)/u0)*Dmobs);
5207 EsatL = (Esat*Leff);
5208 T6 = (KSATIV_i*((vgsfbeff-phis)+(2*Vtm)));
5211 Vdsat = ((EsatL*T6)/(EsatL+T6));
5215 WVCox = ((Weff0*VSAT_t)*cox);
5218 Tb = ((T6+EsatL)+((3*T6)*T0));
5219 Tc = (T6*(EsatL+((2*T6)*T0)));
5220 Vdsat = ((Tb-sqrt(((Tb*Tb)-((2*Ta)*Tc))))/Ta);
5223 T7 = pow((vds/Vdsat),MEXP_a);
5224 T8 = pow((1.0+T7),inv_MEXP);
5230 vch = (Vdseff+dvch_qm);
5235 F0 = (((vgsfbeff-vch)/(2.0*nVtm))-F1);
5246 z2 = atan(((2*T0)*Inv_r1pi));
5247 g0 = min(z1,max(z2,1e-15));
5248 if (((g0>g0max)||(g0<g0min)))
5261 secg0sq = ((tang0*tang0)+1.0);
5266 e0 = ((((lng0-lncosg0)+(r1*T0))+(r2*T1))-F0);
5267 e1 = ((inv_g0+((secg0sq*g0)*(r1+((2.0*r2)*T0))))+(tang0*(1.0+(r1+((2.0*r2)*T0)))));
5268 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)));
5269 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))))));
5270 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)))));
5271 if (((g0>g0max)||(g0<g0min)))
5284 secg0sq = ((tang0*tang0)+1.0);
5289 e0 = ((((lng0-lncosg0)+(r1*T0))+(r2*T1))-F0);
5290 e1 = ((inv_g0+((secg0sq*g0)*(r1+((2.0*r2)*T0))))+(tang0*(1.0+(r1+((2.0*r2)*T0)))));
5291 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)));
5292 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))))));
5293 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)))));
5294 if (((g0>g0max)||(g0<g0min)))
5311 F0 = ((((vgsfbeff-phibulk)-vch)/T14)-F1);
5314 z1 = ((((2.0*r1)-1.0)*T1)+(r2*T0));
5315 guessA = ((2.0*r1)*T1);
5316 guessA = (guessA/(1.0-exp((-guessA))));
5317 z2 = (z1+log((sqrt(guessA)/r1)));
5318 if (((F0-z2)>((-0.3)/T14)))
5322 T2 = (((0.5/guessA)*log((1.0+exp((2.0*(F0-z2))))))+1.0);
5326 T2 = (((0.5/guessA)*(2.0*(F0-z2)))+1.0);
5329 guessB = (((guessA/r1)*sqrt((T3-1.0)))*exp((-T1)));
5333 guessB = exp(((F0-z1)-T1));
5338 g0 = (1.0/((1.0/g0)+(1.0/(0.5*3.14159265358979323846))));
5341 secg0 = (1.0/cosg0);
5342 secg0sq = (secg0*secg0);
5343 lng0 = (-log((1.0/g0)));
5344 T0 = (1.0+(g0*tang0));
5347 T3 = ((((-2.0)*g0)+((aab*T14)*tang0))+((((2.0*T13)*g0)*secg0sq)*T0));
5348 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))));
5349 T5 = (((2.0*tang0)*T4)+(4.0*(((((((3.0*T13)*g0)*secg0sq)*secg0sq)*T0)+tang0)+((((2.0*T13)*secg0sq)*T0)*tang0))));
5351 T8 = ((((1.0/g0)+tang0)+(r2*T3))+((r1*T3)/(2.0*T2)));
5352 T9 = ((((((-1.0)/(g0*g0))+secg0sq)-(((r1*T3)*T3)/(((4*T2)*T2)*T2)))+((r1*T4)/(2.0*T2)))+(r2*T4));
5353 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));
5354 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))))));
5357 secg0 = (1.0/cosg0);
5358 secg0sq = (secg0*secg0);
5359 lng0 = (-log((1.0/g0)));
5360 T0 = (1.0+(g0*tang0));
5363 T3 = ((((-2.0)*g0)+((aab*T14)*tang0))+((((2.0*T13)*g0)*secg0sq)*T0));
5364 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))));
5365 T5 = (((2.0*tang0)*T4)+(4.0*(((((((3.0*T13)*g0)*secg0sq)*secg0sq)*T0)+tang0)+((((2.0*T13)*secg0sq)*T0)*tang0))));
5367 T8 = ((((1.0/g0)+tang0)+(r2*T3))+((r1*T3)/(2.0*T2)));
5368 T9 = ((((((-1.0)/(g0*g0))+secg0sq)-(((r1*T3)*T3)/(((4*T2)*T2)*T2)))+((r1*T4)/(2.0*T2)))+(r2*T4));
5369 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));
5370 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))))));
5371 lng0 = (-log((1.0/g0)));
5377 lng0 = (-log((1.0/g0)));
5381 if (((F0-z2)>((-0.3)/T14)))
5383 lng0 = ((-log((1.0/((guessA/r1)*sqrt((T3-1.0))))))-T1);
5387 lng0 = ((F0-z1)-T1);
5396 F0 = ((vgsfbeff-vch)/(2.0*nVtm));
5410 g0 = ((sqrt((0.25+(((r1*r1)*T0)*T0)))-0.5)/(r1*r1));
5413 if (((g0>g0max)||(g0<g0min)))
5431 inv_g0sq = (inv_g0*inv_g0);
5436 e1 = ((((0.5*inv_g0)+(0.5*T1))+r1)+((2*r2)*g0));
5437 e2 = ((((-0.5)*inv_g0sq)-(0.5*T2))+(2*r2));
5438 e3 = ((inv_g0*inv_g0sq)+(T2*T1));
5439 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)))));
5440 if (((g0>g0max)||(g0<g0min)))
5452 inv_g0sq = (inv_g0*inv_g0);
5457 e1 = ((((0.5*inv_g0)+(0.5*T1))+r1)+((2*r2)*g0));
5458 e2 = ((((-0.5)*inv_g0sq)-(0.5*T2))+(2*r2));
5459 e3 = ((inv_g0*inv_g0sq)+(T2*T1));
5460 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)))));
5461 if (((g0>g0max)||(g0<g0min)))
5474 vpolyd = ((((2*nVtm)*r2)*g0d)*g0d);
5475 phid = ((vgsfbeff-(((2*nVtm)*r1)*g0d))-vpolyd);
5483 T0 = (sqrt((1+((vgsfbeff-phid)/vpoly0)))-1);
5484 vpolyd = ((vpoly0*T0)*T0);
5492 qid = ((vgsfbeff-phid)-vpolyd);
5496 qid = (((vgsfbeff-phid)-qbs)-vpolyd);
5499 qia = (0.5*(qis+qid));
5501 T0 = (pow(Vdseff,2.0)/6.25e-4);
5508 qia2 = (0.5*(qis+qid));
5510 if (((QMTCENIV_i>0.0)||(QMTCENCV_i>0.0)))
5523 Weff = (Weff0-((4.0*QMTCENIV_i)*Tcen));
5524 WeffCV = (WeffCV0-((4.0*QMTCENCV_i)*Tcen));
5529 Weff = (Weff0-((8.0*QMTCENIV_i)*Tcen));
5530 WeffCV = (WeffCV0-((8.0*QMTCENCV_i)*Tcen));
5535 Weff = (Weff0-(((2.0*3.14159265358979323846)*QMTCENIV_i)*Tcen));
5536 WeffCV = (WeffCV0-(((2.0*3.14159265358979323846)*QMTCENCV_i)*Tcen));
5570 beta = (((u0*cox)*Weff)/Leff);
5571 Eeffm = (EeffFactor*(qba+(eta_mu*qia2)));
5572 T2 = pow((0.5*(1.0+fabs((qia2/qb0)))),UCS_t);
5575 T3 = (((UA_t+(UC_t*veseff))*pow(fabs(Eeffm),EU_i))+(UD_t/T2));
5579 T3 = ((UA_t*pow(fabs(Eeffm),EU_i))+(UD_t/T2));
5584 Eeffm_cv = (EeffFactor*(qba+(eta_mu_cv*qia2)));
5585 T3 = ((UA_t*pow(fabs(Eeffm_cv),EU_i))+(UD_t/T2));
5588 tmp = (((DROUT_i*Leff)/scl)+1.0e-6);
5591 DIBLfactor = (((0.5*PDIBL1_a)/(cosh(tmp)-1.0))+PDIBL2_i);
5595 DIBLfactor = ((PDIBL1_a*exp((-tmp)))+PDIBL2_i);
5599 PVAGfactor = (1.0+((PVAG_i*qia)/EsatL));
5603 PVAGfactor = (1.0/(1.0-((PVAG_i*qia)/EsatL)));
5609 diffVds = (vds-Vdseff);
5610 Vgst2Vtm = (qia+(2.0*Vtm));
5614 T3 = (T1/(Vdsat+T1));
5615 VaDIBL = (((T1/DIBLfactor)*T3)*PVAGfactor);
5616 Moc = (1.0+(diffVds/VaDIBL));
5626 T1 = (1.0/((1.0/PCLM_i)-(PCLMG_i*qia)));
5630 T1 = (PCLM_i+(PCLMG_i*qia));
5639 Esat1 = ((2.0*VSAT1_a)/ueff);
5640 Esat1L = (Esat1*Leff);
5644 Dvsat = (Dvsat+((((0.5*PTWG_a)*qia)*dqi)*dqi));
5645 T0 = (A1_t+(A2_t/(qia+(2.0*nVtm))));
5646 T1 = ((T0*dqi)*dqi);
5647 T2 = ((T1+1.0)-0.001);
5648 T3 = ((-1.0)+(0.5*(T2+sqrt(((T2*T2)+0.004)))));
5649 Nsat = (0.5*(1.0+sqrt((1.0+T3))));
5650 Dvsat = (Dvsat*Nsat);
5653 T1 = (K0_t/((K0SI_t*qia)+(2.0*nVtm)));
5663 T1 = (T0/((K1SI_t*qia)+(2.0*nVtm)));
5664 T3 = (sqrt((PHIBE_i-veseff))-sqrt(PHIBE_i));
5671 EsatCV = (((2.0*VSATCV_t)*Dmob_cv)/u0);
5672 EsatCVL = (EsatCV*LeffCV);
5690 qb = ((((((-1.60219e-19)*nbody)*3.14159265358979323846)*R)*R)*LeffCV);
5694 T0 = ((2.0*csi)/cox);
5699 T3 = ((((4.0*r2)*(((T1*T1)+(T1*T2))+(T2*T2)))/3.0)+(T0*(T1+T2)));
5705 T6 = ((g0s*g0s)-(g0d*g0d));
5706 ids0 = ((((2.0*T0)*nVtm)*nVtm)*(((T3+2.0)*(T1-T2))-T6));
5707 ids0_ov_dqi = ((0.5*nVtm)*(T3+1.0));
5712 T2 = (vgs_noswap-vfbsd);
5713 T3 = sqrt(((T2*T2)+1.0e-1));
5714 vgs_eff = (0.5*(T2+T3));
5715 T4 = (1.0+(PRWGS_i*vgs_eff));
5717 T0 = (0.5*(T1+sqrt(((T1*T1)+0.01))));
5719 Rsource = (rdstemp*(RSourceGeo+((RSWMIN_i+(T5*T0))*WeffWRFactor)));
5720 T2 = (vgd_noswap-vfbsd);
5721 T3 = sqrt(((T2*T2)+1.0e-1));
5722 vgd_eff = (0.5*(T2+T3));
5723 T4 = (1.0+(PRWGD_i*vgd_eff));
5725 T0 = (0.5*(T1+sqrt(((T1*T1)+0.01))));
5727 Rdrain = (rdstemp*(RDrainGeo+((RDWMIN_i+(T5*T0))*WeffWRFactor)));
5731 Rsource = RSourceGeo;
5733 T4 = (1.0+(PRWGS_i*qia));
5735 T0 = (0.5*(T1+sqrt(((T1*T1)+0.01))));
5736 Rdsi = ((rdstemp*(RDSWMIN_i+(RDSW_i*T0)))*WeffWRFactor);
5737 Dr = (1.0+((((NFINtotal*beta)*ids0_ov_dqi)/(Dmob*Dvsat))*Rdsi));
5739 ids = ((((((NFINtotal*beta)*ids0)*Moc)*Mob)*Mnud)/((Dmob*Dvsat)*Dr));
5743 Tcom = (((qis*qis)+(qis*qid))+(qid*qid));
5751 idscv = (((((2.0*cpoly)*Tcom)/3.0)+(kpoly*qia))+((2.0-etaiv)*nVtm));
5755 idscv = (qia+((2.0-etaiv)*nVtm));
5757 idscv = (idscv/DvsatCV);
5758 beta_cv = (((u0*coxeff)*WeffCV)/LeffCV);
5759 dqi_idscv = (dqi/idscv);
5762 T1 = (kpoly+((4.0*cpoly)*qia));
5768 qg = (qia+(((T1*dqi)*dqi_idscv)/12.0));
5771 T1 = ((15.0*kpoly)+(cpoly*((32.0*qid)+(28.0*qis))));
5772 T2 = ((((63.0*kpoly)*kpoly)+(((126.0*cpoly)*kpoly)*qia))+((cpoly*cpoly)*((256.0*Tcom)+((240.0*qis)*qid))));
5779 qd = ((0.5*qia)-((dqi*((1.0-((T1*dqi_idscv)/30.0))-(((T2*dqi_idscv)*dqi_idscv)/1260.0)))/12.0));
5780 inv_MclmCV = (1.0/MclmCV);
5781 qg = ((inv_MclmCV*qg)+((MclmCV-1.0)*qid));
5782 qd = (((inv_MclmCV*inv_MclmCV)*qd)+((0.5*(MclmCV-inv_MclmCV))*qid));
5783 T1 = ((WeffCV*LeffCV)*coxeff);
5784 qinv = ((NFINtotal*qg)*T1);
5785 qd = ((NFINtotal*qd)*T1);
5786 qg = (qinv-(NFINtotal*qb));
5788 qb = ((+NFINtotal)*qb);
5789 qs = (((-qg)-qd)-qb);
5801 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;
5805 Tcom = (((qis*qis)+(qis*qid))+(qid*qid));
5813 T0 = (((2.0*cpoly)*Tcom)/3);
5821 etaiv = (q0/(q0+(cdop*qia)));
5822 T2 = ((2.0-etaiv)*nVtm);
5823 ids0_ov_dqi = ((T0+T1)+T2);
5824 ids0 = (ids0_ov_dqi*dqi);
5829 T2 = (vgs_noswap-vfbsd);
5830 T3 = sqrt(((T2*T2)+1.0e-1));
5831 vgs_eff = (0.5*(T2+T3));
5832 T4 = (1.0+(PRWGS_i*vgs_eff));
5834 T0 = (0.5*(T1+sqrt(((T1*T1)+0.01))));
5836 Rsource = (rdstemp*(RSourceGeo+((RSWMIN_i+(T5*T0))*WeffWRFactor)));
5837 T2 = (vgd_noswap-vfbsd);
5838 T3 = sqrt(((T2*T2)+1.0e-1));
5839 vgd_eff = (0.5*(T2+T3));
5840 T4 = (1.0+(PRWGD_i*vgd_eff));
5842 T0 = (0.5*(T1+sqrt(((T1*T1)+0.01))));
5844 Rdrain = (rdstemp*(RDrainGeo+((RDWMIN_i+(T5*T0))*WeffWRFactor)));
5848 Rsource = RSourceGeo;
5850 T4 = (1.0+(PRWGS_i*qia));
5852 T0 = (0.5*(T1+sqrt(((T1*T1)+0.01))));
5853 Rdsi = ((rdstemp*(RDSWMIN_i+(RDSW_i*T0)))*WeffWRFactor);
5854 Dr = (1.0+((((NFINtotal*beta)*ids0_ov_dqi)/(Dmob*Dvsat))*Rdsi));
5856 ids = ((((((NFINtotal*beta)*ids0)*Moc)*Mob)*Mnud)/((Dmob*Dvsat)*Dr));
5860 idscv = (((((2.0*cpoly)*Tcom)/3.0)+(kpoly*qia))+((2.0-etaiv)*nVtm));
5864 idscv = (qia+((2.0-etaiv)*nVtm));
5866 idscv = (idscv/DvsatCV);
5867 beta_cv = (((u0*coxeff)*WeffCV)/LeffCV);
5868 dqi_idscv = (dqi/idscv);
5871 T1 = (kpoly+((4.0*cpoly)*qia));
5877 qg = (qia+(((T1*dqi)*dqi_idscv)/12.0));
5880 T1 = ((15.0*kpoly)+(cpoly*((32.0*qid)+(28.0*qis))));
5881 T2 = ((((63.0*kpoly)*kpoly)+(((126.0*cpoly)*kpoly)*qia))+((cpoly*cpoly)*((256.0*Tcom)+((240.0*qis)*qid))));
5888 qd = ((0.5*qia)-((dqi*((1.0-((T1*dqi_idscv)/30.0))-(((T2*dqi_idscv)*dqi_idscv)/1260.0)))/12.0));
5889 inv_MclmCV = (1.0/MclmCV);
5890 qg = ((inv_MclmCV*qg)+((MclmCV-1.0)*qid));
5891 qd = (((inv_MclmCV*inv_MclmCV)*qd)+((0.5*(MclmCV-inv_MclmCV))*qid));
5892 T1 = ((WeffCV*LeffCV)*coxeff);
5893 qinv = ((NFINtotal*qg)*T1);
5894 qd = ((NFINtotal*qd)*T1);
5895 qg = (qinv-(NFINtotal*qb));
5897 qb = ((+NFINtotal)*qb);
5898 qs = (((-qg)-qd)-qb);
5908 T1 = (((NFINtotal*WeffCV0)*LeffCV_acc)*cox_acc);
5909 qg_acc = ((-qi_acc)*T1);
5910 qb_acc = ((+qi_acc)*T1);
5916 T1 = ((NFINtotal*WeffCV)*devsign);
5918 T0 = ((T2-vfbsd)+0.02);
5919 vgs_overlap = (0.5*(T0-sqrt(((T0*T0)+(4.0*0.02)))));
5920 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)));
5922 T0 = ((T2-vfbsd)+0.02);
5923 vgd_overlap = (0.5*(T0-sqrt(((T0*T0)+(4.0*0.02)))));
5924 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)));
5928 T1 = (NFINtotal*WeffCV0);
5931 qgs_parasitic = (qgs_ov+qgs_fr);
5932 qgd_parasitic = (qgd_ov+qgd_fr);
5940 T0 = (NFINtotal*WeffCV0);
5941 COVS_i = (T0*COVS_i);
5942 COVD_i = (T0*COVD_i);
5953 qgs_parasitic = qgs_ov;
5954 qgd_parasitic = qgd_ov;
5962 qgs_parasitic = (qgs_ov+qgs_fr);
5963 qgd_parasitic = (qgd_ov+qgd_fr);
5970 T0 = ((ALPHA0_t+(ALPHA1_t*Leff))/Leff);
5971 if (((T0<=0.0)||(BETA0_t<=0.0)))
5977 T1 = ((-BETA0_t)/(diffVds+1.0e-30));
5985 ALPHAII = ((ALPHAII0_t+(ALPHAII1_t*Leff))/Leff);
5992 T0 = (ESATII_i*Leff);
5993 T1 = ((SII0_t*T0)/(1.0+T0));
5997 T3 = (1.0/(1.0+(SIID_i*vds)));
5998 VgsStep = ((T1*T2)*T3);
5999 Vdsatii = (VgsStep*(1.0-(LII_i/Leff)));
6000 Vdiff = (vds-Vdsatii);
6001 T0 = ((BETAII2_i+(BETAII1_i*Vdiff))+((BETAII0_i*Vdiff)*Vdiff));
6002 T1 = sqrt(((T0*T0)+1.0E-10));
6004 Ratio = (10.0-(0.5*(T2+sqrt(((T2*T2)+((4.0*10.0)*0.01))))));
6017 T1 = (((qia-EIGBINV_i)/NIGBINV_i)/Vtm);
6019 T2 = (AIGBINV_t-(BIGBINV_i*qia));
6020 T3 = (1+(CIGBINV_i*qia));
6021 T4 = ((((-9.82222e11)*(
model_.
TOXG))*T2)*T3);
6024 igbinv = ((((((Weff0*Leff)*T6)*Toxratio)*vge)*Vaux_Igbinv)*T5);
6025 igbinv = (igbinv*igtemp);
6026 vfbzb = ((deltaPhi-(Eg/2.0))-phib);
6028 T1 = ((T0/NIGBACC_i)/Vtm);
6038 Voxacc = (0.5*((T0-0.02)+sqrt((((T0-0.02)*(T0-0.02))-(0.08*vfbzb)))));
6042 Voxacc = (0.5*((T0-0.02)+sqrt((((T0-0.02)*(T0-0.02))+(0.08*vfbzb)))));
6045 T2 = (AIGBACC_t-(BIGBACC_i*Voxacc));
6046 T3 = (1+(CIGBACC_i*Voxacc));
6047 T4 = ((((-7.45669e11)*(
model_.
TOXG))*T2)*T3);
6050 igbacc = ((((((Weff0*Leff)*T6)*Toxratio)*vge)*Vaux_Igbacc)*T5);
6051 igbacc = (igbacc*igtemp);
6055 T1 = (AIGC_t-(BIGC_i*qia));
6056 T2 = (1.0+(CIGC_i*qia));
6059 T5 = ((vge+(0.5*vdsx))+(0.5*(ves_jct+ved_jct)));
6060 igc0 = ((((((Weff0*Leff)*Aechvb)*Toxratio)*T4)*T5)*igtemp);
6061 Vdseffx = (sqrt(((Vdseff*Vdseff)+0.01))-0.1);
6062 T1 = (PIGCD_i*Vdseffx);
6064 T3 = (((T1+T1_exp)-1.0)+1.0E-4);
6065 T4 = ((1.0-((T1+1.0)*T1_exp))+1.0E-4);
6066 T5 = ((T1*T1)+2.0E-4);
6067 igcd = ((igc0*T4)/T5);
6068 igcs = ((igc0*T3)/T5);
6070 vgs_eff = sqrt(((T0*T0)+1.0e-4));
6071 T1 = (AIGS_t-(BIGS_i*vgs_eff));
6072 T2 = (1.0+(CIGS_i*vgs_eff));
6073 T3 = (((((-Bechvb)*(
model_.
TOXG))*POXEDGE_i)*T1)*T2);
6077 igs = ((((igsd_mult*(
model_.
DLCIGS))*vgs_noswap)*vgs_eff)*T4);
6081 igd = ((((igsd_mult*(
model_.
DLCIGS))*vgs_noswap)*vgs_eff)*T4);
6084 vgd_eff = sqrt(((T0*T0)+1.0e-4));
6085 T1 = (AIGD_t-(BIGD_i*vgd_eff));
6086 T2 = (1.0+(CIGD_i*vgd_eff));
6087 T3 = (((((-Bechvb)*(
model_.
TOXG))*POXEDGE_i)*T1)*T2);
6091 igd = ((((igsd_mult*(
model_.
DLCIGD))*vgd_noswap)*vgd_eff)*T4);
6095 igs = ((((igsd_mult*(
model_.
DLCIGD))*vgd_noswap)*vgd_eff)*T4);
6103 if (((AGIDL_i<=0.0)||(BGIDL_t<=0.0)))
6109 T1 = ((((-vgd_noswap)-EGIDL_i)+vfbsd)/T0);
6111 T2 = (BGIDL_t/(T1+1.0E-3));
6115 T4 = (((-ved_jct)*ved_jct)*ved_jct);
6116 T4a = ((CGIDL_i+fabs(T4))+1.0E-9);
6133 if (((AGISL_i<=0.0)||(BGISL_t<=0.0)))
6139 T1 = ((((-vgs_noswap)-EGISL_i)+vfbsd)/T0);
6141 T2 = (BGISL_t/(T1+1.0E-3));
6145 T4 = (((-ves_jct)*ves_jct)*ves_jct);
6146 T4a = ((CGISL_i+fabs(T4))+1.0E-9);
6168 if ((ves_jct<VjsmRev))
6170 T0 = (ves_jct/Nvtms);
6172 T2 = (IVjsmRev+(SslpRev*(ves_jct-VjsmRev)));
6177 if ((ves_jct<=VjsmFwd))
6179 T0 = (ves_jct/Nvtms);
6186 Ies = (IVjsmFwd+(SslpFwd*(ves_jct-VjsmFwd)));
6198 T0 = (((-ves_jct)/Vtm0)/NJTS_t);
6200 Ies = (Ies-((
ASEJ*JTSS_t)*T1));
6204 T0 = (((-ves_jct)/Vtm0)/NJTS_t);
6206 Ies = (Ies-((
ASEJ*JTSS_t)*T1));
6213 T0 = (((-ves_jct)/Vtm0)/NJTSSW_t);
6215 Ies = (Ies-((
PSEJ*JTSSWS_t)*T1));
6219 T0 = (((-ves_jct)/Vtm0)/NJTSSW_t);
6221 Ies = (Ies-((
PSEJ*JTSSWS_t)*T1));
6224 if ((JTSSWGS_t>0.0))
6228 T0 = (((-ves_jct)/Vtm0)/NJTSSWG_t);
6230 Ies = (Ies-(((Weff0*NFINtotal)*JTSSWGS_t)*T1));
6234 T0 = (((-ves_jct)/Vtm0)/NJTSSWG_t);
6236 Ies = (Ies-(((Weff0*NFINtotal)*JTSSWGS_t)*T1));
6241 if ((ved_jct<VjdmRev))
6243 T0 = (ved_jct/Nvtmd);
6245 T2 = (IVjdmRev+(DslpRev*(ved_jct-VjdmRev)));
6250 if ((ved_jct<=VjdmFwd))
6252 T0 = (ved_jct/Nvtmd);
6259 Ied = (IVjdmFwd+(DslpFwd*(ved_jct-VjdmFwd)));
6271 T0 = (((-ved_jct)/Vtm0)/NJTSD_t);
6273 Ied = (Ied-((
ADEJ*JTSD_t)*T1));
6277 T0 = (((-ved_jct)/Vtm0)/NJTSD_t);
6279 Ied = (Ied-((
ADEJ*JTSD_t)*T1));
6286 T0 = (((-ved_jct)/Vtm0)/NJTSSWD_t);
6288 Ied = (Ied-((
PDEJ*JTSSWD_t)*T1));
6292 T0 = (((-ved_jct)/Vtm0)/NJTSSWD_t);
6294 Ied = (Ied-((
PDEJ*JTSSWD_t)*T1));
6297 if ((JTSSWGD_t>0.0))
6301 T0 = (((-ved_jct)/Vtm0)/NJTSSWGD_t);
6303 Ied = (Ied-(((Weff0*NFINtotal)*JTSSWGD_t)*T1));
6307 T0 = (((-ved_jct)/Vtm0)/NJTSSWGD_t);
6309 Ied = (Ied-(((Weff0*NFINtotal)*JTSSWGD_t)*T1));
6315 T1 = (ves_jct/PBS_t);
6327 sarg = (1.0/sqrt(arg));
6333 Qesj1 = (((PBS_t*Czbs)*(1.0-(arg*sarg)))/(1.0-(
model_.
MJS)));
6337 arg = (1.0-(vec/PBS_t));
6340 sarg = (1.0/sqrt(arg));
6346 Qec = (((PBS_t*Czbs)*(1.0-(arg*sarg)))/(1.0-(
model_.
MJS)));
6347 arg = (1.0-((ves_jct-vec)/pb2));
6350 sarg = (1.0/sqrt(arg));
6364 sarg = (1.0/sqrt(arg));
6370 Qesj1 = (((PBS_t*Czbs)*(1.0-(arg*sarg)))/(1.0-(
model_.
MJS)));
6379 Qesj1 = ((PBS_t*Czbs)*(T4+T5));
6390 T1 = (ves_jct/PBSWS_t);
6402 sarg = (1.0/sqrt(arg));
6408 Qesj2 = (((PBSWS_t*Czbssw)*(1.0-(arg*sarg)))/(1.0-(
model_.
MJSWS)));
6412 arg = (1.0-(vec/PBSWS_t));
6415 sarg = (1.0/sqrt(arg));
6421 Qec = (((PBSWS_t*Czbssw)*(1.0-(arg*sarg)))/(1.0-(
model_.
MJSWS)));
6422 arg = (1.0-((ves_jct-vec)/pb2));
6425 sarg = (1.0/sqrt(arg));
6439 sarg = (1.0/sqrt(arg));
6445 Qesj2 = (((PBSWS_t*Czbssw)*(1.0-(arg*sarg)))/(1.0-(
model_.
MJSWS)));
6454 Qesj2 = ((PBSWS_t*Czbssw)*(T4+T5));
6465 T1 = (ves_jct/PBSWGS_t);
6477 sarg = (1.0/sqrt(arg));
6483 Qesj3 = (((PBSWGS_t*Czbsswg)*(1.0-(arg*sarg)))/(1.0-(
model_.
MJSWGS)));
6487 arg = (1.0-(vec/PBSWGS_t));
6490 sarg = (1.0/sqrt(arg));
6496 Qec = (((PBSWGS_t*Czbsswg)*(1.0-(arg*sarg)))/(1.0-(
model_.
MJSWGS)));
6497 arg = (1.0-((ves_jct-vec)/pb2));
6500 sarg = (1.0/sqrt(arg));
6514 sarg = (1.0/sqrt(arg));
6520 Qesj3 = (((PBSWGS_t*Czbsswg)*(1.0-(arg*sarg)))/(1.0-(
model_.
MJSWGS)));
6529 Qesj3 = ((PBSWGS_t*Czbsswg)*(T4+T5));
6537 Qesj = ((Qesj1+Qesj2)+Qesj3);
6541 T1 = (ved_jct/PBD_t);
6553 sarg = (1.0/sqrt(arg));
6559 Qedj1 = (((PBD_t*Czbd)*(1.0-(arg*sarg)))/(1.0-(
model_.
MJD)));
6563 arg = (1.0-(vec/PBD_t));
6566 sarg = (1.0/sqrt(arg));
6572 Qec = (((PBD_t*Czbd)*(1.0-(arg*sarg)))/(1.0-(
model_.
MJD)));
6573 arg = (1.0-((ved_jct-vec)/pb2));
6576 sarg = (1.0/sqrt(arg));
6590 sarg = (1.0/sqrt(arg));
6596 Qedj1 = (((PBD_t*Czbd)*(1.0-(arg*sarg)))/(1.0-(
model_.
MJD)));
6605 Qedj1 = ((PBD_t*Czbd)*(T4+T5));
6616 T1 = (ved_jct/PBSWD_t);
6628 sarg = (1.0/sqrt(arg));
6634 Qedj2 = (((PBSWD_t*Czbdsw)*(1.0-(arg*sarg)))/(1.0-(
model_.
MJSWD)));
6638 arg = (1.0-(vec/PBSWD_t));
6641 sarg = (1.0/sqrt(arg));
6647 Qec = (((PBSWD_t*Czbdsw)*(1.0-(arg*sarg)))/(1.0-(
model_.
MJSWD)));
6648 arg = (1.0-((ved_jct-vec)/pb2));
6651 sarg = (1.0/sqrt(arg));
6665 sarg = (1.0/sqrt(arg));
6671 Qedj2 = (((PBSWD_t*Czbdsw)*(1.0-(arg*sarg)))/(1.0-(
model_.
MJSWD)));
6680 Qedj2 = ((PBSWD_t*Czbdsw)*(T4+T5));
6691 T1 = (ved_jct/PBSWGD_t);
6703 sarg = (1.0/sqrt(arg));
6709 Qedj3 = (((PBSWGD_t*Czbdswg)*(1.0-(arg*sarg)))/(1.0-(
model_.
MJSWGD)));
6713 arg = (1.0-(vec/PBSWGD_t));
6716 sarg = (1.0/sqrt(arg));
6722 Qec = (((PBSWGD_t*Czbdswg)*(1.0-(arg*sarg)))/(1.0-(
model_.
MJSWGD)));
6723 arg = (1.0-((ved_jct-vec)/pb2));
6726 sarg = (1.0/sqrt(arg));
6740 sarg = (1.0/sqrt(arg));
6746 Qedj3 = (((PBSWGD_t*Czbdswg)*(1.0-(arg*sarg)))/(1.0-(
model_.
MJSWGD)));
6755 Qedj3 = ((PBSWGD_t*Czbdswg)*(T4+T5));
6763 Qedj = ((Qedj1+Qedj2)+Qedj3);
6765 Qes = (Qesj+(csbox*ves_jct));
6766 Qed = (Qedj+(cdbox*ved_jct));
6773 vge_overlap = (0.5*(T0+sqrt(((T0*T0)+(4.0*0.02)))));
6774 Qeg = (Qeg-((NFINtotal*LeffCV)*(CGBL_i*((T3-vge_overlap)+((0.5*CKAPPAB_i)*(sqrt((1.0+((4.0*vge_overlap)/CKAPPAB_i)))-1.0))))));
6777 T1 = (T0*(AIGEN_i+((BIGEN_i*T0)*T0)));
6778 idsgen = (((((
model_.
HFIN)*
TFIN)*(Leff-(2.0*LINTIGEN_i)))*igentemp)*T1);
6779 IdovVds = (((beta*ids0_ov_dqi)*Moc)/((Dmob*Dvsat)*Dr));
6780 T0 = (((ueff*coxeff)*Weff)/Leff);
6781 igidl = (NFINtotal*igidl);
6782 igisl = (NFINtotal*igisl);
6783 igcd = (NFINtotal*igcd);
6784 igcs = (NFINtotal*igcs);
6785 igs = (NFINtotal*igs);
6786 igd = (NFINtotal*igd);
6787 igbinv = (NFINtotal*igbinv);
6788 igbacc = (NFINtotal*igbacc);
6789 idsgen = (NFINtotal*idsgen);
6790 Iii = (NFINtotal*Iii);
6795 igbs = ((igbinv+igbacc)*wf);
6796 igbd = ((igbinv+igbacc)*wr);
6798 Esatnoi = ((2.0*VSAT_t)/ueff);
6801 Leffnoi = (Leff-(2.0*LINTNOI_i));
6802 Leffnoisq = (Leffnoi*Leffnoi);
6809 T0 = (((diffVds/litl)+(
model_.
EM))/Esatnoi);
6816 T1 = (((((1.60219e-19*1.60219e-19)*1.60219e-19)*Vtm)*fabs(ids))*ueff);
6817 T2 = ((1.0e10*coxeff)*Leffnoisq);
6818 N0 = ((coxeff*qis)/1.60219e-19);
6819 Nl = ((coxeff*qid)/1.60219e-19);
6820 Nstar = ((Vtm/1.60219e-19)*(coxeff+CIT_i));
6823 T5 = ((0.5*(
model_.
NOIC))*((N0*N0)-(Nl*Nl)));
6824 T6 = (((1.60219e-19*Vtm)*ids)*ids);
6825 T7 = (((1.0e10*Leffnoisq)*Weff)*NFINtotal);
6827 T9 = ((Nl+Nstar)*(Nl+Nstar));
6828 Ssi = (((T1/T2)*((T3+T4)+T5))+((((T6/T7)*DelClm)*T8)/T9));
6830 T11 = (((((Weff*NFINtotal)*Leffnoi)*1.0e10)*Nstar)*Nstar);
6831 Swi = (((T10/T11)*ids)*ids);
6835 FNPowerAt1Hz = ((Ssi*Swi)/T1);
6847 T1 = ((T0*Rdsi)+(Leff*Leff));
6848 Gtnoi = ((T0/T1)*NTNOI_i);
6849 sid = (((4*Vtm)*1.60219e-19)*Gtnoi);
6858 std::cerr <<
"uninitialized" << std::endl;
7036 #ifdef Xyce_DEBUG_DEVICE
7039 Xyce::dout() <<
" probeVars[admsProbeID_V_s_si] = "
7041 Xyce::dout() <<
" probeVars[admsProbeID_V_d_di] = "
7043 Xyce::dout() <<
" probeVars[admsProbeID_V_e_g] = "
7045 Xyce::dout() <<
" probeVars[admsProbeID_V_d_s] = "
7047 Xyce::dout() <<
" probeVars[admsProbeID_V_g_d] = "
7049 Xyce::dout() <<
" probeVars[admsProbeID_V_g_s] = "
7051 Xyce::dout() <<
" probeVars[admsProbeID_V_di_d] = "
7053 Xyce::dout() <<
" probeVars[admsProbeID_V_si_s] = "
7055 Xyce::dout() <<
" probeVars[admsProbeID_V_g_e] = "
7057 Xyce::dout() <<
" probeVars[admsProbeID_V_e_di] = "
7059 Xyce::dout() <<
" probeVars[admsProbeID_V_e_si] = "
7061 Xyce::dout() <<
" probeVars[admsProbeID_V_g_di] = "
7063 Xyce::dout() <<
" probeVars[admsProbeID_V_di_si] = "
7065 Xyce::dout() <<
" probeVars[admsProbeID_V_g_si] = "
7067 Xyce::dout() <<
" staticContributions[admsNodeID_d] = "
7083 Xyce::dout() <<
" dynamicContributions[admsNodeID_d] = "
7099 Xyce::dout() <<
" staticContributions[admsNodeID_g] = "
7115 Xyce::dout() <<
" dynamicContributions[admsNodeID_g] = "
7131 Xyce::dout() <<
" staticContributions[admsNodeID_s] = "
7147 Xyce::dout() <<
" dynamicContributions[admsNodeID_s] = "
7163 Xyce::dout() <<
" staticContributions[admsNodeID_e] = "
7179 Xyce::dout() <<
" dynamicContributions[admsNodeID_e] = "
7195 Xyce::dout() <<
" staticContributions[admsNodeID_di] = "
7211 Xyce::dout() <<
" dynamicContributions[admsNodeID_di] = "
7227 Xyce::dout() <<
" staticContributions[admsNodeID_si] = "
7243 Xyce::dout() <<
" dynamicContributions[admsNodeID_si] = "
7261 Xyce::dout() <<
"This step was limited by this device." << std::endl;
7263 #endif // Xyce_DEBUG_DEVICE
7277 bool bsuccess =
true;
7280 #ifdef Xyce_DEBUG_DEVICE
7283 Xyce::dout() << subsection_divider << std::endl;
7284 Xyce::dout() <<
"ADMSbsimcmg::Instance::loadDAEdFdx (" <<
getName() <<
"):" << std::endl;
7290 #ifdef Xyce_DEBUG_DEVICE
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
7627 bool bsuccess =
true;
7630 #ifdef Xyce_DEBUG_DEVICE
7633 Xyce::dout() << subsection_divider << std::endl;
7634 Xyce::dout() <<
"ADMSbsimcmg::Instance::loadDAEdQdx (" <<
getName() <<
"):" << std::endl;
7640 #ifdef Xyce_DEBUG_DEVICE
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
8001 if ( (!((
NF >=1))) )
8003 UserError0(*
this) <<
"ADMSbsimcmg: Parameter NF value " <<
NF <<
" out of range [ 1, (+inf) [";
8009 UserError0(*
this) <<
"ADMSbsimcmg: Parameter U0MULT value " <<
U0MULT <<
" out of range [ 0, (+inf) [";
8015 UserError0(*
this) <<
"ADMSbsimcmg: Parameter IDS0MULT value " <<
IDS0MULT <<
" out of range [ 0, (+inf) [";
8021 UserError0(*
this) <<
"ADMSbsimcmg: Parameter DEVTYPE value " <<
DEVTYPE <<
" out of range [ 0, 1 ]";
8027 UserError0(*
this) <<
"ADMSbsimcmg: Parameter BULKMOD value " <<
BULKMOD <<
" out of range [ 0, 1 ]";
8033 UserError0(*
this) <<
"ADMSbsimcmg: Parameter COREMOD value " <<
COREMOD <<
" out of range [ 0, 1 ]";
8039 UserError0(*
this) <<
"ADMSbsimcmg: Parameter GEOMOD value " <<
GEOMOD <<
" out of range [ 0, 3 ]";
8045 UserError0(*
this) <<
"ADMSbsimcmg: Parameter CGEO1SW value " <<
CGEO1SW <<
" out of range [ 0, 1 ]";
8051 UserError0(*
this) <<
"ADMSbsimcmg: Parameter RDSMOD value " <<
RDSMOD <<
" out of range [ 0, 1 ]";
8057 UserError0(*
this) <<
"ADMSbsimcmg: Parameter ASYMMOD value " <<
ASYMMOD <<
" out of range [ 0, 1 ]";
8063 UserError0(*
this) <<
"ADMSbsimcmg: Parameter IGCMOD value " <<
IGCMOD <<
" out of range [ 0, 1 ]";
8069 UserError0(*
this) <<
"ADMSbsimcmg: Parameter IGBMOD value " <<
IGBMOD <<
" out of range [ 0, 1 ]";
8075 UserError0(*
this) <<
"ADMSbsimcmg: Parameter GIDLMOD value " <<
GIDLMOD <<
" out of range [ 0, 1 ]";
8081 UserError0(*
this) <<
"ADMSbsimcmg: Parameter IIMOD value " <<
IIMOD <<
" out of range [ 0, 2 ]";
8087 UserError0(*
this) <<
"ADMSbsimcmg: Parameter NQSMOD value " <<
NQSMOD <<
" out of range [ 0, 2 ]";
8093 UserError0(*
this) <<
"ADMSbsimcmg: Parameter SHMOD value " <<
SHMOD <<
" out of range [ 0, 1 ]";
8099 UserError0(*
this) <<
"ADMSbsimcmg: Parameter RGATEMOD value " <<
RGATEMOD <<
" out of range [ 0, 1 ]";
8105 UserError0(*
this) <<
"ADMSbsimcmg: Parameter RGEOMOD value " <<
RGEOMOD <<
" out of range [ 0, 1 ]";
8111 UserError0(*
this) <<
"ADMSbsimcmg: Parameter CGEOMOD value " <<
CGEOMOD <<
" out of range [ 0, 2 ]";
8117 UserError0(*
this) <<
"ADMSbsimcmg: Parameter CAPMOD value " <<
CAPMOD <<
" out of range [ 0, 1 ]";
8121 if ( (!((
EOT >=0.1*1.0e-9))) )
8123 UserError0(*
this) <<
"ADMSbsimcmg: Parameter EOT value " <<
EOT <<
" out of range [ 0.1*1.0e-9, (+inf) [";
8127 if ( (!((
TOXP >=0.1*1.0e-9))) )
8129 UserError0(*
this) <<
"ADMSbsimcmg: Parameter TOXP value " <<
TOXP <<
" out of range [ 0.1*1.0e-9, (+inf) [";
8133 if ( (!((
EOTBOX >=1*1.0e-9))) )
8135 UserError0(*
this) <<
"ADMSbsimcmg: Parameter EOTBOX value " <<
EOTBOX <<
" out of range [ 1*1.0e-9, (+inf) [";
8139 if ( (!((
HFIN >=1*1.0e-9))) )
8141 UserError0(*
this) <<
"ADMSbsimcmg: Parameter HFIN value " <<
HFIN <<
" out of range [ 1*1.0e-9, (+inf) [";
8145 if ( (!((
FECH >=0))) )
8147 UserError0(*
this) <<
"ADMSbsimcmg: Parameter FECH value " <<
FECH <<
" out of range [ 0, (+inf) [";
8153 UserError0(*
this) <<
"ADMSbsimcmg: Parameter FECHCV value " <<
FECHCV <<
" out of range [ 0, (+inf) [";
8159 UserError0(*
this) <<
"ADMSbsimcmg: Parameter NBODY value " <<
NBODY <<
" out of range [ 1e18, 5e24 ]";
8163 if ( (!((
NBODYN1 >=(-0.08)))) )
8165 UserError0(*
this) <<
"ADMSbsimcmg: Parameter NBODYN1 value " <<
NBODYN1 <<
" out of range [ (-0.08), (+inf) [";
8169 if ( (!((
NBODYN2 >=1.0e-5))) )
8171 UserError0(*
this) <<
"ADMSbsimcmg: Parameter NBODYN2 value " <<
NBODYN2 <<
" out of range [ 1.0e-5, (+inf) [";
8175 if ( (!((
NSD >=2e25 &&
NSD <=1e27 ))) )
8177 UserError0(*
this) <<
"ADMSbsimcmg: Parameter NSD value " <<
NSD <<
" out of range [ 2e25, 1e27 ]";
8181 if ( (!((
PHIG >=0))) )
8183 UserError0(*
this) <<
"ADMSbsimcmg: Parameter PHIG value " <<
PHIG <<
" out of range [ 0, (+inf) [";
8187 if ( (!((
PHIGN1 >=(-0.08)))) )
8189 UserError0(*
this) <<
"ADMSbsimcmg: Parameter PHIGN1 value " <<
PHIGN1 <<
" out of range [ (-0.08), (+inf) [";
8193 if ( (!((
PHIGN2 >=1.0e-5))) )
8195 UserError0(*
this) <<
"ADMSbsimcmg: Parameter PHIGN2 value " <<
PHIGN2 <<
" out of range [ 1.0e-5, (+inf) [";
8201 UserError0(*
this) <<
"ADMSbsimcmg: Parameter EPSROX value " <<
EPSROX <<
" out of range [ 1, (+inf) [";
8207 UserError0(*
this) <<
"ADMSbsimcmg: Parameter EPSRSUB value " <<
EPSRSUB <<
" out of range [ 1, (+inf) [";
8211 if ( (!((
EASUB >=0))) )
8213 UserError0(*
this) <<
"ADMSbsimcmg: Parameter EASUB value " <<
EASUB <<
" out of range [ 0, (+inf) [";
8217 if ( (!((
CDSCN1 >=(-0.08)))) )
8219 UserError0(*
this) <<
"ADMSbsimcmg: Parameter CDSCN1 value " <<
CDSCN1 <<
" out of range [ (-0.08), (+inf) [";
8223 if ( (!((
CDSCN2 >=1.0e-5))) )
8225 UserError0(*
this) <<
"ADMSbsimcmg: Parameter CDSCN2 value " <<
CDSCN2 <<
" out of range [ 1.0e-5, (+inf) [";
8229 if ( (!((
CDSCDN1 >=(-0.08)))) )
8231 UserError0(*
this) <<
"ADMSbsimcmg: Parameter CDSCDN1 value " <<
CDSCDN1 <<
" out of range [ (-0.08), (+inf) [";
8235 if ( (!((
CDSCDN2 >=1.0e-5))) )
8237 UserError0(*
this) <<
"ADMSbsimcmg: Parameter CDSCDN2 value " <<
CDSCDN2 <<
" out of range [ 1.0e-5, (+inf) [";
8243 UserError0(*
this) <<
"ADMSbsimcmg: Parameter CDSCDRN1 value " <<
CDSCDRN1 <<
" out of range [ (-0.08), (+inf) [";
8249 UserError0(*
this) <<
"ADMSbsimcmg: Parameter CDSCDRN2 value " <<
CDSCDRN2 <<
" out of range [ 1.0e-5, (+inf) [";
8253 if ( (!((
ETA0N1 >=(-0.08)))) )
8255 UserError0(*
this) <<
"ADMSbsimcmg: Parameter ETA0N1 value " <<
ETA0N1 <<
" out of range [ (-0.08), (+inf) [";
8259 if ( (!((
ETA0N2 >=1.0e-5))) )
8261 UserError0(*
this) <<
"ADMSbsimcmg: Parameter ETA0N2 value " <<
ETA0N2 <<
" out of range [ 1.0e-5, (+inf) [";
8265 if ( (!((
VSATN1 >=(-0.08)))) )
8267 UserError0(*
this) <<
"ADMSbsimcmg: Parameter VSATN1 value " <<
VSATN1 <<
" out of range [ (-0.08), (+inf) [";
8271 if ( (!((
VSATN2 >=1.0e-5))) )
8273 UserError0(*
this) <<
"ADMSbsimcmg: Parameter VSATN2 value " <<
VSATN2 <<
" out of range [ 1.0e-5, (+inf) [";
8277 if ( (!((
VSAT1N1 >=(-0.08)))) )
8279 UserError0(*
this) <<
"ADMSbsimcmg: Parameter VSAT1N1 value " <<
VSAT1N1 <<
" out of range [ (-0.08), (+inf) [";
8283 if ( (!((
VSAT1N2 >=1.0e-5))) )
8285 UserError0(*
this) <<
"ADMSbsimcmg: Parameter VSAT1N2 value " <<
VSAT1N2 <<
" out of range [ 1.0e-5, (+inf) [";
8291 UserError0(*
this) <<
"ADMSbsimcmg: Parameter VSAT1RN1 value " <<
VSAT1RN1 <<
" out of range [ (-0.08), (+inf) [";
8297 UserError0(*
this) <<
"ADMSbsimcmg: Parameter VSAT1RN2 value " <<
VSAT1RN2 <<
" out of range [ 1.0e-5, (+inf) [";
8301 if ( (!((
U0N1 >=(-0.08)))) )
8303 UserError0(*
this) <<
"ADMSbsimcmg: Parameter U0N1 value " <<
U0N1 <<
" out of range [ (-0.08), (+inf) [";
8307 if ( (!((
U0N2 >=1.0e-5))) )
8309 UserError0(*
this) <<
"ADMSbsimcmg: Parameter U0N2 value " <<
U0N2 <<
" out of range [ 1.0e-5, (+inf) [";
8315 UserError0(*
this) <<
"ADMSbsimcmg: Parameter CHARGEWF value " <<
CHARGEWF <<
" out of range [ (-1), 1 ]";
8319 if ( (!((
RSDR >=0))) )
8321 UserError0(*
this) <<
"ADMSbsimcmg: Parameter RSDR value " <<
RSDR <<
" out of range [ 0, (+inf) [";
8325 if ( (!((
RSDRR >=0))) )
8327 UserError0(*
this) <<
"ADMSbsimcmg: Parameter RSDRR value " <<
RSDRR <<
" out of range [ 0, (+inf) [";
8331 if ( (!((
RDDR >=0))) )
8333 UserError0(*
this) <<
"ADMSbsimcmg: Parameter RDDR value " <<
RDDR <<
" out of range [ 0, (+inf) [";
8337 if ( (!((
RDDRR >=0))) )
8339 UserError0(*
this) <<
"ADMSbsimcmg: Parameter RDDRR value " <<
RDDRR <<
" out of range [ 0, (+inf) [";
8343 if ( (!((
RGEXT >=0))) )
8345 UserError0(*
this) <<
"ADMSbsimcmg: Parameter RGEXT value " <<
RGEXT <<
" out of range [ 0, (+inf) [";
8349 if ( (!((
RGFIN >=1.0e-3))) )
8351 UserError0(*
this) <<
"ADMSbsimcmg: Parameter RGFIN value " <<
RGFIN <<
" out of range [ 1.0e-3, (+inf) [";
8355 if ( (!((
RHOC >=1.0e-18 &&
RHOC <=1.0e-9 ))) )
8357 UserError0(*
this) <<
"ADMSbsimcmg: Parameter RHOC value " <<
RHOC <<
" out of range [ 1.0e-18, 1.0e-9 ]";
8363 UserError0(*
this) <<
"ADMSbsimcmg: Parameter RHORSD value " <<
RHORSD <<
" out of range ] 0, (+inf) [";
8369 UserError0(*
this) <<
"ADMSbsimcmg: Parameter CRATIO value " <<
CRATIO <<
" out of range [ 0, 1 ]";
8375 UserError0(*
this) <<
"ADMSbsimcmg: Parameter DELTAPRSD value " <<
DELTAPRSD <<
" out of range ] (-FPITCH), (+inf) [";
8381 UserError0(*
this) <<
"ADMSbsimcmg: Parameter SDTERM value " <<
SDTERM <<
" out of range [ 0, 1 ]";
8385 if ( (!((
LSP >0))) )
8387 UserError0(*
this) <<
"ADMSbsimcmg: Parameter LSP value " <<
LSP <<
" out of range ] 0, (+inf) [";
8393 UserError0(*
this) <<
"ADMSbsimcmg: Parameter EPSRSP value " <<
EPSRSP <<
" out of range [ 1, (+inf) [";
8397 if ( (!((
TGATE >0))) )
8399 UserError0(*
this) <<
"ADMSbsimcmg: Parameter TGATE value " <<
TGATE <<
" out of range ] 0, (+inf) [";
8403 if ( (!((
TMASK >=0))) )
8405 UserError0(*
this) <<
"ADMSbsimcmg: Parameter TMASK value " <<
TMASK <<
" out of range [ 0, (+inf) [";
8411 UserError0(*
this) <<
"ADMSbsimcmg: Parameter ASILIEND value " <<
ASILIEND <<
" out of range [ 0, (+inf) [";
8417 UserError0(*
this) <<
"ADMSbsimcmg: Parameter ARSDEND value " <<
ARSDEND <<
" out of range [ 0, (+inf) [";
8423 UserError0(*
this) <<
"ADMSbsimcmg: Parameter PRSDEND value " <<
PRSDEND <<
" out of range [ 0, (+inf) [";
8427 if ( (!((
NSDE >=1e25 &&
NSDE <=1e26 ))) )
8429 UserError0(*
this) <<
"ADMSbsimcmg: Parameter NSDE value " <<
NSDE <<
" out of range [ 1e25, 1e26 ]";
8433 if ( (!((
CGEOE >=0))) )
8435 UserError0(*
this) <<
"ADMSbsimcmg: Parameter CGEOE value " <<
CGEOE <<
" out of range [ 0, (+inf) [";
8441 UserError0(*
this) <<
"ADMSbsimcmg: Parameter TOXREF value " <<
TOXREF <<
" out of range ] 0, (+inf) [";
8445 if ( (!((
EOTACC >=0.1*1.0e-9))) )
8447 UserError0(*
this) <<
"ADMSbsimcmg: Parameter EOTACC value " <<
EOTACC <<
" out of range [ 0.1*1.0e-9, (+inf) [";
8451 if ( (!((
CFS >=0))) )
8453 UserError0(*
this) <<
"ADMSbsimcmg: Parameter CFS value " <<
CFS <<
" out of range [ 0, (+inf) [";
8457 if ( (!((
CFD >=0))) )
8459 UserError0(*
this) <<
"ADMSbsimcmg: Parameter CFD value " <<
CFD <<
" out of range [ 0, (+inf) [";
8463 if ( (!((
CGSO >=0))) )
8465 UserError0(*
this) <<
"ADMSbsimcmg: Parameter CGSO value " <<
CGSO <<
" out of range [ 0, (+inf) [";
8469 if ( (!((
CGDO >=0))) )
8471 UserError0(*
this) <<
"ADMSbsimcmg: Parameter CGDO value " <<
CGDO <<
" out of range [ 0, (+inf) [";
8475 if ( (!((
CGSL >=0))) )
8477 UserError0(*
this) <<
"ADMSbsimcmg: Parameter CGSL value " <<
CGSL <<
" out of range [ 0, (+inf) [";
8481 if ( (!((
CGDL >=0))) )
8483 UserError0(*
this) <<
"ADMSbsimcmg: Parameter CGDL value " <<
CGDL <<
" out of range [ 0, (+inf) [";
8489 UserError0(*
this) <<
"ADMSbsimcmg: Parameter CKAPPAS value " <<
CKAPPAS <<
" out of range [ 0.02, (+inf) [";
8495 UserError0(*
this) <<
"ADMSbsimcmg: Parameter CKAPPAD value " <<
CKAPPAD <<
" out of range [ 0.02, (+inf) [";
8499 if ( (!((
CGBO >=0))) )
8501 UserError0(*
this) <<
"ADMSbsimcmg: Parameter CGBO value " <<
CGBO <<
" out of range [ 0, (+inf) [";
8505 if ( (!((
CGBN >=0))) )
8507 UserError0(*
this) <<
"ADMSbsimcmg: Parameter CGBN value " <<
CGBN <<
" out of range [ 0, (+inf) [";
8511 if ( (!((
CGBL >=0))) )
8513 UserError0(*
this) <<
"ADMSbsimcmg: Parameter CGBL value " <<
CGBL <<
" out of range [ 0, (+inf) [";
8519 UserError0(*
this) <<
"ADMSbsimcmg: Parameter CKAPPAB value " <<
CKAPPAB <<
" out of range [ 0.02, (+inf) [";
8525 UserError0(*
this) <<
"ADMSbsimcmg: Parameter CSDESW value " <<
CSDESW <<
" out of range [ 0, (+inf) [";
8529 if ( (!((
SJS >=0))) )
8531 UserError0(*
this) <<
"ADMSbsimcmg: Parameter SJS value " <<
SJS <<
" out of range [ 0, (+inf) [";
8535 if ( (!((
SJD >=0))) )
8537 UserError0(*
this) <<
"ADMSbsimcmg: Parameter SJD value " <<
SJD <<
" out of range [ 0, (+inf) [";
8541 if ( (!((
SJSWS >=0))) )
8543 UserError0(*
this) <<
"ADMSbsimcmg: Parameter SJSWS value " <<
SJSWS <<
" out of range [ 0, (+inf) [";
8547 if ( (!((
SJSWD >=0))) )
8549 UserError0(*
this) <<
"ADMSbsimcmg: Parameter SJSWD value " <<
SJSWD <<
" out of range [ 0, (+inf) [";
8555 UserError0(*
this) <<
"ADMSbsimcmg: Parameter SJSWGS value " <<
SJSWGS <<
" out of range [ 0, (+inf) [";
8561 UserError0(*
this) <<
"ADMSbsimcmg: Parameter SJSWGD value " <<
SJSWGD <<
" out of range [ 0, (+inf) [";
8565 if ( (!((
NSEG >=4 &&
NSEG <=10 ))) )
8567 UserError0(*
this) <<
"ADMSbsimcmg: Parameter NSEG value " <<
NSEG <<
" out of range [ 4, 10 ]";
8571 if ( (!((
NTNOI >=0))) )
8573 UserError0(*
this) <<
"ADMSbsimcmg: Parameter NTNOI value " <<
NTNOI <<
" out of range [ 0, (+inf) [";
8577 if ( (!((
TNOM >=(-273.15)))) )
8579 UserError0(*
this) <<
"ADMSbsimcmg: Parameter TNOM value " <<
TNOM <<
" out of range [ (-273.15), (+inf) [";
8583 if ( (!((
RTH0 >=0))) )
8585 UserError0(*
this) <<
"ADMSbsimcmg: Parameter RTH0 value " <<
RTH0 <<
" out of range [ 0, (+inf) [";
8589 if ( (!((
CTH0 >=0))) )
8591 UserError0(*
this) <<
"ADMSbsimcmg: Parameter CTH0 value " <<
CTH0 <<
" out of range [ 0, (+inf) [";
8595 if ( (!((
WTH0 >=0))) )
8597 UserError0(*
this) <<
"ADMSbsimcmg: Parameter WTH0 value " <<
WTH0 <<
" out of range [ 0, (+inf) [";
8618 std::vector<Instance*>::iterator iter;
8622 for (iter=first; iter!=last; ++iter)
8624 (*iter)->processParams();
8642 :
DeviceModel(model_block, configuration.getModelParameters(), factory_block),
8906 AGISL(6.055*1.0e-12),
9536 if (!
given(
"CDSCDR"))
9540 if (!
given(
"CDSCDRN1"))
9544 if (!
given(
"CDSCDRN2"))
9548 if (!
given(
"DVT1SS"))
9552 if (!
given(
"ETA0R"))
9556 if (!
given(
"TETA0R"))
9564 if (!
given(
"K1SI1"))
9568 if (!
given(
"VSAT1"))
9572 if (!
given(
"VSAT1N1"))
9576 if (!
given(
"VSAT1N2"))
9580 if (!
given(
"VSAT1R"))
9584 if (!
given(
"VSAT1RN1"))
9588 if (!
given(
"VSAT1RN2"))
9592 if (!
given(
"AVSAT1"))
9596 if (!
given(
"BVSAT1"))
9600 if (!
given(
"VSATCV"))
9604 if (!
given(
"AVSATCV"))
9608 if (!
given(
"BVSATCV"))
9612 if (!
given(
"DELTAVSATCV"))
9616 if (!
given(
"PSATCV"))
9620 if (!
given(
"APSATCV"))
9624 if (!
given(
"BPSATCV"))
9628 if (!
given(
"MEXPR"))
9632 if (!
given(
"AMEXPR"))
9636 if (!
given(
"BMEXPR"))
9640 if (!
given(
"PTWGR"))
9644 if (!
given(
"TMEXPR"))
9648 if (!
given(
"RSDRR"))
9656 if (!
given(
"RDDRR"))
9660 if (!
given(
"PRDDR"))
9664 if (!
given(
"PRWGD"))
9668 if (!
given(
"TRDDR"))
9672 if (!
given(
"PDIBL1R"))
9676 if (!
given(
"PCLMCV"))
9688 if (!
given(
"DLCIGD"))
9696 if (!
given(
"AIGD1"))
9712 if (!
given(
"AGIDL"))
9716 if (!
given(
"BGIDL"))
9720 if (!
given(
"CGIDL"))
9724 if (!
given(
"EGIDL"))
9728 if (!
given(
"PGIDL"))
9732 if (!
given(
"EOTACC"))
9748 if (!
given(
"CKAPPAD"))
9756 if (!
given(
"CJSWD"))
9760 if (!
given(
"CJSWGD"))
9768 if (!
given(
"PBSWD"))
9772 if (!
given(
"PBSWGS"))
9776 if (!
given(
"PBSWGD"))
9784 if (!
given(
"MJSWD"))
9788 if (!
given(
"MJSWGS"))
9792 if (!
given(
"MJSWGD"))
9800 if (!
given(
"SJSWD"))
9804 if (!
given(
"SJSWGD"))
9812 if (!
given(
"MJSWD2"))
9816 if (!
given(
"MJSWGS2"))
9820 if (!
given(
"MJSWGD2"))
9832 if (!
given(
"JSWGD"))
9840 if (!
given(
"IJTHDFWD"))
9844 if (!
given(
"IJTHDREV"))
9852 if (!
given(
"XJBVD"))
9860 if (!
given(
"JTSSWD"))
9864 if (!
given(
"JTSSWGD"))
9868 if (!
given(
"NJTSD"))
9872 if (!
given(
"NJTSSWD"))
9876 if (!
given(
"NJTSSWGD"))
9884 if (!
given(
"VTSSWD"))
9888 if (!
given(
"VTSSWGD"))
9900 if (!
given(
"XTSSWD"))
9904 if (!
given(
"XTSSWGD"))
9908 if (!
given(
"TNJTSD"))
9912 if (!
given(
"TNJTSSWD"))
9916 if (!
given(
"TNJTSSWGD"))
9920 if (!
given(
"LCDSCDR"))
9924 if (!
given(
"NCDSCDR"))
9928 if (!
given(
"PCDSCDR"))
9932 if (!
given(
"LETA0R"))
9936 if (!
given(
"NETA0R"))
9940 if (!
given(
"PETA0R"))
9944 if (!
given(
"LVSAT1"))
9948 if (!
given(
"NVSAT1"))
9952 if (!
given(
"PVSAT1"))
9956 if (!
given(
"LVSAT1R"))
9960 if (!
given(
"NVSAT1R"))
9964 if (!
given(
"PVSAT1R"))
9968 if (!
given(
"LPTWGR"))
9972 if (!
given(
"NPTWGR"))
9976 if (!
given(
"PPTWGR"))
9980 if (!
given(
"LPDIBL1R"))
9984 if (!
given(
"NPDIBL1R"))
9988 if (!
given(
"PPDIBL1R"))
9992 if (!
given(
"LAIGD"))
9996 if (!
given(
"NAIGD"))
10000 if (!
given(
"PAIGD"))
10004 if (!
given(
"LAIGD1"))
10008 if (!
given(
"NAIGD1"))
10012 if (!
given(
"PAIGD1"))
10016 if (!
given(
"LBIGD"))
10020 if (!
given(
"NBIGD"))
10024 if (!
given(
"PBIGD"))
10028 if (!
given(
"LCIGD"))
10032 if (!
given(
"NCIGD"))
10036 if (!
given(
"PCIGD"))
10040 if (!
given(
"LAGIDL"))
10044 if (!
given(
"NAGIDL"))
10048 if (!
given(
"PAGIDL"))
10052 if (!
given(
"LBGIDL"))
10056 if (!
given(
"NBGIDL"))
10060 if (!
given(
"PBGIDL"))
10064 if (!
given(
"LCGIDL"))
10068 if (!
given(
"NCGIDL"))
10072 if (!
given(
"PCGIDL"))
10076 if (!
given(
"LEGIDL"))
10080 if (!
given(
"NEGIDL"))
10084 if (!
given(
"PEGIDL"))
10088 if (!
given(
"LPGIDL"))
10092 if (!
given(
"NPGIDL"))
10096 if (!
given(
"PPGIDL"))
10100 if (!
given(
"LCFD"))
10104 if (!
given(
"NCFD"))
10108 if (!
given(
"PCFD"))
10112 if (!
given(
"LCOVD"))
10116 if (!
given(
"NCOVD"))
10120 if (!
given(
"PCOVD"))
10124 if (!
given(
"LCGDL"))
10128 if (!
given(
"NCGDL"))
10132 if (!
given(
"PCGDL"))
10136 if (!
given(
"LCKAPPAD"))
10140 if (!
given(
"NCKAPPAD"))
10144 if (!
given(
"PCKAPPAD"))
10150 if (!
given(
"XYCEADMSMODTEMP"))
10177 std::vector<Instance*>::iterator iterI;
10182 for (iterI = firstI; iterI != lastI; ++iterI)
10198 std::vector<Instance*>::const_iterator iter;
10204 os <<
" name model name Parameters" << std::endl;
10205 for (i=0, iter=first; iter!=last; ++iter, ++i)
10207 os <<
" " << i <<
": " << (*iter)->getName() <<
" ";
10211 os <<
"L = " << (*iter)->L << std::endl;
10212 os <<
"D = " << (*iter)->D << std::endl;
10213 os <<
"TFIN = " << (*iter)->TFIN << std::endl;
10214 os <<
"FPITCH = " << (*iter)->FPITCH << std::endl;
10215 os <<
"NFIN = " << (*iter)->NFIN << std::endl;
10216 os <<
"NGCON = " << (*iter)->NGCON << std::endl;
10217 os <<
"ASEO = " << (*iter)->ASEO << std::endl;
10218 os <<
"ADEO = " << (*iter)->ADEO << std::endl;
10219 os <<
"PSEO = " << (*iter)->PSEO << std::endl;
10220 os <<
"PDEO = " << (*iter)->PDEO << std::endl;
10221 os <<
"ASEJ = " << (*iter)->ASEJ << std::endl;
10222 os <<
"ADEJ = " << (*iter)->ADEJ << std::endl;
10223 os <<
"PSEJ = " << (*iter)->PSEJ << std::endl;
10224 os <<
"PDEJ = " << (*iter)->PDEJ << std::endl;
10225 os <<
"COVS = " << (*iter)->COVS << std::endl;
10226 os <<
"COVD = " << (*iter)->COVD << std::endl;
10227 os <<
"CGSP = " << (*iter)->CGSP << std::endl;
10228 os <<
"CGDP = " << (*iter)->CGDP << std::endl;
10229 os <<
"CDSP = " << (*iter)->CDSP << std::endl;
10230 os <<
"NRS = " << (*iter)->NRS << std::endl;
10231 os <<
"NRD = " << (*iter)->NRD << std::endl;
10232 os <<
"LRSD = " << (*iter)->LRSD << std::endl;
10257 for (std::vector<Instance *>::const_iterator it = instanceContainer.begin(); it != instanceContainer.end(); ++it)
10269 .registerDevice(
"m", 107)
10270 .registerModelType(
"nmos", 107)
10271 .registerModelType(
"pmos", 107);