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