Browse Source

Modified handling of MOS number of nodes. BSIMSOI model can have up to 7 nodes.


			
			
				pre-master-46
			
			
		
pnenzi 26 years ago
parent
commit
1a1fad9023
  1. 7
      src/frontend/ChangeLog
  2. 39
      src/frontend/subckt.c

7
src/frontend/ChangeLog

@ -1,3 +1,10 @@
2001-01-23 Paolo Nenzi <p.nenzi@ieee.org>
* subckt.c: added some code (very, very experimental)
to support mos devices with variable number of nodes
(5 to 7) in subcircuit expansion. This hack is necessary
since SOI devices can have up to 7 nodes.
2000-11-07 Arno W. Peters <A.W.Peters@ieee.org>
* com_history, com_alias, parser/cshpar.c, parser/complete.c:

39
src/frontend/subckt.c

@ -584,7 +584,7 @@ numnodes(char *name)
struct subs *sss;
char *s, *t, buf[4 * BSIZE_SP];
wordlist *wl;
int n, i;
int n, i, gotit;
while (*name && isspace(*name))
name++;
@ -612,6 +612,41 @@ numnodes(char *name)
return (sss->su_numargs);
}
n = inp_numnodes(c);
/* Added this code for variable number of nodes on BSIM3SOI devices */
/* The consequence of this code is that the value returned by the */
/* inp_numnodes(c) call must be regarded as "maximun number of nodes */
/* for a given device type. */
/* Paolo Nenzi Jan-2001 */
/* I hope that works, this code is very very untested */
if (c=='m') { /* IF this is a mos */
i = 0;
s = buf;
gotit = 0;
t = gettok(&s); /* Skip component name */
while ((i < n) && (*s) && !gotit) {
t = gettok(&s);
for (wl = modnames; wl; wl = wl->wl_next)
if (eq(t, wl->wl_word))
gotit = 1;
i++;
}
/* Note: node checks must be done on #_of_node-1 because the */
/* "while" cicle increments the counter even when a model is */
/* recognized. This code may be better! */
if (i < 5) {
fprintf(cp_err, "Error: too few nodes for MOS: %s\n", name);
return(0);
}
return(i-1); /* compesate the unnecessary inrement in the while cicle */
}
if (nobjthack || (c != 'q'))
return (n);
for (s = buf, i = 0; *s && (i < 4); i++)
@ -931,7 +966,7 @@ inp_numnodes(char c)
case 'j': return (3);
case 'k': return (0);
case 'l': return (2);
case 'm': return (7);
case 'm': return (7); /* This means that 7 is the maximun number of nodes */
case 'o': return (4);
case 'q': return (4);
case 'r': return (2);

Loading…
Cancel
Save