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

📄 b4acld.c

📁 ngspice又一个电子CAD仿真软件代码.功能更全
💻 C
📖 第 1 页 / 共 2 页
字号:
                      gIgtots = gIstots + gIdtots + gIbtots;                      gIgtotb = gIstotb + gIdtotb + gIbtotb;                  }                  else                      gIgtotg = gIgtotd = gIgtots = gIgtotb = 0.0;                  if (here->BSIM4rgateMod == 2)                      T0 = *(ckt->CKTstates[0] + here->BSIM4vges)                         - *(ckt->CKTstates[0] + here->BSIM4vgs);                  else if (here->BSIM4rgateMod == 3)                      T0 = *(ckt->CKTstates[0] + here->BSIM4vgms)                         - *(ckt->CKTstates[0] + here->BSIM4vgs);                  if (here->BSIM4rgateMod > 1)                  {   gcrgd = here->BSIM4gcrgs * T0;                      gcrgg = here->BSIM4gcrgg * T0;                      gcrgs = here->BSIM4gcrgd * T0;                      gcrgb = here->BSIM4gcrgb * T0;                      gcrgg -= here->BSIM4gcrg;                      gcrg = here->BSIM4gcrg;                  }                  else                      gcrg = gcrgd = gcrgg = gcrgs = gcrgb = 0.0;                  if (here->BSIM4rgateMod == 3)                  {   xcgmgmb = (cgdo + cgso + pParam->BSIM4cgbo) * omega;                      xcgmdb = -cgdo * omega;                      xcgmsb = -cgso * omega;                      xcgmbb = -pParam->BSIM4cgbo * omega;                          xcdgmb = xcgmdb;                      xcsgmb = xcgmsb;                      xcbgmb = xcgmbb;                         xcggbr = Cggr * omega;                      xcgdbr = Cgsr * omega;                      xcgsbr = Cgdr * omega;                      xcgbbr = -(xcggbr + xcgdbr + xcgsbr);                          xcdgbr = Csgr * omega;                      xcsgbr = Cdgr * omega;                      xcbgb = here->BSIM4cbgb * omega;                  }                  else                  {   xcggbr = (Cggr + cgdo + cgso + pParam->BSIM4cgbo ) * omega;                      xcgdbr = (Cgsr - cgdo) * omega;                      xcgsbr = (Cgdr - cgso) * omega;                      xcgbbr = -(xcggbr + xcgdbr + xcgsbr);                          xcdgbr = (Csgr - cgdo) * omega;                      xcsgbr = (Cdgr - cgso) * omega;                      xcbgb = (here->BSIM4cbgb - pParam->BSIM4cgbo) * omega;                          xcdgmb = xcsgmb = xcbgmb = 0.0;                  }                  xcddbr = (here->BSIM4capbd + cgdo + Cssr) * omega;                  xcdsbr = Csdr * omega;                  xcsdbr = Cdsr * omega;                  xcssbr = (Cddr + here->BSIM4capbs + cgso) * omega;                      if (!here->BSIM4rbodyMod)                  {   xcdbbr = -(xcdgbr + xcddbr + xcdsbr + xcdgmb);                      xcsbbr = -(xcsgbr + xcsdbr + xcssbr + xcsgmb);                      xcbdb = (here->BSIM4cbsb - here->BSIM4capbd) * omega;                      xcbsb = (here->BSIM4cbdb - here->BSIM4capbs) * omega;                      xcdbdb = 0.0;                  }                  else                  {   xcdbbr = -(xcdgbr + xcddbr + xcdsbr + xcdgmb)                             + here->BSIM4capbd * omega;                      xcsbbr = Cdbr * omega;                      xcbdb = here->BSIM4cbsb * omega;                      xcbsb = here->BSIM4cbdb * omega;                      xcdbdb = -here->BSIM4capbd * omega;                      xcsbsb = -here->BSIM4capbs * omega;                  }                  xcbbb = -(xcbgb + xcbdb + xcbsb + xcbgmb);                  xcdgbi = Csgi;                  xcsgbi = Cdgi;                  xcddbi = Cssi;                  xcdsbi = Csdi;                  xcsdbi = Cdsi;                  xcssbi = Cddi;                  xcdbbi = Csbi;                  xcsbbi = Cdbi;                  xcggbi = Cggi;                  xcgdbi = Cgsi;                  xcgsbi = Cgdi;                  xcgbbi = Cgbi;              }              if (model->BSIM4rdsMod == 1)              {   gstot = here->BSIM4gstot;                  gstotd = here->BSIM4gstotd;                  gstotg = here->BSIM4gstotg;                  gstots = here->BSIM4gstots - gstot;                  gstotb = here->BSIM4gstotb;                  gdtot = here->BSIM4gdtot;                  gdtotd = here->BSIM4gdtotd - gdtot;                  gdtotg = here->BSIM4gdtotg;                  gdtots = here->BSIM4gdtots;                  gdtotb = here->BSIM4gdtotb;              }              else              {   gstot = gstotd = gstotg = gstots = gstotb = 0.0;                  gdtot = gdtotd = gdtotg = gdtots = gdtotb = 0.0;              }              /*               * Loading AC matrix               */   	          m = here->BSIM4m;              if (!model->BSIM4rdsMod)              {   gdpr = here->BSIM4drainConductance;                  gspr = here->BSIM4sourceConductance;              }              else                  gdpr = gspr = 0.0;              if (!here->BSIM4rbodyMod)              {   gjbd = here->BSIM4gbd;                  gjbs = here->BSIM4gbs;              }              else                  gjbd = gjbs = 0.0;              geltd = here->BSIM4grgeltd;              if (here->BSIM4rgateMod == 1)              {   *(here->BSIM4GEgePtr) += m * geltd;                  *(here->BSIM4GPgePtr) -= m * geltd;                  *(here->BSIM4GEgpPtr) -= m * geltd;                  *(here->BSIM4GPgpPtr +1) += m * xcggbr;		  *(here->BSIM4GPgpPtr) += m * (geltd + xcggbi + gIgtotg);                  *(here->BSIM4GPdpPtr +1) += m * xcgdbr;                  *(here->BSIM4GPdpPtr) += m * (xcgdbi + gIgtotd);                  *(here->BSIM4GPspPtr +1) += m * xcgsbr;                  *(here->BSIM4GPspPtr) += m * (xcgsbi + gIgtots);                  *(here->BSIM4GPbpPtr +1) += m * xcgbbr;                  *(here->BSIM4GPbpPtr) += m * (xcgbbi + gIgtotb);              } /* WDLiu: gcrg already subtracted from all gcrgg below */              else if (here->BSIM4rgateMod == 2)              {   *(here->BSIM4GEgePtr) += m * gcrg;                  *(here->BSIM4GEgpPtr) += m * gcrgg;                  *(here->BSIM4GEdpPtr) += m * gcrgd;                  *(here->BSIM4GEspPtr) += m * gcrgs;                  *(here->BSIM4GEbpPtr) += m * gcrgb;                  *(here->BSIM4GPgePtr) -= m * gcrg;                  *(here->BSIM4GPgpPtr +1) += m * xcggbr;		  *(here->BSIM4GPgpPtr) -= m * (gcrgg - xcggbi - gIgtotg);                  *(here->BSIM4GPdpPtr +1) += m * xcgdbr;		  *(here->BSIM4GPdpPtr) -= m * (gcrgd - xcgdbi - gIgtotd);                  *(here->BSIM4GPspPtr +1) += m * xcgsbr;		  *(here->BSIM4GPspPtr) -= m * (gcrgs - xcgsbi - gIgtots);                  *(here->BSIM4GPbpPtr +1) += m * xcgbbr;		  *(here->BSIM4GPbpPtr) -= m * (gcrgb - xcgbbi - gIgtotb);              }              else if (here->BSIM4rgateMod == 3)              {   *(here->BSIM4GEgePtr) += m * geltd;                  *(here->BSIM4GEgmPtr) -= m * geltd;                  *(here->BSIM4GMgePtr) -= m * geltd;                  *(here->BSIM4GMgmPtr) += m * (geltd + gcrg);                  *(here->BSIM4GMgmPtr +1) += m * xcgmgmb;                     *(here->BSIM4GMdpPtr) += m * gcrgd;                  *(here->BSIM4GMdpPtr +1) += m * xcgmdb;                  *(here->BSIM4GMgpPtr) += m * gcrgg;                  *(here->BSIM4GMspPtr) += m * gcrgs;                  *(here->BSIM4GMspPtr +1) += m * xcgmsb;                  *(here->BSIM4GMbpPtr) += m * gcrgb;                  *(here->BSIM4GMbpPtr +1) += m * xcgmbb;                     *(here->BSIM4DPgmPtr +1) += m * xcdgmb;                  *(here->BSIM4GPgmPtr) -= m * gcrg;                  *(here->BSIM4SPgmPtr +1) += m * xcsgmb;                  *(here->BSIM4BPgmPtr +1) += m * xcbgmb;                     *(here->BSIM4GPgpPtr) -= m * (gcrgg - xcggbi - gIgtotg);                  *(here->BSIM4GPgpPtr +1) += m * xcggbr;                  *(here->BSIM4GPdpPtr) -= m * (gcrgd - xcgdbi - gIgtotd);                  *(here->BSIM4GPdpPtr +1) += m * xcgdbr;                  *(here->BSIM4GPspPtr) -= m * (gcrgs - xcgsbi - gIgtots);                  *(here->BSIM4GPspPtr +1) += m * xcgsbr;                  *(here->BSIM4GPbpPtr) -= m * (gcrgb - xcgbbi - gIgtotb);                  *(here->BSIM4GPbpPtr +1) += m * xcgbbr;              }              else              {   *(here->BSIM4GPgpPtr +1) += m * xcggbr;                  *(here->BSIM4GPgpPtr) += m * (xcggbi + gIgtotg);                  *(here->BSIM4GPdpPtr +1) += m * xcgdbr;                  *(here->BSIM4GPdpPtr) += m * (xcgdbi + gIgtotd);                  *(here->BSIM4GPspPtr +1) += m * xcgsbr;                  *(here->BSIM4GPspPtr) += m * (xcgsbi + gIgtots);                  *(here->BSIM4GPbpPtr +1) += m * xcgbbr;                  *(here->BSIM4GPbpPtr) += m * (xcgbbi + gIgtotb);              }              if (model->BSIM4rdsMod)              {   (*(here->BSIM4DgpPtr) += m * gdtotg);                  (*(here->BSIM4DspPtr) += m * gdtots);                  (*(here->BSIM4DbpPtr) += m * gdtotb);                  (*(here->BSIM4SdpPtr) += m * gstotd);                  (*(here->BSIM4SgpPtr) += m * gstotg);                  (*(here->BSIM4SbpPtr) += m * gstotb);              }              *(here->BSIM4DPdpPtr +1) += m * (xcddbr + gdsi + RevSumi);              *(here->BSIM4DPdpPtr) += m * (gdpr + xcddbi + gdsr + here->BSIM4gbd 				     - gdtotd + RevSumr + gbdpdp - gIdtotd);              *(here->BSIM4DPdPtr) -= m * (gdpr + gdtot);              *(here->BSIM4DPgpPtr +1) += m * (xcdgbr + Gmi);              *(here->BSIM4DPgpPtr) += m * (Gmr + xcdgbi - gdtotg + gbdpg - gIdtotg);              *(here->BSIM4DPspPtr +1) += m * (xcdsbr - gdsi - FwdSumi);              *(here->BSIM4DPspPtr) -= m * (gdsr - xcdsbi + FwdSumr + gdtots - gbdpsp + gIdtots);              *(here->BSIM4DPbpPtr +1) += m * (xcdbbr + Gmbsi);              *(here->BSIM4DPbpPtr) -= m * (gjbd + gdtotb - xcdbbi - Gmbsr - gbdpb + gIdtotb);              *(here->BSIM4DdpPtr) -= m * (gdpr - gdtotd);              *(here->BSIM4DdPtr) += m * (gdpr + gdtot);              *(here->BSIM4SPdpPtr +1) += m * (xcsdbr - gdsi - RevSumi);              *(here->BSIM4SPdpPtr) -= m * (gdsr - xcsdbi + gstotd + RevSumr - gbspdp + gIstotd);              *(here->BSIM4SPgpPtr +1) += m * (xcsgbr - Gmi);              *(here->BSIM4SPgpPtr) -= m * (Gmr - xcsgbi + gstotg - gbspg + gIstotg);              *(here->BSIM4SPspPtr +1) += m * (xcssbr + gdsi + FwdSumi);              *(here->BSIM4SPspPtr) += m * (gspr + xcssbi + gdsr + here->BSIM4gbs				     - gstots + FwdSumr + gbspsp - gIstots);              *(here->BSIM4SPsPtr) -= m * (gspr + gstot);              *(here->BSIM4SPbpPtr +1) += m * (xcsbbr - Gmbsi);              *(here->BSIM4SPbpPtr) -= m * (gjbs + gstotb - xcsbbi + Gmbsr - gbspb + gIstotb);              *(here->BSIM4SspPtr) -= m * (gspr - gstots);              *(here->BSIM4SsPtr) += m * (gspr + gstot);              *(here->BSIM4BPdpPtr +1) += m * xcbdb;              *(here->BSIM4BPdpPtr) -= m * (gjbd - gbbdp + gIbtotd);              *(here->BSIM4BPgpPtr +1) += m * xcbgb;              *(here->BSIM4BPgpPtr) -= m * (here->BSIM4gbgs + gIbtotg);              *(here->BSIM4BPspPtr +1) += m * xcbsb;              *(here->BSIM4BPspPtr) -= m * (gjbs - gbbsp + gIbtots);              *(here->BSIM4BPbpPtr +1) += m * xcbbb;              *(here->BSIM4BPbpPtr) += m * (gjbd + gjbs - here->BSIM4gbbs				     - gIbtotb);           ggidld = here->BSIM4ggidld;           ggidlg = here->BSIM4ggidlg;           ggidlb = here->BSIM4ggidlb;           ggislg = here->BSIM4ggislg;           ggisls = here->BSIM4ggisls;           ggislb = here->BSIM4ggislb;           /* stamp gidl */           (*(here->BSIM4DPdpPtr) += m * ggidld);           (*(here->BSIM4DPgpPtr) += m * ggidlg);           (*(here->BSIM4DPspPtr) -= m * ((ggidlg + ggidld) + ggidlb));           (*(here->BSIM4DPbpPtr) += m * ggidlb);           (*(here->BSIM4BPdpPtr) -= m * ggidld);           (*(here->BSIM4BPgpPtr) -= m * ggidlg);           (*(here->BSIM4BPspPtr) += m * ((ggidlg + ggidld) + ggidlb));           (*(here->BSIM4BPbpPtr) -= m * ggidlb);            /* stamp gisl */           (*(here->BSIM4SPdpPtr) -= m * ((ggisls + ggislg) + ggislb));           (*(here->BSIM4SPgpPtr) += m * ggislg);           (*(here->BSIM4SPspPtr) += m * ggisls);           (*(here->BSIM4SPbpPtr) += m * ggislb);           (*(here->BSIM4BPdpPtr) += m * ((ggislg + ggisls) + ggislb));           (*(here->BSIM4BPgpPtr) -= m * ggislg);           (*(here->BSIM4BPspPtr) -= m * ggisls);           (*(here->BSIM4BPbpPtr) -= m * ggislb);              if (here->BSIM4rbodyMod)              {   (*(here->BSIM4DPdbPtr +1) += m * xcdbdb);                  (*(here->BSIM4DPdbPtr) -= m * here->BSIM4gbd);                  (*(here->BSIM4SPsbPtr +1) += m * xcsbsb);                  (*(here->BSIM4SPsbPtr) -= m * here->BSIM4gbs);                  (*(here->BSIM4DBdpPtr +1) += m * xcdbdb);                  (*(here->BSIM4DBdpPtr) -= m * here->BSIM4gbd);                  (*(here->BSIM4DBdbPtr +1) -= m * xcdbdb);                  (*(here->BSIM4DBdbPtr) += m * (here->BSIM4gbd + here->BSIM4grbpd                                           + here->BSIM4grbdb));                  (*(here->BSIM4DBbpPtr) -= m * here->BSIM4grbpd);                  (*(here->BSIM4DBbPtr) -= m * here->BSIM4grbdb);                  (*(here->BSIM4BPdbPtr) -= m * here->BSIM4grbpd);                  (*(here->BSIM4BPbPtr) -= m * here->BSIM4grbpb);                  (*(here->BSIM4BPsbPtr) -= m * here->BSIM4grbps);                  (*(here->BSIM4BPbpPtr) += m * (here->BSIM4grbpd + here->BSIM4grbps 					  + here->BSIM4grbpb));		  /* WDLiu: (-here->BSIM4gbbs) already added to BPbpPtr */                  (*(here->BSIM4SBspPtr +1) += m * xcsbsb);                  (*(here->BSIM4SBspPtr) -= m * here->BSIM4gbs);                  (*(here->BSIM4SBbpPtr) -= m * here->BSIM4grbps);                  (*(here->BSIM4SBbPtr) -= m * here->BSIM4grbsb);                  (*(here->BSIM4SBsbPtr +1) -= m * xcsbsb);                  (*(here->BSIM4SBsbPtr) += m * (here->BSIM4gbs					  + here->BSIM4grbps + here->BSIM4grbsb));                  (*(here->BSIM4BdbPtr) -= m * here->BSIM4grbdb);                  (*(here->BSIM4BbpPtr) -= m * here->BSIM4grbpb);                  (*(here->BSIM4BsbPtr) -= m * here->BSIM4grbsb);                  (*(here->BSIM4BbPtr) += m * (here->BSIM4grbsb + here->BSIM4grbdb                                        + here->BSIM4grbpb));              }	   /*	    * WDLiu: The internal charge node generated for transient NQS is not needed for	    *        AC NQS. The following is not doing a real job, but we have to keep it;	    *        otherwise a singular AC NQS matrix may occur if the transient NQS is on.	    *        The charge node is isolated from the instance.	    */           if (here->BSIM4trnqsMod)           {   (*(here->BSIM4QqPtr) += m * 1.0);               (*(here->BSIM4QgpPtr) += 0.0);               (*(here->BSIM4QdpPtr) += 0.0);               (*(here->BSIM4QspPtr) += 0.0);               (*(here->BSIM4QbpPtr) += 0.0);               (*(here->BSIM4DPqPtr) += 0.0);               (*(here->BSIM4SPqPtr) += 0.0);               (*(here->BSIM4GPqPtr) += 0.0);           }         }    }    return(OK);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -