Fix bit width when converting real value to binary/hex string in VPI.

(cherry picked from commit 5aae9ea770)
This commit is contained in:
Martin Whitaker 2018-10-07 17:17:33 +01:00
parent 062fc43fab
commit 10e7eb55ce
2 changed files with 7 additions and 7 deletions

View File

@ -820,12 +820,12 @@ static void real_signal_value(struct t_vpi_value*vp, double rval)
break; break;
case vpiHexStrVal: case vpiHexStrVal:
sprintf(rbuf, "%lx", (long)vlg_round(rval)); sprintf(rbuf, "%" PRIx64, (uint64_t)vlg_round(rval));
vp->value.str = rbuf; vp->value.str = rbuf;
break; break;
case vpiBinStrVal: { case vpiBinStrVal: {
unsigned long val = (unsigned long)vlg_round(rval); uint64_t val = (uint64_t)vlg_round(rval);
unsigned len = 0; unsigned len = 0;
while (val > 0) { while (val > 0) {
@ -833,7 +833,7 @@ static void real_signal_value(struct t_vpi_value*vp, double rval)
val /= 2; val /= 2;
} }
val = (unsigned long)vlg_round(rval); val = (uint64_t)vlg_round(rval);
for (unsigned idx = 0 ; idx < len ; idx += 1) { for (unsigned idx = 0 ; idx < len ; idx += 1) {
rbuf[len-idx-1] = (val & 1)? '1' : '0'; rbuf[len-idx-1] = (val & 1)? '1' : '0';
val /= 2; val /= 2;

View File

@ -132,17 +132,17 @@ static void vthr_real_get_value(vpiHandle ref, s_vpi_value*vp)
break; break;
case vpiOctStrVal: case vpiOctStrVal:
sprintf(rbuf, "%lo", (long)vlg_round(val)); sprintf(rbuf, "%" PRIo64, (uint64_t)vlg_round(val));
vp->value.str = rbuf; vp->value.str = rbuf;
break; break;
case vpiHexStrVal: case vpiHexStrVal:
sprintf(rbuf, "%lx", (long)vlg_round(val)); sprintf(rbuf, "%" PRIx64, (uint64_t)vlg_round(val));
vp->value.str = rbuf; vp->value.str = rbuf;
break; break;
case vpiBinStrVal: { case vpiBinStrVal: {
unsigned long vali = (unsigned long)vlg_round(val); uint64_t vali = (uint64_t)vlg_round(val);
unsigned len = 0; unsigned len = 0;
while (vali > 0) { while (vali > 0) {
@ -150,7 +150,7 @@ static void vthr_real_get_value(vpiHandle ref, s_vpi_value*vp)
vali /= 2; vali /= 2;
} }
vali = (unsigned long)vlg_round(val); vali = (uint64_t)vlg_round(val);
for (unsigned idx = 0 ; idx < len ; idx += 1) { for (unsigned idx = 0 ; idx < len ; idx += 1) {
rbuf[len-idx-1] = (vali & 1)? '1' : '0'; rbuf[len-idx-1] = (vali & 1)? '1' : '0';
vali /= 2; vali /= 2;