Evaluate non-immediate signal selection.
This patch adds code to treat non-immediate signal selection the same as the default logic evaluation
This commit is contained in:
parent
7ff342f4da
commit
e46f8220f3
|
|
@ -128,12 +128,12 @@ static void eval_logic_into_integer(ivl_expr_t expr, unsigned ix)
|
||||||
assert(0);
|
assert(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
fprintf(vvp_out, " %%ix/load %u, %u;\n", ix, value);
|
fprintf(vvp_out, " %%ix/load %u, %u;\n", ix, value);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case IVL_EX_ULONG:
|
case IVL_EX_ULONG:
|
||||||
fprintf(vvp_out, " %%ix/load %u, %lu;\n", ix, ivl_expr_uvalue(expr));
|
fprintf(vvp_out, " %%ix/load %u, %lu;\n", ix, ivl_expr_uvalue(expr));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case IVL_EX_SIGNAL: {
|
case IVL_EX_SIGNAL: {
|
||||||
|
|
@ -141,17 +141,25 @@ static void eval_logic_into_integer(ivl_expr_t expr, unsigned ix)
|
||||||
unsigned word = 0;
|
unsigned word = 0;
|
||||||
if (ivl_signal_array_count(sig) > 1) {
|
if (ivl_signal_array_count(sig) > 1) {
|
||||||
ivl_expr_t ixe = ivl_expr_oper1(expr);
|
ivl_expr_t ixe = ivl_expr_oper1(expr);
|
||||||
assert(number_is_immediate(ixe, 8*sizeof(unsigned long)));
|
if (number_is_immediate(ixe, 8*sizeof(unsigned long)))
|
||||||
word = get_number_immediate(ixe);
|
word = get_number_immediate(ixe);
|
||||||
|
else {
|
||||||
|
struct vector_info rv;
|
||||||
|
rv = draw_eval_expr(expr, 0);
|
||||||
|
fprintf(vvp_out, " %%ix/get %u, %u, %u;\n",
|
||||||
|
ix, rv.base, rv.wid);
|
||||||
|
clr_vector(rv);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
fprintf(vvp_out, " %%ix/getv %u, v%p_%u;\n", ix, sig, word);
|
fprintf(vvp_out, " %%ix/getv %u, v%p_%u;\n", ix, sig, word);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
default: {
|
default: {
|
||||||
struct vector_info rv;
|
struct vector_info rv;
|
||||||
rv = draw_eval_expr(expr, 0);
|
rv = draw_eval_expr(expr, 0);
|
||||||
fprintf(vvp_out, " %%ix/get %u, %u, %u;\n",
|
fprintf(vvp_out, " %%ix/get %u, %u, %u;\n",
|
||||||
ix, rv.base, rv.wid);
|
ix, rv.base, rv.wid);
|
||||||
clr_vector(rv);
|
clr_vector(rv);
|
||||||
break;
|
break;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue