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>
|
||||
* 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
36
DEVICES
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue