vec4 vvp support for non-blocking assign with delay and part offset.
This commit is contained in:
parent
0e13726e83
commit
9c1dcad994
|
|
@ -242,21 +242,23 @@ static void assign_to_lvector(ivl_lval_t lval,
|
||||||
|
|
||||||
unsigned skip_assign = transient_id++;
|
unsigned skip_assign = transient_id++;
|
||||||
if (dexp != 0) {
|
if (dexp != 0) {
|
||||||
|
/* Calculated offset... */
|
||||||
|
int offset_index = allocate_word();
|
||||||
/* Calculated delay... */
|
/* Calculated delay... */
|
||||||
int delay_index = allocate_word();
|
int delay_index = allocate_word();
|
||||||
draw_eval_expr_into_integer(dexp, delay_index);
|
draw_eval_expr_into_integer(dexp, delay_index);
|
||||||
draw_eval_expr_into_integer(part_off_ex, 1);
|
/* Calculated part offset. This will leave flag
|
||||||
|
bit 4 set to 1 if the copy into the index
|
||||||
|
detected xz values. The %assign will use that
|
||||||
|
to know to skip the assign. */
|
||||||
|
draw_eval_expr_into_integer(part_off_ex, offset_index);
|
||||||
/* If the index expression has XZ bits, skip the assign. */
|
/* If the index expression has XZ bits, skip the assign. */
|
||||||
fprintf(vvp_out, " %%jmp/1 t_%u, 4;\n", skip_assign);
|
fprintf(vvp_out, " %%assign/vec4/off/d v%p_%lu, %d, %d;\n",
|
||||||
#if 0
|
sig, use_word, offset_index, delay_index);
|
||||||
fprintf(vvp_out, " %%ix/load 0, %u, 0;\n", width);
|
|
||||||
fprintf(vvp_out, " %%assign/v0/x1/d v%p_%lu, %d, %u;\n",
|
clr_word(offset_index);
|
||||||
sig, use_word, delay_index, bit);
|
|
||||||
#else
|
|
||||||
assert(0); // XXXX
|
|
||||||
#endif
|
|
||||||
fprintf(vvp_out, "t_%u ;\n", skip_assign);
|
|
||||||
clr_word(delay_index);
|
clr_word(delay_index);
|
||||||
|
|
||||||
} else if (nevents != 0) {
|
} else if (nevents != 0) {
|
||||||
/* Event control delay... */
|
/* Event control delay... */
|
||||||
draw_eval_expr_into_integer(part_off_ex, 1);
|
draw_eval_expr_into_integer(part_off_ex, 1);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue