correct subckt expansion and new bsim model level/version selection

This commit is contained in:
dwarning 2008-01-06 14:09:33 +00:00
parent b7a0ee52f1
commit e352cb46dd
4 changed files with 60 additions and 63 deletions

View File

@ -1,3 +1,10 @@
2008-01-06 Dietmar Warning
* src/frontend/subckt.c: correct compare of binned model names. Fixed a bug
of incorrect subckt expansion when MOS model inside.
* src/spicelib/parser/inpdomod.c, DEVICES: Compatibility issue - now all
bsim3 models running under level 8 and 49 and all bsim4 models under
level 14 and 54. Distinction must be made by version parameter.
2008-01-04 Paolo Nenzi <p.nenzi@ieee.org>
* src/frontend/runcoms.c: commented out code that did not allow rawfile
generation for OP and AC analyses. Now rawfile is generated even for

36
DEVICES
View File

@ -574,27 +574,16 @@ BSIM3v0 - BSIM model level 3
Initial Release.
Ver: 3.0
Class: M
Level: 52
Level: 8 & 49, version = 3.0
Dir: devices/bsim3v0
Status: TO BE TESTED AND IMPROVED
BSIM3v0 - BSIM model level 3
Initial Release.
Ver: 3.0
Class: M
Level: 51
Dir: devices/bsim3v1a
Status: TO BE TESTED AND IMPROVED
This is the BSIM3v3.0 model modified by Alan Gillespie.
BSIM3v1 - BSIM model level 3
Initial Release.
Ver: 3.1
Class: M
Level: 50
Level: 8 & 49, version = 3.1
Dir: devices/bsim3v1
Status: TO BE TESTED
@ -603,7 +592,18 @@ BSIM3v1 - BSIM model level 3
Initial Release.
Ver: 3.1
Class: M
Level: 49
Level: 8 & 49, version = 3.1a
Dir: devices/bsim3v1a
Status: TO BE TESTED AND IMPROVED
This is the BSIM3v3.1 model modified by Alan Gillespie.
BSIM3v1 - BSIM model level 3
Initial Release.
Ver: 3.1
Class: M
Level: 8 & 49, version = 3.1s
Dir: devices/bsim3v1s
Status: TO BE TESTED AND IMPROVED
@ -614,9 +614,9 @@ BSIM3v1 - BSIM model level 3
BSIM3 - BSIM model level 3
Initial Release.
Ver: 3.2.4
Ver: 3.2.4 - 3.3.0
Class: M
Level: 8
Level: 8 & 49, version = 3.2.2, 3.2.3, 3.2.4, 3.3.0
Dir: devices/bsim3
Status: TO BE TESTED
@ -637,9 +637,9 @@ BSIM3 - BSIM model level 3
BSIM4 - BSIM model level 4 (0.18 um)
Initial Release.
Ver: 4.5.0
Ver: 4.2.0 - 4.6.1
Class: M
Level: 14
Level: 14 & 54, version = 4.2, 4.3, 4.4, 4.5, 4.6.1
Dir: devices/bsim4
Status: TO BE TESTED

View File

@ -1607,6 +1607,8 @@ devmodtranslate(struct line *deck, char *subname)
char *buffer, *name, *t, c;
wordlist *wlsub;
bool found;
char* dot_char;
int i, j;
#ifdef XSPICE
char *next_name;
#endif /* XSPICE */
@ -1836,17 +1838,26 @@ devmodtranslate(struct line *deck, char *subname)
(void) sprintf(buffer + strlen(buffer), "%s ", name);
tfree(name);
name = gettok(&t);
/* Now, is this a subcircuit model? */
for (wlsub = submod; wlsub; wlsub = wlsub->wl_next) {
if (eq(name, wlsub->wl_word)) {
(void) sprintf(buffer + strlen(buffer), "%s:%s ",
subname, name);
found = TRUE;
break;
i = strlen(wlsub->wl_word);
j = 0; /* Now, have we a binned model? */
if ( (dot_char = strstr( wlsub->wl_word, "." )) ) {
dot_char++; j++;
while( *dot_char != '\0' ) {
if ( !isdigit( *dot_char ) ) {
break;
}
dot_char++; j++;
}
}
if ( strncmp( name, wlsub->wl_word, i - j ) == 0 ) {
(void) sprintf(buffer + strlen(buffer), "%s:%s ",
subname, name);
found = TRUE;
break;
}
}
if (!found)
(void) sprintf(buffer + strlen(buffer), "%s ", name);
(void) strcat(buffer, t);

View File

@ -161,7 +161,7 @@ char *INPdomodel(void *ckt, card * image, INPtables * tab)
err = INPmkTemp("Device type MESA not availabe\n");
}
break;
case 3:
case 3:
type = INPtypelook("MESA");
if (type < 0)
{
@ -272,8 +272,21 @@ char *INPdomodel(void *ckt, card * image, INPtables * tab)
("Device type MOS7 not available in this binary\n");
}
break;
case 8:
case 8: case 49:
err = INPfindVer(line, ver);
if ( strcmp(ver, "3.0") == 0 ) {
type = INPtypelook("BSIM3v0");
}
if ( strcmp(ver, "3.1") == 0 ) {
type = INPtypelook("BSIM3v1");
}
if ( strcmp(ver, "3.1s") == 0 ) {
type = INPtypelook("BSIM3v1S");
}
if ( strcmp(ver, "3.1a") == 0 ) {
type = INPtypelook("BSIM3v1A");
}
if ( (strstr(ver, "3.2.2")) || (strstr(ver, "3.22")) ||
(strstr(ver, "3.2.3")) || (strstr(ver, "3.23")) ||
(strstr(ver, "3.2.4")) || (strstr(ver, "3.24")) ) {
@ -284,9 +297,7 @@ char *INPdomodel(void *ckt, card * image, INPtables * tab)
type = INPtypelook("BSIM3");
}
if (type < 0) {
err =
INPmkTemp
("Device type BSIM3 not available in this binary\n");
err = INPmkTemp("Device type BSIM3 not available in this binary\n");
}
break;
case 9:
@ -296,7 +307,7 @@ char *INPdomodel(void *ckt, card * image, INPtables * tab)
("Device type MOS9 not available in this binary\n");
}
break;
case 14:
case 14: case 54:
err = INPfindVer(line, ver); /* mapping of minor versions are only placeholder */
if ( (strstr(ver, "4.2")) || (strstr(ver, "4.2.0")) || (strstr(ver, "4.20"))
|| (strstr(ver, "4.2.1")) || (strstr(ver, "4.21")) ) {
@ -355,38 +366,6 @@ char *INPdomodel(void *ckt, card * image, INPtables * tab)
}
break;
#endif
case 49:
type = INPtypelook("BSIM3v1S");
if (type < 0) {
err =
INPmkTemp
("Device type BSIM3v1S not available in this binary\n");
}
break;
case 50:
type = INPtypelook("BSIM3v1");
if (type < 0) {
err =
INPmkTemp
("Device type BSIM3v1 not available in this binary\n");
}
break;
case 51:
type = INPtypelook("BSIM3v1A");
if (type < 0) {
err =
INPmkTemp
("Device type BSIM3v1A not available in this binary\n");
}
break;
case 52:
type = INPtypelook("BSIM3v0");
if (type < 0) {
err =
INPmkTemp
("Device type BSIM3v0 not available in this binary\n");
}
break;
case 55:
type = INPtypelook("B3SOIFD");
if (type < 0) {