Browse Source

Enable single terminal n devices (Verilog-A modules)

pre-master-46
Holger Vogt 2 years ago
parent
commit
442d8554f0
  1. 47
      src/frontend/subckt.c
  2. 3
      src/spicelib/parser/inp2n.c

47
src/frontend/subckt.c

@ -1996,11 +1996,8 @@ devmodtranslate(struct card *s, char *subname, wordlist * const orig_modnames)
s->line = copy(bxx_buffer(&buffer)); s->line = copy(bxx_buffer(&buffer));
break; break;
/* 2 or 3 (temp) terminals for diode d, 2 or more for OSDI devices */
/* 2 or 3 (temp) terminals for diode d */
case 'd': case 'd':
#ifdef OSDI
case 'n':
#endif
name = gettok(&t); /* get refdes */ name = gettok(&t); /* get refdes */
bxx_printf(&buffer, "%s ", name); bxx_printf(&buffer, "%s ", name);
tfree(name); tfree(name);
@ -2039,8 +2036,48 @@ devmodtranslate(struct card *s, char *subname, wordlist * const orig_modnames)
s->line = copy(bxx_buffer(&buffer)); s->line = copy(bxx_buffer(&buffer));
break; break;
#ifdef OSDI
/* 1 or more terinals for OSDI devices*/
case 'n':
name = gettok(&t); /* get refdes */
bxx_printf(&buffer, "%s ", name);
tfree(name);
name = gettok_node(&t); /* get first attached netname */
bxx_printf(&buffer, "%s ", name);
tfree(name);
name = gettok_node(&t); /* this can be either a model name or a node name. */
if (name == NULL) {
name = copy(""); /* allow 'tfree' */
}
else {
for (;;) {
wlsub = wl_find(name, orig_modnames);
if (wlsub) {
break;
}
else {
bxx_printf(&buffer, "%s ", name);
tfree(name);
name = gettok(&t);
if (name == NULL) { /* No token anymore - leave */
name = copy(""); /* allow 'tfree' */
break;
}
}
} /* while */
}
translate_mod_name(&buffer, name, subname, orig_modnames);
tfree(name);
bxx_putc(&buffer, ' ');
bxx_put_cstring(&buffer, t);
tfree(s->line);
s->line = copy(bxx_buffer(&buffer));
break;
#endif
/* 3 terminal devices */
case 'u': /* urc transmissionline */ case 'u': /* urc transmissionline */
/* 3 terminal devices */
case 'w': /* current controlled switch */ case 'w': /* current controlled switch */
case 'j': /* jfet */ case 'j': /* jfet */
case 'z': /* hfet, mesa */ case 'z': /* hfet, mesa */

3
src/spicelib/parser/inp2n.c

@ -46,7 +46,8 @@ void INP2N(CKTcircuit *ckt, INPtables *tab, struct card *current) {
char *token; char *token;
INPgetNetTok(&line, &token, 1); INPgetNetTok(&line, &token, 1);
if (i >= 2) {
/* We have single terminal Verilog-A modules */
if (i >= 1) {
txfree(INPgetMod(ckt, token, &thismodel, tab)); txfree(INPgetMod(ckt, token, &thismodel, tab));
/* /1* check if using model binning -- pass in line since need 'l' and 'w' *1/ */ /* /1* check if using model binning -- pass in line since need 'l' and 'w' *1/ */

Loading…
Cancel
Save