You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

1003 lines
32 KiB

/**********
Copyright 1990 Regents of the University of California. All rights reserved.
Author: 1985 Thomas L. Quarles
Model Author: 1995 Colin McAndrew Motorola
Spice3 Implementation: 2003 Dietmar Warning DAnalyse GmbH
**********/
#ifndef VBIC
#define VBIC
#include "ngspice/cktdefs.h"
#include "ngspice/ifsim.h"
#include "ngspice/gendefs.h"
#include "ngspice/complex.h"
#include "ngspice/noisedef.h"
/* structures to describe Bipolar Junction Transistors */
/* indices to array of VBIC noise sources */
enum {
VBICRCNOIZ = 0,
VBICRCINOIZ,
VBICRBNOIZ,
VBICRBINOIZ,
VBICRENOIZ,
VBICRBPNOIZ,
VBICRSNOIZ,
VBICICNOIZ,
VBICIBNOIZ,
VBICIBEPNOIZ,
VBICICCPNOIZ,
VBICFLBENOIZ,
VBICFLBEPNOIZ,
VBICTOTNOIZ,
/* finally, the number of noise sources */
VBICNSRCS
};
/* data needed to describe a single instance */
typedef struct sVBICinstance {
struct GENinstance gen;
#define VBICmodPtr(inst) ((struct sVBICmodel *)((inst)->gen.GENmodPtr))
#define VBICnextInstance(inst) ((struct sVBICinstance *)((inst)->gen.GENnextInstance))
#define VBICname gen.GENname
#define VBICstate gen.GENstate
const int VBICcollNode; /* number of collector node of vbic */
const int VBICbaseNode; /* number of base node of vbic */
const int VBICemitNode; /* number of emitter node of vbic */
const int VBICsubsNode; /* number of substrate node of vbic */
const int VBICtempNode; /* number of the temperature node of the vbic */
int VBICcollCXNode; /* number of internal collector node of vbic */
int VBICcollCINode; /* number of internal collector node of vbic */
int VBICbaseBXNode; /* number of internal base node of vbic */
int VBICbaseBINode; /* number of internal base node of vbic */
int VBICemitEINode; /* number of internal emitter node of vbic */
int VBICbaseBPNode; /* number of internal base node of vbic */
int VBICsubsSINode; /* number of internal substrate node */
int VBICxf1Node; /* number of internal excess phase 1 node itf */
int VBICxf2Node; /* number of internal excess phase 2 node itf */
int VBICbrEq; /* number of the branch equation added for current */
double VBICarea; /* area factor for the vbic */
double VBICicVBE; /* initial condition voltage B-E*/
double VBICicVCE; /* initial condition voltage C-E*/
double VBICtemp; /* instance temperature */
double VBICdtemp; /* instance delta temperature */
double VBICm; /* multiply factor for the vbic */
double VBICtVcrit;
double VBICtextCollResist;
double VBICtintCollResist;
double VBICtepiSatVoltage;
double VBICtepiDoping;
double VBICtextBaseResist;
double VBICtintBaseResist;
double VBICtemitterResist;
double VBICtsubstrateResist;
double VBICtparBaseResist;
double VBICtsatCur;
double VBICtemissionCoeffF;
double VBICtemissionCoeffR;
double VBICtdepletionCapBE;
double VBICtpotentialBE;
double VBICtdepletionCapBC;
double VBICtextCapBC;
double VBICtpotentialBC;
double VBICtextCapSC;
double VBICtpotentialSC;
double VBICtidealSatCurBE;
double VBICtnidealSatCurBE;
double VBICtidealSatCurBC;
double VBICtnidealSatCurBC;
double VBICtavalanchePar2BC;
double VBICtparasitSatCur;
double VBICtidealParasitSatCurBE;
double VBICtnidealParasitSatCurBE;
double VBICtidealParasitSatCurBC;
double VBICtnidealParasitSatCurBC;
double VBICtrollOffF;
double VBICtsepISRR;
double VBICtvbbe;
double VBICtnbbe;
double *VBICcollCollPtr; /* pointer to sparse matrix at
* (collector,collector) */
double *VBICbaseBasePtr; /* pointer to sparse matrix at
* (base,base) */
double *VBICemitEmitPtr; /* pointer to sparse matrix at
* (emitter,emitter) */
double *VBICsubsSubsPtr; /* pointer to sparse matrix at
* (substrate,substrate) */
double *VBICcollCXCollCXPtr; /* pointer to sparse matrix at
* (collector prime,collector prime) */
double *VBICcollCICollCIPtr; /* pointer to sparse matrix at
* (collector prime,collector prime) */
double *VBICbaseBXBaseBXPtr; /* pointer to sparse matrix at
* (base prime,base prime) */
double *VBICbaseBIBaseBIPtr; /* pointer to sparse matrix at
* (collector prime,collector prime) */
double *VBICbaseBPBaseBPPtr; /* pointer to sparse matrix at
* (collector prime,collector prime) */
double *VBICemitEIEmitEIPtr; /* pointer to sparse matrix at
* (emitter prime,emitter prime) */
double *VBICsubsSISubsSIPtr; /* pointer to sparse matrix at
* (substrate prime, substrate prime) */
double *VBICemitEIXfPtr; /* pointer to sparse matrix at
* (emitter prime,xf) */
double *VBICbaseBIXfPtr; /* pointer to sparse matrix at
* (base prime,xf) */
double *VBICbaseEmitPtr; /* pointer to sparse matrix at
* (base,emit) */
double *VBICemitBasePtr; /* pointer to sparse matrix at
* (emit,base) */
double *VBICbaseCollPtr; /* pointer to sparse matrix at
* (base,coll) */
double *VBICcollBasePtr; /* pointer to sparse matrix at
* (coll,base) */
double *VBICcollCollCXPtr; /* pointer to sparse matrix at
* (collector,collector prime) */
double *VBICbaseBaseBXPtr; /* pointer to sparse matrix at
* (base,base prime) */
double *VBICemitEmitEIPtr; /* pointer to sparse matrix at
* (emitter,emitter prime) */
double *VBICsubsSubsSIPtr; /* pointer to sparse matrix at
* (substrate, Substrate connection) */
double *VBICcollCXCollCIPtr; /* pointer to sparse matrix at
* (collector prime,base prime) */
double *VBICcollCXBaseBXPtr; /* pointer to sparse matrix at
* (collector prime,collector prime) */
double *VBICcollCXBaseBIPtr; /* pointer to sparse matrix at
* (collector prime,collector prime) */
double *VBICcollCXBaseBPPtr; /* pointer to sparse matrix at
* (collector prime,base prime) */
double *VBICcollCIBaseBIPtr; /* pointer to sparse matrix at
* (collector prime,base) */
double *VBICcollCIEmitEIPtr; /* pointer to sparse matrix at
* (collector prime,emitter prime) */
double *VBICbaseBXBaseBIPtr; /* pointer to sparse matrix at
* (base primt,emitter prime) */
double *VBICbaseBXEmitEIPtr; /* pointer to sparse matrix at
* (base primt,emitter prime) */
double *VBICbaseBXBaseBPPtr; /* pointer to sparse matrix at
* (base primt,emitter prime) */
double *VBICbaseBXSubsSIPtr; /* pointer to sparse matrix at
* (base primt,emitter prime) */
double *VBICbaseBIEmitEIPtr; /* pointer to sparse matrix at
* (base primt,emitter prime) */
double *VBICbaseBPSubsSIPtr; /* pointer to sparse matrix at
* (base primt,emitter prime) */
double *VBICcollCXCollPtr; /* pointer to sparse matrix at
* (collector prime,collector) */
double *VBICbaseBXBasePtr; /* pointer to sparse matrix at
* (base prime,base ) */
double *VBICemitEIEmitPtr; /* pointer to sparse matrix at
* (emitter prime,emitter) */
double *VBICsubsSISubsPtr; /* pointer to sparse matrix at
* (Substrate connection, substrate) */
double *VBICcollCICollCXPtr; /* pointer to sparse matrix at
* (collector prime,base prime) */
double *VBICbaseBICollCXPtr; /* pointer to sparse matrix at
* (base prime,collector prime) */
double *VBICbaseBPCollCXPtr; /* pointer to sparse matrix at
* (base primt,emitter prime) */
double *VBICbaseBXCollCIPtr; /* pointer to sparse matrix at
* (base,collector prime) */
double *VBICbaseBICollCIPtr; /* pointer to sparse matrix at
* (base,collector prime) */
double *VBICemitEICollCIPtr; /* pointer to sparse matrix at
* (emitter prime,collector prime) */
double *VBICbaseBPCollCIPtr; /* pointer to sparse matrix at
* (base primt,emitter prime) */
double *VBICsubsSICollCIPtr; /* pointer to sparse matrix at
* (substrate,collector prime) */
double *VBICbaseBIBaseBXPtr; /* pointer to sparse matrix at
* (base primt,emitter prime) */
double *VBICemitEIBaseBXPtr; /* pointer to sparse matrix at
* (emitter prime,base prime) */
double *VBICbaseBPBaseBXPtr; /* pointer to sparse matrix at
* (base primt,emitter prime) */
double *VBICsubsSIBaseBXPtr; /* pointer to sparse matrix at
* (substrate,substrate) */
double *VBICemitEIBaseBIPtr; /* pointer to sparse matrix at
* (emitter prime,base prime) */
double *VBICbaseBPBaseBIPtr; /* pointer to sparse matrix at
* (base primt,emitter prime) */
double *VBICsubsSIBaseBIPtr; /* pointer to sparse matrix at
* (substrate,base prime) */
double *VBICsubsSIBaseBPPtr; /* pointer to sparse matrix at
* (substrate,substrate) */
/* self heating */
double *VBICcollTempPtr;
double *VBICbaseTempPtr;
double *VBICemitTempPtr;
double *VBICsubsTempPtr;
double *VBICcollCItempPtr;
double *VBICcollCXtempPtr;
double *VBICbaseBItempPtr;
double *VBICbaseBXtempPtr;
double *VBICbaseBPtempPtr;
double *VBICemitEItempPtr;
double *VBICsubsSItempPtr;
double *VBICtempCollPtr;
double *VBICtempCollCIPtr;
double *VBICtempCollCXPtr;
double *VBICtempBasePtr;
double *VBICtempBaseBIPtr;
double *VBICtempBaseBXPtr;
double *VBICtempBaseBPPtr;
double *VBICtempEmitPtr;
double *VBICtempEmitEIPtr;
double *VBICtempSubsPtr;
double *VBICtempSubsSIPtr;
double *VBICtempTempPtr;
/* excess phase */
double *VBICtempXf2Ptr;
double *VBICxf1TempPtr;
double *VBICxf1Xf1Ptr;
double *VBICxf1Xf2Ptr;
double *VBICxf1CollCIPtr;
double *VBICxf1BaseBIPtr;
double *VBICxf1EmitEIPtr;
double *VBICxf2Xf2Ptr;
double *VBICxf2Xf1Ptr;
double *VBICcollCIXf2Ptr;
double *VBICbaseBIXf2Ptr;
double *VBICemitEIXf2Ptr;
double *VBICxf1IbrPtr;
double *VBICxf2IbrPtr;
double *VBICibrXf1Ptr;
double *VBICibrXf2Ptr;
double *VBICibrIbrPtr;
unsigned VBICareaGiven :1; /* flag to indicate area was specified */
unsigned VBICoff :1; /* 'off' flag for vbic */
unsigned VBICicVBEGiven :1; /* flag to indicate VBE init. cond. given */
unsigned VBICicVCEGiven :1; /* flag to indicate VCE init. cond. given */
unsigned VBICtempGiven :1; /* temperature given for vbic instance*/
unsigned VBICdtempGiven :1; /* delta temperature given for vbic instance*/
unsigned VBICmGiven :1; /* flag to indicate multiplier was specified */
double VBICcapbe;
double VBICcapbex;
double VBICcapbc;
double VBICcapbcx;
double VBICcapbep;
double VBICcapbcp;
double VBICcapcth;
double VBICcapqbeth;
double VBICcapqbexth;
double VBICcapqbcth;
double VBICcapqbcxth;
double VBICcapqbepth;
double VBICcapqbcpth;
double VBICibe_Vrth;
double VBICibex_Vrth;
double VBICitzf_vrth;
double VBICitzr_Vrth;
double VBICibc_Vrth;
double VBICibep_Vrth;
double VBICircx_Vrth;
double VBICirci_Vrth;
double VBICirbx_Vrth;
double VBICirbi_Vrth;
double VBICire_Vrth;
double VBICirbp_Vrth;
double VBICibcp_Vrth;
double VBICiccp_Vrth;
double VBICirs_Vrth;
double VBICirth_Vrth;
double VBICith_Vrth;
double VBICith_Vbei;
double VBICith_Vbci;
double VBICith_Vcei;
double VBICith_Vbex;
double VBICith_Vbep;
double VBICith_Vbcp;
double VBICith_Vcep;
double VBICith_Vrci;
double VBICith_Vbcx;
double VBICith_Vrbi;
double VBICith_Vrbp;
double VBICith_Vrcx;
double VBICith_Vrbx;
double VBICith_Vre;
double VBICith_Vrs;
double VBICindInduct;
double VBICcapQcxf;
int VBIC_selfheat; /* self-heating enabled */
int VBIC_excessPhase; /* excess phase enabled */
#ifndef NONOISE
double VBICnVar[NSTATVARS][VBICNSRCS];
#else /*NONOISE*/
double **VBICnVar;
#endif /*NONOISE*/
/* the above to avoid allocating memory when it is not needed */
#ifdef KLU
BindElement *VBICcollCollBinding ;
BindElement *VBICbaseBaseBinding ;
BindElement *VBICemitEmitBinding ;
BindElement *VBICsubsSubsBinding ;
BindElement *VBICcollCXCollCXBinding ;
BindElement *VBICcollCICollCIBinding ;
BindElement *VBICbaseBXBaseBXBinding ;
BindElement *VBICbaseBIBaseBIBinding ;
BindElement *VBICemitEIEmitEIBinding ;
BindElement *VBICbaseBPBaseBPBinding ;
BindElement *VBICsubsSISubsSIBinding ;
BindElement *VBICbaseEmitBinding ;
BindElement *VBICemitBaseBinding ;
BindElement *VBICbaseCollBinding ;
BindElement *VBICcollBaseBinding ;
BindElement *VBICcollCollCXBinding ;
BindElement *VBICbaseBaseBXBinding ;
BindElement *VBICemitEmitEIBinding ;
BindElement *VBICsubsSubsSIBinding ;
BindElement *VBICcollCXCollCIBinding ;
BindElement *VBICcollCXBaseBXBinding ;
BindElement *VBICcollCXBaseBIBinding ;
BindElement *VBICcollCXBaseBPBinding ;
BindElement *VBICcollCIBaseBIBinding ;
BindElement *VBICcollCIEmitEIBinding ;
BindElement *VBICbaseBXBaseBIBinding ;
BindElement *VBICbaseBXEmitEIBinding ;
BindElement *VBICbaseBXBaseBPBinding ;
BindElement *VBICbaseBXSubsSIBinding ;
BindElement *VBICbaseBIEmitEIBinding ;
BindElement *VBICbaseBPSubsSIBinding ;
BindElement *VBICcollCXCollBinding ;
BindElement *VBICbaseBXBaseBinding ;
BindElement *VBICemitEIEmitBinding ;
BindElement *VBICsubsSISubsBinding ;
BindElement *VBICcollCICollCXBinding ;
BindElement *VBICbaseBICollCXBinding ;
BindElement *VBICbaseBPCollCXBinding ;
BindElement *VBICbaseBXCollCIBinding ;
BindElement *VBICbaseBICollCIBinding ;
BindElement *VBICemitEICollCIBinding ;
BindElement *VBICbaseBPCollCIBinding ;
BindElement *VBICbaseBIBaseBXBinding ;
BindElement *VBICemitEIBaseBXBinding ;
BindElement *VBICbaseBPBaseBXBinding ;
BindElement *VBICsubsSIBaseBXBinding ;
BindElement *VBICemitEIBaseBIBinding ;
BindElement *VBICbaseBPBaseBIBinding ;
BindElement *VBICsubsSICollCIBinding ;
BindElement *VBICsubsSIBaseBIBinding ;
BindElement *VBICsubsSIBaseBPBinding ;
BindElement *VBICcollTempBinding ;
BindElement *VBICbaseTempBinding ;
BindElement *VBICemitTempBinding ;
BindElement *VBICsubsTempBinding ;
BindElement *VBICcollCItempBinding ;
BindElement *VBICcollCXtempBinding ;
BindElement *VBICbaseBItempBinding ;
BindElement *VBICbaseBXtempBinding ;
BindElement *VBICbaseBPtempBinding ;
BindElement *VBICemitEItempBinding ;
BindElement *VBICsubsSItempBinding ;
BindElement *VBICtempCollBinding ;
BindElement *VBICtempCollCIBinding ;
BindElement *VBICtempCollCXBinding ;
BindElement *VBICtempBaseBIBinding ;
BindElement *VBICtempBaseBinding ;
BindElement *VBICtempBaseBXBinding ;
BindElement *VBICtempBaseBPBinding ;
BindElement *VBICtempEmitBinding ;
BindElement *VBICtempEmitEIBinding ;
BindElement *VBICtempSubsBinding ;
BindElement *VBICtempSubsSIBinding ;
BindElement *VBICtempTempBinding ;
BindElement *VBICtempXf2Binding ;
BindElement *VBICxf1TempBinding ;
BindElement *VBICxf1Xf1Binding ;
BindElement *VBICxf1Xf2Binding ;
BindElement *VBICxf1CollCIBinding ;
BindElement *VBICxf1BaseBIBinding ;
BindElement *VBICxf1EmitEIBinding ;
BindElement *VBICxf2Xf2Binding ;
BindElement *VBICxf2Xf1Binding ;
BindElement *VBICcollCIXf2Binding ;
BindElement *VBICbaseBIXf2Binding ;
BindElement *VBICemitEIXf2Binding ;
BindElement *VBICxf1IbrBinding ;
BindElement *VBICxf2IbrBinding ;
BindElement *VBICibrXf2Binding ;
BindElement *VBICibrXf1Binding ;
BindElement *VBICibrIbrBinding ;
#endif
} VBICinstance ;
/* entries in the state vector for vbic: */
#define VBICvbei VBICstate
#define VBICvbex VBICstate+1
#define VBICvbci VBICstate+2
#define VBICvbcx VBICstate+3
#define VBICvbep VBICstate+4
#define VBICvrci VBICstate+5
#define VBICvrbi VBICstate+6
#define VBICvrbp VBICstate+7
#define VBICvbcp VBICstate+8
#define VBICibe VBICstate+9
#define VBICibe_Vbei VBICstate+10
#define VBICibex VBICstate+11
#define VBICibex_Vbex VBICstate+12
#define VBICitzf VBICstate+13
#define VBICitzf_Vbei VBICstate+14
#define VBICitzf_Vbci VBICstate+15
#define VBICitzf_Vrth VBICstate+16
#define VBICitzr VBICstate+17
#define VBICitzr_Vbci VBICstate+18
#define VBICitzr_Vbei VBICstate+19
#define VBICibc VBICstate+20
#define VBICibc_Vbci VBICstate+21
#define VBICibc_Vbei VBICstate+22
#define VBICibep VBICstate+23
#define VBICibep_Vbep VBICstate+24
#define VBICirci VBICstate+25
#define VBICirci_Vrci VBICstate+26
#define VBICirci_Vbci VBICstate+27
#define VBICirci_Vbcx VBICstate+28
#define VBICirbi VBICstate+29
#define VBICirbi_Vrbi VBICstate+30
#define VBICirbi_Vbei VBICstate+31
#define VBICirbi_Vbci VBICstate+32
#define VBICirbp VBICstate+33
#define VBICirbp_Vrbp VBICstate+34
#define VBICirbp_Vbep VBICstate+35
#define VBICirbp_Vbci VBICstate+36
#define VBICqbe VBICstate+37
#define VBICcqbe VBICstate+38
#define VBICcqbeci VBICstate+39
#define VBICqbex VBICstate+40
#define VBICcqbex VBICstate+41
#define VBICqbc VBICstate+42
#define VBICcqbc VBICstate+43
#define VBICqbcx VBICstate+44
#define VBICcqbcx VBICstate+45
#define VBICqbep VBICstate+46
#define VBICcqbep VBICstate+47
#define VBICcqbepci VBICstate+48
#define VBICqbeo VBICstate+49
#define VBICcqbeo VBICstate+50
#define VBICgqbeo VBICstate+51
#define VBICqbco VBICstate+52
#define VBICcqbco VBICstate+53
#define VBICgqbco VBICstate+54
#define VBICibcp VBICstate+55
#define VBICibcp_Vbcp VBICstate+56
#define VBICiccp VBICstate+57
#define VBICiccp_Vbep VBICstate+58
#define VBICiccp_Vbci VBICstate+59
#define VBICiccp_Vbcp VBICstate+60
#define VBICqbcp VBICstate+61
#define VBICcqbcp VBICstate+62
#define VBICircx_Vrcx VBICstate+63
#define VBICirbx_Vrbx VBICstate+64
#define VBICirs_Vrs VBICstate+65
#define VBICire_Vre VBICstate+66
#define VBICqcth VBICstate+67 /* thermal capacitor charge */
#define VBICcqcth VBICstate+68 /* thermal capacitor current */
#define VBICvrth VBICstate+69
#define VBICicth_Vrth VBICstate+70
#define VBICqcxf VBICstate+71
#define VBICcqcxf VBICstate+72
#define VBICgqcxf VBICstate+73
#define VBICibc_Vrxf VBICstate+74
#define VBICixzf VBICstate+75
#define VBICixzf_Vbei VBICstate+76
#define VBICixzf_Vbci VBICstate+77
#define VBICixzf_Vrth VBICstate+78
#define VBICixxf VBICstate+79
#define VBICixxf_Vrxf VBICstate+80
#define VBICitxf VBICstate+81
#define VBICitxf_Vrxf VBICstate+82
#define VBICith_Vrxf VBICstate+83
#define VBICindFlux VBICstate+84
#define VBICindVolt VBICstate+85
#define VBICnumStates 86
/* per model data */
typedef struct sVBICmodel { /* model structure for a vbic */
struct GENmodel gen;
#define VBICmodType gen.GENmodType
#define VBICnextModel(inst) ((struct sVBICmodel *)((inst)->gen.GENnextModel))
#define VBICinstances(inst) ((VBICinstance *)((inst)->gen.GENinstances))
#define VBICmodName gen.GENmodName
int VBICtype;
int VBICselft;
double VBICtnom;
double VBICextCollResist;
double VBICintCollResist;
double VBICepiSatVoltage;
double VBICepiDoping;
double VBIChighCurFac;
double VBICextBaseResist;
double VBICintBaseResist;
double VBICemitterResist;
double VBICsubstrateResist;
double VBICparBaseResist;
double VBICsatCur;
double VBICemissionCoeffF;
double VBICemissionCoeffR;
double VBICdeplCapLimitF;
double VBICextOverlapCapBE;
double VBICdepletionCapBE;
double VBICpotentialBE;
double VBICjunctionExpBE;
double VBICsmoothCapBE;
double VBICextOverlapCapBC;
double VBICdepletionCapBC;
double VBICepiCharge;
double VBICextCapBC;
double VBICpotentialBC;
double VBICjunctionExpBC;
double VBICsmoothCapBC;
double VBICextCapSC;
double VBICpotentialSC;
double VBICjunctionExpSC;
double VBICsmoothCapSC;
double VBICidealSatCurBE;
double VBICportionIBEI;
double VBICidealEmissCoeffBE;
double VBICnidealSatCurBE;
double VBICnidealEmissCoeffBE;
double VBICidealSatCurBC;
double VBICidealEmissCoeffBC;
double VBICnidealSatCurBC;
double VBICnidealEmissCoeffBC;
double VBICavalanchePar1BC;
double VBICavalanchePar2BC;
double VBICparasitSatCur;
double VBICportionICCP;
double VBICparasitFwdEmissCoeff;
double VBICidealParasitSatCurBE;
double VBICnidealParasitSatCurBE;
double VBICidealParasitSatCurBC;
double VBICidealParasitEmissCoeffBC;
double VBICnidealParasitSatCurBC;
double VBICnidealParasitEmissCoeffBC;
double VBICearlyVoltF;
double VBICearlyVoltR;
double VBICrollOffF;
double VBICrollOffR;
double VBICparRollOff;
double VBICtransitTimeF;
double VBICvarTransitTimeF;
double VBICtransitTimeBiasCoeffF;
double VBICtransitTimeFVBC;
double VBICtransitTimeHighCurrentF;
double VBICtransitTimeR;
double VBICdelayTimeF;
double VBICfNcoef;
double VBICfNexpA;
double VBICfNexpB;
double VBICtempExpRE;
double VBICtempExpRBI;
double VBICtempExpRCI;
double VBICtempExpRS;
double VBICtempExpVO;
double VBICactivEnergyEA;
double VBICactivEnergyEAIE;
double VBICactivEnergyEAIC;
double VBICactivEnergyEAIS;
double VBICactivEnergyEANE;
double VBICactivEnergyEANC;
double VBICactivEnergyEANS;
double VBICtempExpIS;
double VBICtempExpII;
double VBICtempExpIN;
double VBICtempExpNF;
double VBICtempExpAVC;
double VBICthermalResist;
double VBICthermalCapacitance;
double VBICpunchThroughVoltageBC;
double VBICdeplCapCoeff1;
double VBICfixedCapacitanceCS;
double VBICsgpQBselector;
double VBIChighCurrentBetaRolloff;
double VBICtempExpIKF;
double VBICtempExpRCX;
double VBICtempExpRBX;
double VBICtempExpRBP;
double VBICsepISRR;
double VBICtempExpXISR;
double VBICdear;
double VBICeap;
double VBICvbbe;
double VBICnbbe;
double VBICibbe;
double VBICtvbbe1;
double VBICtvbbe2;
double VBICtnbbe;
double VBICebbe;
double VBIClocTempDiff;
double VBICrevVersion;
double VBICrefVersion;
double VBICvbeMax; /* maximum voltage over B-E junction */
double VBICvbcMax; /* maximum voltage over B-C junction */
double VBICvceMax; /* maximum voltage over C-E branch */
double VBICvsubMax; /* maximum voltage over C-substrate branch */
double VBICvbcfwdMax; /* maximum forward voltage over B-C junction */
double VBICvbefwdMax; /* maximum forward voltage over C-E branch */
double VBICvsubfwdMax; /* maximum forward voltage over C-substrate branch */
unsigned VBICselftGiven : 1;
unsigned VBICtnomGiven : 1;
unsigned VBICextCollResistGiven : 1;
unsigned VBICintCollResistGiven : 1;
unsigned VBICepiSatVoltageGiven : 1;
unsigned VBICepiDopingGiven : 1;
unsigned VBIChighCurFacGiven : 1;
unsigned VBICextBaseResistGiven : 1;
unsigned VBICintBaseResistGiven : 1;
unsigned VBICemitterResistGiven : 1;
unsigned VBICsubstrateResistGiven : 1;
unsigned VBICparBaseResistGiven : 1;
unsigned VBICsatCurGiven : 1;
unsigned VBICemissionCoeffFGiven : 1;
unsigned VBICemissionCoeffRGiven : 1;
unsigned VBICdeplCapLimitFGiven : 1;
unsigned VBICextOverlapCapBEGiven : 1;
unsigned VBICdepletionCapBEGiven : 1;
unsigned VBICpotentialBEGiven : 1;
unsigned VBICjunctionExpBEGiven : 1;
unsigned VBICsmoothCapBEGiven : 1;
unsigned VBICextOverlapCapBCGiven : 1;
unsigned VBICdepletionCapBCGiven : 1;
unsigned VBICepiChargeGiven : 1;
unsigned VBICextCapBCGiven : 1;
unsigned VBICpotentialBCGiven : 1;
unsigned VBICjunctionExpBCGiven : 1;
unsigned VBICsmoothCapBCGiven : 1;
unsigned VBICextCapSCGiven : 1;
unsigned VBICpotentialSCGiven : 1;
unsigned VBICjunctionExpSCGiven : 1;
unsigned VBICsmoothCapSCGiven : 1;
unsigned VBICidealSatCurBEGiven : 1;
unsigned VBICportionIBEIGiven : 1;
unsigned VBICidealEmissCoeffBEGiven : 1;
unsigned VBICnidealSatCurBEGiven : 1;
unsigned VBICnidealEmissCoeffBEGiven : 1;
unsigned VBICidealSatCurBCGiven : 1;
unsigned VBICidealEmissCoeffBCGiven : 1;
unsigned VBICnidealSatCurBCGiven : 1;
unsigned VBICnidealEmissCoeffBCGiven : 1;
unsigned VBICavalanchePar1BCGiven : 1;
unsigned VBICavalanchePar2BCGiven : 1;
unsigned VBICparasitSatCurGiven : 1;
unsigned VBICportionICCPGiven : 1;
unsigned VBICparasitFwdEmissCoeffGiven : 1;
unsigned VBICidealParasitSatCurBEGiven : 1;
unsigned VBICnidealParasitSatCurBEGiven : 1;
unsigned VBICidealParasitSatCurBCGiven : 1;
unsigned VBICidealParasitEmissCoeffBCGiven : 1;
unsigned VBICnidealParasitSatCurBCGiven : 1;
unsigned VBICnidealParasitEmissCoeffBCGiven : 1;
unsigned VBICearlyVoltFGiven : 1;
unsigned VBICearlyVoltRGiven : 1;
unsigned VBICrollOffFGiven : 1;
unsigned VBICrollOffRGiven : 1;
unsigned VBICparRollOffGiven : 1;
unsigned VBICtransitTimeFGiven : 1;
unsigned VBICvarTransitTimeFGiven : 1;
unsigned VBICtransitTimeBiasCoeffFGiven : 1;
unsigned VBICtransitTimeFVBCGiven : 1;
unsigned VBICtransitTimeHighCurrentFGiven : 1;
unsigned VBICtransitTimeRGiven : 1;
unsigned VBICdelayTimeFGiven : 1;
unsigned VBICfNcoefGiven : 1;
unsigned VBICfNexpAGiven : 1;
unsigned VBICfNexpBGiven : 1;
unsigned VBICtempExpREGiven : 1;
unsigned VBICtempExpRBGiven : 1;
unsigned VBICtempExpRBIGiven : 1;
unsigned VBICtempExpRCGiven : 1;
unsigned VBICtempExpRCIGiven : 1;
unsigned VBICtempExpRSGiven : 1;
unsigned VBICtempExpVOGiven : 1;
unsigned VBICactivEnergyEAGiven : 1;
unsigned VBICactivEnergyEAIEGiven : 1;
unsigned VBICactivEnergyEAICGiven : 1;
unsigned VBICactivEnergyEAISGiven : 1;
unsigned VBICactivEnergyEANEGiven : 1;
unsigned VBICactivEnergyEANCGiven : 1;
unsigned VBICactivEnergyEANSGiven : 1;
unsigned VBICtempExpISGiven : 1;
unsigned VBICtempExpIIGiven : 1;
unsigned VBICtempExpINGiven : 1;
unsigned VBICtempExpNFGiven : 1;
unsigned VBICtempExpAVCGiven : 1;
unsigned VBICthermalResistGiven : 1;
unsigned VBICthermalCapacitanceGiven : 1;
unsigned VBICpunchThroughVoltageBCGiven : 1;
unsigned VBICdeplCapCoeff1Given : 1;
unsigned VBICfixedCapacitanceCSGiven : 1;
unsigned VBICsgpQBselectorGiven : 1;
unsigned VBIChighCurrentBetaRolloffGiven : 1;
unsigned VBICtempExpIKFGiven : 1;
unsigned VBICtempExpRCXGiven : 1;
unsigned VBICtempExpRBXGiven : 1;
unsigned VBICtempExpRBPGiven : 1;
unsigned VBICsepISRRGiven : 1;
unsigned VBICtempExpXISRGiven : 1;
unsigned VBICdearGiven : 1;
unsigned VBICeapGiven : 1;
unsigned VBICvbbeGiven : 1;
unsigned VBICnbbeGiven : 1;
unsigned VBICibbeGiven : 1;
unsigned VBICtvbbe1Given : 1;
unsigned VBICtvbbe2Given : 1;
unsigned VBICtnbbeGiven : 1;
unsigned VBICebbeGiven : 1;
unsigned VBIClocTempDiffGiven : 1;
unsigned VBICrevVersionGiven : 1;
unsigned VBICrefVersionGiven : 1;
unsigned VBICvbeMaxGiven : 1;
unsigned VBICvbcMaxGiven : 1;
unsigned VBICvceMaxGiven : 1;
unsigned VBICvsubMaxGiven : 1;
unsigned VBICvbcfwdMaxGiven : 1;
unsigned VBICvbefwdMaxGiven : 1;
unsigned VBICvsubfwdMaxGiven : 1;
} VBICmodel;
#ifndef NPN
#define NPN 1
#define PNP -1
#endif /*NPN*/
/* device parameters */
enum {
VBIC_AREA = 1,
VBIC_OFF,
VBIC_IC,
VBIC_IC_VBE,
VBIC_IC_VCE,
VBIC_TEMP,
VBIC_DTEMP,
VBIC_M,
};
/* model parameters */
enum {
VBIC_MOD_NPN = 101,
VBIC_MOD_PNP,
VBIC_MOD_TNOM,
VBIC_MOD_RCX,
VBIC_MOD_RCI,
VBIC_MOD_VO,
VBIC_MOD_GAMM,
VBIC_MOD_HRCF,
VBIC_MOD_RBX,
VBIC_MOD_RBI,
VBIC_MOD_RE,
VBIC_MOD_RS,
VBIC_MOD_RBP,
VBIC_MOD_IS,
VBIC_MOD_NF,
VBIC_MOD_NR,
VBIC_MOD_FC,
VBIC_MOD_CBEO,
VBIC_MOD_CJE,
VBIC_MOD_PE,
VBIC_MOD_ME,
VBIC_MOD_AJE,
VBIC_MOD_CBCO,
VBIC_MOD_CJC,
VBIC_MOD_QCO,
VBIC_MOD_CJEP,
VBIC_MOD_PC,
VBIC_MOD_MC,
VBIC_MOD_AJC,
VBIC_MOD_CJCP,
VBIC_MOD_PS,
VBIC_MOD_MS,
VBIC_MOD_AJS,
VBIC_MOD_IBEI,
VBIC_MOD_WBE,
VBIC_MOD_NEI,
VBIC_MOD_IBEN,
VBIC_MOD_NEN,
VBIC_MOD_IBCI,
VBIC_MOD_NCI,
VBIC_MOD_IBCN,
VBIC_MOD_NCN,
VBIC_MOD_AVC1,
VBIC_MOD_AVC2,
VBIC_MOD_ISP,
VBIC_MOD_WSP,
VBIC_MOD_NFP,
VBIC_MOD_IBEIP,
VBIC_MOD_IBENP,
VBIC_MOD_IBCIP,
VBIC_MOD_NCIP,
VBIC_MOD_IBCNP,
VBIC_MOD_NCNP,
VBIC_MOD_VEF,
VBIC_MOD_VER,
VBIC_MOD_IKF,
VBIC_MOD_IKR,
VBIC_MOD_IKP,
VBIC_MOD_TF,
VBIC_MOD_QTF,
VBIC_MOD_XTF,
VBIC_MOD_VTF,
VBIC_MOD_ITF,
VBIC_MOD_TR,
VBIC_MOD_TD,
VBIC_MOD_KFN,
VBIC_MOD_AFN,
VBIC_MOD_BFN,
VBIC_MOD_XRE,
VBIC_MOD_XRB,
VBIC_MOD_XRBI,
VBIC_MOD_XRC,
VBIC_MOD_XRCI,
VBIC_MOD_XRS,
VBIC_MOD_XVO,
VBIC_MOD_EA,
VBIC_MOD_EAIE,
VBIC_MOD_EAIC,
VBIC_MOD_EAIS,
VBIC_MOD_EANE,
VBIC_MOD_EANC,
VBIC_MOD_EANS,
VBIC_MOD_XIS,
VBIC_MOD_XII,
VBIC_MOD_XIN,
VBIC_MOD_TNF,
VBIC_MOD_TAVC,
VBIC_MOD_RTH,
VBIC_MOD_CTH,
VBIC_MOD_VRT,
VBIC_MOD_ART,
VBIC_MOD_CCSO,
VBIC_MOD_QBM,
VBIC_MOD_NKF,
VBIC_MOD_XIKF,
VBIC_MOD_XRCX,
VBIC_MOD_XRBX,
VBIC_MOD_XRBP,
VBIC_MOD_ISRR,
VBIC_MOD_XISR,
VBIC_MOD_DEAR,
VBIC_MOD_EAP,
VBIC_MOD_VBBE,
VBIC_MOD_NBBE,
VBIC_MOD_IBBE,
VBIC_MOD_TVBBE1,
VBIC_MOD_TVBBE2,
VBIC_MOD_TNBBE,
VBIC_MOD_EBBE,
VBIC_MOD_DTEMP,
VBIC_MOD_VERS,
VBIC_MOD_VREF,
VBIC_MOD_VBE_MAX,
VBIC_MOD_VBC_MAX,
VBIC_MOD_VCE_MAX,
VBIC_MOD_VSUB_MAX,
VBIC_MOD_VBEFWD_MAX,
VBIC_MOD_VBCFWD_MAX,
VBIC_MOD_VSUBFWD_MAX,
VBIC_MOD_SELFT,
};
/* device questions */
enum {
VBIC_QUEST_FT = 221,
VBIC_QUEST_COLLNODE,
VBIC_QUEST_BASENODE,
VBIC_QUEST_EMITNODE,
VBIC_QUEST_SUBSNODE,
VBIC_QUEST_COLLCXNODE,
VBIC_QUEST_COLLCINODE,
VBIC_QUEST_BASEBXNODE,
VBIC_QUEST_BASEBINODE,
VBIC_QUEST_BASEBPNODE,
VBIC_QUEST_EMITEINODE,
VBIC_QUEST_SUBSSINODE,
VBIC_QUEST_VBE,
VBIC_QUEST_VBC,
VBIC_QUEST_CC,
VBIC_QUEST_CB,
VBIC_QUEST_CE,
VBIC_QUEST_CS,
VBIC_QUEST_GM,
VBIC_QUEST_GO,
VBIC_QUEST_GPI,
VBIC_QUEST_GMU,
VBIC_QUEST_GX,
VBIC_QUEST_QBE,
VBIC_QUEST_CQBE,
VBIC_QUEST_QBC,
VBIC_QUEST_CQBC,
VBIC_QUEST_QBX,
VBIC_QUEST_CQBX,
VBIC_QUEST_QBCP,
VBIC_QUEST_CQBCP,
VBIC_QUEST_CEXBC,
VBIC_QUEST_GEQCB,
VBIC_QUEST_GCSUB,
VBIC_QUEST_GDSUB,
VBIC_QUEST_GEQBX,
VBIC_QUEST_CBE,
VBIC_QUEST_CBEX,
VBIC_QUEST_CBC,
VBIC_QUEST_CBCX,
VBIC_QUEST_CBEP,
VBIC_QUEST_CBCP,
VBIC_QUEST_POWER,
};
/* model questions */
enum {
VBIC_MOD_COLLCONDUCT = 301,
VBIC_MOD_BASECONDUCT,
VBIC_MOD_EMITTERCONDUCT,
VBIC_MOD_SUBSTRATECONDUCT,
VBIC_MOD_TYPE,
};
#include "vbicext.h"
#endif /*VBIC*/