get vpiStringVal from vec4 stack positions.
This commit is contained in:
parent
fcc0a6a203
commit
19402aeef2
|
|
@ -708,6 +708,8 @@ class __vpiVThrVec4Stack : public __vpiHandle {
|
|||
int get_type_code(void) const;
|
||||
int vpi_get(int code);
|
||||
void vpi_get_value(p_vpi_value val);
|
||||
private:
|
||||
void vpi_get_value_string_(p_vpi_value val, const vvp_vector4_t&val);
|
||||
private:
|
||||
unsigned depth_;
|
||||
};
|
||||
|
|
@ -746,6 +748,10 @@ void __vpiVThrVec4Stack::vpi_get_value(p_vpi_value vp)
|
|||
vvp_vector4_t val = vthread_get_vec4_stack(vpip_current_vthread, depth_);
|
||||
|
||||
switch (vp->format) {
|
||||
case vpiStringVal:
|
||||
vpi_get_value_string_(vp, val);
|
||||
break;
|
||||
|
||||
default:
|
||||
fprintf(stderr, "internal error: vpi_get_value(<format=%d>)"
|
||||
" not implemented for __vpiVThrVec4Stack.\n", vp->format);
|
||||
|
|
@ -754,6 +760,37 @@ void __vpiVThrVec4Stack::vpi_get_value(p_vpi_value vp)
|
|||
|
||||
}
|
||||
|
||||
void __vpiVThrVec4Stack::vpi_get_value_string_(p_vpi_value vp, const vvp_vector4_t&val)
|
||||
{
|
||||
char*rbuf = need_result_buf((val.size() / 8) + 1, RBUF_VAL);
|
||||
char*cp = rbuf;
|
||||
|
||||
char tmp = 0;
|
||||
for (int bitnr = val.size()-1 ; bitnr >= 0 ; bitnr -= 1) {
|
||||
tmp <<= 1;
|
||||
switch (val.value(bitnr)) {
|
||||
case BIT4_1:
|
||||
tmp |= 1;
|
||||
break;
|
||||
case BIT4_0:
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if ((bitnr&7)==0) {
|
||||
// Don't include leading nuls
|
||||
if (tmp == 0 && cp == rbuf)
|
||||
continue;
|
||||
|
||||
*cp++ = tmp? tmp : ' ';
|
||||
tmp = 0;
|
||||
}
|
||||
}
|
||||
*cp++ = 0;
|
||||
vp->format = vpiStringVal;
|
||||
vp->value.str = rbuf;
|
||||
}
|
||||
|
||||
vpiHandle vpip_make_vthr_str_stack(unsigned depth)
|
||||
{
|
||||
class __vpiVThrStrStack*obj = new __vpiVThrStrStack(depth);
|
||||
|
|
|
|||
Loading…
Reference in New Issue