Catch unsupported bit/part select lvalue for assign/deassign.
This patch adds code to print a message when an assign/deassign is used to drive/release a bit/part select.
This commit is contained in:
parent
7035ded57a
commit
f5418fe337
|
|
@ -819,6 +819,12 @@ static void force_vector_to_lval(ivl_statement_t net, struct vector_info rvec)
|
|||
|
||||
if (part_off != 0 || use_wid != ivl_signal_width(lsig)) {
|
||||
|
||||
if (ivl_statement_type(net) == IVL_ST_CASSIGN) {
|
||||
fprintf(stderr, "%s:%u: vvp-tgt sorry: cannot assign "
|
||||
"signal to a bit/part select.\n",
|
||||
ivl_stmt_file(net), ivl_stmt_lineno(net));
|
||||
exit(1);
|
||||
}
|
||||
command_name = command_name_x0;
|
||||
fprintf(vvp_out, " %%ix/load 0, %u;\n", part_off);
|
||||
|
||||
|
|
@ -937,7 +943,17 @@ static int show_stmt_deassign(ivl_statement_t net)
|
|||
|
||||
assert(lsig != 0);
|
||||
assert(ivl_lval_mux(lval) == 0);
|
||||
assert(ivl_lval_part_off(lval) == 0);
|
||||
|
||||
/* We do not currently support deassigning a bit or
|
||||
* part select. */
|
||||
ivl_expr_t part_off_ex = ivl_lval_part_off(lval);
|
||||
if (ivl_signal_width(lsig) > ivl_lval_width(lval) ||
|
||||
(part_off_ex && get_number_immediate(part_off_ex) != 0)) {
|
||||
fprintf(stderr, "%s:%u: vvp-tgt sorry: cannot deassign "
|
||||
"a bit/part select.\n", ivl_stmt_file(net),
|
||||
ivl_stmt_lineno(net));
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (word_idx != 0) {
|
||||
assert(number_is_immediate(word_idx, 8*sizeof(use_word)));
|
||||
|
|
@ -945,7 +961,7 @@ static int show_stmt_deassign(ivl_statement_t net)
|
|||
}
|
||||
|
||||
|
||||
fprintf(vvp_out, " %%deassign v%p_%lu;\n", lsig, use_word);
|
||||
fprintf(vvp_out, " %%deassign v%p_%lu;\n", lsig, use_word);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
|
|||
Loading…
Reference in New Issue