Support signed decimal display of variables.
This commit is contained in:
parent
cc18d065aa
commit
ad0853d666
7
t-vvm.cc
7
t-vvm.cc
|
|
@ -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) && !defined(macintosh)
|
#if !defined(WINNT) && !defined(macintosh)
|
||||||
#ident "$Id: t-vvm.cc,v 1.198 2001/01/01 01:41:09 steve Exp $"
|
#ident "$Id: t-vvm.cc,v 1.199 2001/01/06 22:22:17 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
# include <iostream>
|
# include <iostream>
|
||||||
|
|
@ -1270,7 +1270,7 @@ void target_vvm::signal(const NetNet*sig)
|
||||||
init_code << " vpip_make_reg(&" << net_name
|
init_code << " vpip_make_reg(&" << net_name
|
||||||
<< ", \"" << sig->name() << "\", signal_bit_table+"
|
<< ", \"" << sig->name() << "\", signal_bit_table+"
|
||||||
<< signal_bit_counter << ", " << sig->pin_count()
|
<< signal_bit_counter << ", " << sig->pin_count()
|
||||||
<< ");" << endl;
|
<< ", " << (sig->get_signed()? "1" : "0") << ");" << endl;
|
||||||
|
|
||||||
|
|
||||||
signal_bit_counter += sig->pin_count();
|
signal_bit_counter += sig->pin_count();
|
||||||
|
|
@ -3621,6 +3621,9 @@ extern const struct target tgt_vvm = {
|
||||||
};
|
};
|
||||||
/*
|
/*
|
||||||
* $Log: t-vvm.cc,v $
|
* $Log: t-vvm.cc,v $
|
||||||
|
* Revision 1.199 2001/01/06 22:22:17 steve
|
||||||
|
* Support signed decimal display of variables.
|
||||||
|
*
|
||||||
* Revision 1.198 2001/01/01 01:41:09 steve
|
* Revision 1.198 2001/01/01 01:41:09 steve
|
||||||
* reg_assign into function ports. (PR#95)
|
* reg_assign into function ports. (PR#95)
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,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) && !defined(macintosh)
|
#if !defined(WINNT) && !defined(macintosh)
|
||||||
#ident "$Id: vpi_user.h,v 1.24 2000/10/28 00:51:42 steve Exp $"
|
#ident "$Id: vpi_user.h,v 1.25 2001/01/06 22:22:17 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -158,6 +158,7 @@ typedef struct t_vpi_value {
|
||||||
# define vpiOctConst 4
|
# define vpiOctConst 4
|
||||||
# define vpiHexConst 5
|
# define vpiHexConst 5
|
||||||
# define vpiStringConst 6
|
# define vpiStringConst 6
|
||||||
|
#define vpiSigned 65
|
||||||
|
|
||||||
/* DELAY MODES */
|
/* DELAY MODES */
|
||||||
#define vpiNoDelay 1
|
#define vpiNoDelay 1
|
||||||
|
|
@ -265,6 +266,9 @@ extern DLLEXPORT void (*vlog_startup_routines[])();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log: vpi_user.h,v $
|
* $Log: vpi_user.h,v $
|
||||||
|
* Revision 1.25 2001/01/06 22:22:17 steve
|
||||||
|
* Support signed decimal display of variables.
|
||||||
|
*
|
||||||
* Revision 1.24 2000/10/28 00:51:42 steve
|
* Revision 1.24 2000/10/28 00:51:42 steve
|
||||||
* Add scope to threads in vvm, pass that scope
|
* Add scope to threads in vvm, pass that scope
|
||||||
* to vpi sysTaskFunc objects, and add vpi calls
|
* to vpi sysTaskFunc objects, and add vpi calls
|
||||||
|
|
|
||||||
|
|
@ -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) && !defined(macintosh)
|
#if !defined(WINNT) && !defined(macintosh)
|
||||||
#ident "$Id: vpi_const.c,v 1.15 2000/12/10 19:15:19 steve Exp $"
|
#ident "$Id: vpi_const.c,v 1.16 2001/01/06 22:22:17 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
# include "vpi_priv.h"
|
# include "vpi_priv.h"
|
||||||
|
|
@ -25,13 +25,15 @@
|
||||||
# include <string.h>
|
# include <string.h>
|
||||||
# include <stdio.h>
|
# include <stdio.h>
|
||||||
|
|
||||||
unsigned vpip_bits_to_dec_str(const vpip_bit_t*bits, unsigned nbits,
|
static unsigned vpip_bits_to_dec_str(const vpip_bit_t*bits, unsigned nbits,
|
||||||
char*buf, unsigned nbuf)
|
char*buf, unsigned nbuf, int signed_flag)
|
||||||
{
|
{
|
||||||
unsigned idx, len;
|
unsigned idx, len;
|
||||||
unsigned count_x = 0, count_z = 0;
|
unsigned count_x = 0, count_z = 0;
|
||||||
unsigned long val = 0;
|
unsigned long val = 0;
|
||||||
|
|
||||||
|
assert( len <= 8*sizeof(val) );
|
||||||
|
|
||||||
for (idx = 0 ; idx < nbits ; idx += 1) {
|
for (idx = 0 ; idx < nbits ; idx += 1) {
|
||||||
val *= 2;
|
val *= 2;
|
||||||
if (B_ISZ(bits[nbits-idx-1]))
|
if (B_ISZ(bits[nbits-idx-1]))
|
||||||
|
|
@ -59,8 +61,17 @@ unsigned vpip_bits_to_dec_str(const vpip_bit_t*bits, unsigned nbits,
|
||||||
buf[0] = 'Z';
|
buf[0] = 'Z';
|
||||||
buf[1] = 0;
|
buf[1] = 0;
|
||||||
} else {
|
} else {
|
||||||
sprintf(buf, "%lu", val);
|
if (signed_flag && B_IS1(bits[nbits-1])) {
|
||||||
len = strlen(buf);
|
long tmp = -1;
|
||||||
|
assert(sizeof(tmp) == sizeof(val));
|
||||||
|
tmp <<= nbits;
|
||||||
|
tmp |= val;
|
||||||
|
sprintf(buf, "%ld", tmp);
|
||||||
|
len = strlen(buf);
|
||||||
|
} else {
|
||||||
|
sprintf(buf, "%lu", val);
|
||||||
|
len = strlen(buf);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
|
|
@ -69,7 +80,8 @@ unsigned vpip_bits_to_dec_str(const vpip_bit_t*bits, unsigned nbits,
|
||||||
* This function is used in a couple places to interpret a bit string
|
* This function is used in a couple places to interpret a bit string
|
||||||
* as a value.
|
* as a value.
|
||||||
*/
|
*/
|
||||||
void vpip_bits_get_value(const vpip_bit_t*bits, unsigned nbits, s_vpi_value*vp)
|
void vpip_bits_get_value(const vpip_bit_t*bits, unsigned nbits,
|
||||||
|
s_vpi_value*vp, int signed_flag)
|
||||||
{
|
{
|
||||||
static char buff[1024];
|
static char buff[1024];
|
||||||
static s_vpi_vecval vect[64];
|
static s_vpi_vecval vect[64];
|
||||||
|
|
@ -98,7 +110,8 @@ void vpip_bits_get_value(const vpip_bit_t*bits, unsigned nbits, s_vpi_value*vp)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case vpiDecStrVal:
|
case vpiDecStrVal:
|
||||||
cp += vpip_bits_to_dec_str(bits, nbits, cp, 1024-(cp-buff));
|
cp += vpip_bits_to_dec_str(bits, nbits, cp,
|
||||||
|
1024-(cp-buff), signed_flag);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case vpiOctStrVal:
|
case vpiOctStrVal:
|
||||||
|
|
@ -401,7 +414,7 @@ static void number_value(vpiHandle ref, p_vpi_value vp)
|
||||||
{
|
{
|
||||||
struct __vpiNumberConst*rfp = (struct __vpiNumberConst*)ref;
|
struct __vpiNumberConst*rfp = (struct __vpiNumberConst*)ref;
|
||||||
assert(ref->vpi_type->type_code == vpiConstant);
|
assert(ref->vpi_type->type_code == vpiConstant);
|
||||||
vpip_bits_get_value(rfp->bits, rfp->nbits, vp);
|
vpip_bits_get_value(rfp->bits, rfp->nbits, vp, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct __vpirt vpip_string_rt = {
|
static const struct __vpirt vpip_string_rt = {
|
||||||
|
|
@ -443,6 +456,9 @@ vpiHandle vpip_make_number_const(struct __vpiNumberConst*ref,
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log: vpi_const.c,v $
|
* $Log: vpi_const.c,v $
|
||||||
|
* Revision 1.16 2001/01/06 22:22:17 steve
|
||||||
|
* Support signed decimal display of variables.
|
||||||
|
*
|
||||||
* Revision 1.15 2000/12/10 19:15:19 steve
|
* Revision 1.15 2000/12/10 19:15:19 steve
|
||||||
* vpiStringVal handles leding nulls as blanks. (PR#62)
|
* vpiStringVal handles leding nulls as blanks. (PR#62)
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,7 @@
|
||||||
* Picture Elements, Inc., 777 Panoramic Way, Berkeley, CA 94704.
|
* Picture Elements, Inc., 777 Panoramic Way, Berkeley, CA 94704.
|
||||||
*/
|
*/
|
||||||
#if !defined(WINNT) && !defined(macintosh)
|
#if !defined(WINNT) && !defined(macintosh)
|
||||||
#ident "$Id: vpi_memory.c,v 1.8 2000/06/28 18:38:00 steve Exp $"
|
#ident "$Id: vpi_memory.c,v 1.9 2001/01/06 22:22:17 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
# include "vpi_priv.h"
|
# include "vpi_priv.h"
|
||||||
|
|
@ -151,7 +151,7 @@ static void memory_word_get_value(vpiHandle ref, s_vpi_value*vp)
|
||||||
assert(ref->vpi_type->type_code==vpiMemoryWord);
|
assert(ref->vpi_type->type_code==vpiMemoryWord);
|
||||||
|
|
||||||
vpip_bits_get_value(rfp->mem->bits+rfp->index*rfp->mem->width,
|
vpip_bits_get_value(rfp->mem->bits+rfp->index*rfp->mem->width,
|
||||||
rfp->mem->width, vp);
|
rfp->mem->width, vp, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct __vpirt vpip_memory_rt = {
|
static const struct __vpirt vpip_memory_rt = {
|
||||||
|
|
@ -201,6 +201,9 @@ vpiHandle vpip_make_memory(struct __vpiMemory*ref, const char*name,
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
* $Log: vpi_memory.c,v $
|
* $Log: vpi_memory.c,v $
|
||||||
|
* Revision 1.9 2001/01/06 22:22:17 steve
|
||||||
|
* Support signed decimal display of variables.
|
||||||
|
*
|
||||||
* Revision 1.8 2000/06/28 18:38:00 steve
|
* Revision 1.8 2000/06/28 18:38:00 steve
|
||||||
* Initialize memories as they are create.
|
* Initialize memories as they are create.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,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) && !defined(macintosh)
|
#if !defined(WINNT) && !defined(macintosh)
|
||||||
#ident "$Id: vpi_priv.h,v 1.30 2000/11/11 01:52:09 steve Exp $"
|
#ident "$Id: vpi_priv.h,v 1.31 2001/01/06 22:22:17 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
@ -127,7 +127,7 @@ extern vpip_bit_t vpip_bits_resolve(const vpip_bit_t*bits, unsigned nbits);
|
||||||
|
|
||||||
|
|
||||||
extern void vpip_bits_get_value(const vpip_bit_t*bits, unsigned nbits,
|
extern void vpip_bits_get_value(const vpip_bit_t*bits, unsigned nbits,
|
||||||
s_vpi_value*vp);
|
s_vpi_value*vp, int signed_flag);
|
||||||
extern void vpip_bits_set_value(vpip_bit_t*bits, unsigned nbits,
|
extern void vpip_bits_set_value(vpip_bit_t*bits, unsigned nbits,
|
||||||
s_vpi_value*vp);
|
s_vpi_value*vp);
|
||||||
|
|
||||||
|
|
@ -250,6 +250,9 @@ struct __vpiSignal {
|
||||||
/* The signal has a value and dimension. */
|
/* The signal has a value and dimension. */
|
||||||
vpip_bit_t*bits;
|
vpip_bit_t*bits;
|
||||||
unsigned nbits;
|
unsigned nbits;
|
||||||
|
|
||||||
|
unsigned signed_flag : 1;
|
||||||
|
|
||||||
/* monitors are added here. */
|
/* monitors are added here. */
|
||||||
struct __vpiCallback*mfirst;
|
struct __vpiCallback*mfirst;
|
||||||
struct __vpiCallback*mlast;
|
struct __vpiCallback*mlast;
|
||||||
|
|
@ -313,7 +316,8 @@ struct __vpiNumberConst {
|
||||||
*/
|
*/
|
||||||
extern vpiHandle vpip_make_iterator(unsigned nargs, vpiHandle*args);
|
extern vpiHandle vpip_make_iterator(unsigned nargs, vpiHandle*args);
|
||||||
extern vpiHandle vpip_make_net(struct __vpiSignal*ref, const char*name,
|
extern vpiHandle vpip_make_net(struct __vpiSignal*ref, const char*name,
|
||||||
vpip_bit_t*bits, unsigned nbits);
|
vpip_bit_t*bits, unsigned nbits,
|
||||||
|
int signed_flag);
|
||||||
extern vpiHandle vpip_make_scope(struct __vpiScope*ref,
|
extern vpiHandle vpip_make_scope(struct __vpiScope*ref,
|
||||||
int type_code,
|
int type_code,
|
||||||
const char*name);
|
const char*name);
|
||||||
|
|
@ -325,7 +329,8 @@ extern vpiHandle vpip_make_number_const(struct __vpiNumberConst*ref,
|
||||||
extern vpiHandle vpip_make_memory(struct __vpiMemory*ref, const char*name,
|
extern vpiHandle vpip_make_memory(struct __vpiMemory*ref, const char*name,
|
||||||
unsigned width, unsigned size);
|
unsigned width, unsigned size);
|
||||||
extern vpiHandle vpip_make_reg(struct __vpiSignal*ref, const char*name,
|
extern vpiHandle vpip_make_reg(struct __vpiSignal*ref, const char*name,
|
||||||
vpip_bit_t*bits, unsigned nbits);
|
vpip_bit_t*bits, unsigned nbits,
|
||||||
|
int signed_flag);
|
||||||
extern vpiHandle vpip_make_time_var(struct __vpiTimeVar*ref,
|
extern vpiHandle vpip_make_time_var(struct __vpiTimeVar*ref,
|
||||||
const char*val);
|
const char*val);
|
||||||
|
|
||||||
|
|
@ -407,6 +412,9 @@ extern int vpip_finished();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log: vpi_priv.h,v $
|
* $Log: vpi_priv.h,v $
|
||||||
|
* Revision 1.31 2001/01/06 22:22:17 steve
|
||||||
|
* Support signed decimal display of variables.
|
||||||
|
*
|
||||||
* Revision 1.30 2000/11/11 01:52:09 steve
|
* Revision 1.30 2000/11/11 01:52:09 steve
|
||||||
* change set for support of nmos, pmos, rnmos, rpmos, notif0, and notif1
|
* change set for support of nmos, pmos, rnmos, rpmos, notif0, and notif1
|
||||||
* change set to correct behavior of bufif0 and bufif1
|
* change set to correct behavior of bufif0 and bufif1
|
||||||
|
|
|
||||||
|
|
@ -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) && !defined(macintosh)
|
#if !defined(WINNT) && !defined(macintosh)
|
||||||
#ident "$Id: vpi_signal.c,v 1.11 2000/08/20 17:49:05 steve Exp $"
|
#ident "$Id: vpi_signal.c,v 1.12 2001/01/06 22:22:17 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
# include "vpi_priv.h"
|
# include "vpi_priv.h"
|
||||||
|
|
@ -32,6 +32,9 @@ static int signal_get(int code, vpiHandle ref)
|
||||||
|| (ref->vpi_type->type_code==vpiReg));
|
|| (ref->vpi_type->type_code==vpiReg));
|
||||||
|
|
||||||
switch (code) {
|
switch (code) {
|
||||||
|
|
||||||
|
case vpiSigned:
|
||||||
|
return rfp->signed_flag;
|
||||||
case vpiSize:
|
case vpiSize:
|
||||||
return rfp->nbits;
|
return rfp->nbits;
|
||||||
|
|
||||||
|
|
@ -62,7 +65,7 @@ static void signal_get_value(vpiHandle ref, s_vpi_value*vp)
|
||||||
assert((ref->vpi_type->type_code==vpiNet)
|
assert((ref->vpi_type->type_code==vpiNet)
|
||||||
|| (ref->vpi_type->type_code==vpiReg));
|
|| (ref->vpi_type->type_code==vpiReg));
|
||||||
|
|
||||||
vpip_bits_get_value(rfp->bits, rfp->nbits, vp);
|
vpip_bits_get_value(rfp->bits, rfp->nbits, vp, rfp->signed_flag);
|
||||||
}
|
}
|
||||||
|
|
||||||
static vpiHandle signal_put_value(vpiHandle ref, s_vpi_value*vp,
|
static vpiHandle signal_put_value(vpiHandle ref, s_vpi_value*vp,
|
||||||
|
|
@ -87,12 +90,13 @@ static const struct __vpirt vpip_net_rt = {
|
||||||
};
|
};
|
||||||
|
|
||||||
vpiHandle vpip_make_net(struct __vpiSignal*ref, const char*name,
|
vpiHandle vpip_make_net(struct __vpiSignal*ref, const char*name,
|
||||||
vpip_bit_t*b, unsigned nb)
|
vpip_bit_t*b, unsigned nb, int signed_flag)
|
||||||
{
|
{
|
||||||
ref->base.vpi_type = &vpip_net_rt;
|
ref->base.vpi_type = &vpip_net_rt;
|
||||||
ref->name = name;
|
ref->name = name;
|
||||||
ref->bits = b;
|
ref->bits = b;
|
||||||
ref->nbits = nb;
|
ref->nbits = nb;
|
||||||
|
ref->signed_flag = signed_flag? 1 : 0;
|
||||||
ref->mfirst = 0;
|
ref->mfirst = 0;
|
||||||
ref->mlast = 0;
|
ref->mlast = 0;
|
||||||
return &(ref->base);
|
return &(ref->base);
|
||||||
|
|
@ -109,12 +113,13 @@ static const struct __vpirt vpip_reg_rt = {
|
||||||
};
|
};
|
||||||
|
|
||||||
vpiHandle vpip_make_reg(struct __vpiSignal*ref, const char*name,
|
vpiHandle vpip_make_reg(struct __vpiSignal*ref, const char*name,
|
||||||
vpip_bit_t*b, unsigned nb)
|
vpip_bit_t*b, unsigned nb, int signed_flag)
|
||||||
{
|
{
|
||||||
ref->base.vpi_type = &vpip_reg_rt;
|
ref->base.vpi_type = &vpip_reg_rt;
|
||||||
ref->name = name;
|
ref->name = name;
|
||||||
ref->bits = b;
|
ref->bits = b;
|
||||||
ref->nbits = nb;
|
ref->nbits = nb;
|
||||||
|
ref->signed_flag = signed_flag? 1 : 0;
|
||||||
ref->mfirst = 0;
|
ref->mfirst = 0;
|
||||||
ref->mlast = 0;
|
ref->mlast = 0;
|
||||||
return &(ref->base);
|
return &(ref->base);
|
||||||
|
|
@ -122,6 +127,9 @@ vpiHandle vpip_make_reg(struct __vpiSignal*ref, const char*name,
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log: vpi_signal.c,v $
|
* $Log: vpi_signal.c,v $
|
||||||
|
* Revision 1.12 2001/01/06 22:22:17 steve
|
||||||
|
* Support signed decimal display of variables.
|
||||||
|
*
|
||||||
* Revision 1.11 2000/08/20 17:49:05 steve
|
* Revision 1.11 2000/08/20 17:49:05 steve
|
||||||
* Clean up warnings and portability issues.
|
* Clean up warnings and portability issues.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue