Qucs-GUI
0.0.19
|
00001 /* 00002 * hic2_full.cpp - device implementations for hic2_full module 00003 * 00004 * This is free software; you can redistribute it and/or modify 00005 * it under the terms of the GNU General Public License as published by 00006 * the Free Software Foundation; either version 2, or (at your option) 00007 * any later version. 00008 * 00009 */ 00010 00011 #include "hic2_full.h" 00012 00013 hic2_full::hic2_full() 00014 { 00015 Description = QObject::tr ("HICUM Level 2 v2.22 verilog device"); 00016 00017 Props.append (new Property ("c10", "2.0E-30", false, 00018 QObject::tr ("GICCR constant") 00019 +" ("+QObject::tr ("A^2s")+")")); 00020 Props.append (new Property ("qp0", "2.0E-14", false, 00021 QObject::tr ("Zero-bias hole charge") 00022 +" ("+QObject::tr ("Coul")+")")); 00023 Props.append (new Property ("ich", "0.0", false, 00024 QObject::tr ("High-current correction for 2D and 3D effects") 00025 +" ("+QObject::tr ("A")+")")); 00026 Props.append (new Property ("hfe", "1.0", false, 00027 QObject::tr ("Emitter minority charge weighting factor in HBTs"))); 00028 Props.append (new Property ("hfc", "1.0", false, 00029 QObject::tr ("Collector minority charge weighting factor in HBTs"))); 00030 Props.append (new Property ("hjei", "1.0", false, 00031 QObject::tr ("B-E depletion charge weighting factor in HBTs"))); 00032 Props.append (new Property ("hjci", "1.0", false, 00033 QObject::tr ("B-C depletion charge weighting factor in HBTs"))); 00034 Props.append (new Property ("ibeis", "1.0E-18", false, 00035 QObject::tr ("Internal B-E saturation current") 00036 +" ("+QObject::tr ("A")+")")); 00037 Props.append (new Property ("mbei", "1.0", false, 00038 QObject::tr ("Internal B-E current ideality factor"))); 00039 Props.append (new Property ("ireis", "0.0", false, 00040 QObject::tr ("Internal B-E recombination saturation current") 00041 +" ("+QObject::tr ("A")+")")); 00042 Props.append (new Property ("mrei", "2.0", false, 00043 QObject::tr ("Internal B-E recombination current ideality factor"))); 00044 Props.append (new Property ("ibeps", "0.0", false, 00045 QObject::tr ("Peripheral B-E saturation current") 00046 +" ("+QObject::tr ("A")+")")); 00047 Props.append (new Property ("mbep", "1.0", false, 00048 QObject::tr ("Peripheral B-E current ideality factor"))); 00049 Props.append (new Property ("ireps", "0.0", false, 00050 QObject::tr ("Peripheral B-E recombination saturation current") 00051 +" ("+QObject::tr ("A")+")")); 00052 Props.append (new Property ("mrep", "2.0", false, 00053 QObject::tr ("Peripheral B-E recombination current ideality factor"))); 00054 Props.append (new Property ("mcf", "1.0", false, 00055 QObject::tr ("Non-ideality factor for III-V HBTs"))); 00056 Props.append (new Property ("tbhrec", "0.0", false, 00057 QObject::tr ("Base current recombination time constant at B-C barrier for high forward injection") 00058 +" ("+QObject::tr ("s")+")")); 00059 Props.append (new Property ("ibcis", "1.0E-16", false, 00060 QObject::tr ("Internal B-C saturation current") 00061 +" ("+QObject::tr ("A")+")")); 00062 Props.append (new Property ("mbci", "1.0", false, 00063 QObject::tr ("Internal B-C current ideality factor"))); 00064 Props.append (new Property ("ibcxs", "0.0", false, 00065 QObject::tr ("External B-C saturation current") 00066 +" ("+QObject::tr ("A")+")")); 00067 Props.append (new Property ("mbcx", "1.0", false, 00068 QObject::tr ("External B-C current ideality factor"))); 00069 Props.append (new Property ("ibets", "0.0", false, 00070 QObject::tr ("B-E tunneling saturation current") 00071 +" ("+QObject::tr ("A")+")")); 00072 Props.append (new Property ("abet", "40", false, 00073 QObject::tr ("Exponent factor for tunneling current"))); 00074 Props.append (new Property ("tunode", "1", false, 00075 QObject::tr ("Specifies the base node connection for the tunneling current"))); 00076 Props.append (new Property ("favl", "0.0", false, 00077 QObject::tr ("Avalanche current factor") 00078 +" ("+QObject::tr ("1/V")+")")); 00079 Props.append (new Property ("qavl", "0.0", false, 00080 QObject::tr ("Exponent factor for avalanche current") 00081 +" ("+QObject::tr ("Coul")+")")); 00082 Props.append (new Property ("alfav", "0.0", false, 00083 QObject::tr ("Relative TC for FAVL") 00084 +" ("+QObject::tr ("1/K")+")")); 00085 Props.append (new Property ("alqav", "0.0", false, 00086 QObject::tr ("Relative TC for QAVL") 00087 +" ("+QObject::tr ("1/K")+")")); 00088 Props.append (new Property ("rbi0", "0.0", false, 00089 QObject::tr ("Zero bias internal base resistance") 00090 +" ("+QObject::tr ("Ohm")+")")); 00091 Props.append (new Property ("rbx", "0.0", false, 00092 QObject::tr ("External base series resistance") 00093 +" ("+QObject::tr ("Ohm")+")")); 00094 Props.append (new Property ("fgeo", "0.6557", false, 00095 QObject::tr ("Factor for geometry dependence of emitter current crowding"))); 00096 Props.append (new Property ("fdqr0", "0.0", false, 00097 QObject::tr ("Correction factor for modulation by B-E and B-C space charge layer"))); 00098 Props.append (new Property ("fcrbi", "0.0", false, 00099 QObject::tr ("Ratio of HF shunt to total internal capacitance (lateral NQS effect)"))); 00100 Props.append (new Property ("fqi", "1.0", false, 00101 QObject::tr ("Ration of internal to total minority charge"))); 00102 Props.append (new Property ("re", "0.0", false, 00103 QObject::tr ("Emitter series resistance") 00104 +" ("+QObject::tr ("Ohm")+")")); 00105 Props.append (new Property ("rcx", "0.0", false, 00106 QObject::tr ("External collector series resistance") 00107 +" ("+QObject::tr ("Ohm")+")")); 00108 Props.append (new Property ("itss", "0.0", false, 00109 QObject::tr ("Substrate transistor transfer saturation current") 00110 +" ("+QObject::tr ("A")+")")); 00111 Props.append (new Property ("msf", "1.0", false, 00112 QObject::tr ("Forward ideality factor of substrate transfer current"))); 00113 Props.append (new Property ("iscs", "0.0", false, 00114 QObject::tr ("C-S diode saturation current") 00115 +" ("+QObject::tr ("A")+")")); 00116 Props.append (new Property ("msc", "1.0", false, 00117 QObject::tr ("Ideality factor of C-S diode current"))); 00118 Props.append (new Property ("tsf", "0.0", false, 00119 QObject::tr ("Transit time for forward operation of substrate transistor") 00120 +" ("+QObject::tr ("s")+")")); 00121 Props.append (new Property ("rsu", "0.0", false, 00122 QObject::tr ("Substrate series resistance") 00123 +" ("+QObject::tr ("Ohm")+")")); 00124 Props.append (new Property ("csu", "0.0", false, 00125 QObject::tr ("Substrate shunt capacitance") 00126 +" ("+QObject::tr ("F")+")")); 00127 Props.append (new Property ("cjei0", "1.0E-20", false, 00128 QObject::tr ("Internal B-E zero-bias depletion capacitance") 00129 +" ("+QObject::tr ("F")+")")); 00130 Props.append (new Property ("vdei", "0.9", false, 00131 QObject::tr ("Internal B-E built-in potential") 00132 +" ("+QObject::tr ("V")+")")); 00133 Props.append (new Property ("zei", "0.5", false, 00134 QObject::tr ("Internal B-E grading coefficient"))); 00135 Props.append (new Property ("ajei", "2.5", false, 00136 QObject::tr ("Ratio of maximum to zero-bias value of internal B-E capacitance"))); 00137 Props.append (new Property ("cjep0", "1.0E-20", false, 00138 QObject::tr ("Peripheral B-E zero-bias depletion capacitance") 00139 +" ("+QObject::tr ("F")+")")); 00140 Props.append (new Property ("vdep", "0.9", false, 00141 QObject::tr ("Peripheral B-E built-in potential") 00142 +" ("+QObject::tr ("V")+")")); 00143 Props.append (new Property ("zep", "0.5", false, 00144 QObject::tr ("Peripheral B-E grading coefficient"))); 00145 Props.append (new Property ("ajep", "2.5", false, 00146 QObject::tr ("Ratio of maximum to zero-bias value of peripheral B-E capacitance"))); 00147 Props.append (new Property ("cjci0", "1.0E-20", false, 00148 QObject::tr ("Internal B-C zero-bias depletion capacitance") 00149 +" ("+QObject::tr ("F")+")")); 00150 Props.append (new Property ("vdci", "0.7", false, 00151 QObject::tr ("Internal B-C built-in potential") 00152 +" ("+QObject::tr ("V")+")")); 00153 Props.append (new Property ("zci", "0.4", false, 00154 QObject::tr ("Internal B-C grading coefficient"))); 00155 Props.append (new Property ("vptci", "100", false, 00156 QObject::tr ("Internal B-C punch-through voltage") 00157 +" ("+QObject::tr ("V")+")")); 00158 Props.append (new Property ("cjcx0", "1.0E-20", false, 00159 QObject::tr ("External B-C zero-bias depletion capacitance") 00160 +" ("+QObject::tr ("F")+")")); 00161 Props.append (new Property ("vdcx", "0.7", false, 00162 QObject::tr ("External B-C built-in potential") 00163 +" ("+QObject::tr ("V")+")")); 00164 Props.append (new Property ("zcx", "0.4", false, 00165 QObject::tr ("External B-C grading coefficient"))); 00166 Props.append (new Property ("vptcx", "100", false, 00167 QObject::tr ("External B-C punch-through voltage") 00168 +" ("+QObject::tr ("V")+")")); 00169 Props.append (new Property ("fbcpar", "0.0", false, 00170 QObject::tr ("Partitioning factor of parasitic B-C cap"))); 00171 Props.append (new Property ("fbepar", "1.0", false, 00172 QObject::tr ("Partitioning factor of parasitic B-E cap"))); 00173 Props.append (new Property ("cjs0", "0.0", false, 00174 QObject::tr ("C-S zero-bias depletion capacitance") 00175 +" ("+QObject::tr ("F")+")")); 00176 Props.append (new Property ("vds", "0.6", false, 00177 QObject::tr ("C-S built-in potential") 00178 +" ("+QObject::tr ("V")+")")); 00179 Props.append (new Property ("zs", "0.5", false, 00180 QObject::tr ("C-S grading coefficient"))); 00181 Props.append (new Property ("vpts", "100", false, 00182 QObject::tr ("C-S punch-through voltage") 00183 +" ("+QObject::tr ("V")+")")); 00184 Props.append (new Property ("t0", "0.0", false, 00185 QObject::tr ("Low current forward transit time at VBC=0V") 00186 +" ("+QObject::tr ("s")+")")); 00187 Props.append (new Property ("dt0h", "0.0", false, 00188 QObject::tr ("Time constant for base and B-C space charge layer width modulation") 00189 +" ("+QObject::tr ("s")+")")); 00190 Props.append (new Property ("tbvl", "0.0", false, 00191 QObject::tr ("Time constant for modelling carrier jam at low VCE") 00192 +" ("+QObject::tr ("s")+")")); 00193 Props.append (new Property ("tef0", "0.0", false, 00194 QObject::tr ("Neutral emitter storage time") 00195 +" ("+QObject::tr ("s")+")")); 00196 Props.append (new Property ("gtfe", "1.0", false, 00197 QObject::tr ("Exponent factor for current dependence of neutral emitter storage time"))); 00198 Props.append (new Property ("thcs", "0.0", false, 00199 QObject::tr ("Saturation time constant at high current densities") 00200 +" ("+QObject::tr ("s")+")")); 00201 Props.append (new Property ("ahc", "0.1", false, 00202 QObject::tr ("Smoothing factor for current dependence of base and collector transit time"))); 00203 Props.append (new Property ("fthc", "0.0", false, 00204 QObject::tr ("Partitioning factor for base and collector portion"))); 00205 Props.append (new Property ("rci0", "150", false, 00206 QObject::tr ("Internal collector resistance at low electric field") 00207 +" ("+QObject::tr ("Ohm")+")")); 00208 Props.append (new Property ("vlim", "0.5", false, 00209 QObject::tr ("Voltage separating ohmic and saturation velocity regime") 00210 +" ("+QObject::tr ("V")+")")); 00211 Props.append (new Property ("vces", "0.1", false, 00212 QObject::tr ("Internal C-E saturation voltage") 00213 +" ("+QObject::tr ("V")+")")); 00214 Props.append (new Property ("vpt", "0.0", false, 00215 QObject::tr ("Collector punch-through voltage") 00216 +" ("+QObject::tr ("V")+")")); 00217 Props.append (new Property ("tr", "0.0", false, 00218 QObject::tr ("Storage time for inverse operation") 00219 +" ("+QObject::tr ("s")+")")); 00220 Props.append (new Property ("cbepar", "0.0", false, 00221 QObject::tr ("Total parasitic B-E capacitance") 00222 +" ("+QObject::tr ("F")+")")); 00223 Props.append (new Property ("cbcpar", "0.0", false, 00224 QObject::tr ("Total parasitic B-C capacitance") 00225 +" ("+QObject::tr ("F")+")")); 00226 Props.append (new Property ("alqf", "0.0", false, 00227 QObject::tr ("Factor for additional delay time of minority charge"))); 00228 Props.append (new Property ("alit", "0.0", false, 00229 QObject::tr ("Factor for additional delay time of transfer current"))); 00230 Props.append (new Property ("flnqs", "0", false, 00231 QObject::tr ("Flag for turning on and off of vertical NQS effect"))); 00232 Props.append (new Property ("kf", "0.0", false, 00233 QObject::tr ("Flicker noise coefficient"))); 00234 Props.append (new Property ("af", "2.0", false, 00235 QObject::tr ("Flicker noise exponent factor"))); 00236 Props.append (new Property ("cfbe", "-1", false, 00237 QObject::tr ("Flag for determining where to tag the flicker noise source"))); 00238 Props.append (new Property ("latb", "0.0", false, 00239 QObject::tr ("Scaling factor for collector minority charge in direction of emitter width"))); 00240 Props.append (new Property ("latl", "0.0", false, 00241 QObject::tr ("Scaling factor for collector minority charge in direction of emitter length"))); 00242 Props.append (new Property ("vgb", "1.17", false, 00243 QObject::tr ("Bandgap voltage extrapolated to 0 K") 00244 +" ("+QObject::tr ("V")+")")); 00245 Props.append (new Property ("alt0", "0.0", false, 00246 QObject::tr ("First order relative TC of parameter T0") 00247 +" ("+QObject::tr ("1/K")+")")); 00248 Props.append (new Property ("kt0", "0.0", false, 00249 QObject::tr ("Second order relative TC of parameter T0"))); 00250 Props.append (new Property ("zetaci", "0.0", false, 00251 QObject::tr ("Temperature exponent for RCI0"))); 00252 Props.append (new Property ("alvs", "0.0", false, 00253 QObject::tr ("Relative TC of saturation drift velocity") 00254 +" ("+QObject::tr ("1/K")+")")); 00255 Props.append (new Property ("alces", "0.0", false, 00256 QObject::tr ("Relative TC of VCES") 00257 +" ("+QObject::tr ("1/K")+")")); 00258 Props.append (new Property ("zetarbi", "0.0", false, 00259 QObject::tr ("Temperature exponent of internal base resistance"))); 00260 Props.append (new Property ("zetarbx", "0.0", false, 00261 QObject::tr ("Temperature exponent of external base resistance"))); 00262 Props.append (new Property ("zetarcx", "0.0", false, 00263 QObject::tr ("Temperature exponent of external collector resistance"))); 00264 Props.append (new Property ("zetare", "0.0", false, 00265 QObject::tr ("Temperature exponent of emitter resistance"))); 00266 Props.append (new Property ("zetacx", "1.0", false, 00267 QObject::tr ("Temperature exponent of mobility in substrate transistor transit time"))); 00268 Props.append (new Property ("vge", "1.17", false, 00269 QObject::tr ("Effective emitter bandgap voltage") 00270 +" ("+QObject::tr ("V")+")")); 00271 Props.append (new Property ("vgc", "1.17", false, 00272 QObject::tr ("Effective collector bandgap voltage") 00273 +" ("+QObject::tr ("V")+")")); 00274 Props.append (new Property ("vgs", "1.17", false, 00275 QObject::tr ("Effective substrate bandgap voltage") 00276 +" ("+QObject::tr ("V")+")")); 00277 Props.append (new Property ("f1vg", "-1.02377e-4", false, 00278 QObject::tr ("Coefficient K1 in T-dependent band-gap equation"))); 00279 Props.append (new Property ("f2vg", "4.3215e-4", false, 00280 QObject::tr ("Coefficient K2 in T-dependent band-gap equation"))); 00281 Props.append (new Property ("zetact", "3.0", false, 00282 QObject::tr ("Exponent coefficient in transfer current temperature dependence"))); 00283 Props.append (new Property ("zetabet", "3.5", false, 00284 QObject::tr ("Exponent coefficient in B-E junction current temperature dependence"))); 00285 Props.append (new Property ("alb", "0.0", false, 00286 QObject::tr ("Relative TC of forward current gain for V2.1 model") 00287 +" ("+QObject::tr ("1/K")+")")); 00288 Props.append (new Property ("flsh", "0", false, 00289 QObject::tr ("Flag for turning on and off self-heating effect"))); 00290 Props.append (new Property ("rth", "0.0", false, 00291 QObject::tr ("Thermal resistance") 00292 +" ("+QObject::tr ("K/W")+")")); 00293 Props.append (new Property ("cth", "0.0", false, 00294 QObject::tr ("Thermal capacitance") 00295 +" ("+QObject::tr ("J/W")+")")); 00296 Props.append (new Property ("flcomp", "0.0", false, 00297 QObject::tr ("Flag for compatibility with v2.1 model (0=v2.1)"))); 00298 Props.append (new Property ("tnom", "27.0", false, 00299 QObject::tr ("Temperature at which parameters are specified") 00300 +" ("+QObject::tr ("C")+")")); 00301 Props.append (new Property ("dt", "0.0", false, 00302 QObject::tr ("Temperature change w.r.t. chip temperature for particular transistor") 00303 +" ("+QObject::tr ("K")+")")); 00304 Props.append (new Property ("Temp", "27", false, 00305 QObject::tr ("simulation temperature"))); 00306 00307 createSymbol (); 00308 tx = x2 + 4; 00309 ty = y1 + 4; 00310 Model = "hic2_full"; 00311 Name = "T"; 00312 } 00313 00314 Component * hic2_full::newOne() 00315 { 00316 hic2_full * p = new hic2_full(); 00317 p->Props.getFirst()->Value = Props.getFirst()->Value; 00318 p->recreate(0); 00319 return p; 00320 } 00321 00322 Element * hic2_full::info(QString& Name, char * &BitmapFile, bool getNewOne) 00323 { 00324 Name = QObject::tr("HICUM L2 v2.22"); 00325 BitmapFile = (char *) "npnsub_therm"; 00326 00327 if(getNewOne) return new hic2_full(); 00328 return 0; 00329 } 00330 00331 void hic2_full::createSymbol() 00332 { 00333 // normal bipolar 00334 Lines.append(new Line(-10,-15,-10, 15,QPen(Qt::darkBlue,3))); 00335 Lines.append(new Line(-30, 0,-10, 0,QPen(Qt::darkBlue,2))); 00336 Lines.append(new Line(-10, -5, 0,-15,QPen(Qt::darkBlue,2))); 00337 Lines.append(new Line( 0,-15, 0,-30,QPen(Qt::darkBlue,2))); 00338 Lines.append(new Line(-10, 5, 0, 15,QPen(Qt::darkBlue,2))); 00339 Lines.append(new Line( 0, 15, 0, 30,QPen(Qt::darkBlue,2))); 00340 00341 // substrate node 00342 Lines.append(new Line( 9, 0, 30, 0,QPen(Qt::darkBlue,2))); 00343 Lines.append(new Line( 9, -7, 9, 7,QPen(Qt::darkBlue,3))); 00344 00345 // thermal node 00346 Lines.append(new Line(-30, 20,-20, 20,QPen(Qt::darkBlue,2))); 00347 Lines.append(new Line(-20, 17,-20, 23,QPen(Qt::darkBlue,2))); 00348 00349 // arrow 00350 Lines.append(new Line( -6, 15, 0, 15,QPen(Qt::darkBlue,2))); 00351 Lines.append(new Line( 0, 9, 0, 15,QPen(Qt::darkBlue,2))); 00352 00353 // H 00354 Lines.append(new Line(-30,-30,-30,-24,QPen(Qt::darkBlue,1))); 00355 Lines.append(new Line(-30,-27,-26,-27,QPen(Qt::darkBlue,1))); 00356 Lines.append(new Line(-26,-30,-26,-24,QPen(Qt::darkBlue,1))); 00357 // I 00358 Lines.append(new Line(-24,-30,-24,-24,QPen(Qt::darkBlue,1))); 00359 // C 00360 Lines.append(new Line(-22,-30,-22,-24,QPen(Qt::darkBlue,1))); 00361 Lines.append(new Line(-22,-30,-19,-30,QPen(Qt::darkBlue,1))); 00362 Lines.append(new Line(-22,-24,-19,-24,QPen(Qt::darkBlue,1))); 00363 // U 00364 Lines.append(new Line(-17,-30,-17,-24,QPen(Qt::darkBlue,1))); 00365 Lines.append(new Line(-14,-30,-14,-24,QPen(Qt::darkBlue,1))); 00366 Lines.append(new Line(-17,-24,-14,-24,QPen(Qt::darkBlue,1))); 00367 // M 00368 Lines.append(new Line(-12,-30,-12,-24,QPen(Qt::darkBlue,1))); 00369 Lines.append(new Line( -8,-30, -8,-24,QPen(Qt::darkBlue,1))); 00370 Lines.append(new Line(-12,-30,-10,-28,QPen(Qt::darkBlue,1))); 00371 Lines.append(new Line( -8,-30,-10,-28,QPen(Qt::darkBlue,1))); 00372 00373 // terminal definitions 00374 Ports.append(new Port( 0,-30)); // collector 00375 Ports.append(new Port(-30, 0)); // base 00376 Ports.append(new Port( 0, 30)); // emitter 00377 Ports.append(new Port( 30, 0)); // substrate 00378 Ports.append(new Port(-30, 20)); // thermal node 00379 00380 // relative boundings 00381 x1 = -30; y1 = -30; 00382 x2 = 30; y2 = 30; 00383 }