Clean up more vvp_bit4_t encoding dependencies.
This commit is contained in:
parent
e7d463704c
commit
10ea9904f1
|
|
@ -444,20 +444,7 @@ void vpip_vec4_get_value(const vvp_vector4_t&word_val, unsigned width,
|
|||
rbuf = need_result_buf(width+1, RBUF_VAL);
|
||||
for (unsigned idx = 0 ; idx < width ; idx += 1) {
|
||||
vvp_bit4_t bit = word_val.value(idx);
|
||||
switch (bit) {
|
||||
case BIT4_0:
|
||||
rbuf[width-idx-1] = '0';
|
||||
break;
|
||||
case BIT4_1:
|
||||
rbuf[width-idx-1] = '1';
|
||||
break;
|
||||
case BIT4_Z:
|
||||
rbuf[width-idx-1] = 'z';
|
||||
break;
|
||||
case BIT4_X:
|
||||
rbuf[width-idx-1] = 'x';
|
||||
break;
|
||||
}
|
||||
rbuf[width-idx-1] = vvp_bit4_to_ascii(bit);
|
||||
}
|
||||
rbuf[width] = 0;
|
||||
vp->value.str = rbuf;
|
||||
|
|
|
|||
|
|
@ -432,20 +432,7 @@ static void signal_get_value(vpiHandle ref, s_vpi_value*vp)
|
|||
rbuf = need_result_buf(wid+1, RBUF_VAL);
|
||||
|
||||
for (unsigned idx = 0 ; idx < wid ; idx += 1) {
|
||||
switch (vsig->value(idx)) {
|
||||
case BIT4_0:
|
||||
rbuf[wid-idx-1] = '0';
|
||||
break;
|
||||
case BIT4_1:
|
||||
rbuf[wid-idx-1] = '1';
|
||||
break;
|
||||
case BIT4_Z:
|
||||
rbuf[wid-idx-1] = 'z';
|
||||
break;
|
||||
case BIT4_X:
|
||||
rbuf[wid-idx-1] = 'x';
|
||||
break;
|
||||
}
|
||||
rbuf[wid-idx-1] = vvp_bit4_to_ascii(vsig->value(idx));
|
||||
}
|
||||
rbuf[wid] = 0;
|
||||
vp->value.str = rbuf;
|
||||
|
|
|
|||
|
|
@ -134,9 +134,9 @@ static void vthr_vec_StringVal(struct __vpiVThrVec*rfp, s_vpi_value*vp)
|
|||
tmp <<= 1;
|
||||
|
||||
switch(get_bit(rfp, bitnr)){
|
||||
case 0:
|
||||
case BIT4_0:
|
||||
break;
|
||||
case 1:
|
||||
case BIT4_1:
|
||||
tmp |= 1;
|
||||
break;
|
||||
default:
|
||||
|
|
@ -179,7 +179,7 @@ static void vthr_vec_get_value(vpiHandle ref, s_vpi_value*vp)
|
|||
case vpiBinStrVal:
|
||||
rbuf = need_result_buf(wid+1, RBUF_VAL);
|
||||
for (unsigned idx = 0 ; idx < wid ; idx += 1) {
|
||||
rbuf[wid-idx-1] = "01xz"[get_bit(rfp, idx)];
|
||||
rbuf[wid-idx-1] = vvp_bit4_to_ascii(get_bit(rfp, idx));
|
||||
}
|
||||
rbuf[wid] = 0;
|
||||
vp->value.str = rbuf;
|
||||
|
|
@ -192,7 +192,22 @@ static void vthr_vec_get_value(vpiHandle ref, s_vpi_value*vp)
|
|||
rbuf[hwid] = 0;
|
||||
hval = 0;
|
||||
for (unsigned idx = 0 ; idx < wid ; idx += 1) {
|
||||
hval = hval | (get_bit(rfp, idx) << 2*(idx % 4));
|
||||
unsigned tmp = 0;
|
||||
switch (get_bit(rfp, idx)) {
|
||||
case BIT4_0:
|
||||
tmp = 0;
|
||||
break;
|
||||
case BIT4_1:
|
||||
tmp = 1;
|
||||
break;
|
||||
case BIT4_X:
|
||||
tmp = 2;
|
||||
break;
|
||||
case BIT4_Z:
|
||||
tmp = 3;
|
||||
break;
|
||||
}
|
||||
hval = hval | (tmp << 2*(idx % 4));
|
||||
|
||||
if (idx%4 == 3) {
|
||||
hwid -= 1;
|
||||
|
|
@ -217,7 +232,22 @@ static void vthr_vec_get_value(vpiHandle ref, s_vpi_value*vp)
|
|||
rbuf[hwid] = 0;
|
||||
hval = 0;
|
||||
for (unsigned idx = 0 ; idx < wid ; idx += 1) {
|
||||
hval = hval | (get_bit(rfp,idx) << 2*(idx % 3));
|
||||
unsigned tmp = 0;
|
||||
switch (get_bit(rfp, idx)) {
|
||||
case BIT4_0:
|
||||
tmp = 0;
|
||||
break;
|
||||
case BIT4_1:
|
||||
tmp = 1;
|
||||
break;
|
||||
case BIT4_X:
|
||||
tmp = 2;
|
||||
break;
|
||||
case BIT4_Z:
|
||||
tmp = 3;
|
||||
break;
|
||||
}
|
||||
hval = hval | (tmp << 2*(idx % 3));
|
||||
|
||||
if (idx%3 == 2) {
|
||||
hwid -= 1;
|
||||
|
|
@ -247,13 +277,12 @@ static void vthr_vec_get_value(vpiHandle ref, s_vpi_value*vp)
|
|||
long ival = 0;
|
||||
for (unsigned idx = 0 ; idx < wid ; idx += 1) {
|
||||
switch (get_bit(rfp, idx)) {
|
||||
case 0:
|
||||
case BIT4_0:
|
||||
break;
|
||||
case 1:
|
||||
case BIT4_1:
|
||||
ival |= 1 << idx;
|
||||
break;
|
||||
case 2:
|
||||
case 3:
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
@ -266,13 +295,12 @@ static void vthr_vec_get_value(vpiHandle ref, s_vpi_value*vp)
|
|||
for (unsigned idx = wid ; idx > 0 ; idx -= 1) {
|
||||
vp->value.real *= 2.0;
|
||||
switch (get_bit(rfp, idx-1)) {
|
||||
case 0:
|
||||
case BIT4_0:
|
||||
break;
|
||||
case 1:
|
||||
case BIT4_1:
|
||||
vp->value.real += 1.0;
|
||||
break;
|
||||
case 2:
|
||||
case 3:
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
@ -288,19 +316,19 @@ static void vthr_vec_get_value(vpiHandle ref, s_vpi_value*vp)
|
|||
PLI_INT32 mask = 1 << (idx%32);
|
||||
|
||||
switch (get_bit(rfp,idx)) {
|
||||
case 0:
|
||||
case BIT4_0:
|
||||
vp->value.vector[word].aval &= ~mask;
|
||||
vp->value.vector[word].bval &= ~mask;
|
||||
break;
|
||||
case 1:
|
||||
case BIT4_1:
|
||||
vp->value.vector[word].aval |= mask;
|
||||
vp->value.vector[word].bval &= ~mask;
|
||||
break;
|
||||
case 2:
|
||||
case BIT4_X:
|
||||
vp->value.vector[word].aval |= mask;
|
||||
vp->value.vector[word].bval |= mask;
|
||||
break;
|
||||
case 3:
|
||||
case BIT4_Z:
|
||||
vp->value.vector[word].aval &= ~mask;
|
||||
vp->value.vector[word].bval |= mask;
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -63,16 +63,16 @@ void vpip_bin_str_to_vec4(vvp_vector4_t&vec4,
|
|||
/* Calculate the pad value based on the top bit and the signed
|
||||
flag. We may sign extend or zero extend. */
|
||||
switch (last) {
|
||||
case 0:
|
||||
case BIT4_0:
|
||||
last = BIT4_0;
|
||||
break;
|
||||
case 1:
|
||||
case BIT4_1:
|
||||
last = signed_flag? BIT4_1 : BIT4_0;
|
||||
break;
|
||||
case 2:
|
||||
case BIT4_X:
|
||||
last = BIT4_X;
|
||||
break;
|
||||
case 3:
|
||||
case BIT4_Z:
|
||||
last = BIT4_Z;
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -61,6 +61,9 @@ enum vvp_bit4_t {
|
|||
BIT4_Z = 2
|
||||
};
|
||||
|
||||
/* Return an ASCII character that represents the vvp_bit4_t value. */
|
||||
inline char vvp_bit4_to_ascii(vvp_bit4_t a) { return "01zx"[a]; }
|
||||
|
||||
extern vvp_bit4_t add_with_carry(vvp_bit4_t a, vvp_bit4_t b, vvp_bit4_t&c);
|
||||
|
||||
/* Return TRUE if the bit is BIT4_X or BIT4_Z. The fast
|
||||
|
|
|
|||
Loading…
Reference in New Issue