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:
Cary R 2008-01-14 15:57:01 -08:00 committed by Stephen Williams
parent 7ff342f4da
commit e46f8220f3
1 changed files with 14 additions and 6 deletions

View File

@ -128,12 +128,12 @@ static void eval_logic_into_integer(ivl_expr_t expr, unsigned ix)
assert(0);
}
fprintf(vvp_out, " %%ix/load %u, %u;\n", ix, value);
fprintf(vvp_out, " %%ix/load %u, %u;\n", ix, value);
break;
}
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;
case IVL_EX_SIGNAL: {
@ -141,17 +141,25 @@ static void eval_logic_into_integer(ivl_expr_t expr, unsigned ix)
unsigned word = 0;
if (ivl_signal_array_count(sig) > 1) {
ivl_expr_t ixe = ivl_expr_oper1(expr);
assert(number_is_immediate(ixe, 8*sizeof(unsigned long)));
word = get_number_immediate(ixe);
if (number_is_immediate(ixe, 8*sizeof(unsigned long)))
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;
}
default: {
struct vector_info rv;
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);
clr_vector(rv);
break;