Add ivl_parameter_width() function to ivl interface

This commit is contained in:
Cary R 2013-07-09 18:21:36 -07:00
parent 3e76f6d656
commit e30334e527
4 changed files with 19 additions and 1 deletions

View File

@ -174,6 +174,7 @@ ivl_parameter_lsb
ivl_parameter_msb
ivl_parameter_scope
ivl_parameter_signed
ivl_parameter_width
ivl_path_condit
ivl_path_delay

View File

@ -1612,6 +1612,9 @@ extern ivl_signal_t ivl_nexus_ptr_sig(ivl_nexus_ptr_t net);
* a range the value is zero based and the width of the expression is
* used to determine the MSB.
*
* ivl_parameter_width
* return |MSB - LSB| + 1
*
* ivl_parameter_signed
* Returns if the parameter was declared to be signed.
*
@ -1628,6 +1631,7 @@ extern ivl_scope_t ivl_parameter_scope(ivl_parameter_t net);
extern ivl_expr_t ivl_parameter_expr(ivl_parameter_t net);
extern int ivl_parameter_msb(ivl_parameter_t net);
extern int ivl_parameter_lsb(ivl_parameter_t net);
extern unsigned ivl_parameter_width(ivl_parameter_t net);
extern int ivl_parameter_signed(ivl_parameter_t net);
extern int ivl_parameter_local(ivl_parameter_t net);
extern const char* ivl_parameter_file(ivl_parameter_t net);

View File

@ -1764,6 +1764,19 @@ extern "C" int ivl_parameter_lsb(ivl_parameter_t net)
return net->lsb;
}
/*
* No need to waste space with storing the width of the parameter since
* it can easily be computed when needed.
*/
extern "C" unsigned ivl_parameter_width(ivl_parameter_t net)
{
unsigned result = 1;
assert(net);
if (net->msb >= net->lsb) result += net->msb - net->lsb;
else result += net->lsb - net->msb;
return result;
}
extern "C" ivl_expr_t ivl_parameter_expr(ivl_parameter_t net)
{
assert(net);

View File

@ -314,7 +314,7 @@ void emit_scope_variables(ivl_scope_t scope)
fprintf(vlog_out, " = ");
/* Need to emit the parameters value not its name. */
emitting_param = par;
emit_expr(scope, pex, ivl_expr_width(pex), 1, 0, 0);
emit_expr(scope, pex, ivl_parameter_width(par), 1, 0, 0);
emitting_param = 0;
fprintf(vlog_out, ";");
if (emit_file_line) {