Convert IVL_LPM_CONCAT to use ivl_lpm_size() instead of ivl_lpm_selects()
It was documented that a IVL_LPM_CONCAT would use _size() instead
of _selects(). This patch adds the functionality to _size() and
converts all the Icarus provided code generators to use _size().
_select() will be kept for compatibility in V0.9.
(cherry picked from commit 4cd790a2d2)
This commit is contained in:
parent
f2a81cf660
commit
fa0ecb3761
|
|
@ -1268,6 +1268,8 @@ extern "C" unsigned ivl_lpm_size(ivl_lpm_t net)
|
|||
return net->u_.ufunc.ports - 1;
|
||||
case IVL_LPM_REPEAT:
|
||||
return net->u_.repeat.count;
|
||||
case IVL_LPM_CONCAT:
|
||||
return net->u_.concat.inputs;
|
||||
default:
|
||||
assert(0);
|
||||
return 0;
|
||||
|
|
|
|||
|
|
@ -430,7 +430,7 @@ static void show_lpm_cmp_ne(ivl_lpm_t net)
|
|||
}
|
||||
|
||||
/* IVL_LPM_CONCAT
|
||||
* The concat device takes N inputs (N=ivl_lpm_selects) and generates
|
||||
* The concat device takes N inputs (N=ivl_lpm_size) and generates
|
||||
* a single output. The total output is known from the ivl_lpm_width
|
||||
* function. The widths of all the inputs are inferred from the widths
|
||||
* of the signals connected to the nexus of the inputs. The compiler
|
||||
|
|
@ -444,10 +444,10 @@ static void show_lpm_concat(ivl_lpm_t net)
|
|||
unsigned width = ivl_lpm_width(net);
|
||||
|
||||
fprintf(out, " LPM_CONCAT %s: <width=%u, inputs=%u>\n",
|
||||
ivl_lpm_basename(net), width, ivl_lpm_selects(net));
|
||||
ivl_lpm_basename(net), width, ivl_lpm_size(net));
|
||||
fprintf(out, " O: %p\n", ivl_lpm_q(net,0));
|
||||
|
||||
for (idx = 0 ; idx < ivl_lpm_selects(net) ; idx += 1) {
|
||||
for (idx = 0 ; idx < ivl_lpm_size(net) ; idx += 1) {
|
||||
ivl_nexus_t nex = ivl_lpm_data(net, idx);
|
||||
unsigned signal_width = width_of_nexus(nex);
|
||||
|
||||
|
|
|
|||
|
|
@ -48,7 +48,7 @@ static vhdl_expr *concat_lpm_to_expr(vhdl_scope *scope, ivl_lpm_t lpm)
|
|||
vhdl_binop_expr *expr =
|
||||
new vhdl_binop_expr(VHDL_BINOP_CONCAT, result_type);
|
||||
|
||||
for (int i = ivl_lpm_selects(lpm) - 1; i >= 0; i--) {
|
||||
for (int i = ivl_lpm_size(lpm) - 1; i >= 0; i--) {
|
||||
vhdl_expr *e = readable_ref(scope, ivl_lpm_data(lpm, i));
|
||||
if (NULL == e) {
|
||||
delete expr;
|
||||
|
|
|
|||
|
|
@ -1335,7 +1335,7 @@ static unsigned lpm_concat_inputs(ivl_lpm_t net, unsigned start,
|
|||
static void draw_lpm_concat(ivl_lpm_t net)
|
||||
{
|
||||
const char*src_table[4];
|
||||
unsigned icnt = ivl_lpm_selects(net);
|
||||
unsigned icnt = ivl_lpm_size(net);
|
||||
const char*dly = draw_lpm_output_delay(net);
|
||||
|
||||
if (icnt <= 4) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue