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