Add vpiScalarVal to signal_put_value().

This patch adds functionality for vpiScalarVal to signal_put_value().
It also factors out the scalar to bit4 code from vpiVectorVal.
This commit is contained in:
Cary R 2008-04-22 20:18:14 -07:00 committed by Stephen Williams
parent c3ac01d31b
commit ffbf37b06b
2 changed files with 22 additions and 6 deletions

View File

@ -596,6 +596,23 @@ static vvp_vector4_t from_stringval(const char*str, unsigned wid)
return val;
}
static vvp_bit4_t scalar_to_bit4(PLI_INT32 scalar)
{
switch(scalar) {
case vpi0:
return BIT4_0;
case vpi1:
return BIT4_1;
case vpiX:
return BIT4_X;
case vpiZ:
return BIT4_Z;
default:
fprintf(stderr, "Unsupported scalar value %d.\n", scalar);
assert(0);
}
}
static vpiHandle signal_put_value(vpiHandle ref, s_vpi_value*vp, int flags)
{
unsigned wid;
@ -640,9 +657,7 @@ static vpiHandle signal_put_value(vpiHandle ref, s_vpi_value*vp, int flags)
aval >>= idx%32;
bval >>= idx%32;
int bitmask = (aval&1) | ((bval<<1)&2);
static const vvp_bit4_t bit_table[4] = {
BIT4_0, BIT4_1, BIT4_X, BIT4_Z };
vvp_bit4_t bit = bit_table[bitmask];
vvp_bit4_t bit = scalar_to_bit4(bitmask);
val.set_bit(idx, bit);
}
break;
@ -658,6 +673,9 @@ static vpiHandle signal_put_value(vpiHandle ref, s_vpi_value*vp, int flags)
case vpiHexStrVal:
vpip_hex_str_to_vec4(val, vp->value.str);
break;
case vpiScalarVal:
val.set_bit(0, scalar_to_bit4(vp->value.scalar));
break;
case vpiStringVal:
val = from_stringval(vp->value.str, wid);
break;
@ -778,4 +796,3 @@ vpiHandle vpip_make_net(const char*name, int msb, int lsb,
return &obj->base;
}

View File

@ -384,7 +384,7 @@ static vpiHandle vthr_vec_put_value(vpiHandle ref, s_vpi_value*vp, int)
set_bit(rfp, 0, BIT4_Z);
break;
default:
fprintf(stderr, "Unsupported bit value %d.\n",
fprintf(stderr, "Unsupported scalar value %d.\n",
vp->value.scalar);
assert(0);
}
@ -578,4 +578,3 @@ vpiHandle vpip_make_vthr_word(unsigned base, const char*type)
return &obj->base;
}