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
|
||||
*/
|
||||
#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
|
||||
|
||||
/*
|
||||
|
|
@ -468,6 +468,119 @@ static vpiHandle signal_put_value(vpiHandle ref, s_vpi_value*vp,
|
|||
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:
|
||||
assert(0);
|
||||
|
||||
|
|
@ -532,6 +645,9 @@ vpiHandle vpip_make_net(char*name, int msb, int lsb, bool signed_flag,
|
|||
|
||||
/*
|
||||
* $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
|
||||
* Use Larrys bits-to-decimal-string code.
|
||||
*
|
||||
|
|
|
|||
Loading…
Reference in New Issue