⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vbicload.c

📁 ngspice又一个电子CAD仿真软件代码.功能更全
💻 C
📖 第 1 页 / 共 5 页
字号:
            ,&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 + -