Qucs-GUI  0.0.18
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
hicumL0V1p2g.cpp
Go to the documentation of this file.
1 /*
2  * hicumL0V1p2g.cpp - device implementations for hicumL0V1p2g module
3  *
4  * This is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation; either version 2, or (at your option)
7  * any later version.
8  *
9  */
10 #include <QtGui>
11 #include "node.h"
12 #include "hicumL0V1p2g.h"
13 
15 {
16  Description = QObject::tr ("HICUM Level 0 v1.2g verilog device");
17 
18  Props.append (new Property ("Type", "npn", true,
19  QObject::tr ("polarity") + " [npn, pnp]"));
20  Props.append (new Property ("is", "1.0e-16", false,
21  QObject::tr ("(Modified) saturation current")
22  +" ("+QObject::tr ("A")+")"));
23  Props.append (new Property ("mcf", "1.00", false,
24  QObject::tr ("Non-ideality coefficient of forward collector current")));
25  Props.append (new Property ("mcr", "1.00", false,
26  QObject::tr ("Non-ideality coefficient of reverse collector current")));
27  Props.append (new Property ("vef", "1.0e6", false,
28  QObject::tr ("forward Early voltage (normalization volt.)")
29  +" ("+QObject::tr ("V")+")"));
30  Props.append (new Property ("ver", "1.0e6", false,
31  QObject::tr ("reverse Early voltage (normalization volt.)")
32  +" ("+QObject::tr ("V")+")"));
33  Props.append (new Property ("iqf", "1.0e6", false,
34  QObject::tr ("forward d.c. high-injection roll-off current")
35  +" ("+QObject::tr ("A")+")"));
36  Props.append (new Property ("fiqf", "0", false,
37  QObject::tr ("flag for turning on base related critical current")));
38  Props.append (new Property ("iqr", "1.0e6", false,
39  QObject::tr ("inverse d.c. high-injection roll-off current")
40  +" ("+QObject::tr ("A")+")"));
41  Props.append (new Property ("iqfh", "1.0e6", false,
42  QObject::tr ("high-injection correction current")
43  +" ("+QObject::tr ("A")+")"));
44  Props.append (new Property ("iqfe", "0.0", false,
45  QObject::tr ("high-injection roll-off current")));
46  Props.append (new Property ("ahq", "0.0", false,
47  QObject::tr ("Smoothing factor for the d.c. injection width")));
48  Props.append (new Property ("ibes", "1e-18", false,
49  QObject::tr ("BE saturation current")
50  +" ("+QObject::tr ("A")+")"));
51  Props.append (new Property ("mbe", "1.0", false,
52  QObject::tr ("BE non-ideality factor")));
53  Props.append (new Property ("ires", "0.0", false,
54  QObject::tr ("BE recombination saturation current")
55  +" ("+QObject::tr ("A")+")"));
56  Props.append (new Property ("mre", "2.0", false,
57  QObject::tr ("BE recombination non-ideality factor")));
58  Props.append (new Property ("ibcs", "0.0", false,
59  QObject::tr ("BC saturation current")
60  +" ("+QObject::tr ("A")+")"));
61  Props.append (new Property ("mbc", "1.0", false,
62  QObject::tr ("BC non-ideality factor")));
63  Props.append (new Property ("cje0", "1.0e-20", false,
64  QObject::tr ("Zero-bias BE depletion capacitance")
65  +" ("+QObject::tr ("F")+")"));
66  Props.append (new Property ("vde", "0.9", false,
67  QObject::tr ("BE built-in voltage")
68  +" ("+QObject::tr ("V")+")"));
69  Props.append (new Property ("ze", "0.5", false,
70  QObject::tr ("BE exponent factor")));
71  Props.append (new Property ("aje", "2.5", false,
72  QObject::tr ("Ratio of maximum to zero-bias value")));
73  Props.append (new Property ("vdedc", "0.9", false,
74  QObject::tr ("BE charge built-in voltage for d.c. transfer current")
75  +" ("+QObject::tr ("V")+")"));
76  Props.append (new Property ("zedc", "0.5", false,
77  QObject::tr ("charge BE exponent factor for d.c. transfer current")));
78  Props.append (new Property ("ajedc", "2.5", false,
79  QObject::tr ("BE capacitance ratio (maximum to zero-bias value) for d.c. transfer current")));
80  Props.append (new Property ("t0", "0.0", false,
81  QObject::tr ("low current transit time at Vbici=0")
82  +" ("+QObject::tr ("s")+")"));
83  Props.append (new Property ("dt0h", "0.0", false,
84  QObject::tr ("Base width modulation contribution")
85  +" ("+QObject::tr ("s")+")"));
86  Props.append (new Property ("tbvl", "0.0", false,
87  QObject::tr ("SCR width modulation contribution")
88  +" ("+QObject::tr ("s")+")"));
89  Props.append (new Property ("tef0", "0.0", false,
90  QObject::tr ("Storage time in neutral emitter")
91  +" ("+QObject::tr ("s")+")"));
92  Props.append (new Property ("gte", "1.0", false,
93  QObject::tr ("Exponent factor for emitter transit time")));
94  Props.append (new Property ("thcs", "0.0", false,
95  QObject::tr ("Saturation time at high current densities")
96  +" ("+QObject::tr ("s")+")"));
97  Props.append (new Property ("ahc", "0.1", false,
98  QObject::tr ("Smoothing factor for current dependence")));
99  Props.append (new Property ("tr", "0.0", false,
100  QObject::tr ("Storage time at inverse operation")
101  +" ("+QObject::tr ("s")+")"));
102  Props.append (new Property ("rci0", "150", false,
103  QObject::tr ("Low-field collector resistance under emitter")
104  +" ("+QObject::tr ("Ohm")+")"));
105  Props.append (new Property ("vlim", "0.5", false,
106  QObject::tr ("Voltage dividing ohmic and satur.region")
107  +" ("+QObject::tr ("V")+")"));
108  Props.append (new Property ("vpt", "100.0", false,
109  QObject::tr ("Punch-through voltage")
110  +" ("+QObject::tr ("V")+")"));
111  Props.append (new Property ("vces", "0.1", false,
112  QObject::tr ("Saturation voltage")
113  +" ("+QObject::tr ("V")+")"));
114  Props.append (new Property ("cjci0", "1.0e-20", false,
115  QObject::tr ("Total zero-bias BC depletion capacitance")
116  +" ("+QObject::tr ("F")+")"));
117  Props.append (new Property ("vdci", "0.7", false,
118  QObject::tr ("BC built-in voltage")
119  +" ("+QObject::tr ("V")+")"));
120  Props.append (new Property ("zci", "0.333", false,
121  QObject::tr ("BC exponent factor")));
122  Props.append (new Property ("vptci", "100.0", false,
123  QObject::tr ("Punch-through voltage of BC junction")
124  +" ("+QObject::tr ("V")+")"));
125  Props.append (new Property ("cjcx0", "1.0e-20", false,
126  QObject::tr ("Zero-bias external BC depletion capacitance")
127  +" ("+QObject::tr ("F")+")"));
128  Props.append (new Property ("vdcx", "0.7", false,
129  QObject::tr ("External BC built-in voltage")
130  +" ("+QObject::tr ("V")+")"));
131  Props.append (new Property ("zcx", "0.333", false,
132  QObject::tr ("External BC exponent factor")));
133  Props.append (new Property ("vptcx", "100.0", false,
134  QObject::tr ("Punch-through voltage")
135  +" ("+QObject::tr ("V")+")"));
136  Props.append (new Property ("fbc", "1.0", false,
137  QObject::tr ("Split factor = Cjci0/Cjc0")));
138  Props.append (new Property ("rbi0", "0.0", false,
139  QObject::tr ("Internal base resistance at zero-bias")
140  +" ("+QObject::tr ("Ohm")+")"));
141  Props.append (new Property ("vr0e", "2.5", false,
142  QObject::tr ("forward Early voltage (normalization volt.)")
143  +" ("+QObject::tr ("V")+")"));
144  Props.append (new Property ("vr0c", "1.0e6", false,
145  QObject::tr ("forward Early voltage (normalization volt.)")
146  +" ("+QObject::tr ("V")+")"));
147  Props.append (new Property ("fgeo", "0.656", false,
148  QObject::tr ("Geometry factor")));
149  Props.append (new Property ("rbx", "0.0", false,
150  QObject::tr ("External base series resistance")
151  +" ("+QObject::tr ("Ohm")+")"));
152  Props.append (new Property ("rcx", "0.0", false,
153  QObject::tr ("Emitter series resistance")
154  +" ("+QObject::tr ("Ohm")+")"));
155  Props.append (new Property ("re", "0.0", false,
156  QObject::tr ("External collector series resistance")
157  +" ("+QObject::tr ("Ohm")+")"));
158  Props.append (new Property ("itss", "0.0", false,
159  QObject::tr ("Substrate transistor transfer saturation current")
160  +" ("+QObject::tr ("A")+")"));
161  Props.append (new Property ("msf", "1.0", false,
162  QObject::tr ("Substrate transistor transfer current non-ideality factor")));
163  Props.append (new Property ("iscs", "0.0", false,
164  QObject::tr ("SC saturation current")
165  +" ("+QObject::tr ("A")+")"));
166  Props.append (new Property ("msc", "1.0", false,
167  QObject::tr ("SC non-ideality factor")));
168  Props.append (new Property ("cjs0", "1.0e-20", false,
169  QObject::tr ("Zero-bias SC depletion capacitance")
170  +" ("+QObject::tr ("F")+")"));
171  Props.append (new Property ("vds", "0.3", false,
172  QObject::tr ("SC built-in voltage")
173  +" ("+QObject::tr ("V")+")"));
174  Props.append (new Property ("zs", "0.3", false,
175  QObject::tr ("External SC exponent factor")));
176  Props.append (new Property ("vpts", "100.0", false,
177  QObject::tr ("SC punch-through voltage")
178  +" ("+QObject::tr ("V")+")"));
179  Props.append (new Property ("cbcpar", "0.0", false,
180  QObject::tr ("Collector-base isolation (overlap) capacitance")
181  +" ("+QObject::tr ("F")+")"));
182  Props.append (new Property ("cbepar", "0.0", false,
183  QObject::tr ("Emitter-base oxide capacitance")
184  +" ("+QObject::tr ("F")+")"));
185  Props.append (new Property ("eavl", "0.0", false,
186  QObject::tr ("Exponent factor")));
187  Props.append (new Property ("kavl", "0.0", false,
188  QObject::tr ("Prefactor")));
189  Props.append (new Property ("kf", "0.0", false,
190  QObject::tr ("flicker noise coefficient")
191  +" ("+QObject::tr ("M^(1-AF)")+")"));
192  Props.append (new Property ("af", "2.0", false,
193  QObject::tr ("flicker noise exponent factor")));
194  Props.append (new Property ("vgb", "1.2", false,
195  QObject::tr ("Bandgap-voltage")
196  +" ("+QObject::tr ("V")+")"));
197  Props.append (new Property ("vge", "1.17", false,
198  QObject::tr ("Effective emitter bandgap-voltage")
199  +" ("+QObject::tr ("V")+")"));
200  Props.append (new Property ("vgc", "1.17", false,
201  QObject::tr ("Effective collector bandgap-voltage")
202  +" ("+QObject::tr ("V")+")"));
203  Props.append (new Property ("vgs", "1.17", false,
204  QObject::tr ("Effective substrate bandgap-voltage")
205  +" ("+QObject::tr ("V")+")"));
206  Props.append (new Property ("f1vg", "-1.02377e-4", false,
207  QObject::tr ("Coefficient K1 in T-dependent bandgap equation")
208  +" ("+QObject::tr ("V/K")+")"));
209  Props.append (new Property ("f2vg", "4.3215e-4", false,
210  QObject::tr ("Coefficient K2 in T-dependent bandgap equation")
211  +" ("+QObject::tr ("V/K")+")"));
212  Props.append (new Property ("alt0", "0.0", false,
213  QObject::tr ("Frist-order TC of tf0")
214  +" ("+QObject::tr ("1/K")+")"));
215  Props.append (new Property ("kt0", "0.0", false,
216  QObject::tr ("Second-order TC of tf0")
217  +" ("+QObject::tr ("1/K^2")+")"));
218  Props.append (new Property ("zetact", "3.0", false,
219  QObject::tr ("Exponent coefficient in transfer current temperature dependence")));
220  Props.append (new Property ("zetabet", "3.5", false,
221  QObject::tr ("Exponent coefficient in BE junction current temperature dependence")));
222  Props.append (new Property ("zetaci", "0.0", false,
223  QObject::tr ("TC of epi-collector diffusivity")));
224  Props.append (new Property ("alvs", "0.0", false,
225  QObject::tr ("Relative TC of satur.drift velocity")
226  +" ("+QObject::tr ("1/K")+")"));
227  Props.append (new Property ("alces", "0.0", false,
228  QObject::tr ("Relative TC of vces")
229  +" ("+QObject::tr ("1/K")+")"));
230  Props.append (new Property ("zetarbi", "0.0", false,
231  QObject::tr ("TC of internal base resistance")));
232  Props.append (new Property ("zetarbx", "0.0", false,
233  QObject::tr ("TC of external base resistance")));
234  Props.append (new Property ("zetarcx", "0.0", false,
235  QObject::tr ("TC of external collector resistance")));
236  Props.append (new Property ("zetare", "0.0", false,
237  QObject::tr ("TC of emitter resistances")));
238  Props.append (new Property ("zetaiqf", "0.0", false,
239  QObject::tr ("TC of iqf (bandgap coefficient of zero bias hole charge)")));
240  Props.append (new Property ("alkav", "0.0", false,
241  QObject::tr ("TC of avalanche prefactor, identical to alfav of Hicum/L2")
242  +" ("+QObject::tr ("1/K")+")"));
243  Props.append (new Property ("aleav", "0.0", false,
244  QObject::tr ("TC of avalanche exponential factor, identical to alqav of Hicum/L2")
245  +" ("+QObject::tr ("1/K")+")"));
246  Props.append (new Property ("flsh", "0", false,
247  QObject::tr ("Flag for self-heating calculation")));
248  Props.append (new Property ("rth", "0.0", false,
249  QObject::tr ("Thermal resistance")
250  +" ("+QObject::tr ("K/W")+")"));
251  Props.append (new Property ("zetarth", "0.0", false,
252  QObject::tr ("Exponent factor for temperature dependent thermal resistance")));
253  Props.append (new Property ("cth", "0.0", false,
254  QObject::tr ("Thermal capacitance")
255  +" ("+QObject::tr ("Ws/K")+")"));
256  Props.append (new Property ("tnom", "27", false,
257  QObject::tr ("Temperature for which parameters are valid")
258  +" ("+QObject::tr ("C")+")"));
259  Props.append (new Property ("dt", "0.0", false,
260  QObject::tr ("Temperature change for particular transistor")
261  +" ("+QObject::tr ("K")+")"));
262  Props.append (new Property ("delte", "0.0", false,
263  QObject::tr ("Emitter part coefficient of the zero bias hole charge temperature variation")));
264  Props.append (new Property ("deltc", "0.0", false,
265  QObject::tr ("Collector part coefficient of the zero bias hole charge temperature variation")));
266  Props.append (new Property ("zetaver", "0.0", false,
267  QObject::tr ("Bandgap TC parameter of ver")));
268  Props.append (new Property ("zetavef", "0.0", false,
269  QObject::tr ("Bandgap TC parameter of vef")));
270  Props.append (new Property ("ibhrec", "0.0", false,
271  QObject::tr ("Specific recombination current at the BC barrier for high forward injection")
272  +" ("+QObject::tr ("A")+")"));
273  Props.append (new Property ("Temp", "27", false,
274  QObject::tr ("simulation temperature")));
275 
276  createSymbol ();
277  tx = x2 + 4;
278  ty = y1 + 4;
279  Model = "hicumL0V1p2g";
280  Name = "T";
281 }
282 
284 {
285  hicumL0V1p2g * p = new hicumL0V1p2g();
286  p->Props.getFirst()->Value = Props.getFirst()->Value;
287  p->recreate(0);
288  return p;
289 }
290 
291 Element * hicumL0V1p2g::info(QString& Name, char * &BitmapFile, bool getNewOne)
292 {
293  Name = QObject::tr("npn HICUM L0 v1.2g");
294  BitmapFile = (char *) "npnsub_therm";
295 
296  if(getNewOne) return new hicumL0V1p2g();
297  return 0;
298 }
299 
300 Element * hicumL0V1p2g::info_pnp(QString& Name, char * &BitmapFile, bool getNewOne)
301 {
302  Name = QObject::tr("pnp HICUM L0 v1.2g");
303  BitmapFile = (char *) "pnpsub_therm";
304 
305  if(getNewOne)
306  {
307  hicumL0V1p2g* p = new hicumL0V1p2g();
308  p->Props.getFirst()->Value = "pnp";
309  p->recreate(0);
310  return p;
311  }
312  return 0;
313 }
314 
316 {
317  // normal bipolar
318  Lines.append(new Line(-10,-15,-10, 15,QPen(Qt::darkBlue,3)));
319  Lines.append(new Line(-30, 0,-10, 0,QPen(Qt::darkBlue,2)));
320  Lines.append(new Line(-10, -5, 0,-15,QPen(Qt::darkBlue,2)));
321  Lines.append(new Line( 0,-15, 0,-30,QPen(Qt::darkBlue,2)));
322  Lines.append(new Line(-10, 5, 0, 15,QPen(Qt::darkBlue,2)));
323  Lines.append(new Line( 0, 15, 0, 30,QPen(Qt::darkBlue,2)));
324 
325  // substrate node
326  Lines.append(new Line( 9, 0, 30, 0,QPen(Qt::darkBlue,2)));
327  Lines.append(new Line( 9, -7, 9, 7,QPen(Qt::darkBlue,3)));
328 
329  // thermal node
330  Lines.append(new Line(-30, 20,-20, 20,QPen(Qt::darkBlue,2)));
331  Lines.append(new Line(-20, 17,-20, 23,QPen(Qt::darkBlue,2)));
332 
333  // arrow
334  if(Props.getFirst()->Value == "npn") {
335  Lines.append(new Line( -6, 15, 0, 15,QPen(Qt::darkBlue,2)));
336  Lines.append(new Line( 0, 9, 0, 15,QPen(Qt::darkBlue,2)));
337  } else {
338  Lines.append(new Line( -5, 10, -5, 16,QPen(Qt::darkBlue,2)));
339  Lines.append(new Line( -5, 10, 1, 10,QPen(Qt::darkBlue,2)));
340  }
341 
342  // H
343  Lines.append(new Line(-30,-30,-30,-24,QPen(Qt::darkBlue,1)));
344  Lines.append(new Line(-30,-27,-26,-27,QPen(Qt::darkBlue,1)));
345  Lines.append(new Line(-26,-30,-26,-24,QPen(Qt::darkBlue,1)));
346  // I
347  Lines.append(new Line(-24,-30,-24,-24,QPen(Qt::darkBlue,1)));
348  // C
349  Lines.append(new Line(-22,-30,-22,-24,QPen(Qt::darkBlue,1)));
350  Lines.append(new Line(-22,-30,-19,-30,QPen(Qt::darkBlue,1)));
351  Lines.append(new Line(-22,-24,-19,-24,QPen(Qt::darkBlue,1)));
352  // U
353  Lines.append(new Line(-17,-30,-17,-24,QPen(Qt::darkBlue,1)));
354  Lines.append(new Line(-14,-30,-14,-24,QPen(Qt::darkBlue,1)));
355  Lines.append(new Line(-17,-24,-14,-24,QPen(Qt::darkBlue,1)));
356  // M
357  Lines.append(new Line(-12,-30,-12,-24,QPen(Qt::darkBlue,1)));
358  Lines.append(new Line( -8,-30, -8,-24,QPen(Qt::darkBlue,1)));
359  Lines.append(new Line(-12,-30,-10,-28,QPen(Qt::darkBlue,1)));
360  Lines.append(new Line( -8,-30,-10,-28,QPen(Qt::darkBlue,1)));
361 
362  // terminal definitions
363  Ports.append(new Port( 0,-30)); // collector
364  Ports.append(new Port(-30, 0)); // base
365  Ports.append(new Port( 0, 30)); // emitter
366  Ports.append(new Port( 30, 0)); // substrate
367  Ports.append(new Port(-30, 20)); // thermal node
368 
369  // relative boundings
370  x1 = -30; y1 = -30;
371  x2 = 30; y2 = 30;
372 }
373 
375 {
376  QString s = "hicumL0V1p2g:"+Name;
377 
378  // output all node names
379  for(Port *p1 = Ports.first(); p1 != 0; p1 = Ports.next())
380  s += " "+p1->Connection->Name; // node names
381 
382  // output type npn/pnp property
383  Property *p2 = Props.first();
384  if(p2->Value == "npn")
385  s += " npn=\"1\"";
386  else
387  s += " pnp=\"1\"";
388 
389  // output all remaining properties
390  for(p2 = Props.next(); p2 != 0; p2 = Props.next())
391  s += " "+p2->Name+"=\""+p2->Value+"\"";
392 
393  return s + '\n';
394 }
Q3PtrList< Line > Lines
Definition: component.h:67
void createSymbol()
int y1
Definition: element.h:153
QString netlist()
int tx
Definition: component.h:78
int y2
Definition: element.h:153
Definition: element.h:72
int x1
Definition: element.h:153
int ty
Definition: component.h:78
Q3PtrList< Property > Props
Definition: component.h:72
Component * newOne()
Definition: element.h:48
Superclass of all schematic drawing elements.
Definition: element.h:142
void recreate(Schematic *)
Definition: component.cpp:1250
Q3PtrList< Port > Ports
Definition: component.h:70
static Element * info_pnp(QString &, char *&, bool getNewOne=false)
QString Name
Definition: component.h:80
QString Model
Definition: component.h:80
QString Description
Definition: component.h:81
int x2
Definition: element.h:153
static Element * info(QString &, char *&, bool getNewOne=false)