From f73d3b20a07cd206db8d7c7dd8679e6eecb02391 Mon Sep 17 00:00:00 2001 From: dwarning Date: Wed, 1 Feb 2023 23:25:28 +0100 Subject: [PATCH] implement typedpnjlim as optional limiter for verilog-a models --- src/osdi/osdicallbacks.c | 12 ++++++++++++ src/osdi/osdidefs.h | 3 ++- src/osdi/osdiregistry.c | 1 + 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/osdi/osdicallbacks.c b/src/osdi/osdicallbacks.c index de7b1dc97..1efecf212 100644 --- a/src/osdi/osdicallbacks.c +++ b/src/osdi/osdicallbacks.c @@ -50,6 +50,18 @@ double osdi_pnjlim(bool init, bool *check, double vnew, double vold, double vt, return res; } +double osdi_typedpnjlim(bool init, bool *check, double vnew, double vold, double vt, + double vcrit, double type) { + if (init) { + *check = true; + return vcrit; + } + int icheck = 0; + double res = DEVpnjlim(type*vnew, vold, vt, vcrit, &icheck); + *check = icheck != 0; + return res; +} + double osdi_limvds(bool init, bool *check, double vnew, double vold) { if (init) { *check = true; diff --git a/src/osdi/osdidefs.h b/src/osdi/osdidefs.h index 6130482ad..d1108b666 100644 --- a/src/osdi/osdidefs.h +++ b/src/osdi/osdidefs.h @@ -96,7 +96,8 @@ typedef void (*osdi_log_ptr)(void *handle, char *msg, uint32_t lvl); double osdi_pnjlim(bool init, bool *icheck, double vnew, double vold, double vt, double vcrit); - +double osdi_typedpnjlim(bool init, bool *icheck, double vnew, double vold, double vt, + double vcrit, double type); double osdi_limvds(bool init, bool *icheck, double vnew, double vold); double osdi_limitlog(bool init, bool *icheck, double vnew, double vold, double LIM_TOL); diff --git a/src/osdi/osdiregistry.c b/src/osdi/osdiregistry.c index 6da846451..66d14704b 100644 --- a/src/osdi/osdiregistry.c +++ b/src/osdi/osdiregistry.c @@ -338,6 +338,7 @@ extern OsdiObjectFile load_object_file(const char *input) { for (uint32_t i = 0; i < lim_table_len; i++) { int expected_args = -1; IS_LIM_FUN("pnjlim", 2, osdi_pnjlim) + IS_LIM_FUN("typedpnjlim", 3, osdi_typedpnjlim) IS_LIM_FUN("limvds", 0, osdi_limvds) IS_LIM_FUN("fetlim", 1, osdi_fetlim) IS_LIM_FUN("limitlog", 1, osdi_limitlog)