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