Handle bit select of parameter with ranges.

This commit is contained in:
steve 2005-11-27 05:56:20 +00:00
parent bab70ccbed
commit 908955c72c
10 changed files with 141 additions and 103 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
*/ */
#ifdef HAVE_CVS_IDENT #ifdef HAVE_CVS_IDENT
#ident "$Id: PExpr.h,v 1.72 2005/11/10 13:28:11 steve Exp $" #ident "$Id: PExpr.h,v 1.73 2005/11/27 05:56:20 steve Exp $"
#endif #endif
# include <string> # include <string>
@ -255,7 +255,9 @@ class PEIdent : public PExpr {
NetExpr*elaborate_expr_param(Design*des, NetExpr*elaborate_expr_param(Design*des,
NetScope*scope, NetScope*scope,
const NetExpr*par, const NetExpr*par,
NetScope*found) const; NetScope*found,
const NetExpr*par_msb,
const NetExpr*par_lsb) const;
NetExpr*elaborate_expr_net(Design*des, NetExpr*elaborate_expr_net(Design*des,
NetScope*scope, NetScope*scope,
NetNet*net, NetNet*net,
@ -543,6 +545,9 @@ class PECallFunction : public PExpr {
/* /*
* $Log: PExpr.h,v $ * $Log: PExpr.h,v $
* Revision 1.73 2005/11/27 05:56:20 steve
* Handle bit select of parameter with ranges.
*
* Revision 1.72 2005/11/10 13:28:11 steve * Revision 1.72 2005/11/10 13:28:11 steve
* Reorganize signal part select handling, and add support for * Reorganize signal part select handling, and add support for
* indexed part selects. * indexed part selects.

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: elab_expr.cc,v 1.100 2005/11/14 22:11:52 steve Exp $" #ident "$Id: elab_expr.cc,v 1.101 2005/11/27 05:56:20 steve Exp $"
#endif #endif
# include "config.h" # include "config.h"
@ -493,13 +493,16 @@ NetExpr* PEIdent::elaborate_expr(Design*des, NetScope*scope,
const NetExpr*par = 0; const NetExpr*par = 0;
NetEvent* eve = 0; NetEvent* eve = 0;
const NetExpr*ex1, *ex2;
NetScope*found_in = symbol_search(des, scope, path_, NetScope*found_in = symbol_search(des, scope, path_,
net, mem, par, eve); net, mem, par, eve,
ex1, ex2);
// If the identifier name is a parameter name, then return // If the identifier name is a parameter name, then return
// a reference to the parameter expression. // a reference to the parameter expression.
if (par != 0) if (par != 0)
return elaborate_expr_param(des, scope, par, found_in); return elaborate_expr_param(des, scope, par, found_in, ex1, ex2);
// If the identifier names a signal (a register or wire) // If the identifier names a signal (a register or wire)
@ -592,10 +595,17 @@ NetExpr* PEIdent::elaborate_expr(Design*des, NetScope*scope,
return 0; return 0;
} }
/*
* Handle the case that the identifier is a parameter reference. The
* parameter expression has already been located for us (as the par
* argument) so we just need to process the sub-expression.
*/
NetExpr* PEIdent::elaborate_expr_param(Design*des, NetExpr* PEIdent::elaborate_expr_param(Design*des,
NetScope*scope, NetScope*scope,
const NetExpr*par, const NetExpr*par,
NetScope*found_in) const NetScope*found_in,
const NetExpr*par_msb,
const NetExpr*par_lsb) const
{ {
NetExpr*tmp; NetExpr*tmp;
@ -604,7 +614,7 @@ NetExpr* PEIdent::elaborate_expr_param(Design*des,
if (sel_ == SEL_PART) { if (sel_ == SEL_PART) {
assert(msb_ && lsb_); assert(msb_ && lsb_);
/* If the parameter has a part select, we support /* If the identifier has a part select, we support
it by pulling the right bits out and making a it by pulling the right bits out and making a
sized unsigned constant. This code assumes the sized unsigned constant. This code assumes the
lsb of a parameter is 0 and the msb is the lsb of a parameter is 0 and the msb is the
@ -700,7 +710,10 @@ NetExpr* PEIdent::elaborate_expr_param(Design*des,
tmp = new NetESelect(tmp, idx_ex, wid); tmp = new NetESelect(tmp, idx_ex, wid);
} else if (msb_) { } else if (sel_ == SEL_BIT) {
assert(msb_);
assert(!lsb_);
/* Handle the case where a parameter has a bit /* Handle the case where a parameter has a bit
select attached to it. Generate a NetESelect select attached to it. Generate a NetESelect
object to select the bit as desired. */ object to select the bit as desired. */
@ -722,6 +735,8 @@ NetExpr* PEIdent::elaborate_expr_param(Design*des,
NetEConst*re = dynamic_cast<NetEConst*>(mtmp); NetEConst*re = dynamic_cast<NetEConst*>(mtmp);
if (le && re) { if (le && re) {
/* Argument and bit select are constant. Calculate
the final result. */
verinum lv = le->value(); verinum lv = le->value();
verinum rv = re->value(); verinum rv = re->value();
verinum::V rb = verinum::Vx; verinum::V rb = verinum::Vx;
@ -744,6 +759,31 @@ NetExpr* PEIdent::elaborate_expr_param(Design*des,
} else { } else {
const NetEConst*par_me =dynamic_cast<const NetEConst*>(par_msb);
const NetEConst*par_le =dynamic_cast<const NetEConst*>(par_lsb);
assert(par_me || !par_msb);
assert(par_le || !par_lsb);
assert(par_me || !par_le);
if (par_me) {
long par_mv = par_me->value().as_long();
long par_lv = par_le->value().as_long();
if (par_mv >= par_lv) {
mtmp = par_lv
? make_add_expr(mtmp, 0-par_lv)
: mtmp;
} else {
if (par_lv != 0)
mtmp = make_add_expr(mtmp, 0-par_mv);
mtmp = make_sub_expr(par_lv-par_mv, mtmp);
}
}
/* The value is constant, but the bit select
expression is not. Elaborate a NetESelect to
evaluate the select at run-time. */
NetESelect*stmp = new NetESelect(tmp, mtmp, 1); NetESelect*stmp = new NetESelect(tmp, mtmp, 1);
tmp->set_line(*this); tmp->set_line(*this);
tmp = stmp; tmp = stmp;
@ -1228,6 +1268,9 @@ NetExpr* PEUnary::elaborate_expr(Design*des, NetScope*scope, bool) const
/* /*
* $Log: elab_expr.cc,v $ * $Log: elab_expr.cc,v $
* Revision 1.101 2005/11/27 05:56:20 steve
* Handle bit select of parameter with ranges.
*
* Revision 1.100 2005/11/14 22:11:52 steve * Revision 1.100 2005/11/14 22:11:52 steve
* Fix compile warning. * Fix compile warning.
* *

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: elab_pexpr.cc,v 1.21 2004/02/20 06:22:56 steve Exp $" #ident "$Id: elab_pexpr.cc,v 1.22 2005/11/27 05:56:20 steve Exp $"
#endif #endif
# include "config.h" # include "config.h"
@ -140,7 +140,9 @@ NetExpr*PEIdent::elaborate_pexpr(Design*des, NetScope*scope) const
perm_string perm_name = lex_strings.make(name); perm_string perm_name = lex_strings.make(name);
delete name; delete name;
const NetExpr*ex = pscope->get_parameter(perm_name); const NetExpr*ex_msb;
const NetExpr*ex_lsb;
const NetExpr*ex = pscope->get_parameter(perm_name, ex_msb, ex_lsb);
if (ex == 0) { if (ex == 0) {
cerr << get_line() << ": error: identifier ``" << path_ << cerr << get_line() << ": error: identifier ``" << path_ <<
"'' is not a parameter in " << scope->name() << "." << endl; "'' is not a parameter in " << scope->name() << "." << endl;
@ -231,6 +233,9 @@ NetExpr*PEUnary::elaborate_pexpr (Design*des, NetScope*scope) const
/* /*
* $Log: elab_pexpr.cc,v $ * $Log: elab_pexpr.cc,v $
* Revision 1.22 2005/11/27 05:56:20 steve
* Handle bit select of parameter with ranges.
*
* Revision 1.21 2004/02/20 06:22:56 steve * Revision 1.21 2004/02/20 06:22:56 steve
* parameter keys are per_strings. * parameter keys are per_strings.
* *

14
eval.cc
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: eval.cc,v 1.36 2003/06/21 01:21:43 steve Exp $" #ident "$Id: eval.cc,v 1.37 2005/11/27 05:56:20 steve Exp $"
#endif #endif
# include "config.h" # include "config.h"
@ -26,6 +26,7 @@
# include "PExpr.h" # include "PExpr.h"
# include "netlist.h" # include "netlist.h"
# include "netmisc.h"
# include "compiler.h" # include "compiler.h"
verinum* PExpr::eval_const(const Design*, const NetScope*) const verinum* PExpr::eval_const(const Design*, const NetScope*) const
@ -151,7 +152,13 @@ verinum* PEBinary::eval_const(const Design*des, const NetScope*scope) const
verinum* PEIdent::eval_const(const Design*des, const NetScope*scope) const verinum* PEIdent::eval_const(const Design*des, const NetScope*scope) const
{ {
assert(scope); assert(scope);
const NetExpr*expr = des->find_parameter(scope, path_); //const NetExpr*expr = des->find_parameter(scope, path_);
NetNet*net;
NetMemory*mem;
NetEvent*eve;
const NetExpr*expr;
NetScope*found_in = symbol_search(des, scope, path_,
net, mem, expr, eve);
if (expr == 0) if (expr == 0)
return 0; return 0;
@ -240,6 +247,9 @@ verinum* PEUnary::eval_const(const Design*des, const NetScope*scope) const
/* /*
* $Log: eval.cc,v $ * $Log: eval.cc,v $
* Revision 1.37 2005/11/27 05:56:20 steve
* Handle bit select of parameter with ranges.
*
* Revision 1.36 2003/06/21 01:21:43 steve * Revision 1.36 2003/06/21 01:21:43 steve
* Harmless fixup of warnings. * Harmless fixup of warnings.
* *

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: eval_tree.cc,v 1.66 2005/11/10 13:28:12 steve Exp $" #ident "$Id: eval_tree.cc,v 1.67 2005/11/27 05:56:20 steve Exp $"
#endif #endif
# include "config.h" # include "config.h"
@ -1171,7 +1171,9 @@ NetExpr* NetEParam::eval_tree()
return 0; return 0;
assert(scope_); assert(scope_);
const NetExpr*expr = scope_->get_parameter(name_); const NetExpr*expr_msb;
const NetExpr*expr_lsb;
const NetExpr*expr = scope_->get_parameter(name_, expr_msb, expr_lsb);
if (expr == 0) { if (expr == 0) {
cerr << get_line() << ": internal error: Unable to match " cerr << get_line() << ": internal error: Unable to match "
<< "parameter " << name_ << " in scope " << "parameter " << name_ << " in scope "
@ -1599,6 +1601,9 @@ NetEConst* NetEUReduce::eval_tree()
/* /*
* $Log: eval_tree.cc,v $ * $Log: eval_tree.cc,v $
* Revision 1.67 2005/11/27 05:56:20 steve
* Handle bit select of parameter with ranges.
*
* Revision 1.66 2005/11/10 13:28:12 steve * Revision 1.66 2005/11/10 13:28:12 steve
* Reorganize signal part select handling, and add support for * Reorganize signal part select handling, and add support for
* indexed part selects. * indexed part selects.

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: net_design.cc,v 1.47 2005/09/14 02:53:14 steve Exp $" #ident "$Id: net_design.cc,v 1.48 2005/11/27 05:56:20 steve Exp $"
#endif #endif
# include "config.h" # include "config.h"
@ -173,71 +173,6 @@ NetScope* Design::find_scope(NetScope*scope, const hname_t&path) const
return find_scope(path); return find_scope(path);
} }
/*
* Find a parameter from within a specified context. If the name is
* not here, keep looking up until I run out of up to look at. The
* method works by scanning scopes, starting with the passed scope and
* working up towards the root, looking for the named parameter. The
* name in this case can be hierarchical, so there is an inner loop to
* follow the scopes of the name down to to key.
*
* The expression value of the parameter is returned as the result,
* and the scope that contains the parameter is returned in the out
* argument found_in.
*/
const NetExpr* Design::find_parameter(NetScope*scope,
const hname_t&path,
NetScope*&found_in) const
{
for ( ; scope ; scope = scope->parent()) {
unsigned hidx = 0;
NetScope*cur = scope;
while (path.peek_name(hidx+1)) {
cur = cur->child(path.peek_name(hidx));
if (cur == 0)
break;
hidx += 1;
}
if (cur == 0)
continue;
if (const NetExpr*res = cur->get_parameter(path.peek_name(hidx))) {
found_in = cur;
return res;
}
}
return 0;
}
const NetExpr* Design::find_parameter(const NetScope*scope,
const hname_t&path) const
{
for ( ; scope ; scope = scope->parent()) {
unsigned hidx = 0;
const NetScope*cur = scope;
while (path.peek_name(hidx+1)) {
cur = cur->child(path.peek_name(hidx));
if (cur == 0)
break;
hidx += 1;
}
if (cur == 0)
continue;
if (const NetExpr*res = cur->get_parameter(path.peek_name(hidx)))
return res;
}
return 0;
}
/* /*
* This method runs through the scope, noticing the defparam * This method runs through the scope, noticing the defparam
* statements that were collected during the elaborate_scope pass and * statements that were collected during the elaborate_scope pass and
@ -619,6 +554,9 @@ void Design::delete_process(NetProcTop*top)
/* /*
* $Log: net_design.cc,v $ * $Log: net_design.cc,v $
* Revision 1.48 2005/11/27 05:56:20 steve
* Handle bit select of parameter with ranges.
*
* Revision 1.47 2005/09/14 02:53:14 steve * Revision 1.47 2005/09/14 02:53:14 steve
* Support bool expressions and compares handle them optimally. * Support bool expressions and compares handle them optimally.
* *

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: net_scope.cc,v 1.34 2005/07/11 16:56:50 steve Exp $" #ident "$Id: net_scope.cc,v 1.35 2005/11/27 05:56:20 steve Exp $"
#endif #endif
# include "config.h" # include "config.h"
@ -132,17 +132,25 @@ NetExpr* NetScope::set_localparam(perm_string key, NetExpr*expr)
* perm_string::literal method to fake the compiler into doing the * perm_string::literal method to fake the compiler into doing the
* compare without actually creating a perm_string. * compare without actually creating a perm_string.
*/ */
const NetExpr* NetScope::get_parameter(const char* key) const const NetExpr* NetScope::get_parameter(const char* key,
const NetExpr*&msb,
const NetExpr*&lsb) const
{ {
map<perm_string,param_expr_t>::const_iterator idx; map<perm_string,param_expr_t>::const_iterator idx;
idx = parameters.find(perm_string::literal(key)); idx = parameters.find(perm_string::literal(key));
if (idx != parameters.end()) if (idx != parameters.end()) {
msb = (*idx).second.msb;
lsb = (*idx).second.lsb;
return (*idx).second.expr; return (*idx).second.expr;
}
idx = localparams.find(perm_string::literal(key)); idx = localparams.find(perm_string::literal(key));
if (idx != localparams.end()) if (idx != localparams.end()) {
msb = (*idx).second.msb;
lsb = (*idx).second.lsb;
return (*idx).second.expr; return (*idx).second.expr;
}
return 0; return 0;
} }
@ -449,6 +457,9 @@ string NetScope::local_hsymbol()
/* /*
* $Log: net_scope.cc,v $ * $Log: net_scope.cc,v $
* Revision 1.35 2005/11/27 05:56:20 steve
* Handle bit select of parameter with ranges.
*
* Revision 1.34 2005/07/11 16:56:50 steve * Revision 1.34 2005/07/11 16:56:50 steve
* Remove NetVariable and ivl_variable_t structures. * Remove NetVariable and ivl_variable_t structures.
* *

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
*/ */
#ifdef HAVE_CVS_IDENT #ifdef HAVE_CVS_IDENT
#ident "$Id: netlist.h,v 1.352 2005/11/26 00:35:43 steve Exp $" #ident "$Id: netlist.h,v 1.353 2005/11/27 05:56:20 steve Exp $"
#endif #endif
/* /*
@ -3146,7 +3146,10 @@ class NetScope : public Attrib {
NetExpr* set_parameter(perm_string name, NetExpr*val, NetExpr* set_parameter(perm_string name, NetExpr*val,
NetExpr*msb, NetExpr*lsb, bool signed_flag); NetExpr*msb, NetExpr*lsb, bool signed_flag);
NetExpr* set_localparam(perm_string name, NetExpr*val); NetExpr* set_localparam(perm_string name, NetExpr*val);
const NetExpr*get_parameter(const char* name) const;
const NetExpr*get_parameter(const char* name,
const NetExpr*&msb,
const NetExpr*&lsb) const;
/* These are used by defparam elaboration to replace the /* These are used by defparam elaboration to replace the
expression with a new expression, without affecting the expression with a new expression, without affecting the
@ -3344,16 +3347,6 @@ class Design {
// PARAMETERS // PARAMETERS
/* This method searches for a parameter, starting in the given
scope. This method handles the upward searches that the
NetScope class itself does not support.
The scope of the located expression is stored in the
found_in argument. */
const NetExpr*find_parameter( NetScope*, const hname_t&path,
NetScope*&found_in) const;
const NetExpr*find_parameter( const NetScope*, const hname_t&path) const;
void run_defparams(); void run_defparams();
void evaluate_parameters(); void evaluate_parameters();
@ -3458,6 +3451,9 @@ extern ostream& operator << (ostream&, NetNet::Type);
/* /*
* $Log: netlist.h,v $ * $Log: netlist.h,v $
* Revision 1.353 2005/11/27 05:56:20 steve
* Handle bit select of parameter with ranges.
*
* Revision 1.352 2005/11/26 00:35:43 steve * Revision 1.352 2005/11/26 00:35:43 steve
* More precise about r-value width of constants. * More precise about r-value width of constants.
* *

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
*/ */
#ifdef HAVE_CVS_IDENT #ifdef HAVE_CVS_IDENT
#ident "$Id: netmisc.h,v 1.23 2005/07/11 16:56:51 steve Exp $" #ident "$Id: netmisc.h,v 1.24 2005/11/27 05:56:20 steve Exp $"
#endif #endif
# include "netlist.h" # include "netlist.h"
@ -33,12 +33,30 @@
* If the symbol was not found, return 0. The output arguments * If the symbol was not found, return 0. The output arguments
* get 0 except for the pointer to the object that represents * get 0 except for the pointer to the object that represents
* the located symbol. * the located symbol.
*
* The ex1 and ex2 output arguments are extended results. If the
* symbol is a parameter (par!=0) then ex1 is the msb expression and
* ex2 is the lsb expression for the range. If there is no range, then
* these values are set to 0.
*/ */
extern NetScope* symbol_search(Design*des, NetScope*start, hname_t path, extern NetScope* symbol_search(const Design*des,
NetScope*start, hname_t path,
NetNet*&net, /* net/reg */ NetNet*&net, /* net/reg */
NetMemory*&mem, /* memory */ NetMemory*&mem, /* memory */
const NetExpr*&par,/* parameter */ const NetExpr*&par,/* parameter */
NetEvent*&eve /* named event */); NetEvent*&eve, /* named event */
const NetExpr*&ex1, const NetExpr*&ex2);
inline NetScope* symbol_search(const Design*des,
NetScope*start, const hname_t&path,
NetNet*&net, /* net/reg */
NetMemory*&mem, /* memory */
const NetExpr*&par,/* parameter */
NetEvent*&eve /* named event */)
{
const NetExpr*ex1, *ex2;
return symbol_search(des, start, path, net, mem, par, eve, ex1, ex2);
}
/* /*
* This function transforms an expression by padding the high bits * This function transforms an expression by padding the high bits
@ -100,6 +118,9 @@ extern NetExpr* elab_and_eval(Design*des, NetScope*scope, const PExpr*pe);
/* /*
* $Log: netmisc.h,v $ * $Log: netmisc.h,v $
* Revision 1.24 2005/11/27 05:56:20 steve
* Handle bit select of parameter with ranges.
*
* Revision 1.23 2005/07/11 16:56:51 steve * Revision 1.23 2005/07/11 16:56:51 steve
* Remove NetVariable and ivl_variable_t structures. * Remove NetVariable and ivl_variable_t structures.
* *

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: symbol_search.cc,v 1.2 2005/07/11 16:56:51 steve Exp $" #ident "$Id: symbol_search.cc,v 1.3 2005/11/27 05:56:20 steve Exp $"
#endif #endif
# include "netlist.h" # include "netlist.h"
@ -27,11 +27,12 @@
/* /*
* Search for the hierarchical name. * Search for the hierarchical name.
*/ */
NetScope*symbol_search(Design*des, NetScope*scope, hname_t path, NetScope*symbol_search(const Design*des, NetScope*scope, hname_t path,
NetNet*&net, NetNet*&net,
NetMemory*&mem, NetMemory*&mem,
const NetExpr*&par, const NetExpr*&par,
NetEvent*&eve) NetEvent*&eve,
const NetExpr*&ex1, const NetExpr*&ex2)
{ {
assert(scope); assert(scope);
@ -65,7 +66,7 @@ NetScope*symbol_search(Design*des, NetScope*scope, hname_t path,
return scope; return scope;
} }
if ( (par = scope->get_parameter(key)) ) { if ( (par = scope->get_parameter(key, ex1, ex2)) ) {
delete key; delete key;
return scope; return scope;
} }
@ -82,6 +83,9 @@ NetScope*symbol_search(Design*des, NetScope*scope, hname_t path,
/* /*
* $Log: symbol_search.cc,v $ * $Log: symbol_search.cc,v $
* Revision 1.3 2005/11/27 05:56:20 steve
* Handle bit select of parameter with ranges.
*
* Revision 1.2 2005/07/11 16:56:51 steve * Revision 1.2 2005/07/11 16:56:51 steve
* Remove NetVariable and ivl_variable_t structures. * Remove NetVariable and ivl_variable_t structures.
* *