diff --git a/src/spicelib/devices/vdmos/vdmosbindCSC.c b/src/spicelib/devices/vdmos/vdmosbindCSC.c index 05fcfa37e..1d85b47df 100644 --- a/src/spicelib/devices/vdmos/vdmosbindCSC.c +++ b/src/spicelib/devices/vdmos/vdmosbindCSC.c @@ -25,58 +25,61 @@ VDMOSbindCSC (GENmodel *inModel, CKTcircuit *ckt) /* loop through all the instances of the model */ for (here = VDMOSinstances(model); here != NULL ; here = VDMOSnextInstance(here)) { - if ((here->VDMOSthermalGiven) && (model->VDMOSrthjcGiven)) { - CREATE_KLU_BINDING_TABLE(VDMOSTemptempPtr, VDMOSTemptempBinding, VDMOStempNode, VDMOStempNode); /* Transistor thermal contribution */ - CREATE_KLU_BINDING_TABLE(VDMOSTempdpPtr, VDMOSTempdpBinding, VDMOStempNode, VDMOSdNodePrime); - CREATE_KLU_BINDING_TABLE(VDMOSTempspPtr, VDMOSTempspBinding, VDMOStempNode, VDMOSsNodePrime); - CREATE_KLU_BINDING_TABLE(VDMOSTempgpPtr, VDMOSTempgpBinding, VDMOStempNode, VDMOSgNodePrime); - CREATE_KLU_BINDING_TABLE(VDMOSGPtempPtr, VDMOSGPtempBinding, VDMOSgNodePrime, VDMOStempNode); - CREATE_KLU_BINDING_TABLE(VDMOSDPtempPtr, VDMOSDPtempBinding, VDMOSdNodePrime, VDMOStempNode); - CREATE_KLU_BINDING_TABLE(VDMOSSPtempPtr, VDMOSSPtempBinding, VDMOSsNodePrime, VDMOStempNode); - - CREATE_KLU_BINDING_TABLE(VDIOTempposPrimePtr, VDIOTempposPrimeBinding, VDMOStempNode, VDIOposPrimeNode);/* Diode thermal contribution */ - CREATE_KLU_BINDING_TABLE(VDIOTempnegPtr, VDIOTempnegBinding, VDMOStempNode, VDMOSdNode); - CREATE_KLU_BINDING_TABLE(VDIOPosPrimetempPtr, VDIOPosPrimetempBinding, VDIOposPrimeNode, VDMOStempNode); - CREATE_KLU_BINDING_TABLE(VDIONegtempPtr, VDIONegtempBinding, VDMOSdNode, VDMOStempNode); - - CREATE_KLU_BINDING_TABLE(VDMOSTcasetcasePtr, VDMOSTcasetcaseBinding, VDMOStcaseNode, VDMOStcaseNode); /* Rthjc between tj and tcase*/ - CREATE_KLU_BINDING_TABLE(VDMOSTcasetempPtr, VDMOSTcasetempBinding, VDMOStcaseNode, VDMOStempNode); - CREATE_KLU_BINDING_TABLE(VDMOSTemptcasePtr, VDMOSTemptcaseBinding, VDMOStempNode, VDMOStcaseNode); - CREATE_KLU_BINDING_TABLE(VDMOSTptpPtr, VDMOSTptpBinding, VDMOStNodePrime, VDMOStNodePrime); /* Rthca between tcase and Vsrc */ - CREATE_KLU_BINDING_TABLE(VDMOSTptcasePtr, VDMOSTptcaseBinding, VDMOStNodePrime, VDMOStempNode); - CREATE_KLU_BINDING_TABLE(VDMOSTcasetpPtr, VDMOSTcasetpBinding, VDMOStempNode, VDMOStNodePrime); - CREATE_KLU_BINDING_TABLE(VDMOSCktTcktTPtr, VDMOSCktTcktTBinding, VDMOSvcktTbranch, VDMOSvcktTbranch); /* Vsrc=cktTemp to gnd */ - CREATE_KLU_BINDING_TABLE(VDMOSCktTtpPtr, VDMOSCktTtpBinding, VDMOSvcktTbranch, VDMOStNodePrime); - CREATE_KLU_BINDING_TABLE(VDMOSTpcktTPtr, VDMOSTpcktTBinding, VDMOStNodePrime, VDMOSvcktTbranch); - } - CREATE_KLU_BINDING_TABLE(VDMOSDdPtr, VDMOSDdBinding, VDMOSdNode, VDMOSdNode); - CREATE_KLU_BINDING_TABLE(VDMOSGgPtr, VDMOSGgBinding, VDMOSgNode, VDMOSgNode); - CREATE_KLU_BINDING_TABLE(VDMOSSsPtr, VDMOSSsBinding, VDMOSsNode, VDMOSsNode); + CREATE_KLU_BINDING_TABLE(VDMOSDdPtr, VDMOSDdBinding, VDMOSdNode, VDMOSdNode); + CREATE_KLU_BINDING_TABLE(VDMOSGgPtr, VDMOSGgBinding, VDMOSgNode, VDMOSgNode); + CREATE_KLU_BINDING_TABLE(VDMOSSsPtr, VDMOSSsBinding, VDMOSsNode, VDMOSsNode); CREATE_KLU_BINDING_TABLE(VDMOSDPdpPtr, VDMOSDPdpBinding, VDMOSdNodePrime, VDMOSdNodePrime); CREATE_KLU_BINDING_TABLE(VDMOSSPspPtr, VDMOSSPspBinding, VDMOSsNodePrime, VDMOSsNodePrime); CREATE_KLU_BINDING_TABLE(VDMOSGPgpPtr, VDMOSGPgpBinding, VDMOSgNodePrime, VDMOSgNodePrime); - CREATE_KLU_BINDING_TABLE(VDMOSDdpPtr, VDMOSDdpBinding, VDMOSdNode, VDMOSdNodePrime); + CREATE_KLU_BINDING_TABLE(VDMOSDdpPtr, VDMOSDdpBinding, VDMOSdNode, VDMOSdNodePrime); CREATE_KLU_BINDING_TABLE(VDMOSGPdpPtr, VDMOSGPdpBinding, VDMOSgNodePrime, VDMOSdNodePrime); CREATE_KLU_BINDING_TABLE(VDMOSGPspPtr, VDMOSGPspBinding, VDMOSgNodePrime, VDMOSsNodePrime); - CREATE_KLU_BINDING_TABLE(VDMOSSspPtr, VDMOSSspBinding, VDMOSsNode, VDMOSsNodePrime); + CREATE_KLU_BINDING_TABLE(VDMOSSspPtr, VDMOSSspBinding, VDMOSsNode, VDMOSsNodePrime); CREATE_KLU_BINDING_TABLE(VDMOSDPspPtr, VDMOSDPspBinding, VDMOSdNodePrime, VDMOSsNodePrime); - CREATE_KLU_BINDING_TABLE(VDMOSDPdPtr, VDMOSDPdBinding, VDMOSdNodePrime, VDMOSdNode); + CREATE_KLU_BINDING_TABLE(VDMOSDPdPtr, VDMOSDPdBinding, VDMOSdNodePrime, VDMOSdNode); CREATE_KLU_BINDING_TABLE(VDMOSDPgpPtr, VDMOSDPgpBinding, VDMOSdNodePrime, VDMOSgNodePrime); CREATE_KLU_BINDING_TABLE(VDMOSSPgpPtr, VDMOSSPgpBinding, VDMOSsNodePrime, VDMOSgNodePrime); - CREATE_KLU_BINDING_TABLE(VDMOSSPsPtr, VDMOSSPsBinding, VDMOSsNodePrime, VDMOSsNode); + CREATE_KLU_BINDING_TABLE(VDMOSSPsPtr, VDMOSSPsBinding, VDMOSsNodePrime, VDMOSsNode); CREATE_KLU_BINDING_TABLE(VDMOSSPdpPtr, VDMOSSPdpBinding, VDMOSsNodePrime, VDMOSdNodePrime); - CREATE_KLU_BINDING_TABLE(VDMOSGgpPtr, VDMOSGgpBinding, VDMOSgNode, VDMOSgNodePrime); + CREATE_KLU_BINDING_TABLE(VDMOSGgpPtr, VDMOSGgpBinding, VDMOSgNode, VDMOSgNodePrime); CREATE_KLU_BINDING_TABLE(VDMOSGPgPtr, VDMOSGPgBinding, VDMOSgNodePrime, VDMOSgNode); CREATE_KLU_BINDING_TABLE(VDMOSDsPtr, VDMOSDsBinding, VDMOSdNode, VDMOSsNode); CREATE_KLU_BINDING_TABLE(VDMOSSdPtr, VDMOSSdBinding, VDMOSsNode, VDMOSdNode); - CREATE_KLU_BINDING_TABLE(VDIORPdPtr, VDIORPdBinding, VDIOposPrimeNode, VDMOSdNode); - CREATE_KLU_BINDING_TABLE(VDIODrpPtr, VDIODrpBinding, VDMOSdNode, VDIOposPrimeNode); - CREATE_KLU_BINDING_TABLE(VDIOSrpPtr, VDIOSrpBinding, VDMOSsNode, VDIOposPrimeNode); - CREATE_KLU_BINDING_TABLE(VDIORPsPtr, VDIORPsBinding, VDIOposPrimeNode, VDMOSsNode); + CREATE_KLU_BINDING_TABLE(VDIORPdPtr, VDIORPdBinding, VDIOposPrimeNode, VDMOSdNode); + CREATE_KLU_BINDING_TABLE(VDIODrpPtr, VDIODrpBinding, VDMOSdNode, VDIOposPrimeNode); + CREATE_KLU_BINDING_TABLE(VDIOSrpPtr, VDIOSrpBinding, VDMOSsNode, VDIOposPrimeNode); + CREATE_KLU_BINDING_TABLE(VDIORPsPtr, VDIORPsBinding, VDIOposPrimeNode, VDMOSsNode); CREATE_KLU_BINDING_TABLE(VDIORPrpPtr, VDIORPrpBinding, VDIOposPrimeNode, VDIOposPrimeNode); + + if ((here->VDMOSthermal) && (model->VDMOSrthjcGiven)) { + CREATE_KLU_BINDING_TABLE(VDMOSTemptempPtr, VDMOSTemptempBinding, VDMOStempNode, VDMOStempNode); /* Transistor thermal contribution */ + CREATE_KLU_BINDING_TABLE(VDMOSTempdpPtr, VDMOSTempdpBinding, VDMOStempNode, VDMOSdNodePrime); + CREATE_KLU_BINDING_TABLE(VDMOSTempspPtr, VDMOSTempspBinding, VDMOStempNode, VDMOSsNodePrime); + CREATE_KLU_BINDING_TABLE(VDMOSTempgpPtr, VDMOSTempgpBinding, VDMOStempNode, VDMOSgNodePrime); + CREATE_KLU_BINDING_TABLE(VDMOSGPtempPtr, VDMOSGPtempBinding, VDMOSgNodePrime, VDMOStempNode); + CREATE_KLU_BINDING_TABLE(VDMOSDPtempPtr, VDMOSDPtempBinding, VDMOSdNodePrime, VDMOStempNode); + CREATE_KLU_BINDING_TABLE(VDMOSSPtempPtr, VDMOSSPtempBinding, VDMOSsNodePrime, VDMOStempNode); + + CREATE_KLU_BINDING_TABLE(VDIOTempposPrimePtr, VDIOTempposPrimeBinding, VDMOStempNode, VDIOposPrimeNode);/* Diode thermal contribution */ + CREATE_KLU_BINDING_TABLE(VDMOSTempdPtr, VDMOSTempdBinding, VDMOStempNode, VDMOSdNode); + CREATE_KLU_BINDING_TABLE(VDIOPosPrimetempPtr, VDIOPosPrimetempBinding, VDIOposPrimeNode, VDMOStempNode); + CREATE_KLU_BINDING_TABLE(VDMOSDtempPtr, VDMOSDtempBinding, VDMOSdNode, VDMOStempNode); + CREATE_KLU_BINDING_TABLE(VDMOStempSPtr, VDMOStempSBinding, VDMOStempNode, VDMOSsNode); + CREATE_KLU_BINDING_TABLE(VDMOSSTempPtr, VDMOSSTempBinding, VDMOSsNode, VDMOStempNode); + + CREATE_KLU_BINDING_TABLE(VDMOSTcasetcasePtr, VDMOSTcasetcaseBinding, VDMOStcaseNode, VDMOStcaseNode); /* Rthjc between tj and tcase*/ + CREATE_KLU_BINDING_TABLE(VDMOSTcasetempPtr, VDMOSTcasetempBinding, VDMOStcaseNode, VDMOStempNode); + CREATE_KLU_BINDING_TABLE(VDMOSTemptcasePtr, VDMOSTemptcaseBinding, VDMOStempNode, VDMOStcaseNode); + CREATE_KLU_BINDING_TABLE(VDMOSTptpPtr, VDMOSTptpBinding, VDMOStNodePrime, VDMOStNodePrime); /* Rthca between tcase and Vsrc */ + CREATE_KLU_BINDING_TABLE(VDMOSTptcasePtr, VDMOSTptcaseBinding, VDMOStNodePrime, VDMOStempNode); + CREATE_KLU_BINDING_TABLE(VDMOSTcasetpPtr, VDMOSTcasetpBinding, VDMOStempNode, VDMOStNodePrime); + CREATE_KLU_BINDING_TABLE(VDMOSCktTcktTPtr, VDMOSCktTcktTBinding, VDMOSvcktTbranch, VDMOSvcktTbranch); /* Vsrc=cktTemp to gnd */ + CREATE_KLU_BINDING_TABLE(VDMOSCktTtpPtr, VDMOSCktTtpBinding, VDMOSvcktTbranch, VDMOStNodePrime); + CREATE_KLU_BINDING_TABLE(VDMOSTpcktTPtr, VDMOSTpcktTBinding, VDMOStNodePrime, VDMOSvcktTbranch); + } } } @@ -97,58 +100,61 @@ VDMOSbindCSCComplex (GENmodel *inModel, CKTcircuit *ckt) /* loop through all the instances of the model */ for (here = VDMOSinstances(model); here != NULL ; here = VDMOSnextInstance(here)) { - if ((here->VDMOSthermalGiven) && (model->VDMOSrthjcGiven)) { - CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VDMOSTemptempPtr, VDMOSTemptempBinding, VDMOStempNode, VDMOStempNode); /* Transistor thermal contribution */ - CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VDMOSTempdpPtr, VDMOSTempdpBinding, VDMOStempNode, VDMOSdNodePrime); - CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VDMOSTempspPtr, VDMOSTempspBinding, VDMOStempNode, VDMOSsNodePrime); - CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VDMOSTempgpPtr, VDMOSTempgpBinding, VDMOStempNode, VDMOSgNodePrime); - CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VDMOSGPtempPtr, VDMOSGPtempBinding, VDMOSgNodePrime, VDMOStempNode); - CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VDMOSDPtempPtr, VDMOSDPtempBinding, VDMOSdNodePrime, VDMOStempNode); - CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VDMOSSPtempPtr, VDMOSSPtempBinding, VDMOSsNodePrime, VDMOStempNode); - - CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VDIOTempposPrimePtr, VDIOTempposPrimeBinding, VDMOStempNode, VDIOposPrimeNode);/* Diode thermal contribution */ - CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VDIOTempnegPtr, VDIOTempnegBinding, VDMOStempNode, VDMOSdNode); - CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VDIOPosPrimetempPtr, VDIOPosPrimetempBinding, VDIOposPrimeNode, VDMOStempNode); - CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VDIONegtempPtr, VDIONegtempBinding, VDMOSdNode, VDMOStempNode); - - CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VDMOSTcasetcasePtr, VDMOSTcasetcaseBinding, VDMOStcaseNode, VDMOStcaseNode); /* Rthjc between tj and tcase*/ - CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VDMOSTcasetempPtr, VDMOSTcasetempBinding, VDMOStcaseNode, VDMOStempNode); - CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VDMOSTemptcasePtr, VDMOSTemptcaseBinding, VDMOStempNode, VDMOStcaseNode); - CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VDMOSTptpPtr, VDMOSTptpBinding, VDMOStNodePrime, VDMOStNodePrime); /* Rthca between tcase and Vsrc */ - CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VDMOSTptcasePtr, VDMOSTptcaseBinding, VDMOStNodePrime, VDMOStempNode); - CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VDMOSTcasetpPtr, VDMOSTcasetpBinding, VDMOStempNode, VDMOStNodePrime); - CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VDMOSCktTcktTPtr, VDMOSCktTcktTBinding, VDMOSvcktTbranch, VDMOSvcktTbranch); /* Vsrc=cktTemp to gnd */ - CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VDMOSCktTtpPtr, VDMOSCktTtpBinding, VDMOSvcktTbranch, VDMOStNodePrime); - CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VDMOSTpcktTPtr, VDMOSTpcktTBinding, VDMOStNodePrime, VDMOSvcktTbranch); - } - CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VDMOSDdPtr, VDMOSDdBinding, VDMOSdNode, VDMOSdNode); - CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VDMOSGgPtr, VDMOSGgBinding, VDMOSgNode, VDMOSgNode); - CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VDMOSSsPtr, VDMOSSsBinding, VDMOSsNode, VDMOSsNode); + CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VDMOSDdPtr, VDMOSDdBinding, VDMOSdNode, VDMOSdNode); + CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VDMOSGgPtr, VDMOSGgBinding, VDMOSgNode, VDMOSgNode); + CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VDMOSSsPtr, VDMOSSsBinding, VDMOSsNode, VDMOSsNode); CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VDMOSDPdpPtr, VDMOSDPdpBinding, VDMOSdNodePrime, VDMOSdNodePrime); CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VDMOSSPspPtr, VDMOSSPspBinding, VDMOSsNodePrime, VDMOSsNodePrime); CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VDMOSGPgpPtr, VDMOSGPgpBinding, VDMOSgNodePrime, VDMOSgNodePrime); - CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VDMOSDdpPtr, VDMOSDdpBinding, VDMOSdNode, VDMOSdNodePrime); + CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VDMOSDdpPtr, VDMOSDdpBinding, VDMOSdNode, VDMOSdNodePrime); CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VDMOSGPdpPtr, VDMOSGPdpBinding, VDMOSgNodePrime, VDMOSdNodePrime); CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VDMOSGPspPtr, VDMOSGPspBinding, VDMOSgNodePrime, VDMOSsNodePrime); - CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VDMOSSspPtr, VDMOSSspBinding, VDMOSsNode, VDMOSsNodePrime); + CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VDMOSSspPtr, VDMOSSspBinding, VDMOSsNode, VDMOSsNodePrime); CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VDMOSDPspPtr, VDMOSDPspBinding, VDMOSdNodePrime, VDMOSsNodePrime); - CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VDMOSDPdPtr, VDMOSDPdBinding, VDMOSdNodePrime, VDMOSdNode); + CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VDMOSDPdPtr, VDMOSDPdBinding, VDMOSdNodePrime, VDMOSdNode); CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VDMOSDPgpPtr, VDMOSDPgpBinding, VDMOSdNodePrime, VDMOSgNodePrime); CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VDMOSSPgpPtr, VDMOSSPgpBinding, VDMOSsNodePrime, VDMOSgNodePrime); - CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VDMOSSPsPtr, VDMOSSPsBinding, VDMOSsNodePrime, VDMOSsNode); + CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VDMOSSPsPtr, VDMOSSPsBinding, VDMOSsNodePrime, VDMOSsNode); CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VDMOSSPdpPtr, VDMOSSPdpBinding, VDMOSsNodePrime, VDMOSdNodePrime); - CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VDMOSGgpPtr, VDMOSGgpBinding, VDMOSgNode, VDMOSgNodePrime); + CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VDMOSGgpPtr, VDMOSGgpBinding, VDMOSgNode, VDMOSgNodePrime); CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VDMOSGPgPtr, VDMOSGPgBinding, VDMOSgNodePrime, VDMOSgNode); CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VDMOSDsPtr, VDMOSDsBinding, VDMOSdNode, VDMOSsNode); CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VDMOSSdPtr, VDMOSSdBinding, VDMOSsNode, VDMOSdNode); - CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VDIORPdPtr, VDIORPdBinding, VDIOposPrimeNode, VDMOSdNode); - CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VDIODrpPtr, VDIODrpBinding, VDMOSdNode, VDIOposPrimeNode); - CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VDIOSrpPtr, VDIOSrpBinding, VDMOSsNode, VDIOposPrimeNode); - CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VDIORPsPtr, VDIORPsBinding, VDIOposPrimeNode, VDMOSsNode); + CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VDIORPdPtr, VDIORPdBinding, VDIOposPrimeNode, VDMOSdNode); + CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VDIODrpPtr, VDIODrpBinding, VDMOSdNode, VDIOposPrimeNode); + CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VDIOSrpPtr, VDIOSrpBinding, VDMOSsNode, VDIOposPrimeNode); + CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VDIORPsPtr, VDIORPsBinding, VDIOposPrimeNode, VDMOSsNode); CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VDIORPrpPtr, VDIORPrpBinding, VDIOposPrimeNode, VDIOposPrimeNode); + + if ((here->VDMOSthermal) && (model->VDMOSrthjcGiven)) { + CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VDMOSTemptempPtr, VDMOSTemptempBinding, VDMOStempNode, VDMOStempNode); /* Transistor thermal contribution */ + CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VDMOSTempdpPtr, VDMOSTempdpBinding, VDMOStempNode, VDMOSdNodePrime); + CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VDMOSTempspPtr, VDMOSTempspBinding, VDMOStempNode, VDMOSsNodePrime); + CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VDMOSTempgpPtr, VDMOSTempgpBinding, VDMOStempNode, VDMOSgNodePrime); + CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VDMOSGPtempPtr, VDMOSGPtempBinding, VDMOSgNodePrime, VDMOStempNode); + CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VDMOSDPtempPtr, VDMOSDPtempBinding, VDMOSdNodePrime, VDMOStempNode); + CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VDMOSSPtempPtr, VDMOSSPtempBinding, VDMOSsNodePrime, VDMOStempNode); + + CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VDIOTempposPrimePtr, VDIOTempposPrimeBinding, VDMOStempNode, VDIOposPrimeNode);/* Diode thermal contribution */ + CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VDMOSTempdPtr, VDMOSTempdBinding, VDMOStempNode, VDMOSdNode); + CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VDIOPosPrimetempPtr, VDIOPosPrimetempBinding, VDIOposPrimeNode, VDMOStempNode); + CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VDMOSDtempPtr, VDMOSDtempBinding, VDMOSdNode, VDMOStempNode); + CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VDMOStempSPtr, VDMOStempSBinding, VDMOStempNode, VDMOSsNode); + CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VDMOSSTempPtr, VDMOSSTempBinding, VDMOSsNode, VDMOStempNode); + + CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VDMOSTcasetcasePtr, VDMOSTcasetcaseBinding, VDMOStcaseNode, VDMOStcaseNode); /* Rthjc between tj and tcase*/ + CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VDMOSTcasetempPtr, VDMOSTcasetempBinding, VDMOStcaseNode, VDMOStempNode); + CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VDMOSTemptcasePtr, VDMOSTemptcaseBinding, VDMOStempNode, VDMOStcaseNode); + CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VDMOSTptpPtr, VDMOSTptpBinding, VDMOStNodePrime, VDMOStNodePrime); /* Rthca between tcase and Vsrc */ + CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VDMOSTptcasePtr, VDMOSTptcaseBinding, VDMOStNodePrime, VDMOStempNode); + CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VDMOSTcasetpPtr, VDMOSTcasetpBinding, VDMOStempNode, VDMOStNodePrime); + CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VDMOSCktTcktTPtr, VDMOSCktTcktTBinding, VDMOSvcktTbranch, VDMOSvcktTbranch); /* Vsrc=cktTemp to gnd */ + CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VDMOSCktTtpPtr, VDMOSCktTtpBinding, VDMOSvcktTbranch, VDMOStNodePrime); + CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VDMOSTpcktTPtr, VDMOSTpcktTBinding, VDMOStNodePrime, VDMOSvcktTbranch); + } } } @@ -169,58 +175,61 @@ VDMOSbindCSCComplexToReal (GENmodel *inModel, CKTcircuit *ckt) /* loop through all the instances of the model */ for (here = VDMOSinstances(model); here != NULL ; here = VDMOSnextInstance(here)) { - if ((here->VDMOSthermalGiven) && (model->VDMOSrthjcGiven)) { - CONVERT_KLU_BINDING_TABLE_TO_REAL(VDMOSTemptempPtr, VDMOSTemptempBinding, VDMOStempNode, VDMOStempNode); /* Transistor thermal contribution */ - CONVERT_KLU_BINDING_TABLE_TO_REAL(VDMOSTempdpPtr, VDMOSTempdpBinding, VDMOStempNode, VDMOSdNodePrime); - CONVERT_KLU_BINDING_TABLE_TO_REAL(VDMOSTempspPtr, VDMOSTempspBinding, VDMOStempNode, VDMOSsNodePrime); - CONVERT_KLU_BINDING_TABLE_TO_REAL(VDMOSTempgpPtr, VDMOSTempgpBinding, VDMOStempNode, VDMOSgNodePrime); - CONVERT_KLU_BINDING_TABLE_TO_REAL(VDMOSGPtempPtr, VDMOSGPtempBinding, VDMOSgNodePrime, VDMOStempNode); - CONVERT_KLU_BINDING_TABLE_TO_REAL(VDMOSDPtempPtr, VDMOSDPtempBinding, VDMOSdNodePrime, VDMOStempNode); - CONVERT_KLU_BINDING_TABLE_TO_REAL(VDMOSSPtempPtr, VDMOSSPtempBinding, VDMOSsNodePrime, VDMOStempNode); - - CONVERT_KLU_BINDING_TABLE_TO_REAL(VDIOTempposPrimePtr, VDIOTempposPrimeBinding, VDMOStempNode, VDIOposPrimeNode);/* Diode thermal contribution */ - CONVERT_KLU_BINDING_TABLE_TO_REAL(VDIOTempnegPtr, VDIOTempnegBinding, VDMOStempNode, VDMOSdNode); - CONVERT_KLU_BINDING_TABLE_TO_REAL(VDIOPosPrimetempPtr, VDIOPosPrimetempBinding, VDIOposPrimeNode, VDMOStempNode); - CONVERT_KLU_BINDING_TABLE_TO_REAL(VDIONegtempPtr, VDIONegtempBinding, VDMOSdNode, VDMOStempNode); - - CONVERT_KLU_BINDING_TABLE_TO_REAL(VDMOSTcasetcasePtr, VDMOSTcasetcaseBinding, VDMOStcaseNode, VDMOStcaseNode); /* Rthjc between tj and tcase*/ - CONVERT_KLU_BINDING_TABLE_TO_REAL(VDMOSTcasetempPtr, VDMOSTcasetempBinding, VDMOStcaseNode, VDMOStempNode); - CONVERT_KLU_BINDING_TABLE_TO_REAL(VDMOSTemptcasePtr, VDMOSTemptcaseBinding, VDMOStempNode, VDMOStcaseNode); - CONVERT_KLU_BINDING_TABLE_TO_REAL(VDMOSTptpPtr, VDMOSTptpBinding, VDMOStNodePrime, VDMOStNodePrime); /* Rthca between tcase and Vsrc */ - CONVERT_KLU_BINDING_TABLE_TO_REAL(VDMOSTptcasePtr, VDMOSTptcaseBinding, VDMOStNodePrime, VDMOStempNode); - CONVERT_KLU_BINDING_TABLE_TO_REAL(VDMOSTcasetpPtr, VDMOSTcasetpBinding, VDMOStempNode, VDMOStNodePrime); - CONVERT_KLU_BINDING_TABLE_TO_REAL(VDMOSCktTcktTPtr, VDMOSCktTcktTBinding, VDMOSvcktTbranch, VDMOSvcktTbranch); /* Vsrc=cktTemp to gnd */ - CONVERT_KLU_BINDING_TABLE_TO_REAL(VDMOSCktTtpPtr, VDMOSCktTtpBinding, VDMOSvcktTbranch, VDMOStNodePrime); - CONVERT_KLU_BINDING_TABLE_TO_REAL(VDMOSTpcktTPtr, VDMOSTpcktTBinding, VDMOStNodePrime, VDMOSvcktTbranch); - } - CONVERT_KLU_BINDING_TABLE_TO_REAL(VDMOSDdPtr, VDMOSDdBinding, VDMOSdNode, VDMOSdNode); - CONVERT_KLU_BINDING_TABLE_TO_REAL(VDMOSGgPtr, VDMOSGgBinding, VDMOSgNode, VDMOSgNode); - CONVERT_KLU_BINDING_TABLE_TO_REAL(VDMOSSsPtr, VDMOSSsBinding, VDMOSsNode, VDMOSsNode); + CONVERT_KLU_BINDING_TABLE_TO_REAL(VDMOSDdPtr, VDMOSDdBinding, VDMOSdNode, VDMOSdNode); + CONVERT_KLU_BINDING_TABLE_TO_REAL(VDMOSGgPtr, VDMOSGgBinding, VDMOSgNode, VDMOSgNode); + CONVERT_KLU_BINDING_TABLE_TO_REAL(VDMOSSsPtr, VDMOSSsBinding, VDMOSsNode, VDMOSsNode); CONVERT_KLU_BINDING_TABLE_TO_REAL(VDMOSDPdpPtr, VDMOSDPdpBinding, VDMOSdNodePrime, VDMOSdNodePrime); CONVERT_KLU_BINDING_TABLE_TO_REAL(VDMOSSPspPtr, VDMOSSPspBinding, VDMOSsNodePrime, VDMOSsNodePrime); CONVERT_KLU_BINDING_TABLE_TO_REAL(VDMOSGPgpPtr, VDMOSGPgpBinding, VDMOSgNodePrime, VDMOSgNodePrime); - CONVERT_KLU_BINDING_TABLE_TO_REAL(VDMOSDdpPtr, VDMOSDdpBinding, VDMOSdNode, VDMOSdNodePrime); + CONVERT_KLU_BINDING_TABLE_TO_REAL(VDMOSDdpPtr, VDMOSDdpBinding, VDMOSdNode, VDMOSdNodePrime); CONVERT_KLU_BINDING_TABLE_TO_REAL(VDMOSGPdpPtr, VDMOSGPdpBinding, VDMOSgNodePrime, VDMOSdNodePrime); CONVERT_KLU_BINDING_TABLE_TO_REAL(VDMOSGPspPtr, VDMOSGPspBinding, VDMOSgNodePrime, VDMOSsNodePrime); - CONVERT_KLU_BINDING_TABLE_TO_REAL(VDMOSSspPtr, VDMOSSspBinding, VDMOSsNode, VDMOSsNodePrime); + CONVERT_KLU_BINDING_TABLE_TO_REAL(VDMOSSspPtr, VDMOSSspBinding, VDMOSsNode, VDMOSsNodePrime); CONVERT_KLU_BINDING_TABLE_TO_REAL(VDMOSDPspPtr, VDMOSDPspBinding, VDMOSdNodePrime, VDMOSsNodePrime); - CONVERT_KLU_BINDING_TABLE_TO_REAL(VDMOSDPdPtr, VDMOSDPdBinding, VDMOSdNodePrime, VDMOSdNode); + CONVERT_KLU_BINDING_TABLE_TO_REAL(VDMOSDPdPtr, VDMOSDPdBinding, VDMOSdNodePrime, VDMOSdNode); CONVERT_KLU_BINDING_TABLE_TO_REAL(VDMOSDPgpPtr, VDMOSDPgpBinding, VDMOSdNodePrime, VDMOSgNodePrime); CONVERT_KLU_BINDING_TABLE_TO_REAL(VDMOSSPgpPtr, VDMOSSPgpBinding, VDMOSsNodePrime, VDMOSgNodePrime); - CONVERT_KLU_BINDING_TABLE_TO_REAL(VDMOSSPsPtr, VDMOSSPsBinding, VDMOSsNodePrime, VDMOSsNode); + CONVERT_KLU_BINDING_TABLE_TO_REAL(VDMOSSPsPtr, VDMOSSPsBinding, VDMOSsNodePrime, VDMOSsNode); CONVERT_KLU_BINDING_TABLE_TO_REAL(VDMOSSPdpPtr, VDMOSSPdpBinding, VDMOSsNodePrime, VDMOSdNodePrime); - CONVERT_KLU_BINDING_TABLE_TO_REAL(VDMOSGgpPtr, VDMOSGgpBinding, VDMOSgNode, VDMOSgNodePrime); + CONVERT_KLU_BINDING_TABLE_TO_REAL(VDMOSGgpPtr, VDMOSGgpBinding, VDMOSgNode, VDMOSgNodePrime); CONVERT_KLU_BINDING_TABLE_TO_REAL(VDMOSGPgPtr, VDMOSGPgBinding, VDMOSgNodePrime, VDMOSgNode); CONVERT_KLU_BINDING_TABLE_TO_REAL(VDMOSDsPtr, VDMOSDsBinding, VDMOSdNode, VDMOSsNode); CONVERT_KLU_BINDING_TABLE_TO_REAL(VDMOSSdPtr, VDMOSSdBinding, VDMOSsNode, VDMOSdNode); - CONVERT_KLU_BINDING_TABLE_TO_REAL(VDIORPdPtr, VDIORPdBinding, VDIOposPrimeNode, VDMOSdNode); - CONVERT_KLU_BINDING_TABLE_TO_REAL(VDIODrpPtr, VDIODrpBinding, VDMOSdNode, VDIOposPrimeNode); - CONVERT_KLU_BINDING_TABLE_TO_REAL(VDIOSrpPtr, VDIOSrpBinding, VDMOSsNode, VDIOposPrimeNode); - CONVERT_KLU_BINDING_TABLE_TO_REAL(VDIORPsPtr, VDIORPsBinding, VDIOposPrimeNode, VDMOSsNode); + CONVERT_KLU_BINDING_TABLE_TO_REAL(VDIORPdPtr, VDIORPdBinding, VDIOposPrimeNode, VDMOSdNode); + CONVERT_KLU_BINDING_TABLE_TO_REAL(VDIODrpPtr, VDIODrpBinding, VDMOSdNode, VDIOposPrimeNode); + CONVERT_KLU_BINDING_TABLE_TO_REAL(VDIOSrpPtr, VDIOSrpBinding, VDMOSsNode, VDIOposPrimeNode); + CONVERT_KLU_BINDING_TABLE_TO_REAL(VDIORPsPtr, VDIORPsBinding, VDIOposPrimeNode, VDMOSsNode); CONVERT_KLU_BINDING_TABLE_TO_REAL(VDIORPrpPtr, VDIORPrpBinding, VDIOposPrimeNode, VDIOposPrimeNode); + + if ((here->VDMOSthermal) && (model->VDMOSrthjcGiven)) { + CONVERT_KLU_BINDING_TABLE_TO_REAL(VDMOSTemptempPtr, VDMOSTemptempBinding, VDMOStempNode, VDMOStempNode); /* Transistor thermal contribution */ + CONVERT_KLU_BINDING_TABLE_TO_REAL(VDMOSTempdpPtr, VDMOSTempdpBinding, VDMOStempNode, VDMOSdNodePrime); + CONVERT_KLU_BINDING_TABLE_TO_REAL(VDMOSTempspPtr, VDMOSTempspBinding, VDMOStempNode, VDMOSsNodePrime); + CONVERT_KLU_BINDING_TABLE_TO_REAL(VDMOSTempgpPtr, VDMOSTempgpBinding, VDMOStempNode, VDMOSgNodePrime); + CONVERT_KLU_BINDING_TABLE_TO_REAL(VDMOSGPtempPtr, VDMOSGPtempBinding, VDMOSgNodePrime, VDMOStempNode); + CONVERT_KLU_BINDING_TABLE_TO_REAL(VDMOSDPtempPtr, VDMOSDPtempBinding, VDMOSdNodePrime, VDMOStempNode); + CONVERT_KLU_BINDING_TABLE_TO_REAL(VDMOSSPtempPtr, VDMOSSPtempBinding, VDMOSsNodePrime, VDMOStempNode); + + CONVERT_KLU_BINDING_TABLE_TO_REAL(VDIOTempposPrimePtr, VDIOTempposPrimeBinding, VDMOStempNode, VDIOposPrimeNode);/* Diode thermal contribution */ + CONVERT_KLU_BINDING_TABLE_TO_REAL(VDMOSTempdPtr, VDMOSTempdBinding, VDMOStempNode, VDMOSdNode); + CONVERT_KLU_BINDING_TABLE_TO_REAL(VDIOPosPrimetempPtr, VDIOPosPrimetempBinding, VDIOposPrimeNode, VDMOStempNode); + CONVERT_KLU_BINDING_TABLE_TO_REAL(VDMOSDtempPtr, VDMOSDtempBinding, VDMOSdNode, VDMOStempNode); + CONVERT_KLU_BINDING_TABLE_TO_REAL(VDMOStempSPtr, VDMOStempSBinding, VDMOStempNode, VDMOSsNode); + CONVERT_KLU_BINDING_TABLE_TO_REAL(VDMOSSTempPtr, VDMOSSTempBinding, VDMOSsNode, VDMOStempNode); + + CONVERT_KLU_BINDING_TABLE_TO_REAL(VDMOSTcasetcasePtr, VDMOSTcasetcaseBinding, VDMOStcaseNode, VDMOStcaseNode); /* Rthjc between tj and tcase*/ + CONVERT_KLU_BINDING_TABLE_TO_REAL(VDMOSTcasetempPtr, VDMOSTcasetempBinding, VDMOStcaseNode, VDMOStempNode); + CONVERT_KLU_BINDING_TABLE_TO_REAL(VDMOSTemptcasePtr, VDMOSTemptcaseBinding, VDMOStempNode, VDMOStcaseNode); + CONVERT_KLU_BINDING_TABLE_TO_REAL(VDMOSTptpPtr, VDMOSTptpBinding, VDMOStNodePrime, VDMOStNodePrime); /* Rthca between tcase and Vsrc */ + CONVERT_KLU_BINDING_TABLE_TO_REAL(VDMOSTptcasePtr, VDMOSTptcaseBinding, VDMOStNodePrime, VDMOStempNode); + CONVERT_KLU_BINDING_TABLE_TO_REAL(VDMOSTcasetpPtr, VDMOSTcasetpBinding, VDMOStempNode, VDMOStNodePrime); + CONVERT_KLU_BINDING_TABLE_TO_REAL(VDMOSCktTcktTPtr, VDMOSCktTcktTBinding, VDMOSvcktTbranch, VDMOSvcktTbranch); /* Vsrc=cktTemp to gnd */ + CONVERT_KLU_BINDING_TABLE_TO_REAL(VDMOSCktTtpPtr, VDMOSCktTtpBinding, VDMOSvcktTbranch, VDMOStNodePrime); + CONVERT_KLU_BINDING_TABLE_TO_REAL(VDMOSTpcktTPtr, VDMOSTpcktTBinding, VDMOStNodePrime, VDMOSvcktTbranch); + } } } diff --git a/src/spicelib/devices/vdmos/vdmosdefs.h b/src/spicelib/devices/vdmos/vdmosdefs.h index f859d4276..c03494ba0 100644 --- a/src/spicelib/devices/vdmos/vdmosdefs.h +++ b/src/spicelib/devices/vdmos/vdmosdefs.h @@ -247,26 +247,6 @@ typedef struct sVDMOSinstance { double *VDMOSTpcktTPtr; #ifdef KLU - BindElement *VDMOSTemptempBinding ; - BindElement *VDMOSTempdpBinding ; - BindElement *VDMOSTempspBinding ; - BindElement *VDMOSTempgpBinding ; - BindElement *VDMOSGPtempBinding ; - BindElement *VDMOSDPtempBinding ; - BindElement *VDMOSSPtempBinding ; - BindElement *VDIOTempposPrimeBinding ; - BindElement *VDIOTempnegBinding ; - BindElement *VDIOPosPrimetempBinding ; - BindElement *VDIONegtempBinding ; - BindElement *VDMOSTcasetcaseBinding ; - BindElement *VDMOSTcasetempBinding ; - BindElement *VDMOSTemptcaseBinding ; - BindElement *VDMOSTptpBinding ; - BindElement *VDMOSTptcaseBinding ; - BindElement *VDMOSTcasetpBinding ; - BindElement *VDMOSCktTcktTBinding ; - BindElement *VDMOSCktTtpBinding ; - BindElement *VDMOSTpcktTBinding ; BindElement *VDMOSDdBinding ; BindElement *VDMOSGgBinding ; BindElement *VDMOSSsBinding ; @@ -292,6 +272,28 @@ typedef struct sVDMOSinstance { BindElement *VDIOSrpBinding ; BindElement *VDIORPsBinding ; BindElement *VDIORPrpBinding ; + BindElement *VDMOSTemptempBinding ; + BindElement *VDMOSTempdpBinding ; + BindElement *VDMOSTempspBinding ; + BindElement *VDMOSTempgpBinding ; + BindElement *VDMOSGPtempBinding ; + BindElement *VDMOSDPtempBinding ; + BindElement *VDMOSSPtempBinding ; + BindElement *VDIOTempposPrimeBinding ; + BindElement *VDMOSTempdBinding ; + BindElement *VDIOPosPrimetempBinding ; + BindElement *VDMOSDtempBinding ; + BindElement *VDMOStempSBinding ; + BindElement *VDMOSSTempBinding ; + BindElement *VDMOSTcasetcaseBinding ; + BindElement *VDMOSTcasetempBinding ; + BindElement *VDMOSTemptcaseBinding ; + BindElement *VDMOSTptpBinding ; + BindElement *VDMOSTptcaseBinding ; + BindElement *VDMOSTcasetpBinding ; + BindElement *VDMOSCktTcktTBinding ; + BindElement *VDMOSCktTtpBinding ; + BindElement *VDMOSTpcktTBinding ; #endif } VDMOSinstance ;