Browse Source

Add KLU support to VDMOS

pre-master-46
Francesco Lannutti 6 years ago
committed by Holger Vogt
parent
commit
73626c62f8
  1. 3
      src/spicelib/devices/vdmos/Makefile.am
  2. 228
      src/spicelib/devices/vdmos/vdmosbindCSC.c
  3. 48
      src/spicelib/devices/vdmos/vdmosdefs.h
  4. 6
      src/spicelib/devices/vdmos/vdmosext.h
  5. 6
      src/spicelib/devices/vdmos/vdmosinit.c

3
src/spicelib/devices/vdmos/Makefile.am

@ -27,6 +27,9 @@ libvdmos_la_SOURCES = \
vdmostrun.c
if KLU_WANTED
libvdmos_la_SOURCES += vdmosbindCSC.c
endif
AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include
AM_CFLAGS = $(STATIC)

228
src/spicelib/devices/vdmos/vdmosbindCSC.c

@ -0,0 +1,228 @@
/**********
Author: 2020 Francesco Lannutti
**********/
#include "ngspice/ngspice.h"
#include "ngspice/cktdefs.h"
#include "vdmosdefs.h"
#include "ngspice/sperror.h"
#include "ngspice/klu-binding.h"
int
VDMOSbindCSC (GENmodel *inModel, CKTcircuit *ckt)
{
VDMOSmodel *model = (VDMOSmodel *)inModel ;
VDMOSinstance *here ;
BindElement i, *matched, *BindStruct ;
size_t nz ;
BindStruct = ckt->CKTmatrix->SMPkluMatrix->KLUmatrixBindStructCOO ;
nz = (size_t)ckt->CKTmatrix->SMPkluMatrix->KLUmatrixLinkedListNZ ;
/* loop through all the VDMOS models */
for ( ; model != NULL ; model = VDMOSnextModel(model))
{
/* 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(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(VDMOSGPdpPtr, VDMOSGPdpBinding, VDMOSgNodePrime, VDMOSdNodePrime);
CREATE_KLU_BINDING_TABLE(VDMOSGPspPtr, VDMOSGPspBinding, VDMOSgNodePrime, 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(VDMOSDPgpPtr, VDMOSDPgpBinding, VDMOSdNodePrime, VDMOSgNodePrime);
CREATE_KLU_BINDING_TABLE(VDMOSSPgpPtr, VDMOSSPgpBinding, VDMOSsNodePrime, VDMOSgNodePrime);
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(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(VDIORPrpPtr, VDIORPrpBinding, VDIOposPrimeNode, VDIOposPrimeNode);
}
}
return (OK) ;
}
int
VDMOSbindCSCComplex (GENmodel *inModel, CKTcircuit *ckt)
{
VDMOSmodel *model = (VDMOSmodel *)inModel ;
VDMOSinstance *here ;
NG_IGNORE (ckt) ;
/* loop through all the VDMOS models */
for ( ; model != NULL ; model = VDMOSnextModel(model))
{
/* 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(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(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(VDMOSDPspPtr, VDMOSDPspBinding, VDMOSdNodePrime, VDMOSsNodePrime);
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(VDMOSSPdpPtr, VDMOSSPdpBinding, VDMOSsNodePrime, VDMOSdNodePrime);
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(VDIORPrpPtr, VDIORPrpBinding, VDIOposPrimeNode, VDIOposPrimeNode);
}
}
return (OK) ;
}
int
VDMOSbindCSCComplexToReal (GENmodel *inModel, CKTcircuit *ckt)
{
VDMOSmodel *model = (VDMOSmodel *)inModel ;
VDMOSinstance *here ;
NG_IGNORE (ckt) ;
/* loop through all the VDMOS models */
for ( ; model != NULL ; model = VDMOSnextModel(model))
{
/* 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(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(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(VDMOSDPspPtr, VDMOSDPspBinding, VDMOSdNodePrime, VDMOSsNodePrime);
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(VDMOSSPdpPtr, VDMOSSPdpBinding, VDMOSsNodePrime, VDMOSdNodePrime);
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(VDIORPrpPtr, VDIORPrpBinding, VDIOposPrimeNode, VDIOposPrimeNode);
}
}
return (OK) ;
}

48
src/spicelib/devices/vdmos/vdmosdefs.h

@ -246,6 +246,54 @@ typedef struct sVDMOSinstance {
double *VDMOSCktTtpPtr;
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 ;
BindElement *VDMOSDPdpBinding ;
BindElement *VDMOSSPspBinding ;
BindElement *VDMOSGPgpBinding ;
BindElement *VDMOSDdpBinding ;
BindElement *VDMOSGPdpBinding ;
BindElement *VDMOSGPspBinding ;
BindElement *VDMOSSspBinding ;
BindElement *VDMOSDPspBinding ;
BindElement *VDMOSDPdBinding ;
BindElement *VDMOSDPgpBinding ;
BindElement *VDMOSSPgpBinding ;
BindElement *VDMOSSPsBinding ;
BindElement *VDMOSSPdpBinding ;
BindElement *VDMOSGgpBinding ;
BindElement *VDMOSGPgBinding ;
BindElement *VDMOSDsBinding ;
BindElement *VDMOSSdBinding ;
BindElement *VDIORPdBinding ;
BindElement *VDIODrpBinding ;
BindElement *VDIOSrpBinding ;
BindElement *VDIORPsBinding ;
BindElement *VDIORPrpBinding ;
#endif
} VDMOSinstance ;
#define VDMOSvgs VDMOSstates+ 0 /* gate-source voltage */

6
src/spicelib/devices/vdmos/vdmosext.h

@ -21,3 +21,9 @@ extern int VDMOSdisto(int,GENmodel*,CKTcircuit*);
extern int VDMOSnoise(int,int,GENmodel*,CKTcircuit*,Ndata*,double*);
extern int VDMOSdSetup(GENmodel*,CKTcircuit*);
extern int VDMOSsoaCheck(CKTcircuit *, GENmodel *);
#ifdef KLU
extern int VDMOSbindCSC (GENmodel*, CKTcircuit*) ;
extern int VDMOSbindCSCComplex (GENmodel*, CKTcircuit*) ;
extern int VDMOSbindCSCComplexToReal (GENmodel*, CKTcircuit*) ;
#endif

6
src/spicelib/devices/vdmos/vdmosinit.c

@ -66,6 +66,12 @@ SPICEdev VDMOSinfo = {
.DEVdump = NULL,
.DEVacct = NULL,
#endif
#ifdef KLU
.DEVbindCSC = VDMOSbindCSC,
.DEVbindCSCComplex = VDMOSbindCSCComplex,
.DEVbindCSCComplexToReal = VDMOSbindCSCComplexToReal,
#endif
};

Loading…
Cancel
Save