From 3d1cbf93eed0bcf73c51c2e8e9bc0801e1eb1a8f Mon Sep 17 00:00:00 2001 From: Holger Vogt Date: Thu, 23 Nov 2023 18:29:48 +0100 Subject: [PATCH] Add a predifined variable 'skywaterpdk' to speed up circuit loading and parsing. If set, it removes quoting tokens for params. This requires that Skywater PDK does adequately stick to the ngspice syntax to put params in between braces. As far as tests go, it does. It also set the number of nodes for MSO devices to 4, so no lengthy search is required. --- src/frontend/inpcom.c | 3 +++ src/frontend/options.c | 4 +++- src/frontend/subckt.c | 3 +++ src/include/ngspice/fteext.h | 1 + 4 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/frontend/inpcom.c b/src/frontend/inpcom.c index 987aeddbf..710b2c1f0 100644 --- a/src/frontend/inpcom.c +++ b/src/frontend/inpcom.c @@ -7860,6 +7860,9 @@ static void inp_quote_params(struct card *c, struct card *end_c, { bool in_control = FALSE; + if (ft_skywaterpdk) + return; + for (; c && c != end_c; c = c->nextcard) { int i, j, num_terminals; diff --git a/src/frontend/options.c b/src/frontend/options.c index d246ad318..ac12dc0b3 100644 --- a/src/frontend/options.c +++ b/src/frontend/options.c @@ -23,7 +23,7 @@ Author: 1985 Wayne A. Christopher, U. C. Berkeley CAD Group bool ft_acctprint = FALSE, ft_noacctprint = FALSE, ft_listprint = FALSE; bool ft_nodesprint = FALSE, ft_optsprint = FALSE, ft_noinitprint = FALSE; -bool ft_norefprint = FALSE; +bool ft_norefprint = FALSE, ft_skywaterpdk = FALSE; bool ft_ngdebug = FALSE, ft_nginfo = FALSE, ft_stricterror = FALSE; static void setdb(char *str); @@ -307,6 +307,8 @@ cp_usrset(struct variable *var, bool isset) ft_ngdebug = isset; } else if (eq(var->va_name, "nginfo")) { ft_nginfo = isset; + } else if (eq(var->va_name, "skywaterpdk")) { + ft_skywaterpdk = isset; } else if (eq(var->va_name, "noinit")) { ft_noinitprint = isset; } else if (eq(var->va_name, "norefvalue")) { diff --git a/src/frontend/subckt.c b/src/frontend/subckt.c index 3bc81c46f..d72a4ef90 100644 --- a/src/frontend/subckt.c +++ b/src/frontend/subckt.c @@ -1695,6 +1695,9 @@ numnodes(const char *line, struct subs *subs, wordlist const *modnames) return (nodes); } } + /* if we use option skywaterpdk, MOS has four nodes. Required if number of devices is large */ + if (ft_skywaterpdk && c == 'm') + return 4; n = inp_numnodes(c); diff --git a/src/include/ngspice/fteext.h b/src/include/ngspice/fteext.h index 9f6848503..589c62564 100644 --- a/src/include/ngspice/fteext.h +++ b/src/include/ngspice/fteext.h @@ -268,6 +268,7 @@ extern struct card *inp_getoptsc(char *line, struct card *options); extern bool ft_ngdebug; extern bool ft_nginfo; extern bool ft_stricterror; +extern bool ft_skywaterpdk; /* parse.c */