Clean up more vvp_bit4_t encoding dependencies.

This commit is contained in:
Stephen Williams 2008-04-23 11:16:24 -07:00
parent e7d463704c
commit 10ea9904f1
5 changed files with 54 additions and 49 deletions

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;
}

View File

@ -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