Qucs-GUI  0.0.19
/home/travis/build/Qucs/qucs/qucs/qucs/components/hicumL0V1p3.cpp
Go to the documentation of this file.
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 }
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines