From 48da46986bae0f712b29b966d24e8b02b9cf021f Mon Sep 17 00:00:00 2001 From: steve Date: Wed, 15 May 2002 04:48:46 +0000 Subject: [PATCH] Support set by string for reg objects. --- vvp/vpi_signal.cc | 118 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 117 insertions(+), 1 deletion(-) diff --git a/vvp/vpi_signal.cc b/vvp/vpi_signal.cc index 094d3e085..30b27ae05 100644 --- a/vvp/vpi_signal.cc +++ b/vvp/vpi_signal.cc @@ -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. *