📄 vbicload.c
字号:
,&Qbco,&Qbco_Vbc,&Ibcp,&Ibcp_Vbcp,&Iccp,&Iccp_Vbep,&Iccp_Vbci ,&Iccp_Vbcp,&Irs,&Irs_Vrs,&Qbcp,&Qbcp_Vbcp,&SCALE); Ibe += ckt->CKTgmin*Vbei; Ibe_Vbei += ckt->CKTgmin; Ibex += ckt->CKTgmin*Vbex; Ibex_Vbex += ckt->CKTgmin; Ibc += ckt->CKTgmin*Vbci; Ibc_Vbci += ckt->CKTgmin; Ibep += ckt->CKTgmin*Vbep; Ibep_Vbep += ckt->CKTgmin; Irci += ckt->CKTgmin*Vrci; Irci_Vrci += ckt->CKTgmin; Irci_Vbci += ckt->CKTgmin; Irci_Vbcx += ckt->CKTgmin; Ibcp += ckt->CKTgmin*Vbcp; Ibcp_Vbcp += ckt->CKTgmin; if( (ckt->CKTmode & (MODETRAN | MODEAC)) || ((ckt->CKTmode & MODETRANOP) && (ckt->CKTmode & MODEUIC)) || (ckt->CKTmode & MODEINITSMSIG)) { *(ckt->CKTstate0 + here->VBICqbe) = Qbe; *(ckt->CKTstate0 + here->VBICqbex) = Qbex; *(ckt->CKTstate0 + here->VBICqbc) = Qbc; *(ckt->CKTstate0 + here->VBICqbcx) = Qbcx; *(ckt->CKTstate0 + here->VBICqbep) = Qbep; *(ckt->CKTstate0 + here->VBICqbeo) = Qbeo; *(ckt->CKTstate0 + here->VBICqbco) = Qbco; *(ckt->CKTstate0 + here->VBICqbcp) = Qbcp; here->VBICcapbe = Qbe_Vbei; here->VBICcapbex = Qbex_Vbex; here->VBICcapbc = Qbc_Vbci; here->VBICcapbcx = Qbcx_Vbcx; here->VBICcapbep = Qbep_Vbep; here->VBICcapbcp = Qbcp_Vbcp; /* * store small-signal parameters */ if ( (!(ckt->CKTmode & MODETRANOP))|| (!(ckt->CKTmode & MODEUIC)) ) { if(ckt->CKTmode & MODEINITSMSIG) { *(ckt->CKTstate0 + here->VBICcqbe) = Qbe_Vbei; *(ckt->CKTstate0 + here->VBICcqbeci) = Qbe_Vbci; *(ckt->CKTstate0 + here->VBICcqbex) = Qbex_Vbex; *(ckt->CKTstate0 + here->VBICcqbc) = Qbc_Vbci; *(ckt->CKTstate0 + here->VBICcqbcx) = Qbcx_Vbcx; *(ckt->CKTstate0 + here->VBICcqbep) = Qbep_Vbep; *(ckt->CKTstate0 + here->VBICcqbepci) = Qbep_Vbci; *(ckt->CKTstate0 + here->VBICcqbeo) = Qbeo_Vbe; *(ckt->CKTstate0 + here->VBICcqbco) = Qbco_Vbc; *(ckt->CKTstate0 + here->VBICcqbcp) = Qbcp_Vbcp; if(SenCond) { *(ckt->CKTstate0 + here->VBICibe) = Ibe; *(ckt->CKTstate0 + here->VBICibe_Vbei) = Ibe_Vbei; *(ckt->CKTstate0 + here->VBICibex) = Ibex; *(ckt->CKTstate0 + here->VBICibex_Vbex) = Ibex_Vbex; *(ckt->CKTstate0 + here->VBICitzf) = Itzf; *(ckt->CKTstate0 + here->VBICitzf_Vbei) = Itzf_Vbei; *(ckt->CKTstate0 + here->VBICitzf_Vbci) = Itzf_Vbci; *(ckt->CKTstate0 + here->VBICitzr) = Itzr; *(ckt->CKTstate0 + here->VBICitzr_Vbci) = Itzr_Vbci; *(ckt->CKTstate0 + here->VBICitzr_Vbei) = Itzr_Vbei; *(ckt->CKTstate0 + here->VBICibc) = Ibc; *(ckt->CKTstate0 + here->VBICibc_Vbci) = Ibc_Vbci; *(ckt->CKTstate0 + here->VBICibc_Vbei) = Ibc_Vbei; *(ckt->CKTstate0 + here->VBICibep) = Ibep; *(ckt->CKTstate0 + here->VBICibep_Vbep) = Ibep_Vbep; *(ckt->CKTstate0 + here->VBICirci) = Irci; *(ckt->CKTstate0 + here->VBICirci_Vrci) = Irci_Vrci; *(ckt->CKTstate0 + here->VBICirci_Vbci) = Irci_Vbci; *(ckt->CKTstate0 + here->VBICirci_Vbcx) = Irci_Vbcx; *(ckt->CKTstate0 + here->VBICirbi) = Irbi; *(ckt->CKTstate0 + here->VBICirbi_Vrbi) = Irbi_Vrbi; *(ckt->CKTstate0 + here->VBICirbi_Vbei) = Irbi_Vbei; *(ckt->CKTstate0 + here->VBICirbi_Vbci) = Irbi_Vbci; *(ckt->CKTstate0 + here->VBICirbp) = Irbp; *(ckt->CKTstate0 + here->VBICirbp_Vrbp) = Irbp_Vrbp; *(ckt->CKTstate0 + here->VBICirbp_Vbep) = Irbp_Vbep; *(ckt->CKTstate0 + here->VBICirbp_Vbci) = Irbp_Vbci; *(ckt->CKTstate0 + here->VBICgqbeo) = gqbeo; *(ckt->CKTstate0 + here->VBICgqbco) = gqbco; *(ckt->CKTstate0 + here->VBICibcp) = Ibcp; *(ckt->CKTstate0 + here->VBICibcp_Vbcp) = Ibcp_Vbcp; *(ckt->CKTstate0 + here->VBICiccp) = Iccp; *(ckt->CKTstate0 + here->VBICiccp_Vbep) = Iccp_Vbep; *(ckt->CKTstate0 + here->VBICiccp_Vbci) = Iccp_Vbci; *(ckt->CKTstate0 + here->VBICiccp_Vbcp) = Iccp_Vbcp; }#ifdef SENSDEBUG printf("storing small signal parameters for op\n"); printf("Cbe = %.7e, Cbex = %.7e\n", Qbe_Vbei, Qbex_Vbex); printf("Cbc = %.7e, Cbcx = %.7e\n", Qbc_Vbci, Qbcx_Vbcx); printf("gpi = %.7e\n", Ibe_Vbei); printf("gmu = %.7e, gm = %.7e\n", Ibc_Vbci, Itzf_Vbei); printf("go = %.7e, gx = %.7e\n", Itzf_Vbci, Irbi_Vrbi); printf("geqcb = %.7e, geqbx = %.7e\n", geqcb, geqbx); printf("cc = %.7e, cb = %.7e\n", Ibe+Itzf, Ibe);#endif /* SENSDEBUG */ continue; /* go to 1000 */ } /* * transient analysis */ if(SenCond && ckt->CKTsenInfo->SENmode == TRANSEN) { *(ckt->CKTstate0 + here->VBICibe) = Ibe; *(ckt->CKTstate0 + here->VBICibex) = Ibex; *(ckt->CKTstate0 + here->VBICitzf) = Itzf; *(ckt->CKTstate0 + here->VBICitzr) = Itzr; *(ckt->CKTstate0 + here->VBICibc) = Ibc; *(ckt->CKTstate0 + here->VBICibep) = Ibep; *(ckt->CKTstate0 + here->VBICirci) = Irci; *(ckt->CKTstate0 + here->VBICirbi) = Irbi; *(ckt->CKTstate0 + here->VBICirbp) = Irbp; *(ckt->CKTstate0 + here->VBICibcp) = Ibcp; *(ckt->CKTstate0 + here->VBICiccp) = Iccp; continue; } if(ckt->CKTmode & MODEINITTRAN) { *(ckt->CKTstate1 + here->VBICqbe) = *(ckt->CKTstate0 + here->VBICqbe) ; *(ckt->CKTstate1 + here->VBICqbex) = *(ckt->CKTstate0 + here->VBICqbex) ; *(ckt->CKTstate1 + here->VBICqbc) = *(ckt->CKTstate0 + here->VBICqbc) ; *(ckt->CKTstate1 + here->VBICqbcx) = *(ckt->CKTstate0 + here->VBICqbcx) ; *(ckt->CKTstate1 + here->VBICqbep) = *(ckt->CKTstate0 + here->VBICqbep) ; *(ckt->CKTstate1 + here->VBICqbeo) = *(ckt->CKTstate0 + here->VBICqbeo) ; *(ckt->CKTstate1 + here->VBICqbco) = *(ckt->CKTstate0 + here->VBICqbco) ; *(ckt->CKTstate1 + here->VBICqbcp) = *(ckt->CKTstate0 + here->VBICqbcp) ; } error = NIintegrate(ckt,&geq,&ceq,Qbe_Vbei,here->VBICqbe); if(error) return(error); Ibe_Vbei = Ibe_Vbei + geq; Ibe = Ibe + *(ckt->CKTstate0 + here->VBICcqbe); error = NIintegrate(ckt,&geq,&ceq,Qbex_Vbex,here->VBICqbex); if(error) return(error); Ibex_Vbex = Ibex_Vbex + geq; Ibex = Ibex + *(ckt->CKTstate0 + here->VBICcqbex); error = NIintegrate(ckt,&geq,&ceq,Qbc_Vbci,here->VBICqbc); if(error) return(error); Ibc_Vbci = Ibc_Vbci + geq; Ibc = Ibc + *(ckt->CKTstate0 + here->VBICcqbc); error = NIintegrate(ckt,&geq,&ceq,Qbcx_Vbcx,here->VBICqbcx); if(error) return(error); gbcx = geq; cbcx = *(ckt->CKTstate0 + here->VBICcqbcx); error = NIintegrate(ckt,&geq,&ceq,Qbep_Vbep,here->VBICqbep); if(error) return(error); Ibep_Vbep = Ibep_Vbep + geq; Ibep = Ibep + *(ckt->CKTstate0 + here->VBICcqbep); error = NIintegrate(ckt,&geq,&ceq,Qbcp_Vbcp,here->VBICqbcp); if(error) return(error); Ibcp_Vbcp = Ibcp_Vbcp + geq; Ibcp = Ibcp + *(ckt->CKTstate0 + here->VBICcqbcp); if(ckt->CKTmode & MODEINITTRAN) { *(ckt->CKTstate1 + here->VBICcqbe) = *(ckt->CKTstate0 + here->VBICcqbe); *(ckt->CKTstate1 + here->VBICcqbex) = *(ckt->CKTstate0 + here->VBICcqbex); *(ckt->CKTstate1 + here->VBICcqbc) = *(ckt->CKTstate0 + here->VBICcqbc); *(ckt->CKTstate1 + here->VBICcqbcx) = *(ckt->CKTstate0 + here->VBICcqbcx); *(ckt->CKTstate1 + here->VBICcqbep) = *(ckt->CKTstate0 + here->VBICcqbep); *(ckt->CKTstate1 + here->VBICcqbcp) = *(ckt->CKTstate0 + here->VBICcqbcp); } } } if(SenCond) goto next2; /* * check convergence */ if ( (!(ckt->CKTmode & MODEINITFIX))||(!(here->VBICoff))) { if (icheck == 1) { ckt->CKTnoncon++; ckt->CKTtroubleElt = (GENinstance *) here; } } /* * charge storage for outer b-e and b-c junctions */ if(ckt->CKTmode & (MODETRAN | MODEAC)) { error = NIintegrate(ckt,&gqbeo,&cqbeo,Qbeo_Vbe,here->VBICqbeo); if(error) return(error); error = NIintegrate(ckt,&gqbco,&cqbco,Qbco_Vbc,here->VBICqbco); if(error) return(error); if(ckt->CKTmode & MODEINITTRAN) { *(ckt->CKTstate1 + here->VBICcqbeo) = *(ckt->CKTstate0 + here->VBICcqbeo); *(ckt->CKTstate1 + here->VBICcqbco) = *(ckt->CKTstate0 + here->VBICcqbco); } }next2: *(ckt->CKTstate0 + here->VBICvbei) = Vbei; *(ckt->CKTstate0 + here->VBICvbex) = Vbex; *(ckt->CKTstate0 + here->VBICvbci) = Vbci; *(ckt->CKTstate0 + here->VBICvbcx) = Vbcx; *(ckt->CKTstate0 + here->VBICvbep) = Vbep; *(ckt->CKTstate0 + here->VBICvrci) = Vrci; *(ckt->CKTstate0 + here->VBICvrbi) = Vrbi; *(ckt->CKTstate0 + here->VBICvrbp) = Vrbp; *(ckt->CKTstate0 + here->VBICvbcp) = Vbcp; *(ckt->CKTstate0 + here->VBICibe) = Ibe; *(ckt->CKTstate0 + here->VBICibe_Vbei) = Ibe_Vbei; *(ckt->CKTstate0 + here->VBICibex) = Ibex; *(ckt->CKTstate0 + here->VBICibex_Vbex) = Ibex_Vbex; *(ckt->CKTstate0 + here->VBICitzf) = Itzf; *(ckt->CKTstate0 + here->VBICitzf_Vbei) = Itzf_Vbei; *(ckt->CKTstate0 + here->VBICitzf_Vbci) = Itzf_Vbci; *(ckt->CKTstate0 + here->VBICitzr) = Itzr; *(ckt->CKTstate0 + here->VBICitzr_Vbci) = Itzr_Vbci; *(ckt->CKTstate0 + here->VBICitzr_Vbei) = Itzr_Vbei; *(ckt->CKTstate0 + here->VBICibc) = Ibc; *(ckt->CKTstate0 + here->VBICibc_Vbci) = Ibc_Vbci; *(ckt->CKTstate0 + here->VBICibc_Vbei) = Ibc_Vbei; *(ckt->CKTstate0 + here->VBICibep) = Ibep; *(ckt->CKTstate0 + here->VBICibep_Vbep) = Ibep_Vbep; *(ckt->CKTstate0 + here->VBICirci) = Irci; *(ckt->CKTstate0 + here->VBICirci_Vrci) = Irci_Vrci; *(ckt->CKTstate0 + here->VBICirci_Vbci) = Irci_Vbci; *(ckt->CKTstate0 + here->VBICirci_Vbcx) = Irci_Vbcx; *(ckt->CKTstate0 + here->VBICirbi) = Irbi; *(ckt->CKTstate0 + here->VBICirbi_Vrbi) = Irbi_Vrbi; *(ckt->CKTstate0 + here->VBICirbi_Vbei) = Irbi_Vbei; *(ckt->CKTstate0 + here->VBICirbi_Vbci) = Irbi_Vbci; *(ckt->CKTstate0 + here->VBICirbp) = Irbp; *(ckt->CKTstate0 + here->VBICirbp_Vrbp) = Irbp_Vrbp; *(ckt->CKTstate0 + here->VBICirbp_Vbep) = Irbp_Vbep; *(ckt->CKTstate0 + here->VBICirbp_Vbci) = Irbp_Vbci; *(ckt->CKTstate0 + here->VBICgqbeo) = gqbeo;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -