correct subckt expansion and new bsim model level/version selection
This commit is contained in:
parent
b7a0ee52f1
commit
e352cb46dd
|
|
@ -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>
|
2008-01-04 Paolo Nenzi <p.nenzi@ieee.org>
|
||||||
* src/frontend/runcoms.c: commented out code that did not allow rawfile
|
* src/frontend/runcoms.c: commented out code that did not allow rawfile
|
||||||
generation for OP and AC analyses. Now rawfile is generated even for
|
generation for OP and AC analyses. Now rawfile is generated even for
|
||||||
|
|
|
||||||
36
DEVICES
36
DEVICES
|
|
@ -574,27 +574,16 @@ BSIM3v0 - BSIM model level 3
|
||||||
Initial Release.
|
Initial Release.
|
||||||
Ver: 3.0
|
Ver: 3.0
|
||||||
Class: M
|
Class: M
|
||||||
Level: 52
|
Level: 8 & 49, version = 3.0
|
||||||
Dir: devices/bsim3v0
|
Dir: devices/bsim3v0
|
||||||
Status: TO BE TESTED AND IMPROVED
|
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
|
BSIM3v1 - BSIM model level 3
|
||||||
Initial Release.
|
Initial Release.
|
||||||
Ver: 3.1
|
Ver: 3.1
|
||||||
Class: M
|
Class: M
|
||||||
Level: 50
|
Level: 8 & 49, version = 3.1
|
||||||
Dir: devices/bsim3v1
|
Dir: devices/bsim3v1
|
||||||
Status: TO BE TESTED
|
Status: TO BE TESTED
|
||||||
|
|
||||||
|
|
@ -603,7 +592,18 @@ BSIM3v1 - BSIM model level 3
|
||||||
Initial Release.
|
Initial Release.
|
||||||
Ver: 3.1
|
Ver: 3.1
|
||||||
Class: M
|
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
|
Dir: devices/bsim3v1s
|
||||||
Status: TO BE TESTED AND IMPROVED
|
Status: TO BE TESTED AND IMPROVED
|
||||||
|
|
||||||
|
|
@ -614,9 +614,9 @@ BSIM3v1 - BSIM model level 3
|
||||||
|
|
||||||
BSIM3 - BSIM model level 3
|
BSIM3 - BSIM model level 3
|
||||||
Initial Release.
|
Initial Release.
|
||||||
Ver: 3.2.4
|
Ver: 3.2.4 - 3.3.0
|
||||||
Class: M
|
Class: M
|
||||||
Level: 8
|
Level: 8 & 49, version = 3.2.2, 3.2.3, 3.2.4, 3.3.0
|
||||||
Dir: devices/bsim3
|
Dir: devices/bsim3
|
||||||
Status: TO BE TESTED
|
Status: TO BE TESTED
|
||||||
|
|
||||||
|
|
@ -637,9 +637,9 @@ BSIM3 - BSIM model level 3
|
||||||
|
|
||||||
BSIM4 - BSIM model level 4 (0.18 um)
|
BSIM4 - BSIM model level 4 (0.18 um)
|
||||||
Initial Release.
|
Initial Release.
|
||||||
Ver: 4.5.0
|
Ver: 4.2.0 - 4.6.1
|
||||||
Class: M
|
Class: M
|
||||||
Level: 14
|
Level: 14 & 54, version = 4.2, 4.3, 4.4, 4.5, 4.6.1
|
||||||
Dir: devices/bsim4
|
Dir: devices/bsim4
|
||||||
Status: TO BE TESTED
|
Status: TO BE TESTED
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1607,6 +1607,8 @@ devmodtranslate(struct line *deck, char *subname)
|
||||||
char *buffer, *name, *t, c;
|
char *buffer, *name, *t, c;
|
||||||
wordlist *wlsub;
|
wordlist *wlsub;
|
||||||
bool found;
|
bool found;
|
||||||
|
char* dot_char;
|
||||||
|
int i, j;
|
||||||
#ifdef XSPICE
|
#ifdef XSPICE
|
||||||
char *next_name;
|
char *next_name;
|
||||||
#endif /* XSPICE */
|
#endif /* XSPICE */
|
||||||
|
|
@ -1836,17 +1838,26 @@ devmodtranslate(struct line *deck, char *subname)
|
||||||
(void) sprintf(buffer + strlen(buffer), "%s ", name);
|
(void) sprintf(buffer + strlen(buffer), "%s ", name);
|
||||||
tfree(name);
|
tfree(name);
|
||||||
name = gettok(&t);
|
name = gettok(&t);
|
||||||
|
|
||||||
/* Now, is this a subcircuit model? */
|
/* Now, is this a subcircuit model? */
|
||||||
for (wlsub = submod; wlsub; wlsub = wlsub->wl_next) {
|
for (wlsub = submod; wlsub; wlsub = wlsub->wl_next) {
|
||||||
if (eq(name, wlsub->wl_word)) {
|
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 ",
|
(void) sprintf(buffer + strlen(buffer), "%s:%s ",
|
||||||
subname, name);
|
subname, name);
|
||||||
found = TRUE;
|
found = TRUE;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!found)
|
if (!found)
|
||||||
(void) sprintf(buffer + strlen(buffer), "%s ", name);
|
(void) sprintf(buffer + strlen(buffer), "%s ", name);
|
||||||
(void) strcat(buffer, t);
|
(void) strcat(buffer, t);
|
||||||
|
|
|
||||||
|
|
@ -272,8 +272,21 @@ char *INPdomodel(void *ckt, card * image, INPtables * tab)
|
||||||
("Device type MOS7 not available in this binary\n");
|
("Device type MOS7 not available in this binary\n");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 8:
|
case 8: case 49:
|
||||||
err = INPfindVer(line, ver);
|
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")) ||
|
if ( (strstr(ver, "3.2.2")) || (strstr(ver, "3.22")) ||
|
||||||
(strstr(ver, "3.2.3")) || (strstr(ver, "3.23")) ||
|
(strstr(ver, "3.2.3")) || (strstr(ver, "3.23")) ||
|
||||||
(strstr(ver, "3.2.4")) || (strstr(ver, "3.24")) ) {
|
(strstr(ver, "3.2.4")) || (strstr(ver, "3.24")) ) {
|
||||||
|
|
@ -284,9 +297,7 @@ char *INPdomodel(void *ckt, card * image, INPtables * tab)
|
||||||
type = INPtypelook("BSIM3");
|
type = INPtypelook("BSIM3");
|
||||||
}
|
}
|
||||||
if (type < 0) {
|
if (type < 0) {
|
||||||
err =
|
err = INPmkTemp("Device type BSIM3 not available in this binary\n");
|
||||||
INPmkTemp
|
|
||||||
("Device type BSIM3 not available in this binary\n");
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 9:
|
case 9:
|
||||||
|
|
@ -296,7 +307,7 @@ char *INPdomodel(void *ckt, card * image, INPtables * tab)
|
||||||
("Device type MOS9 not available in this binary\n");
|
("Device type MOS9 not available in this binary\n");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 14:
|
case 14: case 54:
|
||||||
err = INPfindVer(line, ver); /* mapping of minor versions are only placeholder */
|
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"))
|
if ( (strstr(ver, "4.2")) || (strstr(ver, "4.2.0")) || (strstr(ver, "4.20"))
|
||||||
|| (strstr(ver, "4.2.1")) || (strstr(ver, "4.21")) ) {
|
|| (strstr(ver, "4.2.1")) || (strstr(ver, "4.21")) ) {
|
||||||
|
|
@ -355,38 +366,6 @@ char *INPdomodel(void *ckt, card * image, INPtables * tab)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
#endif
|
#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:
|
case 55:
|
||||||
type = INPtypelook("B3SOIFD");
|
type = INPtypelook("B3SOIFD");
|
||||||
if (type < 0) {
|
if (type < 0) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue