implement typedpnjlim as optional limiter for verilog-a models

This commit is contained in:
dwarning 2023-02-01 23:25:28 +01:00
parent 56d0c72924
commit a5738ed583
3 changed files with 15 additions and 1 deletions

View File

@ -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;

View File

@ -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);

View File

@ -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)