Add support for getting parameter MSB, LSB and sign from the ivl interface
This commit is contained in:
parent
633360a0f9
commit
d08e0270e4
18
ivl_target.h
18
ivl_target.h
|
|
@ -1,7 +1,7 @@
|
||||||
#ifndef __ivl_target_H
|
#ifndef __ivl_target_H
|
||||||
#define __ivl_target_H
|
#define __ivl_target_H
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2000-2012 Stephen Williams (steve@icarus.com)
|
* Copyright (c) 2000-2013 Stephen Williams (steve@icarus.com)
|
||||||
*
|
*
|
||||||
* This source code is free software; you can redistribute it
|
* This source code is free software; you can redistribute it
|
||||||
* and/or modify it in source code form under the terms of the GNU
|
* and/or modify it in source code form under the terms of the GNU
|
||||||
|
|
@ -1606,6 +1606,15 @@ extern ivl_signal_t ivl_nexus_ptr_sig(ivl_nexus_ptr_t net);
|
||||||
* Return the value of the parameter. This should be a simple
|
* Return the value of the parameter. This should be a simple
|
||||||
* constant expression, an IVL_EX_STRING or IVL_EX_NUMBER.
|
* constant expression, an IVL_EX_STRING or IVL_EX_NUMBER.
|
||||||
*
|
*
|
||||||
|
* ivl_parameter_msb
|
||||||
|
* ivl_parameter_lsb
|
||||||
|
* Returns the MSB and LSB for the parameter. For a parameter without
|
||||||
|
* a range the value is zero based and the width of the expression is
|
||||||
|
* used to determine the MSB.
|
||||||
|
*
|
||||||
|
* ivl_parameter_signed
|
||||||
|
* Returns if the parameter was declared to be signed.
|
||||||
|
*
|
||||||
* ivl_parameter_local
|
* ivl_parameter_local
|
||||||
* Return whether parameter was local (localparam, implicit genvar etc)
|
* Return whether parameter was local (localparam, implicit genvar etc)
|
||||||
* or not.
|
* or not.
|
||||||
|
|
@ -1617,9 +1626,12 @@ extern ivl_signal_t ivl_nexus_ptr_sig(ivl_nexus_ptr_t net);
|
||||||
extern const char* ivl_parameter_basename(ivl_parameter_t net);
|
extern const char* ivl_parameter_basename(ivl_parameter_t net);
|
||||||
extern ivl_scope_t ivl_parameter_scope(ivl_parameter_t net);
|
extern ivl_scope_t ivl_parameter_scope(ivl_parameter_t net);
|
||||||
extern ivl_expr_t ivl_parameter_expr(ivl_parameter_t net);
|
extern ivl_expr_t ivl_parameter_expr(ivl_parameter_t net);
|
||||||
extern int ivl_parameter_local(ivl_parameter_t net);
|
extern int ivl_parameter_msb(ivl_parameter_t net);
|
||||||
|
extern int ivl_parameter_lsb(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);
|
extern const char* ivl_parameter_file(ivl_parameter_t net);
|
||||||
extern unsigned ivl_parameter_lineno(ivl_parameter_t net);
|
extern unsigned ivl_parameter_lineno(ivl_parameter_t net);
|
||||||
|
|
||||||
|
|
||||||
/* SCOPE
|
/* SCOPE
|
||||||
|
|
|
||||||
19
t-dll-api.cc
19
t-dll-api.cc
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2000-2012 Stephen Williams (steve@icarus.com)
|
* Copyright (c) 2000-2013 Stephen Williams (steve@icarus.com)
|
||||||
* Copyright CERN 2013 / Stephen Williams (steve@icarus.com)
|
* Copyright CERN 2013 / Stephen Williams (steve@icarus.com)
|
||||||
*
|
*
|
||||||
* This source code is free software; you can redistribute it
|
* This source code is free software; you can redistribute it
|
||||||
|
|
@ -1746,6 +1746,23 @@ extern "C" int ivl_parameter_local(ivl_parameter_t net)
|
||||||
return net->local;
|
return net->local;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern "C" int ivl_parameter_signed(ivl_parameter_t net)
|
||||||
|
{
|
||||||
|
assert(net);
|
||||||
|
return net->signed_flag;
|
||||||
|
}
|
||||||
|
|
||||||
|
extern "C" int ivl_parameter_msb(ivl_parameter_t net)
|
||||||
|
{
|
||||||
|
assert(net);
|
||||||
|
return net->msb;
|
||||||
|
}
|
||||||
|
|
||||||
|
extern "C" int ivl_parameter_lsb(ivl_parameter_t net)
|
||||||
|
{
|
||||||
|
assert(net);
|
||||||
|
return net->lsb;
|
||||||
|
}
|
||||||
|
|
||||||
extern "C" ivl_expr_t ivl_parameter_expr(ivl_parameter_t net)
|
extern "C" ivl_expr_t ivl_parameter_expr(ivl_parameter_t net)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
24
t-dll.cc
24
t-dll.cc
|
|
@ -508,13 +508,33 @@ void dll_target::make_scope_parameters(ivl_scope_t scop, const NetScope*net)
|
||||||
ivl_parameter_t cur_par = &scop->param[idx];
|
ivl_parameter_t cur_par = &scop->param[idx];
|
||||||
cur_par->basename = cur_pit->first;
|
cur_par->basename = cur_pit->first;
|
||||||
cur_par->local = cur_pit->second.local_flag;
|
cur_par->local = cur_pit->second.local_flag;
|
||||||
|
/* Either both the MSB and LSB expressions are provided or
|
||||||
|
* neither are provided. */
|
||||||
|
if (cur_pit->second.msb) {
|
||||||
|
assert(cur_pit->second.lsb);
|
||||||
|
/* The MSB and LSB expressions must be integral constants. */
|
||||||
|
const NetEConst *msbc =
|
||||||
|
dynamic_cast<const NetEConst*>(cur_pit->second.msb);
|
||||||
|
const NetEConst *lsbc =
|
||||||
|
dynamic_cast<const NetEConst*>(cur_pit->second.lsb);
|
||||||
|
assert(msbc);
|
||||||
|
assert(lsbc);
|
||||||
|
cur_par->msb = msbc->value().as_long();
|
||||||
|
cur_par->lsb = lsbc->value().as_long();
|
||||||
|
} else {
|
||||||
|
assert(! cur_pit->second.lsb);
|
||||||
|
cur_par->msb = cur_pit->second.val->expr_width() - 1;
|
||||||
|
assert(cur_par->msb >= 0);
|
||||||
|
cur_par->lsb = 0;
|
||||||
|
}
|
||||||
|
cur_par->signed_flag = cur_pit->second.signed_flag;
|
||||||
cur_par->scope = scop;
|
cur_par->scope = scop;
|
||||||
FILE_NAME(cur_par, &(cur_pit->second));
|
FILE_NAME(cur_par, &(cur_pit->second));
|
||||||
|
|
||||||
NetExpr*etmp = cur_pit->second.val;
|
NetExpr*etmp = cur_pit->second.val;
|
||||||
if (etmp == 0) {
|
if (etmp == 0) {
|
||||||
cerr << "?:?: internal error: "
|
cerr << "?:?: internal error: What is the parameter "
|
||||||
<< "What is the parameter expression for " << cur_pit->first
|
<< "expression for " << cur_pit->first
|
||||||
<< " in " << net->fullname() << "?" << endl;
|
<< " in " << net->fullname() << "?" << endl;
|
||||||
}
|
}
|
||||||
assert(etmp);
|
assert(etmp);
|
||||||
|
|
|
||||||
5
t-dll.h
5
t-dll.h
|
|
@ -1,7 +1,7 @@
|
||||||
#ifndef __t_dll_H
|
#ifndef __t_dll_H
|
||||||
#define __t_dll_H
|
#define __t_dll_H
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2000-2012 Stephen Williams (steve@icarus.com)
|
* Copyright (c) 2000-2013 Stephen Williams (steve@icarus.com)
|
||||||
*
|
*
|
||||||
* This source code is free software; you can redistribute it
|
* This source code is free software; you can redistribute it
|
||||||
* and/or modify it in source code form under the terms of the GNU
|
* and/or modify it in source code form under the terms of the GNU
|
||||||
|
|
@ -604,6 +604,9 @@ struct ivl_parameter_s {
|
||||||
perm_string basename;
|
perm_string basename;
|
||||||
ivl_scope_t scope;
|
ivl_scope_t scope;
|
||||||
ivl_expr_t value;
|
ivl_expr_t value;
|
||||||
|
long msb;
|
||||||
|
long lsb;
|
||||||
|
bool signed_flag;
|
||||||
bool local;
|
bool local;
|
||||||
perm_string file;
|
perm_string file;
|
||||||
unsigned lineno;
|
unsigned lineno;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue