From b8fe10d27d4bf75064812de5e894ac0d99ad0c72 Mon Sep 17 00:00:00 2001 From: steve Date: Wed, 25 Oct 2000 05:41:24 +0000 Subject: [PATCH] Get target signal from nexus_ptr. --- ivl.def | 3 +++ ivl_target.h | 24 ++++++++++++++++++++++-- t-dll-api.cc | 32 +++++++++++++++++++++++++++++++- tgt-stub/stub.c | 29 ++++++++++++++++++++++++++++- 4 files changed, 84 insertions(+), 4 deletions(-) diff --git a/ivl.def b/ivl.def index 82d2c9e03..6d2a74523 100644 --- a/ivl.def +++ b/ivl.def @@ -34,6 +34,9 @@ ivl_nexus_name ivl_nexus_ptrs ivl_nexus_ptr +ivl_nexus_ptr_pin +ivl_nexus_ptr_sig + ivl_scope_children ivl_scope_logs ivl_scope_log diff --git a/ivl_target.h b/ivl_target.h index ee3a308a9..5710d61ce 100644 --- a/ivl_target.h +++ b/ivl_target.h @@ -19,7 +19,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #if !defined(WINNT) && !defined(macintosh) -#ident "$Id: ivl_target.h,v 1.22 2000/10/21 16:49:45 steve Exp $" +#ident "$Id: ivl_target.h,v 1.23 2000/10/25 05:41:24 steve Exp $" #endif #ifdef __cplusplus @@ -357,12 +357,28 @@ extern ivl_nexus_t ivl_lval_pin(ivl_lval_t net, unsigned idx); * * ivl_nexus_ptr * Return a nexus pointer given the nexus and an index. + * + * Once an ivl_nexus_ptr_t is selected by the ivl_nexus_ptr method, + * the properties of the pointer can be accessed by the following + * methods: + * + * ivl_nexus_ptr_pin + * This returns the pin number of the device where this nexus + * points. It is the bit within the signal or logic device that is + * connected to the nexus. + * + * ivl_nexus_ptr_sig + * If the target object is an ivl_signal_t, this method returns the + * object. If the target is not a signal, this method returns 0. */ extern const char* ivl_nexus_name(ivl_nexus_t net); extern unsigned ivl_nexus_ptrs(ivl_nexus_t net); extern ivl_nexus_ptr_t ivl_nexus_ptr(ivl_nexus_t net, unsigned idx); +extern unsigned ivl_nexus_ptr_pin(ivl_nexus_ptr_t net); +extern ivl_signal_t ivl_nexus_ptr_sig(ivl_nexus_ptr_t net); + /* SCOPE * Scopes of various sort have these properties. Use these methods to @@ -416,7 +432,8 @@ extern ivl_signal_t ivl_scope_sig(ivl_scope_t net, unsigned idx); * Signals have a name (obviously) and types. A signal may also be * signed or unsigned. */ -extern unsigned ivl_signal_pins(ivl_signal_t net); +extern ivl_nexus_t ivl_signal_pin(ivl_signal_t net, unsigned idx); +extern unsigned ivl_signal_pins(ivl_signal_t net); extern ivl_signal_port_t ivl_signal_port(ivl_signal_t net); extern ivl_signal_type_t ivl_signal_type(ivl_signal_t net); extern const char* ivl_signal_name(ivl_signal_t net); @@ -506,6 +523,9 @@ _END_DECL /* * $Log: ivl_target.h,v $ + * Revision 1.23 2000/10/25 05:41:24 steve + * Get target signal from nexus_ptr. + * * Revision 1.22 2000/10/21 16:49:45 steve * Reduce the target entry points to the target_design. * diff --git a/t-dll-api.cc b/t-dll-api.cc index 2368ac67d..7e95dab82 100644 --- a/t-dll-api.cc +++ b/t-dll-api.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-dll-api.cc,v 1.14 2000/10/18 20:04:39 steve Exp $" +#ident "$Id: t-dll-api.cc,v 1.15 2000/10/25 05:41:24 steve Exp $" #endif # include "t-dll.h" @@ -242,6 +242,21 @@ extern "C" ivl_nexus_ptr_t ivl_nexus_ptr(ivl_nexus_t net, unsigned idx) return net->ptrs_ + idx; } +extern "C" unsigned ivl_nexus_ptr_pin(ivl_nexus_ptr_t net) +{ + assert(net); + return net->pin_; +} + +extern "C" ivl_signal_t ivl_nexus_ptr_sig(ivl_nexus_ptr_t net) +{ + if (net == 0) + return 0; + if (net->type_ != __NEXUS_PTR_SIG) + return 0; + return net->l.sig; +} + extern "C" ivl_process_type_t ivl_process_type(ivl_process_t net) { return net->type_; @@ -308,6 +323,18 @@ extern "C" const char* ivl_signal_name(ivl_signal_t net) return net->name_; } +extern "C" ivl_nexus_t ivl_signal_pin(ivl_signal_t net, unsigned idx) +{ + assert(net); + assert(idx < net->width_); + if (net->width_ == 1) { + return net->n.pin_; + + } else { + return net->n.pins_[idx]; + } +} + extern "C" unsigned ivl_signal_pins(ivl_signal_t net) { return net->width_; @@ -476,6 +503,9 @@ extern "C" ivl_statement_t ivl_stmt_sub_stmt(ivl_statement_t net) /* * $Log: t-dll-api.cc,v $ + * Revision 1.15 2000/10/25 05:41:24 steve + * Get target signal from nexus_ptr. + * * Revision 1.14 2000/10/18 20:04:39 steve * Add ivl_lval_t and support for assignment l-values. * diff --git a/tgt-stub/stub.c b/tgt-stub/stub.c index 6618e5189..984c533a3 100644 --- a/tgt-stub/stub.c +++ b/tgt-stub/stub.c @@ -17,7 +17,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #if !defined(WINNT) && !defined(macintosh) -#ident "$Id: stub.c,v 1.20 2000/10/21 16:49:45 steve Exp $" +#ident "$Id: stub.c,v 1.21 2000/10/25 05:41:24 steve Exp $" #endif /* @@ -89,9 +89,11 @@ static void show_statement(ivl_statement_t net, unsigned ind) ivl_nexus_t nex = ivl_lval_pin(lval, 0); fprintf(out, "%*s{%s", ind+4, "", ivl_nexus_name(nex)); + fprintf(out, "", ivl_nexus_ptrs(nex)); for (pp = 1 ; pp < ivl_lval_pins(lval) ; pp += 1) { nex = ivl_lval_pin(lval, pp); fprintf(out, ", %s", ivl_nexus_name(nex)); + fprintf(out, "", ivl_nexus_ptrs(nex)); } fprintf(out, "}\n"); } @@ -184,6 +186,7 @@ static int show_process(ivl_process_t net) static void show_signal(ivl_signal_t net) { + unsigned pin; const char*type = "?"; const char*port = ""; @@ -213,6 +216,27 @@ static void show_signal(ivl_signal_t net) fprintf(out, " %s %s[%u] %s\n", type, port, ivl_signal_pins(net), ivl_signal_basename(net)); + + for (pin = 0 ; pin < ivl_signal_pins(net) ; pin += 1) { + unsigned idx; + ivl_nexus_t nex = ivl_signal_pin(net, pin); + + fprintf(out, " [%u]: nexus=%s\n", pin, ivl_nexus_name(nex)); + + for (idx = 0 ; idx < ivl_nexus_ptrs(nex) ; idx += 1) { + ivl_signal_t sig; + ivl_nexus_ptr_t ptr = ivl_nexus_ptr(nex, idx); + + if ((sig = ivl_nexus_ptr_sig(ptr))) { + fprintf(out, " %s[%u]\n", + ivl_signal_name(sig), + ivl_nexus_ptr_pin(ptr)); + + } else { + fprintf(out, " ?[%u]\n", ivl_nexus_ptr_pin(ptr)); + } + } + } } static void show_logic(ivl_net_logic_t net) @@ -301,6 +325,9 @@ DECLARE_CYGWIN_DLL(DllMain); /* * $Log: stub.c,v $ + * Revision 1.21 2000/10/25 05:41:24 steve + * Get target signal from nexus_ptr. + * * Revision 1.20 2000/10/21 16:49:45 steve * Reduce the target entry points to the target_design. *