vvp: Factor out code to scale time using the timescale of a VPI object.

This commit is contained in:
Martin Whitaker 2024-02-05 22:12:33 +00:00
parent 0c61923636
commit 872fcd13ae
2 changed files with 13 additions and 5 deletions

View File

@ -565,9 +565,18 @@ int vpip_time_precision_from_handle(vpiHandle obj)
}
}
double vpip_scaled_time_from_handle(vvp_time64_t time, vpiHandle obj)
{
int scale = vpip_get_time_precision() -
vpip_time_units_from_handle(obj);
if (scale >= 0)
return (double)time * pow(10.0, scale);
else
return (double)time / pow(10.0, -scale);
}
void vpi_get_time(vpiHandle obj, s_vpi_time*vp)
{
int scale;
vvp_time64_t time;
assert(vp);
@ -581,10 +590,7 @@ void vpi_get_time(vpiHandle obj, s_vpi_time*vp)
break;
case vpiScaledRealTime:
scale = vpip_get_time_precision() -
vpip_time_units_from_handle(obj);
if (scale >= 0) vp->real = (double)time * pow(10.0, scale);
else vp->real = (double)time / pow(10.0, -scale);
vp->real = vpip_scaled_time_from_handle(time, obj);
break;
default:

View File

@ -1079,6 +1079,8 @@ extern void vpip_set_time_precision(int pres);
extern int vpip_time_units_from_handle(vpiHandle obj);
extern int vpip_time_precision_from_handle(vpiHandle obj);
extern double vpip_scaled_time_from_handle(vvp_time64_t time, vpiHandle obj);
extern void vpip_time_to_timestruct(struct t_vpi_time*ts, vvp_time64_t ti);
extern vvp_time64_t vpip_timestruct_to_time(const struct t_vpi_time*ts);