Handle general $function arguments as expresions.
This commit is contained in:
parent
cc1e952d0b
commit
5adf99059d
|
|
@ -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: draw_vpi.c,v 1.1 2003/02/28 20:21:13 steve Exp $"
|
#ident "$Id: draw_vpi.c,v 1.2 2003/03/07 02:43:32 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
# include "vvp_priv.h"
|
# include "vvp_priv.h"
|
||||||
|
|
@ -28,6 +28,25 @@
|
||||||
# include <stdlib.h>
|
# include <stdlib.h>
|
||||||
# include <assert.h>
|
# include <assert.h>
|
||||||
|
|
||||||
|
static const char* magic_sfuncs[] = {
|
||||||
|
"$time",
|
||||||
|
"$stime",
|
||||||
|
"$realtime",
|
||||||
|
"$simtime",
|
||||||
|
0
|
||||||
|
};
|
||||||
|
|
||||||
|
static int is_magic_sfunc(const char*name)
|
||||||
|
{
|
||||||
|
int idx;
|
||||||
|
for (idx = 0 ; magic_sfuncs[idx] ; idx += 1)
|
||||||
|
if (strcmp(magic_sfuncs[idx],name) == 0)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
struct vector_info draw_vpi_taskfunc_call(ivl_statement_t tnet,
|
struct vector_info draw_vpi_taskfunc_call(ivl_statement_t tnet,
|
||||||
ivl_expr_t fnet, unsigned wid)
|
ivl_expr_t fnet, unsigned wid)
|
||||||
{
|
{
|
||||||
|
|
@ -58,10 +77,15 @@ struct vector_info draw_vpi_taskfunc_call(ivl_statement_t tnet,
|
||||||
case IVL_EX_NUMBER:
|
case IVL_EX_NUMBER:
|
||||||
case IVL_EX_STRING:
|
case IVL_EX_STRING:
|
||||||
case IVL_EX_SCOPE:
|
case IVL_EX_SCOPE:
|
||||||
case IVL_EX_SFUNC:
|
|
||||||
case IVL_EX_VARIABLE:
|
case IVL_EX_VARIABLE:
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
case IVL_EX_SFUNC:
|
||||||
|
if (is_magic_sfunc(ivl_expr_name(expr)))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
case IVL_EX_SIGNAL:
|
case IVL_EX_SIGNAL:
|
||||||
/* If the signal node is narrower then the signal
|
/* If the signal node is narrower then the signal
|
||||||
itself, then this is a part select so I'm going
|
itself, then this is a part select so I'm going
|
||||||
|
|
@ -170,17 +194,11 @@ struct vector_info draw_vpi_taskfunc_call(ivl_statement_t tnet,
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
case IVL_EX_SFUNC:
|
case IVL_EX_SFUNC:
|
||||||
if (strcmp("$time", ivl_expr_name(expr)) == 0)
|
if (is_magic_sfunc(ivl_expr_name(expr))) {
|
||||||
fprintf(vvp_out, ", $time");
|
fprintf(vvp_out, ", %s", ivl_expr_name(expr));
|
||||||
else if (strcmp("$stime", ivl_expr_name(expr)) == 0)
|
continue;
|
||||||
fprintf(vvp_out, ", $stime");
|
}
|
||||||
else if (strcmp("$realtime", ivl_expr_name(expr)) == 0)
|
break;
|
||||||
fprintf(vvp_out, ", $realtime");
|
|
||||||
else if (strcmp("$simtime", ivl_expr_name(expr)) == 0)
|
|
||||||
fprintf(vvp_out, ", $simtime");
|
|
||||||
else
|
|
||||||
fprintf(vvp_out, ", ?%s?", ivl_expr_name(expr));
|
|
||||||
continue;
|
|
||||||
|
|
||||||
case IVL_EX_MEMORY:
|
case IVL_EX_MEMORY:
|
||||||
if (!ivl_expr_oper1(expr)) {
|
if (!ivl_expr_oper1(expr)) {
|
||||||
|
|
@ -229,6 +247,9 @@ struct vector_info draw_vpi_taskfunc_call(ivl_statement_t tnet,
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log: draw_vpi.c,v $
|
* $Log: draw_vpi.c,v $
|
||||||
|
* Revision 1.2 2003/03/07 02:43:32 steve
|
||||||
|
* Handle general $function arguments as expresions.
|
||||||
|
*
|
||||||
* Revision 1.1 2003/02/28 20:21:13 steve
|
* Revision 1.1 2003/02/28 20:21:13 steve
|
||||||
* Merge vpi_call and vpi_func draw functions.
|
* Merge vpi_call and vpi_func draw functions.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue