Allow $display of $simtime.

This commit is contained in:
steve 2003-02-03 01:09:20 +00:00
parent d188e5cd2e
commit ce489d8d84
3 changed files with 37 additions and 7 deletions

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
*/ */
#ifdef HAVE_CVS_IDENT #ifdef HAVE_CVS_IDENT
#ident "$Id: vvp_process.c,v 1.78 2003/01/27 00:14:37 steve Exp $" #ident "$Id: vvp_process.c,v 1.79 2003/02/03 01:09:20 steve Exp $"
#endif #endif
# include "vvp_priv.h" # include "vvp_priv.h"
@ -1316,6 +1316,8 @@ static int show_system_task_call(ivl_statement_t net)
fprintf(vvp_out, ", $stime"); fprintf(vvp_out, ", $stime");
else if (strcmp("$realtime", ivl_expr_name(expr)) == 0) else if (strcmp("$realtime", ivl_expr_name(expr)) == 0)
fprintf(vvp_out, ", $realtime"); fprintf(vvp_out, ", $realtime");
else if (strcmp("$simtime", ivl_expr_name(expr)) == 0)
fprintf(vvp_out, ", $simtime");
else else
fprintf(vvp_out, ", ?%s?", ivl_expr_name(expr)); fprintf(vvp_out, ", ?%s?", ivl_expr_name(expr));
continue; continue;
@ -1565,6 +1567,9 @@ int draw_func_definition(ivl_scope_t scope)
/* /*
* $Log: vvp_process.c,v $ * $Log: vvp_process.c,v $
* Revision 1.79 2003/02/03 01:09:20 steve
* Allow $display of $simtime.
*
* Revision 1.78 2003/01/27 00:14:37 steve * Revision 1.78 2003/01/27 00:14:37 steve
* Support in various contexts the $realtime * Support in various contexts the $realtime
* system task. * system task.

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
*/ */
#ifdef HAVE_CVS_IDENT #ifdef HAVE_CVS_IDENT
#ident "$Id: compile.cc,v 1.151 2003/02/01 05:50:04 steve Exp $" #ident "$Id: compile.cc,v 1.152 2003/02/03 01:09:20 steve Exp $"
#endif #endif
# include "arith.h" # include "arith.h"
@ -450,6 +450,12 @@ void compile_vpi_lookup(vpiHandle *handle, char*label)
return; return;
} }
if (strcmp(label, "$simtime") == 0) {
*handle = vpip_sim_time(0);
free(label);
return;
}
struct vpi_handle_resolv_list_s*res struct vpi_handle_resolv_list_s*res
= new struct vpi_handle_resolv_list_s; = new struct vpi_handle_resolv_list_s;
@ -1513,6 +1519,9 @@ void compile_net(char*label, char*name, int msb, int lsb, bool signed_flag,
/* /*
* $Log: compile.cc,v $ * $Log: compile.cc,v $
* Revision 1.152 2003/02/03 01:09:20 steve
* Allow $display of $simtime.
*
* Revision 1.151 2003/02/01 05:50:04 steve * Revision 1.151 2003/02/01 05:50:04 steve
* Make $time and $realtime available to $display uniquely. * Make $time and $realtime available to $display uniquely.
* *

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
*/ */
#ifdef HAVE_CVS_IDENT #ifdef HAVE_CVS_IDENT
#ident "$Id: vpi_time.cc,v 1.11 2003/02/02 02:14:14 steve Exp $" #ident "$Id: vpi_time.cc,v 1.12 2003/02/03 01:09:20 steve Exp $"
#endif #endif
# include "vpi_priv.h" # include "vpi_priv.h"
@ -39,6 +39,8 @@
*/ */
static int vpi_time_precision = 0; static int vpi_time_precision = 0;
static struct __vpiSystemTime global_simtime;
void vpip_time_to_timestruct(struct t_vpi_time*ts, vvp_time64_t ti) void vpip_time_to_timestruct(struct t_vpi_time*ts, vvp_time64_t ti)
{ {
ts->low = ti & 0xFFFFFFFF; ts->low = ti & 0xFFFFFFFF;
@ -142,7 +144,7 @@ static void timevar_get_value(vpiHandle ref, s_vpi_value*vp)
= reinterpret_cast<struct __vpiSystemTime*>(ref); = reinterpret_cast<struct __vpiSystemTime*>(ref);
unsigned long x, num_bits; unsigned long x, num_bits;
vvp_time64_t simtime = schedule_simtime(); vvp_time64_t simtime = schedule_simtime();
int units = rfp->scope->time_units; int units = rfp->scope? rfp->scope->time_units : vpi_time_precision;
/* Calculate the divisor needed to scale the simulation time /* Calculate the divisor needed to scale the simulation time
(in time_precision units) to time units of the scope. */ (in time_precision units) to time units of the scope. */
@ -228,11 +230,22 @@ static const struct __vpirt vpip_system_realtime_rt = {
0 0
}; };
/*
* Create a handle to represent a call to $time/$stime/$simtime. The
* $time and $stime system functions return a value scaled to a scope,
* and the $simtime returns the unscaled time.
*/
vpiHandle vpip_sim_time(struct __vpiScope*scope) vpiHandle vpip_sim_time(struct __vpiScope*scope)
{ {
scope->scoped_time.base.vpi_type = &vpip_system_time_rt; if (scope) {
scope->scoped_time.scope = scope; scope->scoped_time.base.vpi_type = &vpip_system_time_rt;
return &scope->scoped_time.base; scope->scoped_time.scope = scope;
return &scope->scoped_time.base;
} else {
global_simtime.base.vpi_type = &vpip_system_time_rt;
global_simtime.scope = 0;
return &global_simtime.base;
}
} }
vpiHandle vpip_sim_realtime(struct __vpiScope*scope) vpiHandle vpip_sim_realtime(struct __vpiScope*scope)
@ -255,6 +268,9 @@ void vpip_set_time_precision(int pre)
/* /*
* $Log: vpi_time.cc,v $ * $Log: vpi_time.cc,v $
* Revision 1.12 2003/02/03 01:09:20 steve
* Allow $display of $simtime.
*
* Revision 1.11 2003/02/02 02:14:14 steve * Revision 1.11 2003/02/02 02:14:14 steve
* Proper rounding of scaled integer time. * Proper rounding of scaled integer time.
* *