diff --git a/design_dump.cc b/design_dump.cc index 89375a8d7..3c5cc8200 100644 --- a/design_dump.cc +++ b/design_dump.cc @@ -17,7 +17,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #if !defined(WINNT) && !defined(macintosh) -#ident "$Id: design_dump.cc,v 1.100 2000/10/07 19:45:42 steve Exp $" +#ident "$Id: design_dump.cc,v 1.101 2000/10/28 00:51:41 steve Exp $" #endif /* @@ -421,10 +421,12 @@ void NetProcTop::dump(ostream&o, unsigned ind) const { switch (type_) { case NetProcTop::KINITIAL: - o << "initial /* " << get_line() << " */" << endl; + o << "initial /* " << get_line() << " in " + << scope_->name() << " */" << endl; break; case NetProcTop::KALWAYS: - o << "always /* " << get_line() << " */" << endl; + o << "always /* " << get_line() << " in " + << scope_->name() << " */" << endl; break; } @@ -973,6 +975,13 @@ void Design::dump(ostream&o) const /* * $Log: design_dump.cc,v $ + * Revision 1.101 2000/10/28 00:51:41 steve + * Add scope to threads in vvm, pass that scope + * to vpi sysTaskFunc objects, and add vpi calls + * to access that information. + * + * $display displays scope in %m (PR#1) + * * Revision 1.100 2000/10/07 19:45:42 steve * Put logic devices into scopes. * diff --git a/elaborate.cc b/elaborate.cc index 9e0174b6f..7fb70c823 100644 --- a/elaborate.cc +++ b/elaborate.cc @@ -17,7 +17,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #if !defined(WINNT) && !defined(macintosh) -#ident "$Id: elaborate.cc,v 1.194 2000/10/26 17:09:46 steve Exp $" +#ident "$Id: elaborate.cc,v 1.195 2000/10/28 00:51:42 steve Exp $" #endif /* @@ -2198,10 +2198,10 @@ bool Module::elaborate(Design*des, NetScope*scope) const NetProcTop*top; switch ((*st)->type()) { case PProcess::PR_INITIAL: - top = new NetProcTop(NetProcTop::KINITIAL, cur); + top = new NetProcTop(scope, NetProcTop::KINITIAL, cur); break; case PProcess::PR_ALWAYS: - top = new NetProcTop(NetProcTop::KALWAYS, cur); + top = new NetProcTop(scope, NetProcTop::KALWAYS, cur); break; } @@ -2283,6 +2283,13 @@ Design* elaborate(const map&modules, /* * $Log: elaborate.cc,v $ + * Revision 1.195 2000/10/28 00:51:42 steve + * Add scope to threads in vvm, pass that scope + * to vpi sysTaskFunc objects, and add vpi calls + * to access that information. + * + * $display displays scope in %m (PR#1) + * * Revision 1.194 2000/10/26 17:09:46 steve * Fix handling of errors in behavioral lvalues. (PR#28) * diff --git a/iverilog.conf b/iverilog.conf index 43df53048..aa3c10c29 100644 --- a/iverilog.conf +++ b/iverilog.conf @@ -53,3 +53,10 @@ [-tnull] %B/ivl %?s-s%s; %?N-N%N; %?T-T%T; -tnull -- - +# -- (not supported yet) +# The string for the vvm target is the ivl command that takes as +# standard input the output from the preprocessor and writes the result +# into a .cc file named after the output file. + +[-tvvm] +%B/ivl %?s-s%s; %?N-N%N; %?T-T%T; -tvvm -Fcprop -Fnodangle -fVPI_MODULE_PATH=%B -- - diff --git a/netlist.cc b/netlist.cc index 6b7de0f40..d7c650ad1 100644 --- a/netlist.cc +++ b/netlist.cc @@ -17,7 +17,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #if !defined(WINNT) && !defined(macintosh) -#ident "$Id: netlist.cc,v 1.142 2000/10/07 19:45:43 steve Exp $" +#ident "$Id: netlist.cc,v 1.143 2000/10/28 00:51:42 steve Exp $" #endif # include @@ -423,8 +423,8 @@ NetProc::~NetProc() { } -NetProcTop::NetProcTop(Type t, NetProc*st) -: type_(t), statement_(st) +NetProcTop::NetProcTop(NetScope*s, Type t, NetProc*st) +: type_(t), statement_(st), scope_(s) { } @@ -443,6 +443,11 @@ const NetProc* NetProcTop::statement() const return statement_; } +const NetScope* NetProcTop::scope() const +{ + return scope_; +} + /* * The NetFF class represents an LPM_FF device. The pinout is assigned * like so: @@ -2441,6 +2446,13 @@ bool NetUDP::sequ_glob_(string input, char output) /* * $Log: netlist.cc,v $ + * Revision 1.143 2000/10/28 00:51:42 steve + * Add scope to threads in vvm, pass that scope + * to vpi sysTaskFunc objects, and add vpi calls + * to access that information. + * + * $display displays scope in %m (PR#1) + * * Revision 1.142 2000/10/07 19:45:43 steve * Put logic devices into scopes. * diff --git a/netlist.h b/netlist.h index 5c91d9335..d3414a8f6 100644 --- a/netlist.h +++ b/netlist.h @@ -19,7 +19,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #if !defined(WINNT) && !defined(macintosh) -#ident "$Id: netlist.h,v 1.174 2000/10/18 20:04:39 steve Exp $" +#ident "$Id: netlist.h,v 1.175 2000/10/28 00:51:42 steve Exp $" #endif /* @@ -1999,13 +1999,15 @@ class NetProcTop : public LineInfo { public: enum Type { KINITIAL, KALWAYS }; - NetProcTop(Type t, class NetProc*st); + NetProcTop(NetScope*s, Type t, class NetProc*st); ~NetProcTop(); Type type() const { return type_; } NetProc*statement(); const NetProc*statement() const; + const NetScope*scope() const; + void dump(ostream&, unsigned ind) const; bool emit(struct target_t*tgt) const; @@ -2013,6 +2015,7 @@ class NetProcTop : public LineInfo { const Type type_; NetProc*const statement_; + NetScope*scope_; friend class Design; NetProcTop*next_; }; @@ -2807,6 +2810,13 @@ extern ostream& operator << (ostream&, NetNet::Type); /* * $Log: netlist.h,v $ + * Revision 1.175 2000/10/28 00:51:42 steve + * Add scope to threads in vvm, pass that scope + * to vpi sysTaskFunc objects, and add vpi calls + * to access that information. + * + * $display displays scope in %m (PR#1) + * * Revision 1.174 2000/10/18 20:04:39 steve * Add ivl_lval_t and support for assignment l-values. * diff --git a/t-vvm.cc b/t-vvm.cc index dc4ce37ec..84ccf81a0 100644 --- a/t-vvm.cc +++ b/t-vvm.cc @@ -17,7 +17,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #if !defined(WINNT) && !defined(macintosh) -#ident "$Id: t-vvm.cc,v 1.180 2000/10/26 00:29:10 steve Exp $" +#ident "$Id: t-vvm.cc,v 1.181 2000/10/28 00:51:42 steve Exp $" #endif # include @@ -2180,7 +2180,8 @@ void target_vvm::start_process(ostream&os, const NetProcTop*proc) init_code << " " << thread_class_ << ".step_ = &" << thread_class_ << "_step_0_;" << endl; - + init_code << " " << thread_class_ << ".scope = &" + << mangle(proc->scope()->name()) << "_scope;" << endl; init_code << " " << thread_class_ << ".thread_yield();" << endl; @@ -3162,7 +3163,7 @@ void target_vvm::proc_stask(const NetSTask*net) parameters. we don't need a parameter array for this. */ if (net->nparms() == 0) { - defn << " vpip_calltask(\"" << net->name() + defn << " vpip_calltask(thr->scope, \"" << net->name() << "\", 0, 0);" << endl; defn << " if (vpip_finished()) return false;" << endl; return; @@ -3185,8 +3186,8 @@ void target_vvm::proc_stask(const NetSTask*net) << endl; } - defn << " vpip_calltask(\"" << net->name() << "\", " << - net->nparms() << ", " << ptmp << ");" << endl; + defn << " vpip_calltask(thr->scope, \"" << net->name() << "\", " + << net->nparms() << ", " << ptmp << ");" << endl; defn << " if (vpip_finished()) return false;" << endl; } @@ -3393,6 +3394,13 @@ extern const struct target tgt_vvm = { }; /* * $Log: t-vvm.cc,v $ + * Revision 1.181 2000/10/28 00:51:42 steve + * Add scope to threads in vvm, pass that scope + * to vpi sysTaskFunc objects, and add vpi calls + * to access that information. + * + * $display displays scope in %m (PR#1) + * * Revision 1.180 2000/10/26 00:29:10 steve * Put signals into a signal_table * diff --git a/vpi/sys_display.c b/vpi/sys_display.c index 1baa099cf..bd421a866 100644 --- a/vpi/sys_display.c +++ b/vpi/sys_display.c @@ -17,7 +17,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #if !defined(WINNT) && !defined(macintosh) -#ident "$Id: sys_display.c,v 1.17 2000/08/20 17:49:05 steve Exp $" +#ident "$Id: sys_display.c,v 1.18 2000/10/28 00:51:42 steve Exp $" #endif # include "vpi_user.h" @@ -55,7 +55,8 @@ static void array_from_iterator(struct strobe_cb_info*info, vpiHandle argv) * well so that I can look for arguments as I move forward through the * string. */ -static int format_str(unsigned int mcd, char*fmt, int argc, vpiHandle*argv) +static int format_str(vpiHandle scope, unsigned int mcd, + char*fmt, int argc, vpiHandle*argv) { s_vpi_value value; char buf[256]; @@ -114,8 +115,8 @@ static int format_str(unsigned int mcd, char*fmt, int argc, vpiHandle*argv) cp += 1; break; case 'm': - vpi_mcd_printf(mcd, "%s", vpi_get_str(vpiFullName, argv[idx])); - idx += 1; + assert(scope); + vpi_mcd_printf(mcd, "%s", vpi_get_str(vpiFullName, scope)); cp += 1; break; case 'o': @@ -162,7 +163,8 @@ static int format_str(unsigned int mcd, char*fmt, int argc, vpiHandle*argv) return idx; } -static void do_display(unsigned int mcd, struct strobe_cb_info*info) +static void do_display(vpiHandle scope, unsigned int mcd, + struct strobe_cb_info*info) { s_vpi_value value; int idx; @@ -180,7 +182,7 @@ static void do_display(unsigned int mcd, struct strobe_cb_info*info) if (vpi_get(vpiConstType, item) == vpiStringConst) { value.format = vpiStringVal; vpi_get_value(item, &value); - idx += format_str(mcd, value.value.str, + idx += format_str(scope, mcd, value.value.str, info->nitems-idx-1, info->items+idx+1); } else { @@ -215,12 +217,15 @@ static int sys_display_calltf(char *name) { struct strobe_cb_info info; vpiHandle sys = vpi_handle(vpiSysTfCall, 0); + vpiHandle scope = vpi_handle(vpiScope, sys); vpiHandle argv = vpi_iterate(vpiArgument, sys); + assert(scope); + array_from_iterator(&info, argv); - do_display(1, &info); + do_display(scope, 1, &info); free(info.items); @@ -242,7 +247,7 @@ static int strobe_cb(p_cb_data cb) { struct strobe_cb_info*info = (struct strobe_cb_info*)cb->user_data; - do_display(1, info); + do_display(0, 1, info); vpi_printf("\n"); @@ -294,7 +299,7 @@ static vpiHandle *monitor_callbacks = 0; static int monitor_cb_2(p_cb_data cb) { - do_display(1, &monitor_info); + do_display(0, 1, &monitor_info); vpi_printf("\n"); monitor_scheduled = 0; return 0; @@ -460,7 +465,7 @@ static int sys_fdisplay_calltf(char *name) mcd = value.value.integer; array_from_iterator(&info, argv); - do_display(mcd, &info); + do_display(0, mcd, &info); free(info.items); if (strcmp(name,"$fdisplay") == 0) @@ -576,6 +581,13 @@ void sys_display_register() /* * $Log: sys_display.c,v $ + * Revision 1.18 2000/10/28 00:51:42 steve + * Add scope to threads in vvm, pass that scope + * to vpi sysTaskFunc objects, and add vpi calls + * to access that information. + * + * $display displays scope in %m (PR#1) + * * Revision 1.17 2000/08/20 17:49:05 steve * Clean up warnings and portability issues. * diff --git a/vpi/vpi_user.h b/vpi/vpi_user.h index 03347bb03..cb62abcee 100644 --- a/vpi/vpi_user.h +++ b/vpi/vpi_user.h @@ -19,7 +19,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #if !defined(WINNT) && !defined(macintosh) -#ident "$Id: vpi_user.h,v 1.23 2000/10/04 02:37:44 steve Exp $" +#ident "$Id: vpi_user.h,v 1.24 2000/10/28 00:51:42 steve Exp $" #endif @@ -137,6 +137,7 @@ typedef struct t_vpi_value { #define vpiSysTaskCall 57 #define vpiTask 59 #define vpiTimeVar 63 +#define vpiScope 84 #define vpiSysTfCall 85 #define vpiArgument 89 #define vpiInternalScope 92 @@ -264,6 +265,13 @@ extern DLLEXPORT void (*vlog_startup_routines[])(); /* * $Log: vpi_user.h,v $ + * Revision 1.24 2000/10/28 00:51:42 steve + * Add scope to threads in vvm, pass that scope + * to vpi sysTaskFunc objects, and add vpi calls + * to access that information. + * + * $display displays scope in %m (PR#1) + * * Revision 1.23 2000/10/04 02:37:44 steve * Use .def file instead of _dllexport. * diff --git a/vvm/vpi_priv.c b/vvm/vpi_priv.c index 786ee4f0d..43c233b0d 100644 --- a/vvm/vpi_priv.c +++ b/vvm/vpi_priv.c @@ -17,7 +17,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #if !defined(WINNT) && !defined(macintosh) -#ident "$Id: vpi_priv.c,v 1.10 2000/10/06 23:11:39 steve Exp $" +#ident "$Id: vpi_priv.c,v 1.11 2000/10/28 00:51:42 steve Exp $" #endif # include "vpi_priv.h" @@ -44,11 +44,13 @@ static struct systf_entry*systf_task_list = 0; /* This is the handle of the task currently being called. */ static struct __vpiSysTaskCall*vpip_cur_task; -void vpip_calltask(const char*fname, unsigned nparms, vpiHandle*parms) +void vpip_calltask(struct __vpiScope*scope, const char*fname, + unsigned nparms, vpiHandle*parms) { struct systf_entry*idx; struct __vpiSysTaskCall cur_task; cur_task.base.vpi_type = vpip_get_systask_rt(); + cur_task.scope = scope; cur_task.args = parms; cur_task.nargs = nparms; cur_task.res = 0; @@ -233,6 +235,13 @@ void vpi_register_systf(const struct t_vpi_systf_data*systf) /* * $Log: vpi_priv.c,v $ + * Revision 1.11 2000/10/28 00:51:42 steve + * Add scope to threads in vvm, pass that scope + * to vpi sysTaskFunc objects, and add vpi calls + * to access that information. + * + * $display displays scope in %m (PR#1) + * * Revision 1.10 2000/10/06 23:11:39 steve * Replace data references with function calls. (Venkat) * diff --git a/vvm/vpi_priv.h b/vvm/vpi_priv.h index 034ffcdba..0a1a4edca 100644 --- a/vvm/vpi_priv.h +++ b/vvm/vpi_priv.h @@ -19,7 +19,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #if !defined(WINNT) && !defined(macintosh) -#ident "$Id: vpi_priv.h,v 1.28 2000/10/06 23:11:39 steve Exp $" +#ident "$Id: vpi_priv.h,v 1.29 2000/10/28 00:51:42 steve Exp $" #endif /* @@ -247,6 +247,8 @@ extern const struct __vpirt *vpip_get_sysfunc_rt(void); struct __vpiSysTaskCall { struct __vpiHandle base; + struct __vpiScope*scope; + s_vpi_systf_data*info; vpiHandle*args; unsigned nargs; @@ -313,7 +315,8 @@ extern vpiHandle vpip_make_time_var(struct __vpiTimeVar*ref, const char*val); /* Use this function to call a registered task. */ -extern void vpip_calltask(const char*name, unsigned nparms, vpiHandle*parms); +extern void vpip_calltask(struct __vpiScope*scope, const char*name, + unsigned nparms, vpiHandle*parms); /* * This calls a system function with a given name. The return value is @@ -389,6 +392,13 @@ extern int vpip_finished(); /* * $Log: vpi_priv.h,v $ + * Revision 1.29 2000/10/28 00:51:42 steve + * Add scope to threads in vvm, pass that scope + * to vpi sysTaskFunc objects, and add vpi calls + * to access that information. + * + * $display displays scope in %m (PR#1) + * * Revision 1.28 2000/10/06 23:11:39 steve * Replace data references with function calls. (Venkat) * diff --git a/vvm/vpi_scope.c b/vvm/vpi_scope.c index c5da6adeb..22ec7b502 100644 --- a/vvm/vpi_scope.c +++ b/vvm/vpi_scope.c @@ -17,13 +17,30 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #if !defined(WINNT) && !defined(macintosh) -#ident "$Id: vpi_scope.c,v 1.7 2000/05/03 05:03:26 steve Exp $" +#ident "$Id: vpi_scope.c,v 1.8 2000/10/28 00:51:42 steve Exp $" #endif # include "vpi_priv.h" # include # include +static char* scope_get_str(int code, vpiHandle obj) +{ + struct __vpiScope*ref = (struct __vpiScope*)obj; + + + assert((obj->vpi_type->type_code == vpiModule) + || (obj->vpi_type->type_code == vpiNamedBegin)); + + switch (code) { + case vpiFullName: + return ref->name; + default: + assert(0); + return 0; + } +} + static vpiHandle module_iter(int code, vpiHandle obj) { struct __vpiScope*ref = (struct __vpiScope*)obj; @@ -40,7 +57,7 @@ static vpiHandle module_iter(int code, vpiHandle obj) static const struct __vpirt vpip_module_rt = { vpiModule, 0, - 0, + scope_get_str, 0, 0, 0, @@ -50,7 +67,7 @@ static const struct __vpirt vpip_module_rt = { static const struct __vpirt vpip_task_rt = { vpiTask, 0, - 0, + scope_get_str, 0, 0, 0, @@ -60,7 +77,7 @@ static const struct __vpirt vpip_task_rt = { static const struct __vpirt vpip_function_rt = { vpiFunction, 0, - 0, + scope_get_str, 0, 0, 0, @@ -70,7 +87,7 @@ static const struct __vpirt vpip_function_rt = { static const struct __vpirt vpip_named_begin_rt = { vpiNamedBegin, 0, - 0, + scope_get_str, 0, 0, 0, @@ -91,6 +108,7 @@ vpiHandle vpip_make_scope(struct __vpiScope*ref, int type, const char*name) { ref->intern = 0; ref->nintern = 0; + ref->name = name; switch (type) { case vpiModule: @@ -129,6 +147,13 @@ void vpip_attach_to_scope(struct __vpiScope*ref, vpiHandle obj) /* * $Log: vpi_scope.c,v $ + * Revision 1.8 2000/10/28 00:51:42 steve + * Add scope to threads in vvm, pass that scope + * to vpi sysTaskFunc objects, and add vpi calls + * to access that information. + * + * $display displays scope in %m (PR#1) + * * Revision 1.7 2000/05/03 05:03:26 steve * Support named for in VPI. * diff --git a/vvm/vpi_systask.c b/vvm/vpi_systask.c index 189a693ff..c9ca8e592 100644 --- a/vvm/vpi_systask.c +++ b/vvm/vpi_systask.c @@ -17,13 +17,28 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #if !defined(WINNT) && !defined(macintosh) -#ident "$Id: vpi_systask.c,v 1.7 2000/10/06 23:11:39 steve Exp $" +#ident "$Id: vpi_systask.c,v 1.8 2000/10/28 00:51:42 steve Exp $" #endif # include "vpi_priv.h" # include # include +static vpiHandle systask_handle(int type, vpiHandle ref) +{ + struct __vpiSysTaskCall*rfp = (struct __vpiSysTaskCall*)ref; + assert((ref->vpi_type->type_code == vpiSysTaskCall) + || (ref->vpi_type->type_code == vpiSysFuncCall)); + + switch (type) { + case vpiScope: + return &rfp->scope->base; + default: + assert(0); + return 0; + } +} + /* * the iter function only supports getting an iterator of the * arguments. This works equally well for tasks and functions. @@ -46,7 +61,7 @@ static const struct __vpirt vpip_systask_rt = { 0, 0, 0, - 0, + systask_handle, systask_iter }; @@ -108,6 +123,13 @@ DECLARE_CYGWIN_DLL(DllMain); /* * $Log: vpi_systask.c,v $ + * Revision 1.8 2000/10/28 00:51:42 steve + * Add scope to threads in vvm, pass that scope + * to vpi sysTaskFunc objects, and add vpi calls + * to access that information. + * + * $display displays scope in %m (PR#1) + * * Revision 1.7 2000/10/06 23:11:39 steve * Replace data references with function calls. (Venkat) * diff --git a/vvm/vvm_thread.cc b/vvm/vvm_thread.cc index a371a1fe9..dbf1c864b 100644 --- a/vvm/vvm_thread.cc +++ b/vvm/vvm_thread.cc @@ -17,7 +17,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #if !defined(WINNT) && !defined(macintosh) -#ident "$Id: vvm_thread.cc,v 1.6 2000/04/14 23:31:53 steve Exp $" +#ident "$Id: vvm_thread.cc,v 1.7 2000/10/28 00:51:42 steve Exp $" #endif # include "vvm.h" @@ -30,7 +30,7 @@ class delay_event : public vvm_event { delay_event(vvm_thread*thr) : thr_(thr) { } void event_function() { - while (thr_->go()) + while (thr_->step_(thr_)) /* empty */; } private: @@ -55,14 +55,16 @@ void vvm_thread::thread_yield(unsigned long delay) ev -> schedule(delay); } -bool vvm_thread::go() -{ - return (step_)(this); -} - /* * $Log: vvm_thread.cc,v $ + * Revision 1.7 2000/10/28 00:51:42 steve + * Add scope to threads in vvm, pass that scope + * to vpi sysTaskFunc objects, and add vpi calls + * to access that information. + * + * $display displays scope in %m (PR#1) + * * Revision 1.6 2000/04/14 23:31:53 steve * No more class derivation from vvm_thread. * diff --git a/vvm/vvm_thread.h b/vvm/vvm_thread.h index 30da79949..97d0045fd 100644 --- a/vvm/vvm_thread.h +++ b/vvm/vvm_thread.h @@ -19,7 +19,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #if !defined(WINNT) && !defined(macintosh) -#ident "$Id: vvm_thread.h,v 1.9 2000/04/15 19:51:30 steve Exp $" +#ident "$Id: vvm_thread.h,v 1.10 2000/10/28 00:51:42 steve Exp $" #endif # include "vvm.h" @@ -80,7 +80,6 @@ class vvm_thread { // This method executes a setp of the thread. The engine will // continue to call go as long as it returns true. The thread // will return false if it is ready to give up the CPU. - bool go(); bool (*step_)(vvm_thread*); // These members are used to handle task invocations. @@ -91,10 +90,19 @@ class vvm_thread { // The sync class uses this to list all the threads blocked on it. vvm_sync*sync_back_; vvm_thread*sync_next_; + + struct __vpiScope*scope; }; /* * $Log: vvm_thread.h,v $ + * Revision 1.10 2000/10/28 00:51:42 steve + * Add scope to threads in vvm, pass that scope + * to vpi sysTaskFunc objects, and add vpi calls + * to access that information. + * + * $display displays scope in %m (PR#1) + * * Revision 1.9 2000/04/15 19:51:30 steve * fork-join support in vvm. *