Merge branch 'pre-master-46' into bt_dev
This commit is contained in:
commit
596bb4c731
|
|
@ -13794,7 +13794,7 @@ New include File:
|
||||||
2010-10-09 Robert Larice
|
2010-10-09 Robert Larice
|
||||||
* src/include/complex.h :
|
* src/include/complex.h :
|
||||||
!REVERT! remove typedef for _complex, which is used nowhere
|
!REVERT! remove typedef for _complex, which is used nowhere
|
||||||
this breaks MSVC, currently unkown why, FIXME
|
this breaks MSVC, currently unknown why, FIXME
|
||||||
|
|
||||||
2010-10-09 Robert Larice
|
2010-10-09 Robert Larice
|
||||||
* src/frontend/parse-bison.c ,
|
* src/frontend/parse-bison.c ,
|
||||||
|
|
|
||||||
6
NEWS
6
NEWS
|
|
@ -1,3 +1,9 @@
|
||||||
|
Ngspice-45.2, Sept. 5th, 2025
|
||||||
|
============
|
||||||
|
- Bug-fix release
|
||||||
|
+ A bug in the MS Windows version has been fixed
|
||||||
|
(bug no. 804, see https://sourceforge.net/p/ngspice/bugs/804/)
|
||||||
|
|
||||||
Ngspice-45, August 17th, 2025
|
Ngspice-45, August 17th, 2025
|
||||||
============
|
============
|
||||||
- New features:
|
- New features:
|
||||||
|
|
|
||||||
|
|
@ -115,6 +115,10 @@ fi
|
||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
echo "Removing files to be remade"
|
||||||
|
rm -f Makefile.in aclocal.m4 ar-lib config.guess config.sub
|
||||||
|
rm -f depcomp install-sh ltmain.sh missing ylwrap
|
||||||
|
rm -r -f autom4te.cache
|
||||||
|
|
||||||
echo "Running $LIBTOOLIZE"
|
echo "Running $LIBTOOLIZE"
|
||||||
$LIBTOOLIZE --copy --force \
|
$LIBTOOLIZE --copy --force \
|
||||||
|
|
|
||||||
|
|
@ -5283,11 +5283,9 @@ int get_number_terminals(char *c)
|
||||||
/* required to make m= 1 a single token m=1 */
|
/* required to make m= 1 a single token m=1 */
|
||||||
ccfree = cc = inp_remove_ws(cc);
|
ccfree = cc = inp_remove_ws(cc);
|
||||||
for (i = j = 0; (i < 12) && (*cc != '\0'); ++i) {
|
for (i = j = 0; (i < 12) && (*cc != '\0'); ++i) {
|
||||||
char* comma;
|
|
||||||
|
|
||||||
name[i] = gettok_instance(&cc);
|
name[i] = gettok_instance(&cc);
|
||||||
if (search_plain_identifier(name[i], "off") ||
|
if (search_plain_identifier(name[i], "off")) {
|
||||||
strchr(name[i], '=')) {
|
|
||||||
j++;
|
j++;
|
||||||
}
|
}
|
||||||
#ifdef CIDER
|
#ifdef CIDER
|
||||||
|
|
@ -5296,16 +5294,13 @@ int get_number_terminals(char *c)
|
||||||
j++;
|
j++;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
/* If we have IC=VBE, VCE instead of IC=VBE,VCE
|
if (strchr(name[i], '=')) {
|
||||||
* we need to increment j.
|
break;
|
||||||
*/
|
}
|
||||||
if ((comma = strchr(name[i], ',')) != NULL &&
|
/* an expression for area {...}, (without area={...})*/
|
||||||
(*(++comma) == '\0'))
|
if (*name[i] == '{') {
|
||||||
j++;
|
break;
|
||||||
/* If we have IC=VBE , VCE ("," is a token) we need to inc j
|
}
|
||||||
*/
|
|
||||||
if (eq(name[i], ","))
|
|
||||||
j++;
|
|
||||||
}
|
}
|
||||||
i--;
|
i--;
|
||||||
tfree(ccfree);
|
tfree(ccfree);
|
||||||
|
|
@ -9844,6 +9839,10 @@ static void inp_meas_control(struct card* card)
|
||||||
* might need to add the prefix separately if using the result in APIs
|
* might need to add the prefix separately if using the result in APIs
|
||||||
* that require it for long path support.
|
* that require it for long path support.
|
||||||
*
|
*
|
||||||
|
* Using this function however may neglect the ngspice file search sequence,
|
||||||
|
* as an absolute path is returned also for relative paths.
|
||||||
|
* So restrict this function to paths longer than MAX_PATH.
|
||||||
|
*
|
||||||
* @param input_path The input path string (UTF-8 encoded). Can be relative or
|
* @param input_path The input path string (UTF-8 encoded). Can be relative or
|
||||||
* absolute, may contain '.' or '..'.
|
* absolute, may contain '.' or '..'.
|
||||||
* @return char* A newly allocated UTF-8 string containing the canonical absolute
|
* @return char* A newly allocated UTF-8 string containing the canonical absolute
|
||||||
|
|
@ -9869,6 +9868,10 @@ char* get_windows_canonical_path(const char* input_path) {
|
||||||
|
|
||||||
inputLenMB = (int)strlen(input_path);
|
inputLenMB = (int)strlen(input_path);
|
||||||
|
|
||||||
|
/* If path length is less than MAX_PATH, just copy and return path. */
|
||||||
|
if (inputLenMB < MAX_PATH)
|
||||||
|
return copy(input_path);
|
||||||
|
|
||||||
if (inputLenMB == 0) {
|
if (inputLenMB == 0) {
|
||||||
inputLenW = 1;
|
inputLenW = 1;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -330,7 +330,7 @@ cp_usrset(struct variable *var, bool isset)
|
||||||
ft_stricterror = isset;
|
ft_stricterror = isset;
|
||||||
if (ft_ngdebug)
|
if (ft_ngdebug)
|
||||||
fprintf(stdout, "Note: strict_errorhandling is set\n");
|
fprintf(stdout, "Note: strict_errorhandling is set\n");
|
||||||
/* Immediately bail out when spinit error has occured */
|
/* Immediately bail out when spinit error has occurred */
|
||||||
if (ft_spiniterror)
|
if (ft_spiniterror)
|
||||||
controlled_exit(EXIT_BAD);
|
controlled_exit(EXIT_BAD);
|
||||||
} else if (eq(var->va_name, "rawfileprec")) {
|
} else if (eq(var->va_name, "rawfileprec")) {
|
||||||
|
|
|
||||||
|
|
@ -133,7 +133,7 @@ typedef struct /* 64-bit version (otherwise same as above) */
|
||||||
#define KLU_EMPTY_MATRIX (2) /* Modified by Francesco Lannutti - Case when the matrix is empty */
|
#define KLU_EMPTY_MATRIX (2) /* Modified by Francesco Lannutti - Case when the matrix is empty */
|
||||||
#define KLU_OUT_OF_MEMORY (-2)
|
#define KLU_OUT_OF_MEMORY (-2)
|
||||||
#define KLU_INVALID (-3)
|
#define KLU_INVALID (-3)
|
||||||
#define KLU_TOO_LARGE (-4) /* integer overflow has occured */
|
#define KLU_TOO_LARGE (-4) /* integer overflow has occurred */
|
||||||
|
|
||||||
typedef struct klu_common_struct
|
typedef struct klu_common_struct
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -46,7 +46,6 @@ static int handle_init_info(OsdiInitInfo info, const OsdiDescriptor *descr) {
|
||||||
printf("Unknown OSDO init error code %d!\n", err->code);
|
printf("Unknown OSDO init error code %d!\n", err->code);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
free(info.errors);
|
|
||||||
errMsg = tprintf("%i errors occurred during initialization", info.num_errors);
|
errMsg = tprintf("%i errors occurred during initialization", info.num_errors);
|
||||||
return (E_PRIVATE);
|
return (E_PRIVATE);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -71,6 +71,9 @@ IOP( "mult_i", BSIM4_MULT_I, IF_REAL, "Variability in current"),
|
||||||
IOP( "mult_q", BSIM4_MULT_Q, IF_REAL, "Variability in charge"),
|
IOP( "mult_q", BSIM4_MULT_Q, IF_REAL, "Variability in charge"),
|
||||||
IOP( "mult_fn", BSIM4_MULT_FN, IF_REAL, "Variability in flicker noise"),
|
IOP( "mult_fn", BSIM4_MULT_FN, IF_REAL, "Variability in flicker noise"),
|
||||||
IP( "ic", BSIM4_IC, IF_REALVEC , "Vector of DS,GS,BS initial voltages"),
|
IP( "ic", BSIM4_IC, IF_REALVEC , "Vector of DS,GS,BS initial voltages"),
|
||||||
|
IOP( "icvgs", BSIM4_IC_VGS, IF_REAL , "GS initial voltage"),
|
||||||
|
IOP( "icvds", BSIM4_IC_VDS, IF_REAL , "DS initial voltage"),
|
||||||
|
IOP( "icvbs", BSIM4_IC_VBS, IF_REAL , "BS initial voltage"),
|
||||||
OP( "gmbs", BSIM4_GMBS, IF_REAL, "Gmb"),
|
OP( "gmbs", BSIM4_GMBS, IF_REAL, "Gmb"),
|
||||||
OP( "gm", BSIM4_GM, IF_REAL, "Gm"),
|
OP( "gm", BSIM4_GM, IF_REAL, "Gm"),
|
||||||
OP( "gds", BSIM4_GDS, IF_REAL, "Gds"),
|
OP( "gds", BSIM4_GDS, IF_REAL, "Gds"),
|
||||||
|
|
|
||||||
|
|
@ -462,8 +462,8 @@ double m, mult_i, mult_q;
|
||||||
* Loading AC matrix
|
* Loading AC matrix
|
||||||
*/
|
*/
|
||||||
m = here->BSIM4m;
|
m = here->BSIM4m;
|
||||||
mult_i = here->BSIM4mult_i;
|
mult_i = here->BSIM4mult_i * here->BSIM4m;
|
||||||
mult_q = here->BSIM4mult_q;
|
mult_q = here->BSIM4mult_q * here->BSIM4m;
|
||||||
|
|
||||||
if (!model->BSIM4rdsMod)
|
if (!model->BSIM4rdsMod)
|
||||||
{ gdpr = here->BSIM4drainConductance;
|
{ gdpr = here->BSIM4drainConductance;
|
||||||
|
|
|
||||||
|
|
@ -203,11 +203,11 @@ BSIM4instance *here = (BSIM4instance*)inst;
|
||||||
return(OK);
|
return(OK);
|
||||||
case BSIM4_SOURCECONDUCT:
|
case BSIM4_SOURCECONDUCT:
|
||||||
value->rValue = here->BSIM4sourceConductance;
|
value->rValue = here->BSIM4sourceConductance;
|
||||||
value->rValue *= here->BSIM4mult_i;
|
value->rValue *= here->BSIM4mult_i * here->BSIM4m;
|
||||||
return(OK);
|
return(OK);
|
||||||
case BSIM4_DRAINCONDUCT:
|
case BSIM4_DRAINCONDUCT:
|
||||||
value->rValue = here->BSIM4drainConductance;
|
value->rValue = here->BSIM4drainConductance;
|
||||||
value->rValue *= here->BSIM4mult_i;
|
value->rValue *= here->BSIM4mult_i * here->BSIM4m;
|
||||||
return(OK);
|
return(OK);
|
||||||
case BSIM4_VBD:
|
case BSIM4_VBD:
|
||||||
value->rValue = *(ckt->CKTstate0 + here->BSIM4vbd);
|
value->rValue = *(ckt->CKTstate0 + here->BSIM4vbd);
|
||||||
|
|
@ -223,67 +223,67 @@ BSIM4instance *here = (BSIM4instance*)inst;
|
||||||
return(OK);
|
return(OK);
|
||||||
case BSIM4_CD:
|
case BSIM4_CD:
|
||||||
value->rValue = here->BSIM4cd;
|
value->rValue = here->BSIM4cd;
|
||||||
value->rValue *= here->BSIM4mult_i;
|
value->rValue *= here->BSIM4mult_i * here->BSIM4m;
|
||||||
return(OK);
|
return(OK);
|
||||||
case BSIM4_CBS:
|
case BSIM4_CBS:
|
||||||
value->rValue = here->BSIM4cbs;
|
value->rValue = here->BSIM4cbs;
|
||||||
value->rValue *= here->BSIM4mult_i;
|
value->rValue *= here->BSIM4mult_i * here->BSIM4m;
|
||||||
return(OK);
|
return(OK);
|
||||||
case BSIM4_CBD:
|
case BSIM4_CBD:
|
||||||
value->rValue = here->BSIM4cbd;
|
value->rValue = here->BSIM4cbd;
|
||||||
value->rValue *= here->BSIM4mult_i;
|
value->rValue *= here->BSIM4mult_i * here->BSIM4m;
|
||||||
return(OK);
|
return(OK);
|
||||||
case BSIM4_CSUB:
|
case BSIM4_CSUB:
|
||||||
value->rValue = here->BSIM4csub;
|
value->rValue = here->BSIM4csub;
|
||||||
value->rValue *= here->BSIM4mult_i;
|
value->rValue *= here->BSIM4mult_i * here->BSIM4m;
|
||||||
return(OK);
|
return(OK);
|
||||||
case BSIM4_IGIDL:
|
case BSIM4_IGIDL:
|
||||||
value->rValue = here->BSIM4Igidl;
|
value->rValue = here->BSIM4Igidl;
|
||||||
value->rValue *= here->BSIM4mult_i;
|
value->rValue *= here->BSIM4mult_i * here->BSIM4m;
|
||||||
return(OK);
|
return(OK);
|
||||||
case BSIM4_IGISL:
|
case BSIM4_IGISL:
|
||||||
value->rValue = here->BSIM4Igisl;
|
value->rValue = here->BSIM4Igisl;
|
||||||
value->rValue *= here->BSIM4mult_i;
|
value->rValue *= here->BSIM4mult_i * here->BSIM4m;
|
||||||
return(OK);
|
return(OK);
|
||||||
case BSIM4_IGS:
|
case BSIM4_IGS:
|
||||||
value->rValue = here->BSIM4Igs;
|
value->rValue = here->BSIM4Igs;
|
||||||
value->rValue *= here->BSIM4mult_i;
|
value->rValue *= here->BSIM4mult_i * here->BSIM4m;
|
||||||
return(OK);
|
return(OK);
|
||||||
case BSIM4_IGD:
|
case BSIM4_IGD:
|
||||||
value->rValue = here->BSIM4Igd;
|
value->rValue = here->BSIM4Igd;
|
||||||
value->rValue *= here->BSIM4mult_i;
|
value->rValue *= here->BSIM4mult_i * here->BSIM4m;
|
||||||
return(OK);
|
return(OK);
|
||||||
case BSIM4_IGB:
|
case BSIM4_IGB:
|
||||||
value->rValue = here->BSIM4Igb;
|
value->rValue = here->BSIM4Igb;
|
||||||
value->rValue *= here->BSIM4mult_i;
|
value->rValue *= here->BSIM4mult_i * here->BSIM4m;
|
||||||
return(OK);
|
return(OK);
|
||||||
case BSIM4_IGCS:
|
case BSIM4_IGCS:
|
||||||
value->rValue = here->BSIM4Igcs;
|
value->rValue = here->BSIM4Igcs;
|
||||||
value->rValue *= here->BSIM4mult_i;
|
value->rValue *= here->BSIM4mult_i * here->BSIM4m;
|
||||||
return(OK);
|
return(OK);
|
||||||
case BSIM4_IGCD:
|
case BSIM4_IGCD:
|
||||||
value->rValue = here->BSIM4Igcd;
|
value->rValue = here->BSIM4Igcd;
|
||||||
value->rValue *= here->BSIM4mult_i;
|
value->rValue *= here->BSIM4mult_i * here->BSIM4m;
|
||||||
return(OK);
|
return(OK);
|
||||||
case BSIM4_GM:
|
case BSIM4_GM:
|
||||||
value->rValue = here->BSIM4gm;
|
value->rValue = here->BSIM4gm;
|
||||||
value->rValue *= here->BSIM4mult_i;
|
value->rValue *= here->BSIM4mult_i * here->BSIM4m;
|
||||||
return(OK);
|
return(OK);
|
||||||
case BSIM4_GDS:
|
case BSIM4_GDS:
|
||||||
value->rValue = here->BSIM4gds;
|
value->rValue = here->BSIM4gds;
|
||||||
value->rValue *= here->BSIM4mult_i;
|
value->rValue *= here->BSIM4mult_i * here->BSIM4m;
|
||||||
return(OK);
|
return(OK);
|
||||||
case BSIM4_GMBS:
|
case BSIM4_GMBS:
|
||||||
value->rValue = here->BSIM4gmbs;
|
value->rValue = here->BSIM4gmbs;
|
||||||
value->rValue *= here->BSIM4mult_i;
|
value->rValue *= here->BSIM4mult_i * here->BSIM4m;
|
||||||
return(OK);
|
return(OK);
|
||||||
case BSIM4_GBD:
|
case BSIM4_GBD:
|
||||||
value->rValue = here->BSIM4gbd;
|
value->rValue = here->BSIM4gbd;
|
||||||
value->rValue *= here->BSIM4mult_i;
|
value->rValue *= here->BSIM4mult_i * here->BSIM4m;
|
||||||
return(OK);
|
return(OK);
|
||||||
case BSIM4_GBS:
|
case BSIM4_GBS:
|
||||||
value->rValue = here->BSIM4gbs;
|
value->rValue = here->BSIM4gbs;
|
||||||
value->rValue *= here->BSIM4mult_i;
|
value->rValue *= here->BSIM4mult_i * here->BSIM4m;
|
||||||
return(OK);
|
return(OK);
|
||||||
/* case BSIM4_QB:
|
/* case BSIM4_QB:
|
||||||
value->rValue = *(ckt->CKTstate0 + here->BSIM4qb);
|
value->rValue = *(ckt->CKTstate0 + here->BSIM4qb);
|
||||||
|
|
@ -308,19 +308,19 @@ BSIM4instance *here = (BSIM4instance*)inst;
|
||||||
return(OK); */
|
return(OK); */
|
||||||
case BSIM4_QB:
|
case BSIM4_QB:
|
||||||
value->rValue = here->BSIM4qbulk;
|
value->rValue = here->BSIM4qbulk;
|
||||||
value->rValue *= here->BSIM4mult_q;
|
value->rValue *= here->BSIM4mult_q * here->BSIM4m;
|
||||||
return(OK);
|
return(OK);
|
||||||
case BSIM4_QG:
|
case BSIM4_QG:
|
||||||
value->rValue = here->BSIM4qgate;
|
value->rValue = here->BSIM4qgate;
|
||||||
value->rValue *= here->BSIM4mult_q;
|
value->rValue *= here->BSIM4mult_q * here->BSIM4m;
|
||||||
return(OK);
|
return(OK);
|
||||||
case BSIM4_QS:
|
case BSIM4_QS:
|
||||||
value->rValue = here->BSIM4qsrc;
|
value->rValue = here->BSIM4qsrc;
|
||||||
value->rValue *= here->BSIM4mult_q;
|
value->rValue *= here->BSIM4mult_q * here->BSIM4m;
|
||||||
return(OK);
|
return(OK);
|
||||||
case BSIM4_QD:
|
case BSIM4_QD:
|
||||||
value->rValue = here->BSIM4qdrn;
|
value->rValue = here->BSIM4qdrn;
|
||||||
value->rValue *= here->BSIM4mult_q;
|
value->rValue *= here->BSIM4mult_q * here->BSIM4m;
|
||||||
return(OK);
|
return(OK);
|
||||||
case BSIM4_QINV:
|
case BSIM4_QINV:
|
||||||
value->rValue = here->BSIM4qinv;
|
value->rValue = here->BSIM4qinv;
|
||||||
|
|
@ -330,82 +330,82 @@ BSIM4instance *here = (BSIM4instance*)inst;
|
||||||
return(OK);
|
return(OK);
|
||||||
case BSIM4_GCRG:
|
case BSIM4_GCRG:
|
||||||
value->rValue = here->BSIM4gcrg;
|
value->rValue = here->BSIM4gcrg;
|
||||||
value->rValue *= here->BSIM4mult_i;
|
value->rValue *= here->BSIM4mult_i * here->BSIM4m;
|
||||||
return(OK);
|
return(OK);
|
||||||
case BSIM4_GTAU:
|
case BSIM4_GTAU:
|
||||||
value->rValue = here->BSIM4gtau;
|
value->rValue = here->BSIM4gtau;
|
||||||
return(OK);
|
return(OK);
|
||||||
case BSIM4_CGGB:
|
case BSIM4_CGGB:
|
||||||
value->rValue = here->BSIM4cggb;
|
value->rValue = here->BSIM4cggb;
|
||||||
value->rValue *= here->BSIM4mult_q;
|
value->rValue *= here->BSIM4mult_q * here->BSIM4m;
|
||||||
return(OK);
|
return(OK);
|
||||||
case BSIM4_CGDB:
|
case BSIM4_CGDB:
|
||||||
value->rValue = here->BSIM4cgdb;
|
value->rValue = here->BSIM4cgdb;
|
||||||
value->rValue *= here->BSIM4mult_q;
|
value->rValue *= here->BSIM4mult_q * here->BSIM4m;
|
||||||
return(OK);
|
return(OK);
|
||||||
case BSIM4_CGSB:
|
case BSIM4_CGSB:
|
||||||
value->rValue = here->BSIM4cgsb;
|
value->rValue = here->BSIM4cgsb;
|
||||||
value->rValue *= here->BSIM4mult_q;
|
value->rValue *= here->BSIM4mult_q * here->BSIM4m;
|
||||||
return(OK);
|
return(OK);
|
||||||
case BSIM4_CDGB:
|
case BSIM4_CDGB:
|
||||||
value->rValue = here->BSIM4cdgb;
|
value->rValue = here->BSIM4cdgb;
|
||||||
value->rValue *= here->BSIM4mult_q;
|
value->rValue *= here->BSIM4mult_q * here->BSIM4m;
|
||||||
return(OK);
|
return(OK);
|
||||||
case BSIM4_CDDB:
|
case BSIM4_CDDB:
|
||||||
value->rValue = here->BSIM4cddb;
|
value->rValue = here->BSIM4cddb;
|
||||||
value->rValue *= here->BSIM4mult_q;
|
value->rValue *= here->BSIM4mult_q * here->BSIM4m;
|
||||||
return(OK);
|
return(OK);
|
||||||
case BSIM4_CDSB:
|
case BSIM4_CDSB:
|
||||||
value->rValue = here->BSIM4cdsb;
|
value->rValue = here->BSIM4cdsb;
|
||||||
value->rValue *= here->BSIM4mult_q;
|
value->rValue *= here->BSIM4mult_q * here->BSIM4m;
|
||||||
return(OK);
|
return(OK);
|
||||||
case BSIM4_CBGB:
|
case BSIM4_CBGB:
|
||||||
value->rValue = here->BSIM4cbgb;
|
value->rValue = here->BSIM4cbgb;
|
||||||
value->rValue *= here->BSIM4mult_q;
|
value->rValue *= here->BSIM4mult_q * here->BSIM4m;
|
||||||
return(OK);
|
return(OK);
|
||||||
case BSIM4_CBDB:
|
case BSIM4_CBDB:
|
||||||
value->rValue = here->BSIM4cbdb;
|
value->rValue = here->BSIM4cbdb;
|
||||||
value->rValue *= here->BSIM4mult_q;
|
value->rValue *= here->BSIM4mult_q * here->BSIM4m;
|
||||||
return(OK);
|
return(OK);
|
||||||
case BSIM4_CBSB:
|
case BSIM4_CBSB:
|
||||||
value->rValue = here->BSIM4cbsb;
|
value->rValue = here->BSIM4cbsb;
|
||||||
value->rValue *= here->BSIM4mult_q;
|
value->rValue *= here->BSIM4mult_q * here->BSIM4m;
|
||||||
return(OK);
|
return(OK);
|
||||||
case BSIM4_CSGB:
|
case BSIM4_CSGB:
|
||||||
value->rValue = here->BSIM4csgb;
|
value->rValue = here->BSIM4csgb;
|
||||||
value->rValue *= here->BSIM4mult_q;
|
value->rValue *= here->BSIM4mult_q * here->BSIM4m;
|
||||||
return(OK);
|
return(OK);
|
||||||
case BSIM4_CSDB:
|
case BSIM4_CSDB:
|
||||||
value->rValue = here->BSIM4csdb;
|
value->rValue = here->BSIM4csdb;
|
||||||
value->rValue *= here->BSIM4mult_q;
|
value->rValue *= here->BSIM4mult_q * here->BSIM4m;
|
||||||
return(OK);
|
return(OK);
|
||||||
case BSIM4_CSSB:
|
case BSIM4_CSSB:
|
||||||
value->rValue = here->BSIM4cssb;
|
value->rValue = here->BSIM4cssb;
|
||||||
value->rValue *= here->BSIM4mult_q;
|
value->rValue *= here->BSIM4mult_q * here->BSIM4m;
|
||||||
return(OK);
|
return(OK);
|
||||||
case BSIM4_CGBB:
|
case BSIM4_CGBB:
|
||||||
value->rValue = here->BSIM4cgbb;
|
value->rValue = here->BSIM4cgbb;
|
||||||
value->rValue *= here->BSIM4mult_q;
|
value->rValue *= here->BSIM4mult_q * here->BSIM4m;
|
||||||
return(OK);
|
return(OK);
|
||||||
case BSIM4_CDBB:
|
case BSIM4_CDBB:
|
||||||
value->rValue = here->BSIM4cdbb;
|
value->rValue = here->BSIM4cdbb;
|
||||||
value->rValue *= here->BSIM4mult_q;
|
value->rValue *= here->BSIM4mult_q * here->BSIM4m;
|
||||||
return(OK);
|
return(OK);
|
||||||
case BSIM4_CSBB:
|
case BSIM4_CSBB:
|
||||||
value->rValue = here->BSIM4csbb;
|
value->rValue = here->BSIM4csbb;
|
||||||
value->rValue *= here->BSIM4mult_q;
|
value->rValue *= here->BSIM4mult_q * here->BSIM4m;
|
||||||
return(OK);
|
return(OK);
|
||||||
case BSIM4_CBBB:
|
case BSIM4_CBBB:
|
||||||
value->rValue = here->BSIM4cbbb;
|
value->rValue = here->BSIM4cbbb;
|
||||||
value->rValue *= here->BSIM4mult_q;
|
value->rValue *= here->BSIM4mult_q * here->BSIM4m;
|
||||||
return(OK);
|
return(OK);
|
||||||
case BSIM4_CAPBD:
|
case BSIM4_CAPBD:
|
||||||
value->rValue = here->BSIM4capbd;
|
value->rValue = here->BSIM4capbd;
|
||||||
value->rValue *= here->BSIM4mult_q;
|
value->rValue *= here->BSIM4mult_q * here->BSIM4m;
|
||||||
return(OK);
|
return(OK);
|
||||||
case BSIM4_CAPBS:
|
case BSIM4_CAPBS:
|
||||||
value->rValue = here->BSIM4capbs;
|
value->rValue = here->BSIM4capbs;
|
||||||
value->rValue *= here->BSIM4mult_q;
|
value->rValue *= here->BSIM4mult_q * here->BSIM4m;
|
||||||
return(OK);
|
return(OK);
|
||||||
case BSIM4_VON:
|
case BSIM4_VON:
|
||||||
value->rValue = here->BSIM4von;
|
value->rValue = here->BSIM4von;
|
||||||
|
|
@ -427,15 +427,15 @@ BSIM4instance *here = (BSIM4instance*)inst;
|
||||||
return(OK);
|
return(OK);
|
||||||
case BSIM4_CGSO:
|
case BSIM4_CGSO:
|
||||||
value->rValue = here->BSIM4cgso;
|
value->rValue = here->BSIM4cgso;
|
||||||
value->rValue *= here->BSIM4mult_q;
|
value->rValue *= here->BSIM4mult_q * here->BSIM4m;
|
||||||
return(OK);
|
return(OK);
|
||||||
case BSIM4_CGDO:
|
case BSIM4_CGDO:
|
||||||
value->rValue = here->BSIM4cgdo;
|
value->rValue = here->BSIM4cgdo;
|
||||||
value->rValue *= here->BSIM4mult_q;
|
value->rValue *= here->BSIM4mult_q * here->BSIM4m;
|
||||||
return(OK);
|
return(OK);
|
||||||
case BSIM4_CGBO:
|
case BSIM4_CGBO:
|
||||||
value->rValue = here->pParam->BSIM4cgbo;
|
value->rValue = here->pParam->BSIM4cgbo;
|
||||||
value->rValue *= here->BSIM4mult_q;
|
value->rValue *= here->BSIM4mult_q * here->BSIM4m;
|
||||||
return(OK);
|
return(OK);
|
||||||
case BSIM4_WEFF:
|
case BSIM4_WEFF:
|
||||||
value->rValue = here->pParam->BSIM4weff;
|
value->rValue = here->pParam->BSIM4weff;
|
||||||
|
|
|
||||||
|
|
@ -4986,9 +4986,9 @@ line900:
|
||||||
*/
|
*/
|
||||||
|
|
||||||
m = here->BSIM4m;
|
m = here->BSIM4m;
|
||||||
mult_i = here->BSIM4mult_i;
|
mult_i = here->BSIM4mult_i * here->BSIM4m;
|
||||||
mult_q = here->BSIM4mult_q;
|
mult_q = here->BSIM4mult_q * here->BSIM4m;
|
||||||
|
|
||||||
#ifdef USE_OMP
|
#ifdef USE_OMP
|
||||||
here->BSIM4rhsdPrime = (mult_i * (ceqjd - ceqbd + ceqgdtot
|
here->BSIM4rhsdPrime = (mult_i * (ceqjd - ceqbd + ceqgdtot
|
||||||
- ceqdrn + Idtoteq) - mult_q * ceqqd);
|
- ceqdrn + Idtoteq) - mult_q * ceqqd);
|
||||||
|
|
@ -5006,9 +5006,9 @@ line900:
|
||||||
- ceqgstot + Istoteq) + mult_q * (ceqqg + ceqqb + ceqqd + ceqqgmid));
|
- ceqgstot + Istoteq) + mult_q * (ceqqg + ceqqb + ceqqd + ceqqgmid));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{ here->BSIM4rhsdb = mult_i * (ceqjd + ceqqjd);
|
{ here->BSIM4rhsdb = mult_i * (ceqjd /*+ ceqqjd */) + mult_q * ceqqjd;
|
||||||
here->BSIM4rhsbPrime = (mult_i * (ceqbd + ceqbs + Ibtoteq) - mult_q * ceqqb);
|
here->BSIM4rhsbPrime = (mult_i * (ceqbd + ceqbs + Ibtoteq) - mult_q * ceqqb);
|
||||||
here->BSIM4rhssb = mult_i * (ceqjs + ceqqjs);
|
here->BSIM4rhssb = mult_i * (ceqjs /*+ ceqqjs*/) + mult_q * ceqqjs;
|
||||||
here->BSIM4rhssPrime = (mult_i * (ceqdrn - ceqbs + ceqjs - ceqgstot + Istoteq) + mult_q * (ceqqd
|
here->BSIM4rhssPrime = (mult_i * (ceqdrn - ceqbs + ceqjs - ceqgstot + Istoteq) + mult_q * (ceqqd
|
||||||
+ ceqqg + ceqqb + ceqqjd + ceqqjs + ceqqgmid));
|
+ ceqqg + ceqqb + ceqqjd + ceqqjs + ceqqgmid));
|
||||||
}
|
}
|
||||||
|
|
@ -5037,9 +5037,9 @@ line900:
|
||||||
- ceqgstot + Istoteq) + mult_q * (ceqqg + ceqqb + ceqqd + ceqqgmid)));
|
- ceqgstot + Istoteq) + mult_q * (ceqqg + ceqqb + ceqqd + ceqqgmid)));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{ (*(ckt->CKTrhs + here->BSIM4dbNode) -= mult_i * (ceqjd + ceqqjd));
|
{ (*(ckt->CKTrhs + here->BSIM4dbNode) -= mult_i * (ceqjd /*+ ceqqjd*/) + mult_q * ceqqjd);
|
||||||
(*(ckt->CKTrhs + here->BSIM4bNodePrime) += (mult_i * (ceqbd + ceqbs + Ibtoteq) - mult_q * ceqqb));
|
(*(ckt->CKTrhs + here->BSIM4bNodePrime) += (mult_i * (ceqbd + ceqbs + Ibtoteq) - mult_q * ceqqb));
|
||||||
(*(ckt->CKTrhs + here->BSIM4sbNode) -= mult_i * (ceqjs + ceqqjs));
|
(*(ckt->CKTrhs + here->BSIM4sbNode) -= mult_i * (ceqjs /*+ ceqqjs*/) + mult_q * ceqqjs);
|
||||||
(*(ckt->CKTrhs + here->BSIM4sNodePrime) += (mult_i * (ceqdrn - ceqbs + ceqjs - ceqgstot + Istoteq) + mult_q * (ceqqd
|
(*(ckt->CKTrhs + here->BSIM4sNodePrime) += (mult_i * (ceqdrn - ceqbs + ceqjs - ceqgstot + Istoteq) + mult_q * (ceqqd
|
||||||
+ ceqqg + ceqqb + ceqqjd + ceqqjs + ceqqgmid)));
|
+ ceqqg + ceqqb + ceqqjd + ceqqjs + ceqqgmid)));
|
||||||
}
|
}
|
||||||
|
|
@ -5227,9 +5227,9 @@ line900:
|
||||||
here->BSIM4_99 = m * (ggts - gcqsb);
|
here->BSIM4_99 = m * (ggts - gcqsb);
|
||||||
here->BSIM4_100 = m * (ggtb - gcqbb);
|
here->BSIM4_100 = m * (ggtb - gcqbb);
|
||||||
|
|
||||||
here->BSIM4_101 = m * dxpart * here->BSIM4gtau;
|
here->BSIM4_101 = mult_q * dxpart * here->BSIM4gtau;
|
||||||
here->BSIM4_102 = m * sxpart * here->BSIM4gtau;
|
here->BSIM4_102 = mult_q * sxpart * here->BSIM4gtau;
|
||||||
here->BSIM4_103 = m * here->BSIM4gtau;
|
here->BSIM4_103 = mult_q * here->BSIM4gtau;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
if (here->BSIM4rgateMod == 1)
|
if (here->BSIM4rgateMod == 1)
|
||||||
|
|
@ -5382,9 +5382,9 @@ line900:
|
||||||
(*(here->BSIM4QspPtr) += m * (ggts - gcqsb));
|
(*(here->BSIM4QspPtr) += m * (ggts - gcqsb));
|
||||||
(*(here->BSIM4QbpPtr) += m * (ggtb - gcqbb));
|
(*(here->BSIM4QbpPtr) += m * (ggtb - gcqbb));
|
||||||
|
|
||||||
(*(here->BSIM4DPqPtr) += m * (dxpart * here->BSIM4gtau));
|
(*(here->BSIM4DPqPtr) += mult_q * (dxpart * here->BSIM4gtau));
|
||||||
(*(here->BSIM4SPqPtr) += m * (sxpart * here->BSIM4gtau));
|
(*(here->BSIM4SPqPtr) += mult_q * (sxpart * here->BSIM4gtau));
|
||||||
(*(here->BSIM4GPqPtr) -= m * (here->BSIM4gtau));
|
(*(here->BSIM4GPqPtr) -= mult_q * (here->BSIM4gtau));
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -155,8 +155,8 @@ double mult_i, mult_fn;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case N_CALC:
|
case N_CALC:
|
||||||
mult_i = here->BSIM4mult_i;
|
mult_i = here->BSIM4mult_i * here->BSIM4m;
|
||||||
mult_fn = here->BSIM4mult_fn;
|
mult_fn = here->BSIM4mult_fn * here->BSIM4m;
|
||||||
switch (mode)
|
switch (mode)
|
||||||
{ case N_DENS:
|
{ case N_DENS:
|
||||||
if (model->BSIM4tnoiMod == 0)
|
if (model->BSIM4tnoiMod == 0)
|
||||||
|
|
@ -366,9 +366,7 @@ double mult_i, mult_fn;
|
||||||
epsilon = (T7 - T7 * T7 * T7 / 3.0) / (6.0 * T6);
|
epsilon = (T7 - T7 * T7 * T7 / 3.0) / (6.0 * T6);
|
||||||
T8 = here->BSIM4Vgsteff / here->BSIM4EsatL;
|
T8 = here->BSIM4Vgsteff / here->BSIM4EsatL;
|
||||||
T8 *= T8;
|
T8 *= T8;
|
||||||
if ((strcmp(model->BSIM4version, "4.8.1")) && (strncmp(model->BSIM4version, "4.81", 4)) && (strncmp(model->BSIM4version, "4.8", 3)) &&
|
if (model->BSIM4v48intVersion<=BSIM4v48V480)
|
||||||
(strcmp(model->BSIM4version, "4.8.2")) && (strncmp(model->BSIM4version, "4.82", 4)) &&
|
|
||||||
(strcmp(model->BSIM4version, "4.8.3")) && (strncmp(model->BSIM4version, "4.83", 4)))
|
|
||||||
{
|
{
|
||||||
npart_c = model->BSIM4rnoic * (1.0 + T8
|
npart_c = model->BSIM4rnoic * (1.0 + T8
|
||||||
* model->BSIM4tnoic * Leff);
|
* model->BSIM4tnoic * Leff);
|
||||||
|
|
@ -420,9 +418,7 @@ double mult_i, mult_fn;
|
||||||
}
|
}
|
||||||
switch(model->BSIM4tnoiMod)
|
switch(model->BSIM4tnoiMod)
|
||||||
{ case 0:
|
{ case 0:
|
||||||
if ((strcmp(model->BSIM4version, "4.8.1")) && (strncmp(model->BSIM4version, "4.81", 4)) && (strncmp(model->BSIM4version, "4.8", 3)) &&
|
if (model->BSIM4v48intVersion<=BSIM4v48V480)
|
||||||
(strcmp(model->BSIM4version, "4.8.2")) && (strncmp(model->BSIM4version, "4.82", 4)) &&
|
|
||||||
(strcmp(model->BSIM4version, "4.8.3")) && (strncmp(model->BSIM4version, "4.83", 4)))
|
|
||||||
{
|
{
|
||||||
T0 = here->BSIM4ueff * fabs(here->BSIM4qinv);
|
T0 = here->BSIM4ueff * fabs(here->BSIM4qinv);
|
||||||
T1 = T0 * tmp + pParam->BSIM4leff
|
T1 = T0 * tmp + pParam->BSIM4leff
|
||||||
|
|
@ -449,9 +445,7 @@ double mult_i, mult_fn;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
if ((strcmp(model->BSIM4version, "4.8.1")) && (strncmp(model->BSIM4version, "4.81", 4)) && (strncmp(model->BSIM4version, "4.8", 3)) &&
|
if (model->BSIM4v48intVersion<=BSIM4v48V480)
|
||||||
(strcmp(model->BSIM4version, "4.8.2")) && (strncmp(model->BSIM4version, "4.82", 4)) &&
|
|
||||||
(strcmp(model->BSIM4version, "4.8.3")) && (strncmp(model->BSIM4version, "4.83", 4)))
|
|
||||||
{
|
{
|
||||||
T0 = here->BSIM4gm + here->BSIM4gmbs + here->BSIM4gds;
|
T0 = here->BSIM4gm + here->BSIM4gmbs + here->BSIM4gds;
|
||||||
T0 *= T0;
|
T0 *= T0;
|
||||||
|
|
|
||||||
|
|
@ -494,8 +494,8 @@ double m, mult_i, mult_q;
|
||||||
* Loading PZ matrix
|
* Loading PZ matrix
|
||||||
*/
|
*/
|
||||||
m = here->BSIM4m;
|
m = here->BSIM4m;
|
||||||
mult_i = here->BSIM4mult_i;
|
mult_i = here->BSIM4mult_i * here->BSIM4m;
|
||||||
mult_q = here->BSIM4mult_q;
|
mult_q = here->BSIM4mult_q * here->BSIM4m;
|
||||||
|
|
||||||
if (!model->BSIM4rdsMod)
|
if (!model->BSIM4rdsMod)
|
||||||
{ gdpr = here->BSIM4drainConductance;
|
{ gdpr = here->BSIM4drainConductance;
|
||||||
|
|
|
||||||
|
|
@ -203,6 +203,19 @@ BSIM4instance **InstArray;
|
||||||
}
|
}
|
||||||
if (!model->BSIM4versionGiven)
|
if (!model->BSIM4versionGiven)
|
||||||
model->BSIM4version = copy("4.8.3");
|
model->BSIM4version = copy("4.8.3");
|
||||||
|
/* Speed up version checking via integer version number */
|
||||||
|
if ((!strcmp(model->BSIM4version, "4.8.3"))||(!strncmp(model->BSIM4version, "4.83", 4))||(!strncmp(model->BSIM4version, "4.8", 3))) {
|
||||||
|
model->BSIM4v48intVersion = BSIM4v48V483;
|
||||||
|
} else if ((!strcmp(model->BSIM4version, "4.8.2"))||(!strncmp(model->BSIM4version, "4.82", 4))) {
|
||||||
|
model->BSIM4v48intVersion = BSIM4v48V482;
|
||||||
|
} else if ((!strcmp(model->BSIM4version, "4.8.1"))||(!strncmp(model->BSIM4version, "4.81", 4))) {
|
||||||
|
model->BSIM4v48intVersion = BSIM4v48V481;
|
||||||
|
} else if ((!strcmp(model->BSIM4version, "4.8.0"))||(!strncmp(model->BSIM4version, "4.80", 4))) {
|
||||||
|
model->BSIM4v48intVersion = BSIM4v48V480;
|
||||||
|
} else {
|
||||||
|
printf("Warning: unknown BSIM4 version. Working now with BSIM4.8.3.\n");
|
||||||
|
model->BSIM4v48intVersion = BSIM4v48V483;
|
||||||
|
}
|
||||||
if (!model->BSIM4toxrefGiven)
|
if (!model->BSIM4toxrefGiven)
|
||||||
model->BSIM4toxref = 30.0e-10;
|
model->BSIM4toxref = 30.0e-10;
|
||||||
if (!model->BSIM4eotGiven)
|
if (!model->BSIM4eotGiven)
|
||||||
|
|
@ -342,9 +355,7 @@ BSIM4instance **InstArray;
|
||||||
if (!model->BSIM4ucsGiven)
|
if (!model->BSIM4ucsGiven)
|
||||||
model->BSIM4ucs = (model->BSIM4type == NMOS) ? 1.67 : 1.0;
|
model->BSIM4ucs = (model->BSIM4type == NMOS) ? 1.67 : 1.0;
|
||||||
|
|
||||||
if ((strcmp(model->BSIM4version, "4.8.1")) && (strncmp(model->BSIM4version, "4.81", 4)) &&
|
if (model->BSIM4v48intVersion<=BSIM4v48V480)
|
||||||
(strcmp(model->BSIM4version, "4.8.2")) && (strncmp(model->BSIM4version, "4.82", 4)) &&
|
|
||||||
(strcmp(model->BSIM4version, "4.8.3")) && (strncmp(model->BSIM4version, "4.83", 4)))
|
|
||||||
{
|
{
|
||||||
if (!model->BSIM4uaGiven)
|
if (!model->BSIM4uaGiven)
|
||||||
model->BSIM4ua = ((model->BSIM4mobMod == 2)) ? 1.0e-15 : 1.0e-9; /* unit m/V */
|
model->BSIM4ua = ((model->BSIM4mobMod == 2)) ? 1.0e-15 : 1.0e-9; /* unit m/V */
|
||||||
|
|
@ -2361,10 +2372,6 @@ BSIM4instance **InstArray;
|
||||||
if (!here->BSIM4ngconGiven)
|
if (!here->BSIM4ngconGiven)
|
||||||
here->BSIM4ngcon = model->BSIM4ngcon;
|
here->BSIM4ngcon = model->BSIM4ngcon;
|
||||||
|
|
||||||
here->BSIM4mult_i = here->BSIM4mult_i * here->BSIM4m;
|
|
||||||
here->BSIM4mult_q = here->BSIM4mult_q * here->BSIM4m;
|
|
||||||
here->BSIM4mult_fn = here->BSIM4mult_fn * here->BSIM4m;
|
|
||||||
|
|
||||||
/* Process instance model selectors, some
|
/* Process instance model selectors, some
|
||||||
* may override their global counterparts
|
* may override their global counterparts
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -122,8 +122,12 @@ int Fatal_Flag = 0;
|
||||||
|
|
||||||
if(model->BSIM4mtrlMod == 0)
|
if(model->BSIM4mtrlMod == 0)
|
||||||
{
|
{
|
||||||
|
double chktol = fabs(model->BSIM4toxe);
|
||||||
|
if (fabs(model->BSIM4toxp)>chktol) chktol = fabs(model->BSIM4toxp);
|
||||||
|
if (fabs(model->BSIM4dtox)>chktol) chktol = fabs(model->BSIM4dtox);
|
||||||
|
chktol=chktol*1e-14;
|
||||||
if ((model->BSIM4toxeGiven) && (model->BSIM4toxpGiven) && (model->BSIM4dtoxGiven)
|
if ((model->BSIM4toxeGiven) && (model->BSIM4toxpGiven) && (model->BSIM4dtoxGiven)
|
||||||
&& (model->BSIM4toxe != (model->BSIM4toxp + model->BSIM4dtox)))
|
&& (fabs(model->BSIM4toxe-(model->BSIM4toxp + model->BSIM4dtox))>chktol))
|
||||||
{ printf("Warning: toxe, toxp and dtox all given and toxe != toxp + dtox; dtox ignored.\n");
|
{ printf("Warning: toxe, toxp and dtox all given and toxe != toxp + dtox; dtox ignored.\n");
|
||||||
}
|
}
|
||||||
else if ((model->BSIM4toxeGiven) && (!model->BSIM4toxpGiven))
|
else if ((model->BSIM4toxeGiven) && (!model->BSIM4toxpGiven))
|
||||||
|
|
@ -1368,10 +1372,7 @@ int Fatal_Flag = 0;
|
||||||
pParam->BSIM4Aechvb = (model->BSIM4type == NMOS) ? 4.97232e-7 : 3.42537e-7;
|
pParam->BSIM4Aechvb = (model->BSIM4type == NMOS) ? 4.97232e-7 : 3.42537e-7;
|
||||||
pParam->BSIM4Bechvb = (model->BSIM4type == NMOS) ? 7.45669e11 : 1.16645e12;
|
pParam->BSIM4Bechvb = (model->BSIM4type == NMOS) ? 7.45669e11 : 1.16645e12;
|
||||||
|
|
||||||
if ((strcmp(model->BSIM4version, "4.8.1")) && (strncmp(model->BSIM4version, "4.81", 4)) &&
|
if (model->BSIM4v48intVersion<=BSIM4v48V480) {
|
||||||
(strcmp(model->BSIM4version, "4.8.2")) && (strncmp(model->BSIM4version, "4.82", 4)) &&
|
|
||||||
(strcmp(model->BSIM4version, "4.8.3")) && (strncmp(model->BSIM4version, "4.83", 4)))
|
|
||||||
{
|
|
||||||
pParam->BSIM4AechvbEdgeS = pParam->BSIM4Aechvb * pParam->BSIM4weff
|
pParam->BSIM4AechvbEdgeS = pParam->BSIM4Aechvb * pParam->BSIM4weff
|
||||||
* model->BSIM4dlcig * pParam->BSIM4ToxRatioEdge;
|
* model->BSIM4dlcig * pParam->BSIM4ToxRatioEdge;
|
||||||
pParam->BSIM4AechvbEdgeD = pParam->BSIM4Aechvb * pParam->BSIM4weff
|
pParam->BSIM4AechvbEdgeD = pParam->BSIM4Aechvb * pParam->BSIM4weff
|
||||||
|
|
|
||||||
|
|
@ -941,7 +941,12 @@ typedef struct sBSIM4model
|
||||||
int BSIM4tempMod;
|
int BSIM4tempMod;
|
||||||
int BSIM4binUnit;
|
int BSIM4binUnit;
|
||||||
int BSIM4paramChk;
|
int BSIM4paramChk;
|
||||||
char *BSIM4version;
|
char *BSIM4version;
|
||||||
|
int BSIM4v48intVersion;
|
||||||
|
#define BSIM4v48V483 483 /* BSIM4v48 V4.8.3 */
|
||||||
|
#define BSIM4v48V482 482 /* BSIM4v48 V4.8.2 */
|
||||||
|
#define BSIM4v48V481 481 /* BSIM4v48 V4.8.1 */
|
||||||
|
#define BSIM4v48V480 480 /* BSIM4v48 V4.8.0 */
|
||||||
double BSIM4eot;
|
double BSIM4eot;
|
||||||
double BSIM4vddeot;
|
double BSIM4vddeot;
|
||||||
double BSIM4tempeot;
|
double BSIM4tempeot;
|
||||||
|
|
|
||||||
|
|
@ -107,13 +107,13 @@ VSRCunsetup(GENmodel *inModel, CKTcircuit *ckt)
|
||||||
VSRCinstance *here;
|
VSRCinstance *here;
|
||||||
|
|
||||||
for (model = (VSRCmodel *)inModel; model != NULL;
|
for (model = (VSRCmodel *)inModel; model != NULL;
|
||||||
model = VSRCnextModel(model))
|
model = VSRCnextModel(model))
|
||||||
{
|
{
|
||||||
for (here = VSRCinstances(model); here != NULL;
|
for (here = VSRCinstances(model); here != NULL;
|
||||||
here=VSRCnextInstance(here))
|
here=VSRCnextInstance(here))
|
||||||
{
|
{
|
||||||
if (here->VSRCbranch > 0)
|
if (here->VSRCbranch > 0)
|
||||||
CKTdltNNum(ckt, here->VSRCbranch);
|
CKTdltNNum(ckt, here->VSRCbranch);
|
||||||
here->VSRCbranch = 0;
|
here->VSRCbranch = 0;
|
||||||
#ifdef RFSPICE
|
#ifdef RFSPICE
|
||||||
if ((here->VSRCresNode > 0) & (here->VSRCisPort))
|
if ((here->VSRCresNode > 0) & (here->VSRCisPort))
|
||||||
|
|
@ -121,7 +121,7 @@ VSRCunsetup(GENmodel *inModel, CKTcircuit *ckt)
|
||||||
here->VSRCresNode = 0;
|
here->VSRCresNode = 0;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -336,9 +336,9 @@ void cm_filesource(ARGS) /* structure holding parms, inputs, outputs, etc.
|
||||||
loc->timeinterval[1] = loc->indata->datavec[loc->indata->actpointer + stepsize];
|
loc->timeinterval[1] = loc->indata->datavec[loc->indata->actpointer + stepsize];
|
||||||
|
|
||||||
if (terr)
|
if (terr)
|
||||||
cm_message_printf("WARNING: some error occured during reading the time values");
|
cm_message_printf("WARNING: some error occurred during reading the time values");
|
||||||
if (derr)
|
if (derr)
|
||||||
cm_message_printf("WARNING: some error occured during reading the data values");
|
cm_message_printf("WARNING: some error occurred during reading the data values");
|
||||||
}
|
}
|
||||||
|
|
||||||
loc = STATIC_VAR (locdata);
|
loc = STATIC_VAR (locdata);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue