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:
parent
c3ac01d31b
commit
ffbf37b06b
|
|
@ -596,6 +596,23 @@ static vvp_vector4_t from_stringval(const char*str, unsigned wid)
|
||||||
return val;
|
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)
|
static vpiHandle signal_put_value(vpiHandle ref, s_vpi_value*vp, int flags)
|
||||||
{
|
{
|
||||||
unsigned wid;
|
unsigned wid;
|
||||||
|
|
@ -640,9 +657,7 @@ static vpiHandle signal_put_value(vpiHandle ref, s_vpi_value*vp, int flags)
|
||||||
aval >>= idx%32;
|
aval >>= idx%32;
|
||||||
bval >>= idx%32;
|
bval >>= idx%32;
|
||||||
int bitmask = (aval&1) | ((bval<<1)&2);
|
int bitmask = (aval&1) | ((bval<<1)&2);
|
||||||
static const vvp_bit4_t bit_table[4] = {
|
vvp_bit4_t bit = scalar_to_bit4(bitmask);
|
||||||
BIT4_0, BIT4_1, BIT4_X, BIT4_Z };
|
|
||||||
vvp_bit4_t bit = bit_table[bitmask];
|
|
||||||
val.set_bit(idx, bit);
|
val.set_bit(idx, bit);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
@ -658,6 +673,9 @@ static vpiHandle signal_put_value(vpiHandle ref, s_vpi_value*vp, int flags)
|
||||||
case vpiHexStrVal:
|
case vpiHexStrVal:
|
||||||
vpip_hex_str_to_vec4(val, vp->value.str);
|
vpip_hex_str_to_vec4(val, vp->value.str);
|
||||||
break;
|
break;
|
||||||
|
case vpiScalarVal:
|
||||||
|
val.set_bit(0, scalar_to_bit4(vp->value.scalar));
|
||||||
|
break;
|
||||||
case vpiStringVal:
|
case vpiStringVal:
|
||||||
val = from_stringval(vp->value.str, wid);
|
val = from_stringval(vp->value.str, wid);
|
||||||
break;
|
break;
|
||||||
|
|
@ -778,4 +796,3 @@ vpiHandle vpip_make_net(const char*name, int msb, int lsb,
|
||||||
|
|
||||||
return &obj->base;
|
return &obj->base;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -384,7 +384,7 @@ static vpiHandle vthr_vec_put_value(vpiHandle ref, s_vpi_value*vp, int)
|
||||||
set_bit(rfp, 0, BIT4_Z);
|
set_bit(rfp, 0, BIT4_Z);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
fprintf(stderr, "Unsupported bit value %d.\n",
|
fprintf(stderr, "Unsupported scalar value %d.\n",
|
||||||
vp->value.scalar);
|
vp->value.scalar);
|
||||||
assert(0);
|
assert(0);
|
||||||
}
|
}
|
||||||
|
|
@ -578,4 +578,3 @@ vpiHandle vpip_make_vthr_word(unsigned base, const char*type)
|
||||||
|
|
||||||
return &obj->base;
|
return &obj->base;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue