Qucs-GUI
0.0.19
|
00001 /* 00002 * hicumL0V1p3.cpp - device implementations for hicumL0V1p3 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 #include "node.h" 00011 #include "hicumL0V1p3.h" 00012 00013 hicumL0V1p3::hicumL0V1p3() 00014 { 00015 Description = QObject::tr ("HICUM Level 0 v1.3 verilog device"); 00016 00017 Props.append (new Property ("Type", "npn", true, 00018 QObject::tr ("polarity") + " [npn, pnp]")); 00019 Props.append (new Property ("is", "1.0e-16", false, 00020 QObject::tr ("(Modified) saturation current") 00021 +" ("+QObject::tr ("A")+")")); 00022 Props.append (new Property ("it_mod", "0", false, 00023 QObject::tr ("Flag for using third order solution for transfer current"))); 00024 Props.append (new Property ("mcf", "1.00", false, 00025 QObject::tr ("Non-ideality coefficient of forward collector current"))); 00026 Props.append (new Property ("mcr", "1.00", false, 00027 QObject::tr ("Non-ideality coefficient of reverse collector current"))); 00028 Props.append (new Property ("vef", "1.0e6", false, 00029 QObject::tr ("forward Early voltage (normalization volt.)") 00030 +" ("+QObject::tr ("V")+")")); 00031 Props.append (new Property ("ver", "1.0e6", false, 00032 QObject::tr ("reverse Early voltage (normalization volt.)") 00033 +" ("+QObject::tr ("V")+")")); 00034 Props.append (new Property ("aver", "0.0", false, 00035 QObject::tr ("bias dependence for reverse Early voltage"))); 00036 Props.append (new Property ("iqf", "1.0e6", false, 00037 QObject::tr ("forward d.c. high-injection roll-off current") 00038 +" ("+QObject::tr ("A")+")")); 00039 Props.append (new Property ("fiqf", "0", false, 00040 QObject::tr ("flag for turning on base related critical current"))); 00041 Props.append (new Property ("iqr", "1.0e6", false, 00042 QObject::tr ("inverse d.c. high-injection roll-off current") 00043 +" ("+QObject::tr ("A")+")")); 00044 Props.append (new Property ("iqfh", "1.0e6", false, 00045 QObject::tr ("high-injection correction current") 00046 +" ("+QObject::tr ("A")+")")); 00047 Props.append (new Property ("tfh", "0.0", false, 00048 QObject::tr ("high-injection correction factor"))); 00049 Props.append (new Property ("ahq", "0", false, 00050 QObject::tr ("Smoothing factor for the d.c. injection width"))); 00051 Props.append (new Property ("ibes", "1e-18", false, 00052 QObject::tr ("BE saturation current") 00053 +" ("+QObject::tr ("A")+")")); 00054 Props.append (new Property ("mbe", "1.0", false, 00055 QObject::tr ("BE non-ideality factor"))); 00056 Props.append (new Property ("ires", "0.0", false, 00057 QObject::tr ("BE recombination saturation current") 00058 +" ("+QObject::tr ("A")+")")); 00059 Props.append (new Property ("mre", "2.0", false, 00060 QObject::tr ("BE recombination non-ideality factor"))); 00061 Props.append (new Property ("ibcs", "0.0", false, 00062 QObject::tr ("BC saturation current") 00063 +" ("+QObject::tr ("A")+")")); 00064 Props.append (new Property ("mbc", "1.0", false, 00065 QObject::tr ("BC non-ideality factor"))); 00066 Props.append (new Property ("cje0", "1.0e-20", false, 00067 QObject::tr ("Zero-bias BE depletion capacitance") 00068 +" ("+QObject::tr ("F")+")")); 00069 Props.append (new Property ("vde", "0.9", false, 00070 QObject::tr ("BE built-in voltage") 00071 +" ("+QObject::tr ("V")+")")); 00072 Props.append (new Property ("ze", "0.5", false, 00073 QObject::tr ("BE exponent factor"))); 00074 Props.append (new Property ("aje", "2.5", false, 00075 QObject::tr ("Ratio of maximum to zero-bias value"))); 00076 Props.append (new Property ("vdedc", "0.9", false, 00077 QObject::tr ("BE charge built-in voltage for d.c. transfer current") 00078 +" ("+QObject::tr ("V")+")")); 00079 Props.append (new Property ("zedc", "0.5", false, 00080 QObject::tr ("charge BE exponent factor for d.c. transfer current"))); 00081 Props.append (new Property ("ajedc", "2.5", false, 00082 QObject::tr ("BE capacitance ratio (maximum to zero-bias value) for d.c. transfer current"))); 00083 Props.append (new Property ("t0", "0.0", false, 00084 QObject::tr ("low current transit time at Vbici=0") 00085 +" ("+QObject::tr ("s")+")")); 00086 Props.append (new Property ("dt0h", "0.0", false, 00087 QObject::tr ("Base width modulation contribution") 00088 +" ("+QObject::tr ("s")+")")); 00089 Props.append (new Property ("tbvl", "0.0", false, 00090 QObject::tr ("SCR width modulation contribution") 00091 +" ("+QObject::tr ("s")+")")); 00092 Props.append (new Property ("tef0", "0.0", false, 00093 QObject::tr ("Storage time in neutral emitter") 00094 +" ("+QObject::tr ("s")+")")); 00095 Props.append (new Property ("gte", "1.0", false, 00096 QObject::tr ("Exponent factor for emitter transit time"))); 00097 Props.append (new Property ("thcs", "0.0", false, 00098 QObject::tr ("Saturation time at high current densities") 00099 +" ("+QObject::tr ("s")+")")); 00100 Props.append (new Property ("ahc", "0.1", false, 00101 QObject::tr ("Smoothing factor for current dependence"))); 00102 Props.append (new Property ("tr", "0.0", false, 00103 QObject::tr ("Storage time at inverse operation") 00104 +" ("+QObject::tr ("s")+")")); 00105 Props.append (new Property ("rci0", "150", false, 00106 QObject::tr ("Low-field collector resistance under emitter") 00107 +" ("+QObject::tr ("Ohm")+")")); 00108 Props.append (new Property ("vlim", "0.5", false, 00109 QObject::tr ("Voltage dividing ohmic and satur.region") 00110 +" ("+QObject::tr ("V")+")")); 00111 Props.append (new Property ("vpt", "100", false, 00112 QObject::tr ("Punch-through voltage") 00113 +" ("+QObject::tr ("V")+")")); 00114 Props.append (new Property ("vces", "0.1", false, 00115 QObject::tr ("Saturation voltage") 00116 +" ("+QObject::tr ("V")+")")); 00117 Props.append (new Property ("cjci0", "1.0e-20", false, 00118 QObject::tr ("Total zero-bias BC depletion capacitance") 00119 +" ("+QObject::tr ("F")+")")); 00120 Props.append (new Property ("vdci", "0.7", false, 00121 QObject::tr ("BC built-in voltage") 00122 +" ("+QObject::tr ("V")+")")); 00123 Props.append (new Property ("zci", "0.333", false, 00124 QObject::tr ("BC exponent factor"))); 00125 Props.append (new Property ("vptci", "100", false, 00126 QObject::tr ("Punch-through voltage of BC junction") 00127 +" ("+QObject::tr ("V")+")")); 00128 Props.append (new Property ("cjcx0", "1.0e-20", false, 00129 QObject::tr ("Zero-bias external BC depletion capacitance") 00130 +" ("+QObject::tr ("F")+")")); 00131 Props.append (new Property ("vdcx", "0.7", false, 00132 QObject::tr ("External BC built-in voltage") 00133 +" ("+QObject::tr ("V")+")")); 00134 Props.append (new Property ("zcx", "0.333", false, 00135 QObject::tr ("External BC exponent factor"))); 00136 Props.append (new Property ("vptcx", "100", false, 00137 QObject::tr ("Punch-through voltage") 00138 +" ("+QObject::tr ("V")+")")); 00139 Props.append (new Property ("fbc", "1.0", false, 00140 QObject::tr ("Split factor = Cjci0/Cjc0"))); 00141 Props.append (new Property ("rbi0", "0.0", false, 00142 QObject::tr ("Internal base resistance at zero-bias") 00143 +" ("+QObject::tr ("Ohm")+")")); 00144 Props.append (new Property ("vr0e", "2.5", false, 00145 QObject::tr ("forward Early voltage (normalization volt.)") 00146 +" ("+QObject::tr ("V")+")")); 00147 Props.append (new Property ("vr0c", "1.0e6", false, 00148 QObject::tr ("forward Early voltage (normalization volt.)") 00149 +" ("+QObject::tr ("V")+")")); 00150 Props.append (new Property ("fgeo", "0.656", false, 00151 QObject::tr ("Geometry factor"))); 00152 Props.append (new Property ("rbx", "0.0", false, 00153 QObject::tr ("External base series resistance") 00154 +" ("+QObject::tr ("Ohm")+")")); 00155 Props.append (new Property ("rcx", "0.0", false, 00156 QObject::tr ("Emitter series resistance") 00157 +" ("+QObject::tr ("Ohm")+")")); 00158 Props.append (new Property ("re", "0.0", false, 00159 QObject::tr ("External collector series resistance") 00160 +" ("+QObject::tr ("Ohm")+")")); 00161 Props.append (new Property ("itss", "0.0", false, 00162 QObject::tr ("Substrate transistor transfer saturation current") 00163 +" ("+QObject::tr ("A")+")")); 00164 Props.append (new Property ("msf", "1.0", false, 00165 QObject::tr ("Substrate transistor transfer current non-ideality factor"))); 00166 Props.append (new Property ("iscs", "0.0", false, 00167 QObject::tr ("SC saturation current") 00168 +" ("+QObject::tr ("A")+")")); 00169 Props.append (new Property ("msc", "1.0", false, 00170 QObject::tr ("SC non-ideality factor"))); 00171 Props.append (new Property ("cjs0", "1.0e-20", false, 00172 QObject::tr ("Zero-bias SC depletion capacitance") 00173 +" ("+QObject::tr ("F")+")")); 00174 Props.append (new Property ("vds", "0.3", false, 00175 QObject::tr ("SC built-in voltage") 00176 +" ("+QObject::tr ("V")+")")); 00177 Props.append (new Property ("zs", "0.3", false, 00178 QObject::tr ("External SC exponent factor"))); 00179 Props.append (new Property ("vpts", "100", false, 00180 QObject::tr ("SC punch-through voltage") 00181 +" ("+QObject::tr ("V")+")")); 00182 Props.append (new Property ("cbcpar", "0.0", false, 00183 QObject::tr ("Collector-base isolation (overlap) capacitance") 00184 +" ("+QObject::tr ("F")+")")); 00185 Props.append (new Property ("cbepar", "0.0", false, 00186 QObject::tr ("Emitter-base oxide capacitance") 00187 +" ("+QObject::tr ("F")+")")); 00188 Props.append (new Property ("eavl", "0.0", false, 00189 QObject::tr ("Exponent factor"))); 00190 Props.append (new Property ("kavl", "0.0", false, 00191 QObject::tr ("Prefactor"))); 00192 Props.append (new Property ("kf", "0.0", false, 00193 QObject::tr ("flicker noise coefficient") 00194 +" ("+QObject::tr ("M^(1-AF)")+")")); 00195 Props.append (new Property ("af", "2.0", false, 00196 QObject::tr ("flicker noise exponent factor"))); 00197 Props.append (new Property ("vgb", "1.2", false, 00198 QObject::tr ("Bandgap-voltage") 00199 +" ("+QObject::tr ("V")+")")); 00200 Props.append (new Property ("vge", "1.17", false, 00201 QObject::tr ("Effective emitter bandgap-voltage") 00202 +" ("+QObject::tr ("V")+")")); 00203 Props.append (new Property ("vgc", "1.17", false, 00204 QObject::tr ("Effective collector bandgap-voltage") 00205 +" ("+QObject::tr ("V")+")")); 00206 Props.append (new Property ("vgs", "1.17", false, 00207 QObject::tr ("Effective substrate bandgap-voltage") 00208 +" ("+QObject::tr ("V")+")")); 00209 Props.append (new Property ("f1vg", "-1.02377e-4", false, 00210 QObject::tr ("Coefficient K1 in T-dependent bandgap equation") 00211 +" ("+QObject::tr ("V/K")+")")); 00212 Props.append (new Property ("f2vg", "4.3215e-4", false, 00213 QObject::tr ("Coefficient K2 in T-dependent bandgap equation") 00214 +" ("+QObject::tr ("V/K")+")")); 00215 Props.append (new Property ("alt0", "0.0", false, 00216 QObject::tr ("Frist-order TC of tf0") 00217 +" ("+QObject::tr ("1/K")+")")); 00218 Props.append (new Property ("kt0", "0.0", false, 00219 QObject::tr ("Second-order TC of tf0") 00220 +" ("+QObject::tr ("1/K^2")+")")); 00221 Props.append (new Property ("zetact", "3.0", false, 00222 QObject::tr ("Exponent coefficient in transfer current temperature dependence"))); 00223 Props.append (new Property ("zetabet", "3.5", false, 00224 QObject::tr ("Exponent coefficient in BE junction current temperature dependence"))); 00225 Props.append (new Property ("zetaci", "0.0", false, 00226 QObject::tr ("TC of epi-collector diffusivity"))); 00227 Props.append (new Property ("alvs", "0.0", false, 00228 QObject::tr ("Relative TC of satur.drift velocity") 00229 +" ("+QObject::tr ("1/K")+")")); 00230 Props.append (new Property ("alces", "0.0", false, 00231 QObject::tr ("Relative TC of vces") 00232 +" ("+QObject::tr ("1/K")+")")); 00233 Props.append (new Property ("zetarbi", "0.0", false, 00234 QObject::tr ("TC of internal base resistance"))); 00235 Props.append (new Property ("zetarbx", "0.0", false, 00236 QObject::tr ("TC of external base resistance"))); 00237 Props.append (new Property ("zetarcx", "0.0", false, 00238 QObject::tr ("TC of external collector resistance"))); 00239 Props.append (new Property ("zetare", "0.0", false, 00240 QObject::tr ("TC of emitter resistances"))); 00241 Props.append (new Property ("zetaiqf", "0.0", false, 00242 QObject::tr ("TC of iqf"))); 00243 Props.append (new Property ("alkav", "0.0", false, 00244 QObject::tr ("TC of avalanche prefactor") 00245 +" ("+QObject::tr ("1/K")+")")); 00246 Props.append (new Property ("aleav", "0.0", false, 00247 QObject::tr ("TC of avalanche exponential factor") 00248 +" ("+QObject::tr ("1/K")+")")); 00249 Props.append (new Property ("zetarth", "0.0", false, 00250 QObject::tr ("Exponent factor for temperature dependent thermal resistance"))); 00251 Props.append (new Property ("tef_temp", "1", false, 00252 QObject::tr ("Flag for turning temperature dependence of tef0 on and off"))); 00253 Props.append (new Property ("zetaver", "-1.0", false, 00254 QObject::tr ("TC of Reverse Early voltage"))); 00255 Props.append (new Property ("zetavgbe", "1.0", false, 00256 QObject::tr ("TC of AVER"))); 00257 Props.append (new Property ("dvgbe", "0.0", false, 00258 QObject::tr ("Bandgap difference between base and BE-junction"))); 00259 Props.append (new Property ("aliqfh", "0", false, 00260 QObject::tr ("Frist-order TC of iqfh") 00261 +" ("+QObject::tr ("1/K")+")")); 00262 Props.append (new Property ("kiqfh", "0", false, 00263 QObject::tr ("Second-order TC of iqfh") 00264 +" ("+QObject::tr ("1/K^2")+")")); 00265 Props.append (new Property ("flsh", "0", false, 00266 QObject::tr ("Flag for self-heating calculation"))); 00267 Props.append (new Property ("rth", "0.0", false, 00268 QObject::tr ("Thermal resistance") 00269 +" ("+QObject::tr ("K/W")+")")); 00270 Props.append (new Property ("cth", "0.0", false, 00271 QObject::tr ("Thermal capacitance") 00272 +" ("+QObject::tr ("Ws/K")+")")); 00273 Props.append (new Property ("tnom", "27", false, 00274 QObject::tr ("Temperature for which parameters are valid") 00275 +" ("+QObject::tr ("C")+")")); 00276 Props.append (new Property ("dt", "0.0", false, 00277 QObject::tr ("Temperature change for particular transistor") 00278 +" ("+QObject::tr ("K")+")")); 00279 Props.append (new Property ("Temp", "27", false, 00280 QObject::tr ("simulation temperature"))); 00281 00282 createSymbol (); 00283 tx = x2 + 4; 00284 ty = y1 + 4; 00285 Model = "hicumL0V1p3"; 00286 Name = "T"; 00287 } 00288 00289 Component * hicumL0V1p3::newOne() 00290 { 00291 hicumL0V1p3 * p = new hicumL0V1p3(); 00292 p->Props.getFirst()->Value = Props.getFirst()->Value; 00293 p->recreate(0); 00294 return p; 00295 } 00296 00297 Element * hicumL0V1p3::info(QString& Name, char * &BitmapFile, bool getNewOne) 00298 { 00299 Name = QObject::tr("npn HICUM L0 v1.3"); 00300 BitmapFile = (char *) "pnpsub_therm"; 00301 00302 if(getNewOne) return new hicumL0V1p3(); 00303 return 0; 00304 } 00305 00306 Element * hicumL0V1p3::info_pnp(QString& Name, char * &BitmapFile, bool getNewOne) 00307 { 00308 Name = QObject::tr("pnp HICUM L0 v1.3"); 00309 BitmapFile = (char *) "pnpsub_therm"; 00310 00311 if(getNewOne) 00312 { 00313 hicumL0V1p3* p = new hicumL0V1p3(); 00314 p->Props.getFirst()->Value = "pnp"; 00315 p->recreate(0); 00316 return p; 00317 } 00318 return 0; 00319 } 00320 00321 void hicumL0V1p3::createSymbol() 00322 { 00323 // normal bipolar 00324 Lines.append(new Line(-10,-15,-10, 15,QPen(Qt::darkBlue,3))); 00325 Lines.append(new Line(-30, 0,-10, 0,QPen(Qt::darkBlue,2))); 00326 Lines.append(new Line(-10, -5, 0,-15,QPen(Qt::darkBlue,2))); 00327 Lines.append(new Line( 0,-15, 0,-30,QPen(Qt::darkBlue,2))); 00328 Lines.append(new Line(-10, 5, 0, 15,QPen(Qt::darkBlue,2))); 00329 Lines.append(new Line( 0, 15, 0, 30,QPen(Qt::darkBlue,2))); 00330 00331 // substrate node 00332 Lines.append(new Line( 9, 0, 30, 0,QPen(Qt::darkBlue,2))); 00333 Lines.append(new Line( 9, -7, 9, 7,QPen(Qt::darkBlue,3))); 00334 00335 // thermal node 00336 Lines.append(new Line(-30, 20,-20, 20,QPen(Qt::darkBlue,2))); 00337 Lines.append(new Line(-20, 17,-20, 23,QPen(Qt::darkBlue,2))); 00338 00339 // arrow 00340 if(Props.getFirst()->Value == "npn") { 00341 Lines.append(new Line( -6, 15, 0, 15,QPen(Qt::darkBlue,2))); 00342 Lines.append(new Line( 0, 9, 0, 15,QPen(Qt::darkBlue,2))); 00343 } else { 00344 Lines.append(new Line( -5, 10, -5, 16,QPen(Qt::darkBlue,2))); 00345 Lines.append(new Line( -5, 10, 1, 10,QPen(Qt::darkBlue,2))); 00346 } 00347 00348 // H 00349 Lines.append(new Line(-30,-30,-30,-24,QPen(Qt::darkBlue,1))); 00350 Lines.append(new Line(-30,-27,-26,-27,QPen(Qt::darkBlue,1))); 00351 Lines.append(new Line(-26,-30,-26,-24,QPen(Qt::darkBlue,1))); 00352 // I 00353 Lines.append(new Line(-24,-30,-24,-24,QPen(Qt::darkBlue,1))); 00354 // C 00355 Lines.append(new Line(-22,-30,-22,-24,QPen(Qt::darkBlue,1))); 00356 Lines.append(new Line(-22,-30,-19,-30,QPen(Qt::darkBlue,1))); 00357 Lines.append(new Line(-22,-24,-19,-24,QPen(Qt::darkBlue,1))); 00358 // U 00359 Lines.append(new Line(-17,-30,-17,-24,QPen(Qt::darkBlue,1))); 00360 Lines.append(new Line(-14,-30,-14,-24,QPen(Qt::darkBlue,1))); 00361 Lines.append(new Line(-17,-24,-14,-24,QPen(Qt::darkBlue,1))); 00362 // M 00363 Lines.append(new Line(-12,-30,-12,-24,QPen(Qt::darkBlue,1))); 00364 Lines.append(new Line( -8,-30, -8,-24,QPen(Qt::darkBlue,1))); 00365 Lines.append(new Line(-12,-30,-10,-28,QPen(Qt::darkBlue,1))); 00366 Lines.append(new Line( -8,-30,-10,-28,QPen(Qt::darkBlue,1))); 00367 00368 // terminal definitions 00369 Ports.append(new Port( 0,-30)); // collector 00370 Ports.append(new Port(-30, 0)); // base 00371 Ports.append(new Port( 0, 30)); // emitter 00372 Ports.append(new Port( 30, 0)); // substrate 00373 Ports.append(new Port(-30, 20)); // thermal node 00374 00375 // relative boundings 00376 x1 = -30; y1 = -30; 00377 x2 = 30; y2 = 30; 00378 } 00379 00380 QString hicumL0V1p3::netlist() 00381 { 00382 QString s = "hicumL0V1p3:"+Name; 00383 00384 // output all node names 00385 foreach(Port *p1, Ports) 00386 s += " "+p1->Connection->Name; // node names 00387 00388 // output type npn/pnp property 00389 Property *p2 = Props.first(); 00390 if(p2->Value == "npn") 00391 s += " npn=\"1\""; 00392 else 00393 s += " pnp=\"1\""; 00394 00395 // output all remaining properties 00396 for(p2 = Props.next(); p2 != 0; p2 = Props.next()) 00397 s += " "+p2->Name+"=\""+p2->Value+"\""; 00398 00399 return s + '\n'; 00400 }