Support specified times in cbReadOnlySync, and

add support for cbReadWriteSync.
 Keep simulation time in a 64bit number.
This commit is contained in:
steve 2002-04-20 04:33:23 +00:00
parent 47a3b1f744
commit eb708c1540
7 changed files with 101 additions and 23 deletions

View File

@ -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) #if !defined(WINNT)
#ident "$Id: config.h.in,v 1.9 2001/10/20 01:03:42 steve Exp $" #ident "$Id: config.h.in,v 1.10 2002/04/20 04:33:23 steve Exp $"
#endif #endif
# define SIZEOF_UNSIGNED_LONG 0 # define SIZEOF_UNSIGNED_LONG 0
@ -41,6 +41,20 @@
# define MODULE_DIR "." # define MODULE_DIR "."
#endif #endif
#if SIZEOF_UNSIGNED >= 8
typedef unsigned vvp_time64_t;
#else
# if SIZEOF_UNSIGNED_LONG >= 8
typedef unsigned long vvp_time64_t;
# else
# if SIZEOF_UNSIGNED_LONG_LONG > SIZEOF_UNSIGNED_LONG
typedef unsigned long long vvp_time64_t;
# else
typedef unsigned long vvp_time64_t;
# endif
# endif
#endif
#if defined(HAVE_LIBREADLINE) && defined(ENABLE_VVP_DEBUG) #if defined(HAVE_LIBREADLINE) && defined(ENABLE_VVP_DEBUG)
# define WITH_DEBUG 1 # define WITH_DEBUG 1
#endif #endif
@ -70,6 +84,11 @@
/* /*
* $Log: config.h.in,v $ * $Log: config.h.in,v $
* Revision 1.10 2002/04/20 04:33:23 steve
* Support specified times in cbReadOnlySync, and
* add support for cbReadWriteSync.
* Keep simulation time in a 64bit number.
*
* Revision 1.9 2001/10/20 01:03:42 steve * Revision 1.9 2001/10/20 01:03:42 steve
* Print memory usage information if requested (Stephan Boettcher) * Print memory usage information if requested (Stephan Boettcher)
* *

View File

@ -33,6 +33,7 @@ AC_ARG_ENABLE(vvp-debug, vvp-debug -- interactive debugger for VVP runtime.,
AC_CHECK_HEADERS(getopt.h malloc.h) AC_CHECK_HEADERS(getopt.h malloc.h)
AC_CHECK_SIZEOF(unsigned long long)
AC_CHECK_SIZEOF(unsigned long) AC_CHECK_SIZEOF(unsigned long)
AC_CHECK_SIZEOF(unsigned) AC_CHECK_SIZEOF(unsigned)

View File

@ -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: schedule.cc,v 1.15 2002/03/17 03:23:55 steve Exp $" #ident "$Id: schedule.cc,v 1.16 2002/04/20 04:33:23 steve Exp $"
#endif #endif
# include "schedule.h" # include "schedule.h"
@ -276,8 +276,8 @@ void schedule_generic(vvp_gen_event_t obj, unsigned char val, unsigned delay)
schedule_event_(cur); schedule_event_(cur);
} }
static unsigned long schedule_time; static vvp_time64_t schedule_time;
unsigned long schedule_simtime(void) vvp_time64_t schedule_simtime(void)
{ return schedule_time; } { return schedule_time; }
void schedule_simulate(void) void schedule_simulate(void)
@ -364,6 +364,11 @@ void schedule_simulate(void)
/* /*
* $Log: schedule.cc,v $ * $Log: schedule.cc,v $
* Revision 1.16 2002/04/20 04:33:23 steve
* Support specified times in cbReadOnlySync, and
* add support for cbReadWriteSync.
* Keep simulation time in a 64bit number.
*
* Revision 1.15 2002/03/17 03:23:55 steve * Revision 1.15 2002/03/17 03:23:55 steve
* Force the push flags to be explicit. * Force the push flags to be explicit.
* *

View File

@ -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) #if !defined(WINNT)
#ident "$Id: schedule.h,v 1.8 2001/10/31 04:27:47 steve Exp $" #ident "$Id: schedule.h,v 1.9 2002/04/20 04:33:23 steve Exp $"
#endif #endif
# include "vthread.h" # include "vthread.h"
@ -71,7 +71,7 @@ extern void schedule_simulate(void);
* internally by the scheduler (which uses time differences instead) * internally by the scheduler (which uses time differences instead)
* but is used for printouts and stuff. * but is used for printouts and stuff.
*/ */
extern unsigned long schedule_simtime(void); extern vvp_time64_t schedule_simtime(void);
/* /*
* This function is the equivilent of the $finish system task. It * This function is the equivilent of the $finish system task. It
@ -88,6 +88,11 @@ extern bool schedule_finished(void);
/* /*
* $Log: schedule.h,v $ * $Log: schedule.h,v $
* Revision 1.9 2002/04/20 04:33:23 steve
* Support specified times in cbReadOnlySync, and
* add support for cbReadWriteSync.
* Keep simulation time in a 64bit number.
*
* Revision 1.8 2001/10/31 04:27:47 steve * Revision 1.8 2001/10/31 04:27:47 steve
* Rewrite the functor type to have fewer functor modes, * Rewrite the functor type to have fewer functor modes,
* and use objects to manage the different types. * and use objects to manage the different types.

View File

@ -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_callback.cc,v 1.11 2002/04/06 20:25:45 steve Exp $" #ident "$Id: vpi_callback.cc,v 1.12 2002/04/20 04:33:23 steve Exp $"
#endif #endif
/* /*
@ -226,14 +226,13 @@ static void make_sync_run(vvp_gen_event_t obj, unsigned char)
struct __vpiCallback*cur = cb->handle; struct __vpiCallback*cur = cb->handle;
cur->cb_data.time->type = vpiSimTime; cur->cb_data.time->type = vpiSimTime;
cur->cb_data.time->low = schedule_simtime(); vpip_time_to_timestruct(cur->cb_data.time, schedule_simtime());
cur->cb_data.time->high = 0;
(cur->cb_data.cb_rtn)(&cur->cb_data); (cur->cb_data.cb_rtn)(&cur->cb_data);
free_vpi_callback(cur); free_vpi_callback(cur);
} }
static struct __vpiCallback* make_sync(p_cb_data data) static struct __vpiCallback* make_sync(p_cb_data data, bool readonly_flag)
{ {
struct __vpiCallback*obj = new_vpi_callback(); struct __vpiCallback*obj = new_vpi_callback();
obj->cb_data = *data; obj->cb_data = *data;
@ -243,12 +242,31 @@ static struct __vpiCallback* make_sync(p_cb_data data)
obj->next = 0; obj->next = 0;
struct sync_cb*cb = new sync_cb; struct sync_cb*cb = new sync_cb;
cb->sync_flag = true; cb->sync_flag = readonly_flag? true : false;
cb->run = &make_sync_run; cb->run = &make_sync_run;
cb->handle = obj; cb->handle = obj;
obj->cb_sync = cb; obj->cb_sync = cb;
schedule_generic(cb, 0, 0); switch (obj->cb_time.type) {
case vpiSuppressTime:
schedule_generic(cb, 0, 0);
break;
case vpiSimTime:
{ vvp_time64_t tv = vpip_timestruct_to_time(&obj->cb_time);
vvp_time64_t tn = schedule_simtime();
if (tv < tn) {
schedule_generic(cb, 0, 0);
} else {
schedule_generic(cb, 0, tv - tn);
}
break;
}
default:
assert(0);
break;
}
return obj; return obj;
} }
@ -263,7 +281,11 @@ vpiHandle vpi_register_cb(p_cb_data data)
break; break;
case cbReadOnlySynch: case cbReadOnlySynch:
obj = make_sync(data); obj = make_sync(data, true);
break;
case cbReadWriteSynch:
obj = make_sync(data, false);
break; break;
default: default:
@ -313,21 +335,21 @@ void callback_functor_s::set(vvp_ipoint_t, bool, unsigned val, unsigned)
} }
} }
cur->cb_data.time->type = vpiSimTime; cur->cb_data.time->type = vpiSimTime;
cur->cb_data.time->low = schedule_simtime(); vpip_time_to_timestruct(cur->cb_data.time, schedule_simtime());
cur->cb_data.time->high = 0;
(cur->cb_data.cb_rtn)(&cur->cb_data); (cur->cb_data.cb_rtn)(&cur->cb_data);
} }
} }
void vpip_trip_monitor_callbacks(void)
{
}
/* /*
* $Log: vpi_callback.cc,v $ * $Log: vpi_callback.cc,v $
* Revision 1.12 2002/04/20 04:33:23 steve
* Support specified times in cbReadOnlySync, and
* add support for cbReadWriteSync.
* Keep simulation time in a 64bit number.
*
* Revision 1.11 2002/04/06 20:25:45 steve * Revision 1.11 2002/04/06 20:25:45 steve
* cbValueChange automatically replays. * cbValueChange automatically replays.
* *

View File

@ -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) #if !defined(WINNT)
#ident "$Id: vpi_priv.h,v 1.30 2002/04/14 03:53:20 steve Exp $" #ident "$Id: vpi_priv.h,v 1.31 2002/04/20 04:33:23 steve Exp $"
#endif #endif
# include "vpi_user.h" # include "vpi_user.h"
@ -248,6 +248,9 @@ vpiHandle vpip_sim_time(void);
extern int vpip_get_time_precision(void); extern int vpip_get_time_precision(void);
extern void vpip_set_time_precision(int pres); extern void vpip_set_time_precision(int pres);
extern void vpip_time_to_timestruct(struct t_vpi_time*ts, vvp_time64_t ti);
extern vvp_time64_t vpip_timestruct_to_time(const struct t_vpi_time*ts);
/* /*
** Functions defined in vpi_scope.cc, to keep track of functor scope. ** Functions defined in vpi_scope.cc, to keep track of functor scope.
@ -269,6 +272,11 @@ extern unsigned vpip_bits_to_dec_str(const unsigned char *bits,
/* /*
* $Log: vpi_priv.h,v $ * $Log: vpi_priv.h,v $
* Revision 1.31 2002/04/20 04:33:23 steve
* Support specified times in cbReadOnlySync, and
* add support for cbReadWriteSync.
* Keep simulation time in a 64bit number.
*
* Revision 1.30 2002/04/14 03:53:20 steve * Revision 1.30 2002/04/14 03:53:20 steve
* Allow signed constant vectors for call_vpi parameters. * Allow signed constant vectors for call_vpi parameters.
* *

View File

@ -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_time.cc,v 1.6 2002/01/15 03:06:29 steve Exp $" #ident "$Id: vpi_time.cc,v 1.7 2002/04/20 04:33:23 steve Exp $"
#endif #endif
# include "vpi_priv.h" # include "vpi_priv.h"
@ -28,6 +28,20 @@
static int vpi_time_precision = 0; static int vpi_time_precision = 0;
void vpip_time_to_timestruct(struct t_vpi_time*ts, vvp_time64_t ti)
{
ts->low = ti & 0xFFFFFFFF;
ts->high = (ti >> 32) & 0xFFFFFFFF;
}
vvp_time64_t vpip_timestruct_to_time(const struct t_vpi_time*ts)
{
vvp_time64_t ti = ts->high;
ti <<= 32;
ti += ts->low & 0xffffffff;
return ti;
}
static struct __vpiSystemTime { static struct __vpiSystemTime {
struct __vpiHandle base; struct __vpiHandle base;
struct t_vpi_time value; struct t_vpi_time value;
@ -60,8 +74,7 @@ static void timevar_get_value(vpiHandle ref, s_vpi_value*vp)
case vpiTimeVal: case vpiTimeVal:
vp->value.time = &time_handle.value; vp->value.time = &time_handle.value;
vp->value.time->type = vpiSimTime; vp->value.time->type = vpiSimTime;
vp->value.time->high = 0; vpip_time_to_timestruct(vp->value.time, schedule_simtime());
vp->value.time->low = schedule_simtime();
vp->format = vpiTimeVal; vp->format = vpiTimeVal;
break; break;
@ -129,6 +142,11 @@ void vpip_set_time_precision(int pre)
/* /*
* $Log: vpi_time.cc,v $ * $Log: vpi_time.cc,v $
* Revision 1.7 2002/04/20 04:33:23 steve
* Support specified times in cbReadOnlySync, and
* add support for cbReadWriteSync.
* Keep simulation time in a 64bit number.
*
* Revision 1.6 2002/01/15 03:06:29 steve * Revision 1.6 2002/01/15 03:06:29 steve
* Support vpiSize and vpiSigned for time objects. * Support vpiSize and vpiSigned for time objects.
* *