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 (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;
|
command_name = command_name_x0;
|
||||||
fprintf(vvp_out, " %%ix/load 0, %u;\n", part_off);
|
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(lsig != 0);
|
||||||
assert(ivl_lval_mux(lval) == 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) {
|
if (word_idx != 0) {
|
||||||
assert(number_is_immediate(word_idx, 8*sizeof(use_word)));
|
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;
|
return 0;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue