Handle bit select of parameter with ranges.
This commit is contained in:
parent
bab70ccbed
commit
908955c72c
9
PExpr.h
9
PExpr.h
|
|
@ -19,7 +19,7 @@
|
|||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
||||
*/
|
||||
#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
|
||||
|
||||
# include <string>
|
||||
|
|
@ -255,7 +255,9 @@ class PEIdent : public PExpr {
|
|||
NetExpr*elaborate_expr_param(Design*des,
|
||||
NetScope*scope,
|
||||
const NetExpr*par,
|
||||
NetScope*found) const;
|
||||
NetScope*found,
|
||||
const NetExpr*par_msb,
|
||||
const NetExpr*par_lsb) const;
|
||||
NetExpr*elaborate_expr_net(Design*des,
|
||||
NetScope*scope,
|
||||
NetNet*net,
|
||||
|
|
@ -543,6 +545,9 @@ class PECallFunction : public PExpr {
|
|||
|
||||
/*
|
||||
* $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
|
||||
* Reorganize signal part select handling, and add support for
|
||||
* indexed part selects.
|
||||
|
|
|
|||
55
elab_expr.cc
55
elab_expr.cc
|
|
@ -17,7 +17,7 @@
|
|||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
||||
*/
|
||||
#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
|
||||
|
||||
# include "config.h"
|
||||
|
|
@ -493,13 +493,16 @@ NetExpr* PEIdent::elaborate_expr(Design*des, NetScope*scope,
|
|||
const NetExpr*par = 0;
|
||||
NetEvent* eve = 0;
|
||||
|
||||
const NetExpr*ex1, *ex2;
|
||||
|
||||
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
|
||||
// a reference to the parameter expression.
|
||||
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)
|
||||
|
|
@ -592,10 +595,17 @@ NetExpr* PEIdent::elaborate_expr(Design*des, NetScope*scope,
|
|||
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,
|
||||
NetScope*scope,
|
||||
const NetExpr*par,
|
||||
NetScope*found_in) const
|
||||
NetScope*found_in,
|
||||
const NetExpr*par_msb,
|
||||
const NetExpr*par_lsb) const
|
||||
{
|
||||
NetExpr*tmp;
|
||||
|
||||
|
|
@ -604,7 +614,7 @@ NetExpr* PEIdent::elaborate_expr_param(Design*des,
|
|||
if (sel_ == SEL_PART) {
|
||||
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
|
||||
sized unsigned constant. This code assumes 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);
|
||||
|
||||
|
||||
} else if (msb_) {
|
||||
} else if (sel_ == SEL_BIT) {
|
||||
assert(msb_);
|
||||
assert(!lsb_);
|
||||
|
||||
/* Handle the case where a parameter has a bit
|
||||
select attached to it. Generate a NetESelect
|
||||
object to select the bit as desired. */
|
||||
|
|
@ -722,6 +735,8 @@ NetExpr* PEIdent::elaborate_expr_param(Design*des,
|
|||
NetEConst*re = dynamic_cast<NetEConst*>(mtmp);
|
||||
if (le && re) {
|
||||
|
||||
/* Argument and bit select are constant. Calculate
|
||||
the final result. */
|
||||
verinum lv = le->value();
|
||||
verinum rv = re->value();
|
||||
verinum::V rb = verinum::Vx;
|
||||
|
|
@ -744,6 +759,31 @@ NetExpr* PEIdent::elaborate_expr_param(Design*des,
|
|||
|
||||
} 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);
|
||||
tmp->set_line(*this);
|
||||
tmp = stmp;
|
||||
|
|
@ -1228,6 +1268,9 @@ NetExpr* PEUnary::elaborate_expr(Design*des, NetScope*scope, bool) const
|
|||
|
||||
/*
|
||||
* $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
|
||||
* Fix compile warning.
|
||||
*
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@
|
|||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
||||
*/
|
||||
#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
|
||||
|
||||
# include "config.h"
|
||||
|
|
@ -140,7 +140,9 @@ NetExpr*PEIdent::elaborate_pexpr(Design*des, NetScope*scope) const
|
|||
perm_string perm_name = lex_strings.make(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) {
|
||||
cerr << get_line() << ": error: identifier ``" << path_ <<
|
||||
"'' 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 $
|
||||
* 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
|
||||
* parameter keys are per_strings.
|
||||
*
|
||||
|
|
|
|||
14
eval.cc
14
eval.cc
|
|
@ -17,7 +17,7 @@
|
|||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
||||
*/
|
||||
#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
|
||||
|
||||
# include "config.h"
|
||||
|
|
@ -26,6 +26,7 @@
|
|||
|
||||
# include "PExpr.h"
|
||||
# include "netlist.h"
|
||||
# include "netmisc.h"
|
||||
# include "compiler.h"
|
||||
|
||||
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
|
||||
{
|
||||
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)
|
||||
return 0;
|
||||
|
|
@ -240,6 +247,9 @@ verinum* PEUnary::eval_const(const Design*des, const NetScope*scope) const
|
|||
|
||||
/*
|
||||
* $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
|
||||
* Harmless fixup of warnings.
|
||||
*
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@
|
|||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
||||
*/
|
||||
#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
|
||||
|
||||
# include "config.h"
|
||||
|
|
@ -1171,7 +1171,9 @@ NetExpr* NetEParam::eval_tree()
|
|||
return 0;
|
||||
|
||||
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) {
|
||||
cerr << get_line() << ": internal error: Unable to match "
|
||||
<< "parameter " << name_ << " in scope "
|
||||
|
|
@ -1599,6 +1601,9 @@ NetEConst* NetEUReduce::eval_tree()
|
|||
|
||||
/*
|
||||
* $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
|
||||
* Reorganize signal part select handling, and add support for
|
||||
* indexed part selects.
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@
|
|||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
||||
*/
|
||||
#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
|
||||
|
||||
# include "config.h"
|
||||
|
|
@ -173,71 +173,6 @@ NetScope* Design::find_scope(NetScope*scope, const hname_t&path) const
|
|||
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
|
||||
* 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 $
|
||||
* 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
|
||||
* Support bool expressions and compares handle them optimally.
|
||||
*
|
||||
|
|
|
|||
19
net_scope.cc
19
net_scope.cc
|
|
@ -17,7 +17,7 @@
|
|||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
||||
*/
|
||||
#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
|
||||
|
||||
# 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
|
||||
* 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;
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
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 0;
|
||||
}
|
||||
|
|
@ -449,6 +457,9 @@ string NetScope::local_hsymbol()
|
|||
|
||||
/*
|
||||
* $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
|
||||
* Remove NetVariable and ivl_variable_t structures.
|
||||
*
|
||||
|
|
|
|||
20
netlist.h
20
netlist.h
|
|
@ -19,7 +19,7 @@
|
|||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
||||
*/
|
||||
#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
|
||||
|
||||
/*
|
||||
|
|
@ -3146,7 +3146,10 @@ class NetScope : public Attrib {
|
|||
NetExpr* set_parameter(perm_string name, NetExpr*val,
|
||||
NetExpr*msb, NetExpr*lsb, bool signed_flag);
|
||||
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
|
||||
expression with a new expression, without affecting the
|
||||
|
|
@ -3344,16 +3347,6 @@ class Design {
|
|||
|
||||
// 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 evaluate_parameters();
|
||||
|
||||
|
|
@ -3458,6 +3451,9 @@ extern ostream& operator << (ostream&, NetNet::Type);
|
|||
|
||||
/*
|
||||
* $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
|
||||
* More precise about r-value width of constants.
|
||||
*
|
||||
|
|
|
|||
27
netmisc.h
27
netmisc.h
|
|
@ -19,7 +19,7 @@
|
|||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
||||
*/
|
||||
#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
|
||||
|
||||
# include "netlist.h"
|
||||
|
|
@ -33,12 +33,30 @@
|
|||
* If the symbol was not found, return 0. The output arguments
|
||||
* get 0 except for the pointer to the object that represents
|
||||
* 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 */
|
||||
NetMemory*&mem, /* memory */
|
||||
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
|
||||
|
|
@ -100,6 +118,9 @@ extern NetExpr* elab_and_eval(Design*des, NetScope*scope, const PExpr*pe);
|
|||
|
||||
/*
|
||||
* $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
|
||||
* Remove NetVariable and ivl_variable_t structures.
|
||||
*
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@
|
|||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
||||
*/
|
||||
#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
|
||||
|
||||
# include "netlist.h"
|
||||
|
|
@ -27,11 +27,12 @@
|
|||
/*
|
||||
* 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,
|
||||
NetMemory*&mem,
|
||||
const NetExpr*&par,
|
||||
NetEvent*&eve)
|
||||
NetEvent*&eve,
|
||||
const NetExpr*&ex1, const NetExpr*&ex2)
|
||||
{
|
||||
assert(scope);
|
||||
|
||||
|
|
@ -65,7 +66,7 @@ NetScope*symbol_search(Design*des, NetScope*scope, hname_t path,
|
|||
return scope;
|
||||
}
|
||||
|
||||
if ( (par = scope->get_parameter(key)) ) {
|
||||
if ( (par = scope->get_parameter(key, ex1, ex2)) ) {
|
||||
delete key;
|
||||
return scope;
|
||||
}
|
||||
|
|
@ -82,6 +83,9 @@ NetScope*symbol_search(Design*des, NetScope*scope, hname_t path,
|
|||
|
||||
/*
|
||||
* $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
|
||||
* Remove NetVariable and ivl_variable_t structures.
|
||||
*
|
||||
|
|
|
|||
Loading…
Reference in New Issue