diff --git a/include/verilated.cpp b/include/verilated.cpp index 14949b740..a1c070cad 100644 --- a/include/verilated.cpp +++ b/include/verilated.cpp @@ -646,17 +646,16 @@ std::string _vl_vsformat_time(char* tmp, double ld, bool left, size_t width) { int shift = prec - userUnits + fracDigits; // 0..-15 double shiftd = vl_time_multiplier(shift); double scaled = ld * shiftd; - QData fracDiv = static_cast(vl_time_multiplier(fracDigits)); - QData whole = static_cast(scaled) / fracDiv; - QData fraction = static_cast(scaled) % fracDiv; + const double fracDiv = vl_time_multiplier(fracDigits); + const double whole = scaled / fracDiv; int digits = 0; if (!fracDigits) { - digits = VL_SNPRINTF(tmp, VL_VALUE_STRING_MAX_WIDTH, "%" VL_PRI64 "u%s", whole, - suffix.c_str()); + digits = VL_SNPRINTF(tmp, VL_VALUE_STRING_MAX_WIDTH, "%.0f%s", whole, suffix.c_str()); } else { - digits = VL_SNPRINTF(tmp, VL_VALUE_STRING_MAX_WIDTH, "%" VL_PRI64 "u.%0*" VL_PRI64 "u%s", - whole, fracDigits, fraction, suffix.c_str()); + digits = VL_SNPRINTF(tmp, VL_VALUE_STRING_MAX_WIDTH, "%.*f%s", fracDigits, whole, + suffix.c_str()); } + int needmore = width - digits; std::string padding; if (needmore > 0) padding.append(needmore, ' '); // Pad with spaces diff --git a/test_regress/t/t_time_vpi_100s10ms.out b/test_regress/t/t_time_vpi_100s10ms.out index 73db352ca..7cb4c886d 100644 --- a/test_regress/t/t_time_vpi_100s10ms.out +++ b/test_regress/t/t_time_vpi_100s10ms.out @@ -3,11 +3,11 @@ Time scale of t is 100s / 10ms [100000000] time%0d=10000 123%0t=1230000 dig%0t=0 dig%0d=0 rdig%0t=543 rdig%0f=0.054321 -[0.000000ns] time%0d=10000 123%0t=12300000000000.000000ns +[1000000000000000.000000ns] time%0d=10000 123%0t=12300000000000.000000ns dig%0t=0.000000ns dig%0d=0 rdig%0t=5432109876.543210ns rdig%0f=0.054321 -[0.000000ns] stime%0t=0.000000ns stime%0d=10000 stime%0f=10000.000000 -[0.000000ns] rtime%0t=0.000000ns rtime%0d=10000 rtime%0f=10000.000000 +[1000000000000000.000000ns] stime%0t=1000000000000000.000000ns stime%0d=10000 stime%0f=10000.000000 +[1000000000000000.000000ns] rtime%0t=1000000000000000.000000ns rtime%0d=10000 rtime%0f=10000.000000 global vpiSimTime = 0,100000000 vpiScaledRealTime = 1e+08 global vpiTimeUnit = -2 vpiTimePrecision = -2 top.t vpiSimTime = 0,100000000 vpiScaledRealTime = 10000 diff --git a/test_regress/t/t_time_vpi_10ms10ns.out b/test_regress/t/t_time_vpi_10ms10ns.out index a561b40c3..faa888180 100644 --- a/test_regress/t/t_time_vpi_10ms10ns.out +++ b/test_regress/t/t_time_vpi_10ms10ns.out @@ -2,7 +2,7 @@ Time scale of t is 10ms / 10ns [60000000] time%0d=60 123%0t=123000000 dig%0t=543000000 dig%0d=543 - rdig%0t=543210987 rdig%0f=543.210988 + rdig%0t=543210988 rdig%0f=543.210988 [600000000.000000ns] time%0d=60 123%0t=1230000000.000000ns dig%0t=5430000000.000000ns dig%0d=543 rdig%0t=5432109876.543210ns rdig%0f=543.210988 diff --git a/test_regress/t/t_time_vpi_1ms10ns.out b/test_regress/t/t_time_vpi_1ms10ns.out index 90ce5a0ed..5c279c04b 100644 --- a/test_regress/t/t_time_vpi_1ms10ns.out +++ b/test_regress/t/t_time_vpi_1ms10ns.out @@ -2,7 +2,7 @@ Time scale of t is 1ms / 10ns [6000000] time%0d=60 123%0t=12300000 dig%0t=543200000 dig%0d=5432 - rdig%0t=543210987 rdig%0f=5432.109877 + rdig%0t=543210988 rdig%0f=5432.109877 [60000000.000000ns] time%0d=60 123%0t=123000000.000000ns dig%0t=5432000000.000000ns dig%0d=5432 rdig%0t=5432109876.543210ns rdig%0f=5432.109877 diff --git a/test_regress/t/t_time_vpi_1ns1ns.out b/test_regress/t/t_time_vpi_1ns1ns.out index b6dad7274..83c8cd9f6 100644 --- a/test_regress/t/t_time_vpi_1ns1ns.out +++ b/test_regress/t/t_time_vpi_1ns1ns.out @@ -2,7 +2,7 @@ Time scale of t is 1ns / 1ns [60] time%0d=60 123%0t=123 dig%0t=5432109877 dig%0d=5432109877 - rdig%0t=5432109876 rdig%0f=5432109876.543210 + rdig%0t=5432109877 rdig%0f=5432109876.543210 [60.000000ns] time%0d=60 123%0t=123.000000ns dig%0t=5432109877.000000ns dig%0d=5432109877 rdig%0t=5432109876.543210ns rdig%0f=5432109876.543210 diff --git a/test_regress/t/t_time_vpi_1ps1fs.out b/test_regress/t/t_time_vpi_1ps1fs.out index c4935bc16..bd62df6af 100644 --- a/test_regress/t/t_time_vpi_1ps1fs.out +++ b/test_regress/t/t_time_vpi_1ps1fs.out @@ -7,7 +7,7 @@ Time scale of t is 1ps / 1fs dig%0t=5432109876.543000ns dig%0d=5432109876543 rdig%0t=5432109876.543209ns rdig%0f=5432109876543.209961 [0.060000ns] stime%0t=0.060000ns stime%0d=60 stime%0f=60.000000 -[0.060000ns] rtime%0t=0.059999ns rtime%0d=60 rtime%0f=60.000000 +[0.060000ns] rtime%0t=0.060000ns rtime%0d=60 rtime%0f=60.000000 global vpiSimTime = 0,60000 vpiScaledRealTime = 60000 global vpiTimeUnit = -12 vpiTimePrecision = -15 top.t vpiSimTime = 0,60000 vpiScaledRealTime = 60 diff --git a/test_regress/t/t_time_vpi_1s10ns.out b/test_regress/t/t_time_vpi_1s10ns.out index ba22c32bb..15d1750a9 100644 --- a/test_regress/t/t_time_vpi_1s10ns.out +++ b/test_regress/t/t_time_vpi_1s10ns.out @@ -2,7 +2,7 @@ Time scale of t is 1s / 10ns [6000000000] time%0d=60 123%0t=12300000000 dig%0t=500000000 dig%0d=5 - rdig%0t=543210987 rdig%0f=5.432110 + rdig%0t=543210988 rdig%0f=5.432110 [60000000000.000000ns] time%0d=60 123%0t=123000000000.000000ns dig%0t=5000000000.000000ns dig%0d=5 rdig%0t=5432109876.543210ns rdig%0f=5.432110 diff --git a/test_regress/t/t_time_vpi_1us1ns.out b/test_regress/t/t_time_vpi_1us1ns.out index 182c19aa7..e6b5dd50b 100644 --- a/test_regress/t/t_time_vpi_1us1ns.out +++ b/test_regress/t/t_time_vpi_1us1ns.out @@ -2,12 +2,12 @@ Time scale of t is 1us / 1ns [60000] time%0d=60 123%0t=123000 dig%0t=5432110000 dig%0d=5432110 - rdig%0t=5432109876 rdig%0f=5432109.876543 + rdig%0t=5432109877 rdig%0f=5432109.876543 [60000.000000ns] time%0d=60 123%0t=123000.000000ns dig%0t=5432110000.000000ns dig%0d=5432110 rdig%0t=5432109876.543209ns rdig%0f=5432109.876543 [60000.000000ns] stime%0t=60000.000000ns stime%0d=60 stime%0f=60.000000 -[60000.000000ns] rtime%0t=59999.999999ns rtime%0d=60 rtime%0f=60.000000 +[60000.000000ns] rtime%0t=60000.000000ns rtime%0d=60 rtime%0f=60.000000 global vpiSimTime = 0,60000 vpiScaledRealTime = 60000 global vpiTimeUnit = -6 vpiTimePrecision = -9 top.t vpiSimTime = 0,60000 vpiScaledRealTime = 60