Support set by string for reg objects.
This commit is contained in:
parent
8d6239301f
commit
48da46986b
|
|
@ -17,7 +17,7 @@
|
||||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
||||||
*/
|
*/
|
||||||
#if !defined(WINNT)
|
#if !defined(WINNT)
|
||||||
#ident "$Id: vpi_signal.cc,v 1.33 2002/02/03 01:01:51 steve Exp $"
|
#ident "$Id: vpi_signal.cc,v 1.34 2002/05/15 04:48:46 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
@ -468,6 +468,119 @@ static vpiHandle signal_put_value(vpiHandle ref, s_vpi_value*vp,
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case vpiBinStrVal: {
|
||||||
|
unsigned char*bits = new unsigned char[(wid+3) / 4];
|
||||||
|
vpip_bin_str_to_bits(bits, wid, vp->value.str, false);
|
||||||
|
|
||||||
|
for (unsigned idx = 0 ; idx < wid ; idx += 1) {
|
||||||
|
unsigned bb = idx / 4;
|
||||||
|
unsigned bs = (idx % 4) * 2;
|
||||||
|
unsigned val = (bits[bb] >> bs) & 0x03;
|
||||||
|
|
||||||
|
switch (val) {
|
||||||
|
case 0: /* zero */
|
||||||
|
functor_poke(rfp,idx, 0, St0);
|
||||||
|
break;
|
||||||
|
case 1: /* one */
|
||||||
|
functor_poke(rfp,idx, 1, St1);
|
||||||
|
break;
|
||||||
|
case 2: /* x */
|
||||||
|
functor_poke(rfp,idx, 2, StX);
|
||||||
|
break;
|
||||||
|
case 3: /* z */
|
||||||
|
functor_poke(rfp,idx, 3, HiZ);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
delete[]bits;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case vpiOctStrVal: {
|
||||||
|
unsigned char*bits = new unsigned char[(wid+3) / 4];
|
||||||
|
vpip_oct_str_to_bits(bits, wid, vp->value.str, false);
|
||||||
|
|
||||||
|
for (unsigned idx = 0 ; idx < wid ; idx += 1) {
|
||||||
|
unsigned bb = idx / 4;
|
||||||
|
unsigned bs = (idx % 4) * 2;
|
||||||
|
unsigned val = (bits[bb] >> bs) & 0x03;
|
||||||
|
|
||||||
|
switch (val) {
|
||||||
|
case 0: /* zero */
|
||||||
|
functor_poke(rfp,idx, 0, St0);
|
||||||
|
break;
|
||||||
|
case 1: /* one */
|
||||||
|
functor_poke(rfp,idx, 1, St1);
|
||||||
|
break;
|
||||||
|
case 2: /* x */
|
||||||
|
functor_poke(rfp,idx, 2, StX);
|
||||||
|
break;
|
||||||
|
case 3: /* z */
|
||||||
|
functor_poke(rfp,idx, 3, HiZ);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
delete[]bits;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case vpiHexStrVal: {
|
||||||
|
unsigned char*bits = new unsigned char[(wid+3) / 4];
|
||||||
|
vpip_hex_str_to_bits(bits, wid, vp->value.str, false);
|
||||||
|
|
||||||
|
for (unsigned idx = 0 ; idx < wid ; idx += 1) {
|
||||||
|
unsigned bb = idx / 4;
|
||||||
|
unsigned bs = (idx % 4) * 2;
|
||||||
|
unsigned val = (bits[bb] >> bs) & 0x03;
|
||||||
|
|
||||||
|
switch (val) {
|
||||||
|
case 0: /* zero */
|
||||||
|
functor_poke(rfp,idx, 0, St0);
|
||||||
|
break;
|
||||||
|
case 1: /* one */
|
||||||
|
functor_poke(rfp,idx, 1, St1);
|
||||||
|
break;
|
||||||
|
case 2: /* x */
|
||||||
|
functor_poke(rfp,idx, 2, StX);
|
||||||
|
break;
|
||||||
|
case 3: /* z */
|
||||||
|
functor_poke(rfp,idx, 3, HiZ);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
delete[]bits;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case vpiDecStrVal: {
|
||||||
|
unsigned char*bits = new unsigned char[wid];
|
||||||
|
vpip_dec_str_to_bits(bits, wid, vp->value.str, false);
|
||||||
|
|
||||||
|
for (unsigned idx = 0 ; idx < wid ; idx += 1) {
|
||||||
|
|
||||||
|
switch (bits[idx]) {
|
||||||
|
case 0: /* zero */
|
||||||
|
functor_poke(rfp,idx, 0, St0);
|
||||||
|
break;
|
||||||
|
case 1: /* one */
|
||||||
|
functor_poke(rfp,idx, 1, St1);
|
||||||
|
break;
|
||||||
|
case 2: /* x */
|
||||||
|
functor_poke(rfp,idx, 2, StX);
|
||||||
|
break;
|
||||||
|
case 3: /* z */
|
||||||
|
functor_poke(rfp,idx, 3, HiZ);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
delete[]bits;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
assert(0);
|
assert(0);
|
||||||
|
|
||||||
|
|
@ -532,6 +645,9 @@ vpiHandle vpip_make_net(char*name, int msb, int lsb, bool signed_flag,
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log: vpi_signal.cc,v $
|
* $Log: vpi_signal.cc,v $
|
||||||
|
* Revision 1.34 2002/05/15 04:48:46 steve
|
||||||
|
* Support set by string for reg objects.
|
||||||
|
*
|
||||||
* Revision 1.33 2002/02/03 01:01:51 steve
|
* Revision 1.33 2002/02/03 01:01:51 steve
|
||||||
* Use Larrys bits-to-decimal-string code.
|
* Use Larrys bits-to-decimal-string code.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue