Browse Source

implement typedpnjlim as optional limiter for verilog-a models

pre-master-46
dwarning 3 years ago
committed by Holger Vogt
parent
commit
f73d3b20a0
  1. 12
      src/osdi/osdicallbacks.c
  2. 3
      src/osdi/osdidefs.h
  3. 1
      src/osdi/osdiregistry.c

12
src/osdi/osdicallbacks.c

@ -50,6 +50,18 @@ double osdi_pnjlim(bool init, bool *check, double vnew, double vold, double vt,
return res; 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) { double osdi_limvds(bool init, bool *check, double vnew, double vold) {
if (init) { if (init) {
*check = true; *check = true;

3
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 osdi_pnjlim(bool init, bool *icheck, double vnew, double vold, double vt,
double vcrit); 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_limvds(bool init, bool *icheck, double vnew, double vold);
double osdi_limitlog(bool init, bool *icheck, double vnew, double vold, double osdi_limitlog(bool init, bool *icheck, double vnew, double vold,
double LIM_TOL); double LIM_TOL);

1
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++) { for (uint32_t i = 0; i < lim_table_len; i++) {
int expected_args = -1; int expected_args = -1;
IS_LIM_FUN("pnjlim", 2, osdi_pnjlim) IS_LIM_FUN("pnjlim", 2, osdi_pnjlim)
IS_LIM_FUN("typedpnjlim", 3, osdi_typedpnjlim)
IS_LIM_FUN("limvds", 0, osdi_limvds) IS_LIM_FUN("limvds", 0, osdi_limvds)
IS_LIM_FUN("fetlim", 1, osdi_fetlim) IS_LIM_FUN("fetlim", 1, osdi_fetlim)
IS_LIM_FUN("limitlog", 1, osdi_limitlog) IS_LIM_FUN("limitlog", 1, osdi_limitlog)

Loading…
Cancel
Save