Support put_value of string values.
This commit is contained in:
parent
bf8b085159
commit
01a6dd61ca
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2001-2003 Stephen Williams (steve@icarus.com)
|
* Copyright (c) 2001-2005 Stephen Williams (steve@icarus.com)
|
||||||
*
|
*
|
||||||
* This source code is free software; you can redistribute it
|
* This source code is free software; you can redistribute it
|
||||||
* and/or modify it in source code form under the terms of the GNU
|
* and/or modify it in source code form under the terms of the GNU
|
||||||
|
|
@ -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
|
||||||
*/
|
*/
|
||||||
#ifdef HAVE_CVS_IDENT
|
#ifdef HAVE_CVS_IDENT
|
||||||
#ident "$Id: vpi_signal.cc,v 1.69 2005/07/14 23:34:19 steve Exp $"
|
#ident "$Id: vpi_signal.cc,v 1.70 2005/09/21 01:04:59 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
@ -495,8 +495,7 @@ static void functor_poke(struct __vpiSignal*rfp, unsigned idx,
|
||||||
fprintf(stderr, "XXXX functor_poke not implemented\n");
|
fprintf(stderr, "XXXX functor_poke not implemented\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
static void signal_put_stringval(struct __vpiSignal*rfp, unsigned wid,
|
static vvp_vector4_t from_stringval(const char*str, unsigned wid)
|
||||||
const char*str)
|
|
||||||
{
|
{
|
||||||
unsigned idx;
|
unsigned idx;
|
||||||
const char*cp;
|
const char*cp;
|
||||||
|
|
@ -504,25 +503,22 @@ static void signal_put_stringval(struct __vpiSignal*rfp, unsigned wid,
|
||||||
cp = str + strlen(str);
|
cp = str + strlen(str);
|
||||||
idx = 0;
|
idx = 0;
|
||||||
|
|
||||||
|
vvp_vector4_t val(wid, BIT4_0);
|
||||||
|
|
||||||
while ((idx < wid) && (cp > str)) {
|
while ((idx < wid) && (cp > str)) {
|
||||||
unsigned byte = *--cp;
|
unsigned byte = *--cp;
|
||||||
int bit;
|
int bit;
|
||||||
|
|
||||||
for (bit = 0 ; bit < 8 ; bit += 1) {
|
for (bit = 0 ; bit < 8 ; bit += 1) {
|
||||||
if (byte & 1)
|
if (byte & 1)
|
||||||
functor_poke(rfp, idx, vvp_scalar_t(BIT4_1,6,6));
|
val.set_bit(idx, BIT4_1);
|
||||||
else
|
|
||||||
functor_poke(rfp, idx, vvp_scalar_t(BIT4_0,6,6));
|
|
||||||
|
|
||||||
byte >>= 1;
|
byte >>= 1;
|
||||||
idx += 1;
|
idx += 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
while (idx < wid) {
|
return val;
|
||||||
functor_poke(rfp, idx, vvp_scalar_t(BIT4_0,6,6));
|
|
||||||
idx += 1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static vpiHandle signal_put_value(vpiHandle ref, s_vpi_value*vp)
|
static vpiHandle signal_put_value(vpiHandle ref, s_vpi_value*vp)
|
||||||
|
|
@ -535,12 +531,19 @@ static vpiHandle signal_put_value(vpiHandle ref, s_vpi_value*vp)
|
||||||
|
|
||||||
rfp = (struct __vpiSignal*)ref;
|
rfp = (struct __vpiSignal*)ref;
|
||||||
|
|
||||||
|
/* This is the destination that I'm going to poke into. Make
|
||||||
|
it from the vvp_net_t pointer, and assume a write to
|
||||||
|
port-0. This is the port where signals receive input. */
|
||||||
vvp_net_ptr_t destination (rfp->node, 0);
|
vvp_net_ptr_t destination (rfp->node, 0);
|
||||||
|
|
||||||
|
/* Make a vvp_vector4_t vector to receive the translated value
|
||||||
|
that we are going to poke. This will get populated
|
||||||
|
differently depending on the format. */
|
||||||
wid = (rfp->msb >= rfp->lsb)
|
wid = (rfp->msb >= rfp->lsb)
|
||||||
? (rfp->msb - rfp->lsb + 1)
|
? (rfp->msb - rfp->lsb + 1)
|
||||||
: (rfp->lsb - rfp->msb + 1);
|
: (rfp->lsb - rfp->msb + 1);
|
||||||
|
|
||||||
vvp_vector4_t val (wid);
|
vvp_vector4_t val (wid, BIT4_0);
|
||||||
|
|
||||||
switch (vp->format) {
|
switch (vp->format) {
|
||||||
|
|
||||||
|
|
@ -717,7 +720,7 @@ static vpiHandle signal_put_value(vpiHandle ref, s_vpi_value*vp)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
case vpiStringVal:
|
case vpiStringVal:
|
||||||
signal_put_stringval(rfp, wid, vp->value.str);
|
val = from_stringval(vp->value.str, wid);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
|
@ -822,6 +825,9 @@ vpiHandle vpip_make_net(const char*name, int msb, int lsb,
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log: vpi_signal.cc,v $
|
* $Log: vpi_signal.cc,v $
|
||||||
|
* Revision 1.70 2005/09/21 01:04:59 steve
|
||||||
|
* Support put_value of string values.
|
||||||
|
*
|
||||||
* Revision 1.69 2005/07/14 23:34:19 steve
|
* Revision 1.69 2005/07/14 23:34:19 steve
|
||||||
* gcc4 compile errors.
|
* gcc4 compile errors.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue